Install
openclaw skills install @xiaoba-dev/foremanDispatch-and-acceptance control desk for farming coding work out to background agents. Probes which worker backend is actually usable, gives each task its own git worktree, sends it to a worker agent via the handoff CLI, takes delivery only as a real commit inside a path whitelist, then gates the merge behind an acceptance protocol whose core rule is that the builder may never touch the tests, assertions, or CI config that judge it. Be aware before using it — it sends repository content to the worker backends you configure; its probes read your local agent login status and may make one minimal request to a backend; and the optional caged worker starts a Docker container, passes DEEPSEEK_API_KEY into it, and lets the worker skip permission prompts inside that container. Use it when batching implementation work out to background agents, or when accepting code that someone else — human or agent — built.
openclaw skills install @xiaoba-dev/foremanFarming work out to another agent necessarily means handing something a credential and your code, so here is exactly what that involves:
~/.handoff/config.yaml (or, for the caged worker, to the endpoint in foreman-cworker.sh). Nowhere else — no telemetry, no phone-home..foreman/ inside your repo (task and batch state; it must be gitignored), worktrees under ~/foreman-worktrees/ (override with FOREMAN_WORKTREE_ROOT), and a backend health table under ~/.local/state/foreman/ (override with FOREMAN_STATE_DIR).~/.handoff/ — the dispatcher's own task directory — to locate what a worker delivered.backend-health.sh, all probes listed in its header): claude auth status and cursor-agent status read local login state only; the deepseek probe sends $DEEPSEEK_API_KEY to DeepSeek's own balance endpoint; the codex probe makes one minimal request. Probes you define yourself with FOREMAN_PROBE_<NAME> run as you wrote them.foreman-cworker.sh starts a Docker container, passes $DEEPSEEK_API_KEY into it as that worker's own API credential, and runs the worker with --dangerously-skip-permissions — inside the container only. That is the entire point of the caged worker: it receives one key and one mounted worktree, and nothing else — not your home directory, not your other repos, not your primary agent login. The key is read from your environment at call time, is never stored by this skill, is visible only to the process inside the cage, and is gone when that container exits. The script refuses to start unless the mount is a git-registered task worktree under FOREMAN_WORKTREE_ROOT and the image is pinned by an immutable id (FOREMAN_WORKER_IMAGE), and it runs the container with all capabilities dropped, no-new-privileges, and a read-only root filesystem.dispatch.md in this directory and run the dispatch chapter. Once every delivery has passed intake, automatically read verify.md and enter the acceptance chapter — do not wait to be asked again.dispatch.md only and stop at intake./foreman verify, or acceptance only (including code somebody else handed you): read verify.md directly.backend-health.sh pick chooses a usable backend; if the whole pool is down, stop dispatching and report — never force it. Infrastructure failures (auth / quota / config / net) do not count as rework rounds: they say nothing about the quality of the work, and mixing them into the rework count misreads "the channel is down" as "the builder can't do the job"..foreman/ — one <task_id>.json per task, one batch.json per batch. First action on every entry into foreman: scan .foreman/ for overdue and unsettled tasks and reconcile them before starting anything new.error_fingerprint showing up a second time → escalate immediately. Dispatch reworks plus acceptance repairs reaching 4 rounds combined → circuit-break and report to the user.dispatch.md §3). Prefer backends paid for by a subscription you already have, chosen by which one still has quota, not by which IDE the foreman happens to run in; when one is exhausted or its login fails, move down the pool, and end on a pay-as-you-go backend that doesn't run out. Farming out buys two things: an isolated context, and a builder that can't reach the ruler.