/pod-sales
Run one dry-run tick of the sales business-pod (ADR-164): validate templates/sales.json, reserve budget, post a summary envelope to the \"sales\" room and print a status line for /loop. Use when a person or a /loop asks for the next sales-pod tick.
Claude Code
$ npx -y skills add ruvnet/ruflo --skill pod-sales --agent claude-code
Codex
$ npx skills add ruvnet/ruflo --skill pod-sales -a codex -y
Cursor
$ npx skills add ruvnet/ruflo --skill pod-sales -a cursor -y
Gemini CLI
$ npx skills add ruvnet/ruflo --skill pod-sales -a gemini-cli -y
GitHub Copilot
$ npx skills add ruvnet/ruflo --skill pod-sales -a github-copilot -y
OpenCode
$ npx skills add ruvnet/ruflo --skill pod-sales -a opencode -y
Windsurf
$ npx skills add ruvnet/ruflo --skill pod-sales -a windsurf -y
SKILL.md
pod-sales.SKILL.mdname: pod-sales
description: "Run one dry-run tick of the sales business-pod (ADR-164): validate templates/sales.json, reserve budget, post a summary envelope to the \"sales\" room and print a status line for /loop. Use when a person or a /loop asks for the next sales-pod tick."
argument-hint: "[--pod-template <path>] [--base-path <dir>] [--dry-run|--live] [--budget-cap-usd <amt>] [--tick-id <id>]"
allowed-tools: Bash
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.
Algorithm
Implementation: [`scripts/pod-tick.mjs`](../../scripts/pod-tick.mjs).
1. Parse args (`--pod-template`, `--base-path`, `--dry-run` / `--live`, `--budget-cap-usd`, `--tick-id`). `--live` is refused with exit code 3 in Phase 2. 2. Load the pod template JSON (default: `templates/sales.json`). 3. Validate via `validatePodTemplate(json)` — schema in `v3/@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. 4. Resolve every `agent.agentType` against `KNOWN_AGENT_TYPES`. Unknown types abort with exit code 2 and an actionable error. 5. Reserve `min(budgetUsdPerRun, --budget-cap-usd)` USD against the file-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. 6. Build per-agent prompts (kickoff scoped to the bench description + pod's PII policy). In `--dry-run` they are logged to stderr and the model is never invoked. 7. Commit the reservation. Dry-run actual = $0; live actual = the reserved amount (Phase 3 wires real `claude -p` `--max-budget-usd` reporting). 8. Append a `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. 9. Emit a single JSON line on stdout: `{podName, tickId, agentsRan, totalUsd, envelopeId, status}`.
Exit codes
- `0` — tick succeeded (`status === 'success'`)
- `2` — invalid template / unknown agent type / budget exhausted / arg error
- `3` — `--live` requested (refused in Phase 2)
Phase 3 surfaces (not in this build)
- `--live` mode: dispatch each prompt through `claude -p` headless or a
Managed Agent and capture the actual `--max-budget-usd` reported spend.
- Atomic SQLite budget tracker (ADR-164.1 §3.2).
- Multi-pod variants (`pod-marketing`, `pod-finance`, ...) — each gets its
own skill once Phase 3 ships.
Read more
name: pod-sales description: "Run one dry-run tick of the sales business-pod (ADR-164): validate templates/sales.json, reserve budget, post a summary envelope to the \"sales\" room and print a status line for /loop. Use when a person or a /loop asks for the next sales-pod tick." argument-hint: "[--pod-template <path>] [--base-path <dir>] [--dry-run|--live] [--budget-cap-usd <amt>] [--tick-id <id>]" allowed-tools: Bash
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.
Algorithm
Implementation: [`scripts/pod-tick.mjs`](../../scripts/pod-tick.mjs).
1. Parse args (`--pod-template`, `--base-path`, `--dry-run` / `--live`, `--budget-cap-usd`, `--tick-id`). `--live` is refused with exit code 3 in Phase 2. 2. Load the pod template JSON (default: `templates/sales.json`). 3. Validate via `validatePodTemplate(json)` — schema in `v3/@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. 4. Resolve every `agent.agentType` against `KNOWN_AGENT_TYPES`. Unknown types abort with exit code 2 and an actionable error. 5. Reserve `min(budgetUsdPerRun, --budget-cap-usd)` USD against the file-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. 6. Build per-agent prompts (kickoff scoped to the bench description + pod's PII policy). In `--dry-run` they are logged to stderr and the model is never invoked. 7. Commit the reservation. Dry-run actual = $0; live actual = the reserved amount (Phase 3 wires real `claude -p` `--max-budget-usd` reporting). 8. Append a `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. 9. Emit a single JSON line on stdout: `{podName, tickId, agentsRan, totalUsd, envelopeId, status}`.
Exit codes
- `0` — tick succeeded (`status === 'success'`)
- `2` — invalid template / unknown agent type / budget exhausted / arg error
- `3` — `--live` requested (refused in Phase 2)
Phase 3 surfaces (not in this build)
- `--live` mode: dispatch each prompt through `claude -p` headless or a
Managed Agent and capture the actual `--max-budget-usd` reported spend.
- Atomic SQLite budget tracker (ADR-164.1 §3.2).
- Multi-pod variants (`pod-marketing`, `pod-finance`, ...) — each gets its
own skill once Phase 3 ships.
📖 RuFlo Explained — Build an AI Team That Plans, Remembers, Tests, and Improves A 14-chapter guide: from the basic idea to a first useful task, then memory, agent teams, plugins, cost and verification. Agent = Model + Harness.
Other skills on ruflo.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
bmad
Answers BMad questions and recommends the next skill from what is installed. Use when the user asks bmad for help, what to do…
Questions about pod-sales.
- Which coding agents can use pod-sales?
- pod-sales installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

