docs: design a shared harness descriptor registry #13
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "design-harness-descriptor"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Design doc for scaling to N coding harnesses (opencode, pi, agy, …).
Problem
The "point harness X at wraptool over MCP" logic exists three times, diverging:
init.go(7 harnesses, no auth),guixcontainer.go'swriteMCPConfig(claude + auth),connect.sh(claude + auth). The registry that knows all harnesses can't emit a token; the two that can are claude-only.Proposal
Extract
init.go'sharnessGeneratorsintointernal/harness— aDescriptor{Name, Auth, Render(Params)}registry — shared byinit,up(both runtimes), and eventuallyconnect.sh(shells out towraptool init, retiring the shell reimpl). Per-harnessAuthModemakes "can this harness carry a bearer token to a remote MCP server?" explicit and fails loudly instead of writing a config that 401s. Adding a harness = one descriptor row + one auth check.§7 — provisioning decision (decoupled)
The harness is the developer's toolbox, not the project: binaries live in a shared, developer-scoped pool (
$XDG_DATA_HOME/wraptool/harnesses/) mounted into every container (install once across all projects), never inmanifest.scm, never packaged by wraptool. Includes the three-tier isolation table (project toolchain / developer toolbox / host secrets) and the "curate the pool, never mount$HOME" rule (a harness's own API key is a dev cred that belongs in the box; project/host secrets stay out, via MCP).Proposal only — no code. Grounded in the existing
init.goregistry.🤖 Generated with Claude Code