Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run one tick of the sales business-pod (ADR-164 §4.1, Phase 2). Loads templates/sales.json, validates it against the pod-schema, resolves agents against ruflo's agent registry, reserves budget via the Phase-2 file-based stub ledger (atomic SQLite tracker is Phase 3 per ADR-164.1), constructs per-agent dry-run prompts, posts a summary envelope to room "sales" via the federation_bbs_publish JSONL backing store, and emits a structured {podName, tickId, agentsRan, totalUsd, envelopeId, status} line
.claude/skills/ruvnet-pod-sales/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -64% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -51% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 37% | 0% |
Surfaces pod-tick.mjs as a single-shot skill for the sales pod. Use when Claude Code needs to demonstrate, smoke-test, or schedule one iteration of the sales autopilot without spawning real LLM workers.
Implementation: scripts/pod-tick.mjs.
--pod-template, --base-path, --dry-run / --live,--budget-cap-usd, --tick-id). --live is refused with exit code 3 in Phase 2.
templates/sales.json).validatePodTemplate(json) — schema inv3/@claude-flow/cli/src/business-pods/pod-schema.ts and inlined in pod-tick.mjs so the script runs without a built CLI. Throws with a JSON-pointer path on the first violation.
agent.agentType against KNOWN_AGENT_TYPES. Unknowntypes abort with exit code 2 and an actionable error.
min(budgetUsdPerRun, --budget-cap-usd) USD against thefile-based ledger at <base-path>/budget/<roomId>.json. Honors reservationExpiryMs (default 60_000 ms, bounded to 5000, 300000] per ADR-164.1 §3.2). TODO(adr-164.1): swap the file ledger for the atomic SQLite tracker in Phase 3.
pod's PII policy). In --dry-run they are logged to stderr and the model is never invoked.
reserved amount (Phase 3 wires real claude -p --max-budget-usd reporting).
pod-status envelope to the Phase-1 backing store at<base-path>/.agentbbs/room-<derivedRoomId>.jsonl so subsequent federation_bbs_watch calls see the tick.
{podName, tickId, agentsRan, totalUsd, envelopeId, status}.
0 — tick succeeded (status === 'success')2 — invalid template / unknown agent type / budget exhausted / arg error3 — --live requested (refused in Phase 2)--live mode: dispatch each prompt through claude -p headless or aManaged Agent and capture the actual --max-budget-usd reported spend.
pod-marketing, pod-finance, ...) — each gets itsown skill once Phase 3 ships.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-08 | pass→pass | 3,734 | 3,253 | -13% | 1 | 1 | 0% | 647 | 1,297 | +100% | 0 | 0 | — |
case-01 | fail→fail | 6,943 | 2,544 | -63% | 1 | 1 | 0% | 1,207 | 1,065 | -12% | 0 | 0 | — |
case-02 | fail→fail | 6,403 | 9,375 | +46% | 1 | 1 | 0% | 1,197 | 953 | -20% | 0 | 0 | — |
case-03 | fail→pass | 4,432 | 3,662 | -17% | 1 | 1 | 0% | 860 | 1,422 | +65% | 0 | 0 | — |
case-04 | fail→pass | 9,633 | 4,424 | -54% | 1 | 1 | 0% | 1,541 | 1,535 | -0% | 0 | 0 | — |
case-05 | pass→pass | 7,622 | 2,562 | -66% | 1 | 1 | 0% | 1,191 | 1,070 | -10% | 0 | 0 | — |
case-06 | fail→pass | 14,074 | 1,044 | -93% | 1 | 1 | 0% | 2,437 | 874 | -64% | 0 | 0 | — |
case-07 | fail→pass | 13,382 | 2,635 | -80% | 1 | 1 | 0% | 2,556 | 1,243 | -51% | 0 | 0 | — |
case-09 | pass→pass | 5,188 | 3,471 | -33% | 1 | 1 | 0% | 967 | 1,051 | +9% | 0 | 0 | — |
case-10 | fail→pass | 38,264 | 1,645 | -96% | 1 | 1 | 0% | 776 | 1,064 | +37% | 0 | 0 | — |
case-11 | fail→pass | 12,567 | 2,861 | -77% | 1 | 1 | 0% | 831 | 962 | +16% | 0 | 0 | — |
case-12 | fail→pass | 7,423 | 6,065 | -18% | 1 | 1 | 0% | 1,270 | 1,034 | -19% | 0 | 0 | — |
case-13 | fail→pass | 4,085 | 2,327 | -43% | 1 | 1 | 0% | 634 | 1,073 | +69% | 0 | 0 | — |
case-14 | pass→pass | 4,029 | 1,107 | -73% | 1 | 1 | 0% | 597 | 882 | +48% | 0 | 0 | — |
case-15 | fail→pass | 30,591 | 1,461 | -95% | 1 | 1 | 0% | 2,239 | 983 | -56% | 0 | 0 | — |
case-16 | fail→pass | 7,914 | 1,812 | -77% | 1 | 1 | 0% | 1,370 | 1,050 | -23% | 0 | 0 | — |
case-17 | fail→pass | 10,575 | 4,125 | -61% | 1 | 1 | 0% | 1,716 | 1,408 | -18% | 0 | 0 | — |
case-18 | fail→pass | 10,252 | 2,795 | -73% | 1 | 1 | 0% | 1,639 | 1,189 | -27% | 0 | 0 | — |
case-19 | fail→pass | 12,808 | 3,122 | -76% | 1 | 1 | 0% | 2,319 | 1,241 | -46% | 0 | 0 | — |
case-20 | pass→pass | 18,987 | 11,499 | -39% | 1 | 1 | 0% | 3,673 | 3,000 | -18% | 0 | 0 | — |
case-21 | pass→pass | 11,788 | 8,332 | -29% | 1 | 1 | 0% | 2,630 | 2,546 | -3% | 0 | 0 | — |
case-22 | pass→pass | 13,736 | 12,822 | -7% | 1 | 1 | 0% | 2,281 | 2,946 | +29% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +59 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.