# CLI reference All commands run via `./run quinn-outreach ` from the package root. ## Engine mode (§39) ``` ./run quinn-outreach mode get ./run quinn-outreach mode set [--reason=] [--by=] ``` | Mode | Behavior | |------|----------| | `auto-fire` | Classify + send (still gated by 8 §38 checks) | | `draft-only` | Classify + emit DRAFT event; never auto-send. **← default** | | `monitor-only` | Classify + emit categorization; no body proposal | | `off` | Do not poll | **Always pass `--by` and `--reason`** — they go in the persisted config and event_log for audit. ## Block-list (§49 / §50) ``` ./run quinn-outreach block # add (idempotent on duplicate) ./run quinn-outreach unblock # remove ./run quinn-outreach list-blocked # show all entries ./run quinn-outreach init-block-list # seed with §50 6-contact registry (no-op if file exists) ``` Hot-reloaded — every gate evaluation re-reads the file. No daemon restart needed. ## Watcher / parser (Quinn-approval flow) ``` ./run quinn-outreach watch # run inbound watcher (LISTEN message_inserted) ./run quinn-outreach parse # run reply-parser (Quinn's self-thread replies) ./run quinn-outreach loop # run watcher + parser supervised (both children) ``` ## Auto-respond engine (gated dispatch) ``` ./run quinn-outreach autorespond # run auto-respond engine (watches ALL inbound) ``` Subject to engine mode + 8 pre-fire gates. With mode=`draft-only` (default), nothing dispatches. ## Scheduled-send queue ``` ./run quinn-outreach scheduled-send list [--status=STATUS] ./run quinn-outreach scheduled-send cancel ./run quinn-outreach scheduled-send-worker # run durable send worker (heartbeat) ``` Status values: `pending`, `sent`, `failed`, `cancelled`. ## Booking worker (§32) ``` ./run quinn-outreach booking-worker # run §32 deposit-pending expiry worker ``` Ticks every 60s. On expiry: transitions row to `expired-no-deposit` AND emits `cover_story_proposed` event with a draft. ## Calendar ``` ./run quinn-outreach calendar show ./run quinn-outreach calendar set [--tonight-city=...] [--tomorrow-city=...] \ [--tour-end-default=...] [--tour-end-max=...] \ [--busy-dependent=true|false] \ [--location-state=...] ``` ## Diagnostics ``` ./run quinn-outreach status [--last N] # heartbeat / event-log / awaiting-quinn ./run quinn-outreach smoke # end-to-end smoke test (10 steps) ./run quinn-outreach dry-run [--days=7] [--output=FILE] [--limit=200] [--unmasked] # evaluate engine on real inbound, no send ./run quinn-outreach test # unit tests ``` ## Build commands (not via `./run`) ```bash bun install bun run build # tsup → dist/ bun run typecheck # tsc --noEmit bun test # node:test runner ```