Skip to main content

Manage projects that target multiple coding agents from a single shared harness.

Project description

multi-harness ๐Ÿ”—

One project. Many coding agents. Zero duplication.

mh is a CLI that keeps your skills, subagents, and project instructions in a single canonical .harness/ directory and materialises per-agent symlinks so every agent sees the paths it expects โ€” no copy-paste, no drift.

Supported agents: Claude Code ยท OpenAI Codex CLI ยท OpenCode ยท GitHub Copilot ยท Google Antigravity


โœจ Why multi-harness?

Each coding agent looks for instructions, skills, and subagents in different places: CLAUDE.md, .github/copilot-instructions.md, AGENTS.md, .claude/skills/, .codex/skills/ โ€ฆ

Without mh you either duplicate these files across every agent-specific location or keep them in sync by hand. mh solves this by:

  1. Creating one real .harness/ directory with the canonical files.
  2. Writing relative symlinks everywhere each agent expects to look.
  3. Detecting an existing single-agent project and migrating it automatically.

๐Ÿ“ฆ Installation

pip install multi-harness

Verify the install:

mh --help

๐Ÿš€ Quick start

cd my-project
mh init

That's it. mh detects which agents are already configured, migrates their files into .harness/, and creates symlinks for all five supported agents.


๐Ÿ“– Commands

mh init โ€” bootstrap or migrate a project

mh init                                      # all five agents, current directory
mh init --agents claude,codex                # register only two agents
mh init --template ./AGENTS_TEMPLATE.md      # seed AGENTS.md from a template file
mh init --force                              # re-create symlinks idempotently (safe)
mh init /path/to/project                     # target a different directory

On first run mh init:

  • Creates AGENTS.md (or uses your --template) as the shared project instructions file.
  • Creates .harness/skills/ and .harness/agents/ as the shared canonical directories.
  • Writes relative symlinks for every registered agent (see layout below).
  • Records the registered agents in .harness/config.toml.

If exactly one agent is already configured, mh init migrates its files into .harness/ before creating symlinks โ€” your existing work is preserved, not overwritten.


mh add โ€” register new agents

mh add copilot                               # add a single agent
mh add opencode antigravity                  # add multiple agents at once

Creates the symlinks for the new agent(s) and updates .harness/config.toml. Requires mh init to have been run first.


mh remove โ€” unregister agents

mh remove codex                              # remove one agent
mh remove opencode copilot                   # remove several at once

Removes the agent's symlinks (instructions, skills, subagents) without touching any file inside .harness/. Your shared content is never deleted.


mh status โ€” inspect symlink health

mh status                                    # check current directory
mh status /path/to/project                   # check another directory

Reports the state of every symlink for every registered agent:

Status Meaning
โœ… ok Symlink exists and resolves correctly
โŒ missing Symlink is absent
๐Ÿ’” broken Symlink exists but target doesn't resolve
โš ๏ธ detached A real file/dir sits where a symlink should be

๐Ÿ—‚๏ธ Layout produced by mh init

my-project/
โ”œโ”€โ”€ AGENTS.md                          โ† canonical shared instructions (real file)
โ”œโ”€โ”€ CLAUDE.md                         โ†’ AGENTS.md
โ”œโ”€โ”€ .harness/
โ”‚   โ”œโ”€โ”€ config.toml                    โ† registered agents list
โ”‚   โ”œโ”€โ”€ skills/                        โ† shared skills (real dir)
โ”‚   โ””โ”€โ”€ agents/                        โ† shared subagents (real dir)
โ”œโ”€โ”€ .claude/
โ”‚   โ”œโ”€โ”€ skills                        โ†’ ../.harness/skills
โ”‚   โ””โ”€โ”€ agents                        โ†’ ../.harness/agents
โ”œโ”€โ”€ .codex/
โ”‚   โ”œโ”€โ”€ skills                        โ†’ ../.harness/skills
โ”‚   โ””โ”€โ”€ agents                        โ†’ ../.harness/agents
โ”œโ”€โ”€ .opencode/
โ”‚   โ”œโ”€โ”€ skills                        โ†’ ../.harness/skills
โ”‚   โ””โ”€โ”€ agent                         โ†’ ../.harness/agents
โ”œโ”€โ”€ .github/
โ”‚   โ”œโ”€โ”€ copilot-instructions.md       โ†’ ../AGENTS.md
โ”‚   โ”œโ”€โ”€ skills                        โ†’ ../.harness/skills
โ”‚   โ””โ”€โ”€ agents                        โ†’ ../.harness/agents
โ”œโ”€โ”€ .agents/
โ”‚   โ””โ”€โ”€ skills                        โ†’ ../.harness/skills
โ””โ”€โ”€ .subagents                        โ†’ .harness/agents

All symlinks are relative, so the tree is fully portable across machines and paths.


๐Ÿ”„ Typical workflow

# 1. Bootstrap a new project
mh init --agents claude,codex

# 2. Add an agent later
mh add copilot

# 3. Check everything is wired up correctly
mh status

# 4. Remove an agent you no longer use
mh remove antigravity

Write your instructions once in AGENTS.md, drop skills into .harness/skills/, and place shared subagents in .harness/agents/ โ€” every registered agent picks them up automatically.


๐Ÿ›ก๏ธ Safety guarantees

  • Symlinks never overwrite real files. If a real file or directory already exists where a symlink should go, mh aborts with an error rather than deleting your data.
  • --force is safe. It re-creates symlinks but still refuses to touch real files.
  • Migration is non-destructive. Files are moved into .harness/; nothing is deleted.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multi_harness-0.1.0.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

multi_harness-0.1.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file multi_harness-0.1.0.tar.gz.

File metadata

  • Download URL: multi_harness-0.1.0.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for multi_harness-0.1.0.tar.gz
Algorithm Hash digest
SHA256 34e1941f8637f88a42c6321d3dc786764f2462ab232ee488c92a9ac1510a0963
MD5 3edd085a6659849c5a928957b4cfe2e5
BLAKE2b-256 21e569dba0fc8ca80ce50998df7b59c2a416ad579f6c55df63ba6eb4f0468cc0

See more details on using hashes here.

File details

Details for the file multi_harness-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: multi_harness-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for multi_harness-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 97d6b81233f1441526c16e1050fcbc0e10529c7166601505db88e8c97e05200b
MD5 066bffe373e18e3ee4718936d90a2512
BLAKE2b-256 b508d7d844a030b9dd106a1876f63eada722c303ba60eb4eb1c863c817b4708b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page