{"slug": "show-hn-spewer-delegate-codex-claude-tasks-to-cheaper-models", "title": "Show HN: Spewer – Delegate Codex/Claude tasks to cheaper models", "summary": "Spewer, a local service from modiqo, lets users delegate bounded work from AI harnesses like Codex and Claude Code to lower-cost models, with version 0.2 using hosted gpt-5.6-luna via Codex App Server. The tool, installable via Homebrew, supports detached tasks, worker watching, and input relay, and requires macOS or Linux with Git.", "body_md": "Spewer is a local service that lets your current AI harness delegate bounded work to lower-cost models.\n\nKeep working in Codex, Claude Code, Kimi, or another preferred harness. Spewer runs the delegated worker, keeps its task alive, and returns an evidence-rich receipt.\n\nThe shortest useful path is three commands:\n\n``` bash\n$ brew install modiqo/tap/spewer\n$ spewer install\n$ spewer ask \"What is 17 multiplied by 19?\"\n323\n```\n\nThat is a working Spewer. The next steps add background work, local Qwen3, frontier delegation, specialized skills, and concurrent workers.\n\nYou need macOS or Linux and Git. Spewer installs Codex CLI when it is missing. Building Spewer from source also requires Rust 1.96 or newer.\n\nSpewer 0.2 uses hosted `gpt-5.6-luna`\n\nthrough Codex App Server. It does not download model weights\nto your machine.\n\nInstall the latest release with Homebrew:\n\n``` bash\n$ brew install modiqo/tap/spewer\n```\n\nHomebrew also installs `spu`\n\nas a short alias. Both names run the same binary, and this guide uses\nthe canonical `spewer`\n\nname.\n\nTo build the current checkout instead:\n\n``` bash\n$ cargo install --path . --locked\n```\n\nPrepare Luna, the generic worker capsule, the Codex delegation skill, and the detached service:\n\n``` bash\n$ spewer install\n```\n\nA successful response includes `\"ready\": true`\n\nand a generic `default`\n\ncapsule.\n\nIf Codex needs authentication, run `codex`\n\nonce. Then repeat `spewer install`\n\n.\n\nRun a question and wait for its answer:\n\n``` bash\n$ spewer ask \"What is 17 multiplied by 19?\"\n323\n```\n\nThis proves that configuration, App Server startup, Luna access, execution, and receipt creation all work.\n\nSpewer writes progress to standard error. The requested text or structured result stays on standard output.\n\nDetach work when you want the caller to continue immediately:\n\n``` bash\n$ spewer ask \"Inspect the parser tests and summarize any failures.\" --detach\n```\n\nSpewer returns a durable `task_id`\n\n. Check it when convenient:\n\n``` bash\n$ spewer check <task-id>\n```\n\nWhen `ready`\n\nbecomes `true`\n\n, the response contains the stable terminal receipt. Until then, wait\nfor `observation.poll_after_ms`\n\nbefore checking again.\n\nFollow the worker when you need to debug model or skill activity:\n\n``` bash\n$ spewer watch <task-id>\n```\n\nThe first lines identify the accepted capsule, engine, and model. They also show its specialization\nand skill digest. Codex traces then show safe tool names such as `play-machine`\n\n.\n\nIf a detached Codex worker needs a date range, approval, or another nonsecret answer,\n`spewer check`\n\nreports `input_required`\n\nand includes `projection.pending_input`\n\n. Answer the exact\nrequest without replacing the task:\n\n``` bash\n$ spewer respond <task-id> 99 \\\n    --response '{\"answers\":{\"dates\":{\"answers\":[\"August 1–15\"]}}}'\n$ spewer check <task-id>\n```\n\nThe bundled frontier skill performs this relay from your existing Codex conversation: it asks you,\nrecords `input.resolved`\n\n, and resumes the same worker turn. Spewer rejects credential prompts;\nauthenticate directly with the provider, then relay only a nonsecret confirmation or choice. An\nunanswered input request escalates after 30 minutes and releases the worker. The task wall budget\ndoes not run while a timely human answer is pending.\n\nOllama traces emit a durable `model active`\n\nheartbeat each second until the response arrives. Both\nengines show usage and terminal state. `watch`\n\nomits hidden reasoning, raw commands, arguments,\ntool output, and secrets. Use `spewer tail <task-id>`\n\nfor the complete machine-readable event log.\n\nSome stateful skills need their existing host caches and owner-private runtime state. For one explicitly trusted Codex task, disable the sandbox without changing the capsule default:\n\n``` bash\n$ spewer ask \"Run the stateful skill\" --capsule play-codex \\\n    --danger-full-access --detach\n```\n\nThis flag grants that task unrestricted filesystem and network access. `--no-sandbox`\n\nis an alias.\nIt is rejected for Ollama capsules and never applies implicitly to another task.\n\nCancel work you no longer need:\n\n``` bash\n$ spewer cancel <task-id> --reason \"the parent no longer needs it\"\n```\n\nOllama can serve the shipped Qwen3 reference model on your machine. Pull it explicitly because the model download is large:\n\n``` bash\n$ ollama pull qwen3:30b-a3b\n$ spewer doctor --engine ollama --model qwen3:30b-a3b\n```\n\nRegister the installed model as another capsule:\n\n``` bash\n$ spewer capsule add qwen3-local --engine ollama --model qwen3:30b-a3b\n```\n\nList ready capsules with `spewer capsule list`\n\n. List every locally installed Ollama model with\n`spewer doctor --engine ollama`\n\n. Pull another model before registering it:\n\n``` bash\n$ ollama pull mistral\n$ spewer capsule add mistral-local --engine ollama --model mistral\n```\n\nOllama stores that model as `mistral:latest`\n\n. Spewer resolves the shorter `mistral`\n\nname and stores\nthe canonical installed name in the capsule.\n\nThe running service discovers the capsule without restarting. Local inference needs no API key.\nMake Qwen3 the capsule used when `--capsule`\n\nis absent:\n\n``` bash\n$ spewer capsule default qwen3-local\n$ spewer ask \"What is 17 multiplied by 19?\"\n323\n```\n\nWithout search configuration, its capability card advertises `\"network\": false`\n\nand\n`\"tools\": []`\n\n. Frontier adapters keep live-data work when they see those limits.\n\nMissing Ollama telemetry stays missing in receipts. The text view labels cached and reasoning\ncounts as `not-reported`\n\n; an unpriced local run reports `cost=local-unpriced`\n\n.\n\nThe Ollama worker remains read-only. It receives the objective, notes, projected files, acceptance criteria, and any bound skill. It rejects commands and file writes.\n\n`OLLAMA_API_KEY`\n\nis not required for the local model. It authenticates Ollama's hosted search API.\nSet it only when this capsule should support current public information. Restart an older detached\nservice from the same shell so it inherits that credential:\n\n``` bash\n$ spewer stop\n$ spewer serve --engine all\n$ spewer capabilities\n```\n\nThe Qwen capsule now advertises `\"network\": true`\n\nand `\"tools\": [\"web_search\"]`\n\n. Inspect its\nhuman and machine-readable ask guidance:\n\n``` bash\n$ spewer capsule show\n```\n\nGrant network authority explicitly for a current-information question:\n\n``` bash\n$ spewer ask \"What is the current weather in Sunnyvale, California?\" \\\n    --web\n```\n\nQwen chooses the query. Spewer validates it, calls Ollama's hosted search API, returns up to five results, and records the tool call. Local inference stays on the machine; search queries and results cross the Ollama service boundary.\n\nThe Luna capsule named `default`\n\nremains available for work that needs the Codex agent tool loop.\nSelect it for one question with `--capsule default`\n\n, or restore it with\n`spewer capsule default default`\n\n.\n\n`--web`\n\ngrants request authority only when the capsule advertises `web_search`\n\n. Plain attached\nquestions print answer text and telemetry. Use `--json`\n\nfor a structured receipt or `--detach`\n\nfor\na durable task handle. `spewer capsule show <id>`\n\nreports these choices for any installed capsule.\n\n`spewer install`\n\nalready installs the reference Codex skill. You do not need a separate\n`spewer connect`\n\ncommand.\n\nAsk Codex explicitly for the first proof:\n\n```\nUse Spewer to delegate this bounded task to the default capsule:\ninspect the parser tests and return a concise failure summary.\n```\n\nThe skill uses three Spewer commands:\n\n``` bash\n$ spewer delegate task.json --capsule default\n$ spewer check <task-id>\n$ spewer cancel <task-id> --reason \"the task is no longer needed\"\n```\n\nCodex keeps the conversation and final judgment. Spewer runs Luna and returns the worker's receipt.\n\nBind any valid `SKILL.md`\n\nor skill directory to a capsule:\n\n``` bash\n$ spewer capsule bind default /absolute/path/to/review-skill\n```\n\nThe running service updates immediately. Confirm the new capability card:\n\n``` bash\n$ spewer capabilities\n```\n\nThe `default`\n\ncapsule now reports `\"kind\": \"specialized\"`\n\nwith the skill name, revision, and\ndigest. New tasks receive an immutable instruction snapshot and explicitly activate that skill.\n\nTo debug a skill without changing the generic default, create a named Luna capsule and bind it:\n\n``` bash\n$ spewer capsule add play-codex --engine codex-app-server --model gpt-5.6-luna\n$ spewer capsule bind play-codex /absolute/path/to/play/SKILL.md\n$ spewer ask \"play cheat-sheet\" --capsule play-codex --detach\n$ spewer watch <task-id>\n```\n\nThe capsule header identifies the accepted Play revision. A `commandExecution/play-machine`\n\nline\nconfirms that Luna invoked the installed Play runtime. Arguments and output remain private.\n\nAn interactive Play can keep the same Spewer task while it collects parameters, approval, and provider authentication. This command starts a concrete Gmail example:\n\n``` bash\n$ spewer ask \\\n    \"Use the exact Play modiqo/retrieve-rideshare-receipts.\" \\\n    --capsule play-codex --danger-full-access --detach\n$ spewer watch <task-id>\n```\n\nThe frontier relays nonsecret dates and approval with `spewer respond`\n\n. After approval, the Play\ncan open its scoped OAuth browser from Luna. Complete sign-in in that browser. Credentials, tokens,\ncookies, and authorization codes never pass through Spewer responses.\n\nInferred questions allow 1,000,000 cumulative input tokens by default. Cached context and repeated tool turns count toward this boundary; it is not a one-million-token context window.\n\nAsk Codex to use it:\n\n```\nUse Spewer's default capsule to review these parser changes.\nApply the bound review skill, then judge the returned receipt.\n```\n\nReturn the same worker to generic service at any time:\n\n``` bash\n$ spewer capsule unbind default\n```\n\nOne service can lease several local App Server workers concurrently. Restart it with four worker slots:\n\n``` bash\n$ spewer stop\n$ spewer install --max-workers 4\n```\n\n`spewer stop`\n\nstops new acceptance and drains accepted work first. The next installation starts\nthe service with the new limit.\n\nSpewer 0.2 scales across local worker processes. Distributed workers on several machines are not implemented yet.\n\nThe frontier harness owns classification, its private continuation, and the final answer. Spewer owns accepted work until it can return a terminal receipt.\n\nFour mechanisms make that handoff useful:\n\n- the durable queue keeps accepted tasks after the initiating turn exits;\n- permissions and budgets bound worker authority;\n- the event journal reconstructs state after a restart;\n- receipts identify the capsule, skill, model, usage, artifacts, and verification.\n\nSpewer requeues pristine interrupted work. It escalates work with uncertain external effects instead of risking duplicate execution.\n\nCost stays unknown unless `SPEWER_PRICE_CONFIG`\n\npoints to a matching versioned price file. Spewer\nnever converts missing price data into zero.\n\n| Capability | Status |\n|---|---|\n| Generic Luna worker through Codex App Server | Implemented |\n| Foreground questions and detached tasks | Implemented |\n| Live generic or specialized capsules | Implemented |\n| Immutable skill binding and receipt evidence | Implemented |\n| Configurable local worker concurrency | Implemented |\n| Reference Codex delegation skill | Implemented |\n| Complete durable Play adapter | Implemented |\n| Local Qwen3 inference through Ollama | Implemented in CP18 |\n| Bounded local-model web search | Implemented in CP19 |\n| Persisted default capsule and self-describing ask options | Implemented in CP20 |\n| Safe live activity trace for Codex and Ollama | Implemented in CP23 |\n| Explicit unsandboxed authority for one Codex task | Implemented in CP24 |\n| Same-task typed human input with a 30-minute timeout | Implemented in CP25 |\n| Local-model command execution and file writes | Not implemented |\n| Native integrations for other frontier harnesses | Planned |\n| Distributed multi-machine workers | Not implemented |\n\nInferred `spewer ask`\n\ntasks use read-only filesystem authority and deny network access by default.\n`ask --web`\n\nis the explicit exception for a capsule that advertises `web_search`\n\n.\n\n[How Spewer works](/modiqo/spewer/blob/main/docs/how_it_works.md)explains the product, every component, and both complete user flows.[Task protocol](/modiqo/spewer/blob/main/docs/03-task-protocol.md)defines requests, events, receipts, and delivery.[Durability](/modiqo/spewer/blob/main/docs/05-durability.md)and[crash closure](/modiqo/spewer/blob/main/docs/13-crash-closure.md)explain restart behavior.[Security](/modiqo/spewer/blob/main/docs/07-security.md)defines permissions, approvals, and side-effect boundaries.[Frontier integration](/modiqo/spewer/blob/main/docs/17-frontier-integration.md)defines the small harness client.[Play integration](/modiqo/spewer/blob/main/docs/10-play-integration.md)defines the first complete durable parent adapter.[Design index](/modiqo/spewer/blob/main/docs/readme.md)links every accepted contract and decision.[Checkpoint evidence](/modiqo/spewer/blob/main/artifacts/checkpoints)records passed proof through CP25.\n\nSpewer forbids unsafe code, panic primitives, unchecked indexing, and unchecked arithmetic. Handwritten Rust files stay at or below 500 physical lines.\n\nRun the complete local gate before committing:\n\n``` bash\n$ cargo fmt --all -- --check\n$ cargo clippy --all-targets --all-features -- -D warnings\n$ cargo test --all-targets\n$ RUSTDOCFLAGS=\"-D warnings\" cargo doc --locked --no-deps\n$ cargo deny check\n$ cargo machete\n$ ./scripts/check-rust-source-lines.sh\n$ ./scripts/check-doc-lines.sh\n$ ./scripts/check-panic-primitives.sh\n$ ./scripts/check-codex-schema.sh\n```\n\nApache-2.0. See [LICENSE](/modiqo/spewer/blob/main/LICENSE).", "url": "https://wpnews.pro/news/show-hn-spewer-delegate-codex-claude-tasks-to-cheaper-models", "canonical_source": "https://github.com/modiqo/spewer", "published_at": "2026-08-30 15:01:49+00:00", "updated_at": "2026-08-30 15:22:53.351547+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-infrastructure"], "entities": ["Spewer", "modiqo", "Codex", "Claude Code", "Kimi", "gpt-5.6-luna", "Codex App Server", "Homebrew"], "alternates": {"html": "https://wpnews.pro/news/show-hn-spewer-delegate-codex-claude-tasks-to-cheaper-models", "markdown": "https://wpnews.pro/news/show-hn-spewer-delegate-codex-claude-tasks-to-cheaper-models.md", "text": "https://wpnews.pro/news/show-hn-spewer-delegate-codex-claude-tasks-to-cheaper-models.txt", "jsonld": "https://wpnews.pro/news/show-hn-spewer-delegate-codex-claude-tasks-to-cheaper-models.jsonld"}}