@metaharness/rvm is a one-shot scaffolder for a minimal agent harness pre-configured against the RVM deployment-target partition. If you have spent time wiring up an agent harness by hand — picking a settings.json shape, deciding where agents/ lives, registering MCP servers, figuring out which paths are host-specific vs. portable — this skips that. You get a clean directory you can read in two minutes, a working harness doctor pass, and the right defaults for the RVM host partition. It is deliberately minimal: no example crew, no pre-built workflow, no opinions about what your agent does. Just the harness shape, done right.
This is a host package in the metaharness ecosystem — it integrates the harness with a specific deployment target (RVM). It is not a vertical template (those ship a ready-made multi-agent crew for a specific use case like research or code review). If you want a crew, layer one on top after scaffolding, or pick a vertical template instead.
The one command:
npx @metaharness/rvm@latest my-botReplace my-bot with whatever you want the directory to be called. Anything after the name is forwarded to metaharness untouched, so flags like --no-install or --dry-run work as expected.
After the scaffolder finishes:
cd my-bot
npm install
harness doctorharness doctor is the contract that the scaffold worked. It checks node version, validates settings.json against the harness schema, confirms the host partition is rvm, pings any registered MCP servers, and counts agents. A green doctor pass means you can immediately load the directory with claude -p --plugin-dir my-bot and the harness will respond.
You do not need an RVM runtime installed to run the scaffold or harness doctor. The scaffold writes config that follows RVM's path and permission conventions, but the runtime itself is something you stand up when you are ready to deploy.
What ships in the directory:
settings.jsonwithhost: "rvm"andtemplate: "minimal"pre-set. Path layout, permission defaults, and session-cache locations all follow the RVM deployment-target convention so future tooling (harness deploy, host-specific hooks) finds what it expects.mcp.jsonstub registered against the RVM host transport defaults — drop a server entry in andharness doctorwill pick it up on the next run.agents/directory in the canonical shape (one folder per agent, each withagent.jsonplus prompt files). Empty by default — this is the minimal template..harness/local-state directory, gitignored, used for session cache, doctor reports, and routing logs.package.jsonwith theharnessCLI on the local path anddoctor+validateas npm scripts sonpm run doctorworks out of the box..gitignorepre-populated with the entries you would otherwise forget (.harness/,node_modules/, host-specific artifact paths).README.mdstub you can overwrite with your own project docs.
A few things worth knowing once you are past the first scaffold:
- Re-scaffolding is safe and explicit. Running the scaffold again with the same name passes
--forceto metaharness, which means it will overwrite. If you have hand-edited files, commit first. harness validateis the offline check. Use it in CI — it validatessettings.jsonandmcp.jsonagainst schema without touching the network.harness doctoris the full check including reachability and should be your local smoke test.- The harness is loadable as a Claude Code plugin directory.
claude -p --plugin-dir my-bot "your prompt here"will load the agents and MCP servers from the scaffolded directory. This is the fastest way to sanity-check that the harness shape is sound before deploying it anywhere. - Switching hosts. If you decide later that RVM is not the right deployment target, you can edit
settings.jsonand change thehostfield, then runharness doctorto find any layout mismatches. For non-trivial host switches, re-scaffolding into a fresh directory is usually less painful than migrating in place. - Layer a vertical on top. Once the host partition is wired, dropping a vertical crew into
agents/is straightforward — copy agents from a vertical template directory, or write your own.
MIT. Built on metaharness (https://www.npmjs.com/package/metaharness).