The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Agent Conductor listing page.
AGENTS.md in, governed agent team out.
Agent Conductor is an MCP server that turns
the two conventions the coding-agent ecosystem has converged on —
AGENTS.md operating manuals and SKILL.md skills — from
passive documentation into an active orchestration layer, with a
consensus-hardened decision engine gating high-stakes changes.
Every serious agent tool — Claude Code, Cursor, Copilot, Codex, Gemini CLI —
now reads an AGENTS.md at the repo root and a catalog of SKILL.md files.
But both conventions are honor-system prose:
npm test before handing off"
is a suggestion, not a gate.Conductor makes the conventions executable — without asking any agent tool to change. It ships as a standard MCP server, so anything that speaks MCP gets contract compilation, skill discovery, and decision gating for free.
Three capability groups:
AGENTS.md into structured mission,
non-negotiable rules, layer do/don't boundaries, verification gates,
skill recommendations, and an out-of-scope list.SKILL.md skills across project and personal
scopes with progressive disclosure: metadata costs ~100 tokens, bodies
load only on demand.Requirements: Node 23+ (runs TypeScript natively) and Python 3.9+ (stdlib only — the engine needs no pip installs).
Register with Claude Code:
Or in any MCP client's JSON config:
Set CONDUCTOR_PYTHON if your Python 3 lives somewhere other than python3.
Then, from any project that has an AGENTS.md:
"Load this project's agent contract, list its verification gates, and run a decision_adversary pass on the change I'm about to make."
contract_loadCompile an AGENTS.md (or CLAUDE.md) into a structured contract. Accepts a
file path, a project directory, an explicit roots list, or a rootsFile
map; defaults to the current working directory. Multi-root workspaces emit
one contract whose layer table and verification commands are merged.
Section bodies stay off this tool so callers remain inside progressive-
disclosure budgets (metadata + structured fields only).
The parser is lossless: sections it doesn't recognize are preserved verbatim, so nothing in an unconventional AGENTS.md is dropped.
contract_verificationReturns only the verification gates — the named checklists and shell commands
that must pass before work is handed off. Pair it with your agent's workflow:
run the commands, confirm success, then declare done. Accepts the same
single-root or multi-root inputs as contract_load.
skills_listDiscover SKILL.md skills visible from a project root or a declared multi-root workspace. Metadata only. Extra source roots outside a module directory are included when they appear in the roots list or map.
Search order (first hit per skill name wins). In a multi-root workspace the project rows run for each declared root, then personal scopes run once:
| Priority | Path | Scope |
|---|---|---|
| 1 | <root>/.conductor/skills/*/SKILL.md | project |
| 2 | <root>/.claude/skills/*/SKILL.md | project |
| 3 | <root>/.cursor/skills/*/SKILL.md | project |
| 4 | ~/.claude/skills/*/SKILL.md | personal |
| 5 | ~/.cursor/skills/*/SKILL.md | personal |
skill_loadLoad the full SKILL.md body for one named skill — the on-demand half of progressive disclosure. Call it only when the task matches the skill's description.
decision_gateThe Consensus Hardening Protocol R0 gate: the cheapest, highest-leverage check, run before doing the work.
Any FATAL answer halts: stop and reframe before burning tokens on a
problem that isn't scoped, isn't understood, or isn't worth solving.
decision_adversaryA one-shot adversarial pass for high-stakes changes: CHP attacks the claim's foundations, scores them 0–100, and returns devil's-advocate findings plus a session status.
Statuses map to the CHP decision lifecycle
(EXPLORING → PROVISIONAL_LOCK → LOCKED, with HALT and
REFRAME_REQUIRED exits): EXPLORING means the claim survived the attack
and work may proceed toward a lock; HALT/REFRAME_REQUIRED mean the
foundations failed.
engine_statusHealth-check the Python engine subprocess. Returns
{ ok, engine: "chp", version }.
contract_load is convention-based, not schema-based. It extracts the
patterns AGENTS.md files in the wild actually use:
| Contract field | Source convention |
|---|---|
mission | First Mission / Purpose / Overview section |
rules | List items under Non-negotiables > Engineering rules > generic rules (priority-ordered so a generic "Product rules" section never shadows explicit non-negotiables) |
layers | First table with a Layer column under an architecture-like heading |
gates | Shell code blocks + list items under checklist / verification / before-completion headings |
skills | Tables with Task / Skill / Why columns; links resolved to text + URL |
outOfScope | List under an out-of-scope / non-goals heading |
sections | Everything, verbatim — the lossless fallback |
Headings inside code fences are ignored; tables tolerate emphasis in headers; markdown links and emphasis are stripped from extracted text.
A skill is a directory containing SKILL.md with YAML frontmatter:
Quality bar (inherited from the awesome-agent-skills standards): third-person description with matchable keywords, metadata around 100 tokens, body under 500 lines, no machine-specific absolute paths, declare only the tools the skill needs.
The bundled examples:
shared/, outside modules/billing.Naive loaders walk only the directory they were pointed at. That breaks the
same way a Gradle module breaks when a sourceSet points outside the module
(srcDirs = ['src/main/java', '../shared/src']): the extra tree is real
work, but it is not inside the module dir.
Declare every extra root. Conductor fails closed if one is missing — it will not invent a root or silently skip it.
Canonical locations (first hit wins):
| File | When to use |
|---|---|
.conductor/roots.json | Next to .conductor/skills |
conductor.roots.json | Repo-root convenience |
.conductor/roots / conductor.roots | Line-oriented alternative |
JSON object (ids optional):
JSON array of paths:
Line-oriented map (# comments allowed):
Relative paths resolve against the map file's directory.
modules/billing alone cannot see shared-ledger. After the map is
declared, skills_list and skill_load walk every root, then personal
scopes, with first-hit-wins shadowing.
contract_load still returns a summary without section bodies;
contract_verification still returns gates only; skills_list still
returns frontmatter metadata. Single-root projects without a map file —
including examples/pipeline-pulse — keep the previous compile path.
House rules (the full set is in this repo's own AGENTS.md):
@modelcontextprotocol/sdk and
zod; markdown and frontmatter parsing stay hand-rolled and tested.engine/vendor/cme/ stays byte-identical to
upstream except the documented __init__.py patch; engine behavior
changes belong in bridge.py.| Version | Theme | Scope |
|---|---|---|
| v0.2 | Enforcement | Execute contract_verification gates as real subprocesses and return pass/fail evidence — turning "reads the contract" into "enforces the contract" |
| v0.3 | Orchestration | Map contract layers onto CHP MeshAgent capabilities (produces/consumes) and expose full multi-agent deliberation sessions over MCP |
| v0.4 | Registry | Install vetted skills from remote catalogs (awesome-agent-skills format) with source-review prompts |
Conductor deliberately reuses proven components rather than rewriting them:
| Component | Source | License |
|---|---|---|
Decision engine (engine/vendor/cme/) | consensus-hardening-protocol | MIT |
| MCP server + registry shape | onchainmind | MIT |
| Skill quality standards | VoltAgent/awesome-agent-skills | — |
| Example fixture | Pipeline Pulse CRM operating manual | fixture |
See engine/vendor/NOTICE.md for vendoring details and ARCHITECTURE.md for the reasoning behind the two-language design.
MIT — see LICENSE. Vendored components retain their original MIT licenses.