The three axes
Context
Orientation — does the agent know where it is?
AGENTS.mdor equivalent context file present- Tech stack and tooling documented
- Explicit edit boundaries and off-limits paths declared
- Token-budget-friendly, non-fragile instructions
AE-CTX-001, AE-CTX-002, AE-CTX-004, AE-CTX-006, AE-CC-002Safety
Risk boundaries — are the guardrails in place?
- No raw secrets in agent-visible files or MCP config
- MCP server packages pinned to reviewed versions
- Remote MCP origins explicitly trusted
- No dangerous hook commands with unconstrained shell access
AE-SEC-001, AE-SEC-002, AE-MCP-001, AE-MCP-002, AE-MCP-003, AE-CC-001Operability
Verifiability — can the agent check its own work?
- Tests exist for every active language in the repo
- A discoverable verification command is documented
- Reproducible toolchain with lockfile and version constraints
- CI gate that exercises the intended quality path
AE-TEST-001, AE-AUTO-001, AE-ENV-001, AE-CI-002Governance: the cross-cutting layer
Governance isn’t a fourth axis. It wraps the other three — auditing suppressions, ensuring exceptions have reasons, and surfacing when the score is being systematically bypassed. Rules
AE-SUPPRESS-001, AE-SUPPRESS-002, and AE-SUPPRESS-003 enforce this contract on every scan.Why repo, not model
Model capability is outside your control. You can choose a model, but you cannot change how it reasons, what it was trained on, or how it handles ambiguous instructions. The repo configuration is entirely within your control — and it determines how much of that model capability you actually get. An excellent model in a poorly configured repo will:- guess at commands instead of running documented ones
- infer edit boundaries instead of reading declared ones
- install whatever version of a tool was latest at execution time
- produce changes it cannot verify against any test
Real failure modes
Agent guesses the wrong test command
Agent guesses the wrong test command
What happens: The agent runs
npm test when the project uses pnpm run test:unit, or go test ./... in a monorepo where only specific packages are testable. It gets errors or false passes, loops, and produces changes it believes are correct.Root cause: No AGENTS.md with a verification command. No AE-AUTO-001-compliant automation section.Rules: AE-CTX-001 (missing context file), AE-AUTO-001 (missing verification command)Agent touches files it should have left alone
Agent touches files it should have left alone
What happens: The agent refactors a file that is generated, vendored, or owned by a separate team. The change breaks a downstream process. No warning was given.Root cause: No edit boundaries declared. The agent had no signal that certain paths were off-limits.Rule:
AE-CC-002 (missing edit scope declaration)MCP server changes silently between sessions
MCP server changes silently between sessions
What happens: An MCP server package was referenced as
@latest. Between Monday and Friday, the package published a new version. The agent’s tool behavior changed without any review.Root cause: Floating MCP package reference. Supply-chain control delegated to the registry’s publish cadence.Rule: AE-MCP-001 (unpinned MCP server package)Changes cannot be verified
Changes cannot be verified
What happens: The agent writes code, tries to verify it, finds no test suite for the active language, and either stops short or proceeds on guesswork. The change lands unverified.Root cause: No tests for the primary language detected by Charter.Rule:
AE-TEST-001 (missing test suite for active language)Secret committed via agent session file
Secret committed via agent session file
What happens: A developer stores an API key in a
.claude/local/ settings file for convenience. The directory is not in .gitignore. An agent session commit includes the file. The secret is now in git history.Root cause: Agent session directories not excluded from version control.Rule: AE-CTX-004 (agent artifact patterns missing from .gitignore)