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 inpod-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. HonorsreservationExpiryMs (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 subsequentfederation_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.