{"slug": "show-hn-anma-boundary-contracts-for-cheaper-ai-coding-agents", "title": "Show HN: ANMA, boundary contracts for cheaper AI coding agents", "summary": "ANMA, a new open-source tool, enforces software architecture boundaries for AI coding agents by turning YAML module contracts into Claude Code configuration files and CI checks. In a controlled benchmark, ANMA reduced boundary violations by a cheaper AI model from 13 out of 19 runs to 0 out of 20 runs, offering insurance for running cost-effective agents.", "body_md": "**Boundary enforcement for AI coding agents.** ANMA turns plain-YAML module\ncontracts into the `CLAUDE.md`\n\n, hooks, and checks that keep Claude Code inside\nyour architecture — and it measurably works where it matters most.\n\nIn a controlled benchmark (Python), a cheaper/faster model (Claude Haiku 4.5)\nviolated a declared module boundary in **13 of 19** runs of a plain repo. With\nANMA, across 20 runs of the same task it violated it **0 times** (Fisher's exact\n`p < 0.0001`\n\n). See [docs/BENCHMARKS.md](https://github.com/anma-labs/anma/blob/main/docs/BENCHMARKS.md) for the full study, including the\nhonest part: a frontier model (Opus 4.8) respected the boundary on its own, so\nANMA's value is **insurance for running cheaper agents** plus a CI/governance\nguarantee — not making a frontier model smarter.\n\n**Languages:** Python, Go, and TypeScript (`language:`\n\nin the root `anma.yaml`\n\n,\none per project). Go and TypeScript enforce module→module dependencies; interface\n(`public:`\n\n) enforcement is Python-only today. The Go/TS adapters are validated\n(`anma check`\n\n+ the hook detect and block real cross-module violations). In a\n**pre-registered** follow-up (neutral prompt, harder scenario), **TypeScript shows a\nmeasured effect** — control 18/20 vs ANMA 0/20, Fisher's exact `p < 0.00001`\n\n; **Go**\nis directional and significant (10/30 → 0/30, `p = 0.0004`\n\n) but its control rate fell\nbelow our pre-registered 0.40 floor, so we report it as **suggestive, not yet\nefficacy**. The Python headline is not extrapolated to either language. Details:\n[CONCEPTS § Languages](https://github.com/anma-labs/anma/blob/main/docs/CONCEPTS.md#languages)\nand [BENCHMARKS](https://github.com/anma-labs/anma/blob/main/docs/BENCHMARKS.md).\n\nYou declare each module's public interface and what it may depend on. `anma sync`\n\ncompiles that into everything else, so the architecture the agent reads can never\ndrift from the rules CI enforces:\n\n```\nanma.yaml                       project config (schema_version, source_roots)\nsrc/domains/billing/\n  anma.yaml                     the module contract — see docs/CONCEPTS.md for all fields\n  CLAUDE.md          (generated) loads when Claude opens billing/\nCLAUDE.md            (generated) architecture map, between markers\n.claude/rules/boundaries.md (generated) always-loaded imperative\n.claude/hooks/anma_pretooluse.py (generated) blocks a boundary-breaking edit (exit 2)\ntach.toml            (generated) engine config (Go: .go-arch-lint.yml; TS: .dependency-cruiser.cjs)\n.github/workflows/anma.yml (generated) CI: drift check + boundary check\nDECISIONS.md         append-only: why each boundary exists\npip install anma[tach]      # tach backend recommended; works without it too\nanma init                   # scaffolds contracts + a worked accounts/billing example\nanma sync                   # generates CLAUDE.md, nested docs, hooks, tach.toml, CI\nanma check                  # ✓ boundaries respected\n```\n\nFor Go or TypeScript, scaffold with `anma init --language go`\n\n/\n`anma init --language typescript`\n\n(the external backends — `go-arch-lint`\n\n,\n`dependency-cruiser`\n\n— are optional; a builtin scanner is the zero-dep fallback).\n\nFull walkthrough: [docs/QUICKSTART.md](https://github.com/anma-labs/anma/blob/main/docs/QUICKSTART.md).\n\n```\nanma init             # scaffold contracts + a worked example\nanma sync             # regenerate all artifacts from contracts\nanma sync --check     # CI guard: fail if generated artifacts drifted from contracts\nanma check            # enforce boundaries (hook / pre-commit / CI)\nanma check --warn     # report violations but exit 0 (incremental adoption)\nanma check --json     # machine-readable output for pipelines\n```\n\nExit codes: `0`\n\nok · `1`\n\nviolations, contract errors, or drift.\n\nANMA works at two levels, and the benchmark shows they play different roles:\n\n**Guidance**— the generated root and per-module`CLAUDE.md`\n\nand`.claude/rules`\n\nput your architecture in the agent's context. This is what drove the 68% → 0 result: the model was steered to the correct design and didn't attempt a bad edit.**Enforcement**— the`PreToolUse`\n\nhook judges the*proposed*edit and returns exit 2 to block any new disallowed import before it lands; the same check runs at pre-commit and in CI. This is the guarantee that holds for the edits guidance doesn't catch, and regardless of which model or human wrote the diff.\n\nThe enforcement hook is verified to fire (feed it a forbidden edit → `exit 2`\n\n); in\nthe benchmark it never needed to, because guidance pre-empted every bad edit. Both\nmatter; see the benchmarks for exactly what each one is shown to do.\n\n- Teams running\n**cheaper or faster agents**(cost-sensitive pipelines, bulk tasks, non-frontier or non-Claude models) that don't reliably respect an architecture on their own — this is where ANMA's steering is decisive. - Anyone who wants an\n**enforced** architecture: a guarantee in CI/pre-commit that module boundaries hold no matter who or what wrote the change. - Teams that want architecture as\n**governance**: declared interfaces, ownership → CODEOWNERS, and docs that can't silently drift from the rules.\n\nIf you only ever drive a frontier model on small, well-described tasks, ANMA may add turns without changing outcomes — and the benchmarks say so plainly.\n\n~800 lines, no runtime, no DSL, **one small dependency** (PyYAML) — the builtin\nengine needs nothing more, and the faster external backends (`tach`\n\nfor Python,\n`go-arch-lint`\n\nfor Go, `dependency-cruiser`\n\nfor TypeScript) are all optional. A\nsecurity team can read the whole tool in an afternoon.\n\n**Drift detection**—`anma sync --check`\n\nfails CI if generated docs/config fall out of sync with the contracts.**Incremental adoption**—`anma check --warn`\n\nand per-module`deprecated_deps`\n\nlet a large codebase adopt without a red build on day one.**Governance**—`owners:`\n\nper module generates`CODEOWNERS`\n\n;`source_roots:`\n\nsupports monorepos.**Supply chain**— signed releases (PyPI Trusted Publishing + provenance + SBOM),`pip-audit`\n\nin CI, Apache-2.0. See[SECURITY.md](https://github.com/anma-labs/anma/blob/main/SECURITY.md).\n\n[docs/QUICKSTART.md](https://github.com/anma-labs/anma/blob/main/docs/QUICKSTART.md)— install to first blocked edit[docs/CONCEPTS.md](https://github.com/anma-labs/anma/blob/main/docs/CONCEPTS.md)— the model, the**contract schema reference**, generated artifacts, the engine[docs/BENCHMARKS.md](https://github.com/anma-labs/anma/blob/main/docs/BENCHMARKS.md)— the with/without study, methodology, and honest limits[CONTRIBUTING.md](https://github.com/anma-labs/anma/blob/main/CONTRIBUTING.md)— dev setup, tests, the dogfood, the schema-stability rule[SECURITY.md](https://github.com/anma-labs/anma/blob/main/SECURITY.md)·[RELEASE.md](https://github.com/anma-labs/anma/blob/main/RELEASE.md)·[CHANGELOG.md](https://github.com/anma-labs/anma/blob/main/CHANGELOG.md)\n\nApache-2.0 · ANMA Labs LLC", "url": "https://wpnews.pro/news/show-hn-anma-boundary-contracts-for-cheaper-ai-coding-agents", "canonical_source": "https://github.com/anma-labs/anma", "published_at": "2026-06-21 23:41:02+00:00", "updated_at": "2026-06-21 23:55:58.345570+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools"], "entities": ["ANMA", "Claude Code", "Claude Haiku 4.5", "Opus 4.8", "Python", "Go", "TypeScript"], "alternates": {"html": "https://wpnews.pro/news/show-hn-anma-boundary-contracts-for-cheaper-ai-coding-agents", "markdown": "https://wpnews.pro/news/show-hn-anma-boundary-contracts-for-cheaper-ai-coding-agents.md", "text": "https://wpnews.pro/news/show-hn-anma-boundary-contracts-for-cheaper-ai-coding-agents.txt", "jsonld": "https://wpnews.pro/news/show-hn-anma-boundary-contracts-for-cheaper-ai-coding-agents.jsonld"}}