Harness Dispatch banner
fstubner fstubner

Harness Dispatch

Productivity community

Description

Delegate coding tasks to the agent CLIs you already pay for — a local MCP server routing each task to the best-fit harness (Claude Code, Codex, Cursor, Antigravity, or any endpoint), billing- and safety-aware.

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

harness-dispatch

**Route whole coding tasks — not API requests — to the agent CLIs you already pay for.**

Each harness keeps its own scaffolding, test loop, and codebase index. There's no proxy in between and nothing is re-implemented: Claude Code stays Claude Code. One orchestrating agent picks the right one per task and spends your flat-rate subscription quota before anything metered.

It's a local MCP server, so the harnesses on your machine (Claude Code, Codex, Cursor Agent, Antigravity CLI, plus any local or remote OpenAI-compatible endpoint) become tools any AI can call. Exposing them as real tools beats asking an agent to shell out to another CLI: models are trained on tool calling, so they actually use the tools they're given. (No Gemini CLI: Google discontinued that CLI's backend in mid-2026, and Antigravity CLI replaced it.)

What it looks like

Your agent calls one tool:

{
  "prompt": "Port the retry logic in src/net/ to the new backoff helper, then run the tests.",
  "workingDir": "/path/to/project",
  "hints": { "taskType": "execute" }
}

Quick tasks come straight back:

{
  "mode": "single",
  "completed": true,
  "success": true,
  "route": "codex_cli",
  "model": "gpt-5.6-terra",
  "output": "Ported 4 call sites to withBackoff(); 118 tests pass.",
  "durationMs": 47210,
  "routing": { "tier": 1, "taskType": "execute", "reason": "tier 1 best (3 available)" }
}

Slow ones hand back a `jobId` after 25 seconds instead, and keep running:

{ "mode": "single", "completed": false, "jobId": "job-1786977316001-b49d1232" }

Carry on working, then call `job_status` with that id for a live output tail or the finished result. The run lives in a detached process, so **nothing is lost to a client timeout — or to the server itself restarting mid-run.**

Install

Needs Node.js `>=22.22.2` (so current LTS works) and at least one harness or endpoint.

`git` is optional but recommended: dispatch works without it, but the `wo