# Principles > This page is auto-generated from `knowledge/PRINCIPLES.md`. To change the principles, edit that file and re-run `npm run docs:build`. > This is AgentRig's **canonical, editable** copy of the harness principles. Edit it freely; > `agentrig update` will carry your edits into any repo that uses AgentRig. A *harness* is the surrounding scaffolding (orchestration, prompts, skills, memory, evaluation) that lets autonomous coding agents reliably **triage → implement → review → judge → merge** with minimal human babysitting. AgentRig installs an opinionated harness into any repo, keeps context of what the repo is about, and ships a way to **evaluate the harness itself**. Each principle below names the concrete artifact(s) AgentRig installs and how the install-completeness audit and quality probes (`agentrig eval --static`) score it. --- ## 1. Treat the workflow as an explicit state machine Every task moves through named states (`ingested → queued → implementing → reviewing → judging → ready_to_merge → merged → closed`) and every transition declares its trigger. The DAG is the contract; agents do not invent transitions and reviewers cannot skip gates. **Artifact:** `.agentrig/harness/state-machine.yml`. ## 2. Specialize roles, vary models Route each state to a *role* (`triager`, `developer`, `reviewer`, `judge`), each with a short prompt and its own `model_tier`. Run the reviewer on a **different model than the developer** — single-model -bias mitigation matters more than any prompt tweak. A read-only **`security-reviewer`** ships as an optional fifth role (it audits the diff for security/privacy risk on a non-developer model). The roster is extensible: add more agent types (`designer`, `release-manager`, …) by dropping a `.{yml,md}` in and wiring a transition. **Artifact:** `.agentrig/agents/{triager,developer,reviewer,judge}.{yml,md}` (+ optional `security-reviewer.{yml,md}`, + `README.md`) with distinct models. ## 3. Externalize state in a system of record GitHub is the source of truth. Labels are the contract, not decoration. Pollers reconcile the engine against GitHub on a cadence; events drive reactive transitions. If the engine crashes, GitHub still tells you the truth. A **dashboard** surfaces the live picture: which tasks sit in which state (by label), who they're assigned to, plus harness score and eval status. **Artifact:** labels/state mapping in the state machine + MCP GitHub server + `.agentrig/dashboard/dashboard.mjs` (`agentrig dashboard`). ## 4. Skills are procedural memory; rules are reflexes Skills (`SKILL.md` with YAML frontmatter for triggers, `allowed-tools`, `argument-hint`) encode *how to do one thing well*. They are composable, auto-discovered, tool-scoped, and mirrored across vendor surfaces (`.claude/`, `.copilot/`, `.agents/`, …). Rules are glob-scoped and auto-loaded when matching files are edited, with an explicit priority order. **Artifact:** `.agents/skills/*/SKILL.md`, `.agents/rules/*.md` + `README.md`. ## 5. Self-verify before handoff After producing work, the implementing agent runs its own verification loop (build/test/visual) pinned to its own HEAD and decides between *iterate*, *continue*, or *self-park*. The reviewer is only invoked once the producer's loop has converged. Cap iteration attempts (N=3) and fall back. **Artifact:** `.agents/skills/self-verify/SKILL.md`. ## 6. Independent, rubric-driven evaluation Score work on explicit axes with credit tiers (0 / 0.5 / 1.0), a mandatory **issue code** plus evidence whenever a score is < full, and a deterministic aggregator (never hand-edited JSON). This is how you tell whether a prompt change made the agent better or worse — and it is how you evaluate **the harness itself**. **Artifact:** `.agentrig/eval/` (RUBRIC.md, checks.json, scenarios, score.mjs, static-audit.mjs) and the `harness-eval` skill. ## 7. Hermetic per-agent environments Each concurrent agent runs in its **own git worktree** so developers, reviewers, and judges never trip over each other's working trees or lockfiles. A repair script prunes stale worktree metadata before every add. Isolation is a hard prerequisite for multi-agent throughput. **Artifact:** `scripts/repair-worktrees.sh` + worktree guidance in the wiki. ## 8. Continuous self-improvement: every mistake is a prompt bug Agents log new gotchas to a tiered memory (central committed wiki → local git-ignored wiki → session scratch). A `skill-improver` turns reviewer feedback into instruction-surface changes that must pass a **prevention test** ("would this new wording have changed the original failure?"). Strict admission tests stop duplication from killing the wiki. **Artifact:** `.agents/wiki/` + `.agents/skills/skill-improver/SKILL.md`. ## 9. Human-in-the-loop where reversibility is low Low-reversibility actions are recommend-then-apply: the agent surfaces proposed changes and waits for explicit `apply`/`approve`/`skip`. Certain labels are **human-only gates** the agent must never apply or even name. These are deliberate trust boundaries, not friction. **Artifact:** human-gate declarations in the state machine + rules. ## 10. Hard limits and safety nets Set `max_review_iterations`, `max_diff_chars`, a token `runaway_cap`, and `pre_pr`/`pre_merge` hooks. Protected files require a human-override label. A recovery scan re-queues anything stuck too long. These caps keep an agent pool from melting the repo. **Artifact:** `limits:` block in `.agentrig/harness/state-machine.yml`. ## 11. One canonical source, projected to every agent surface (local + remote) The harness keeps **one** source of truth (`AGENTS.md` + `.agents/rules/` + `.agents/skills/`) and **projects** it into each ecosystem's native discovery format so *any* agent benefits without lock-in — local CLIs **and** remote/cloud agents: - **GitHub Copilot (remote coding agent + IDE):** `.github/copilot-instructions.md`, path-scoped `.github/instructions/*.instructions.md` (`applyTo` globs), and `.github/workflows/copilot-setup-steps.yml` for the cloud agent's environment. - **Claude Code:** `CLAUDE.md`. **Cursor:** `.cursor/rules/*.mdc`. **OpenCode/Codex:** `AGENTS.md`. - **MCP** mirrored to each surface (`.mcp.json`, `.vscode/mcp.json`, `.github/copilot/mcp.json`). This is the meta-harness payoff: assign an issue to the web GitHub Copilot agent and it sees the same rules/setup/MCP as your local Copilot CLI, Claude Code, or Cursor. Projections regenerate from the source; never hand-edit the generated files. **Artifact:** the compiler (`agentrig compile`) + the projected files above; symlinked vendor dirs for skills. ## 12. Instructions are the source of truth, not existing code A short, unmissable **Critical Rules** block at the top of `AGENTS.md` beats a 50-page contributing guide. Pair it with package-local AGENTS.md, golden-principles docs, and a directory map so an agent can answer "what should I do?" without spelunking. Legacy code is not the spec. **Artifact:** root `AGENTS.md` with a `Critical Rules` section + repo context.