More agents.
Less cleanup.
Rules enforced.
Nool sits between your coding agents and Git: you decide who may change what, your rules run before anything lands, and every change carries signed evidence.
Engineers: run it on your own repo first. Community is free forever: no email, no card, no licence.
Plus d’agents.
Moins de nettoyage.
Des règles appliquées.
Nool se place entre vos agents de code et Git : vous décidez qui peut modifier quoi, vos règles s’exécutent avant tout atterrissage, et chaque changement porte des preuves signées.
Ingénieurs : essayez-le d’abord sur votre propre dépôt. Community est gratuit pour toujours : sans e-mail, sans carte, sans licence.
Más agentes.
Menos correcciones.
Reglas aplicadas.
Nool se sitúa entre tus agentes de programación y Git: tú decides quién puede cambiar qué, tus reglas se ejecutan antes de que nada aterrice y cada cambio lleva evidencia firmada.
Ingenieros: pruébalo primero en tu propio repositorio. Community es gratis para siempre: sin correo, sin tarjeta, sin licencia.
Mais agentes.
Menos retrabalho.
Regras aplicadas.
O Nool fica entre os seus agentes de programação e o Git: a sua equipa decide quem pode alterar o quê, as suas regras correm antes de qualquer aterragem e cada alteração traz provas assinadas.
Engenheiros: experimente primeiro no seu próprio repositório. O Community é gratuito para sempre: sem e-mail, sem cartão, sem licença.
Mehr Agenten.
Weniger Nacharbeit.
Regeln, durchgesetzt.
Nool sitzt zwischen deinen Coding-Agenten und Git: Du legst fest, wer was ändern darf, deine Regeln laufen, bevor etwas landet, und jede Änderung trägt signierte Nachweise.
Für Entwickler: Probier es zuerst in deinem eigenen Repo. Community ist dauerhaft kostenlos: keine E-Mail, keine Karte, keine Lizenz.
更多智能体。
更少善后。
规则强制执行。
Nool 位于你的编码智能体与 Git 之间:由你决定谁可以修改什么,规则在任何变更落地之前执行,每一次变更都带有签名证据。
工程师:先在自己的仓库里跑一遍。Community 版永久免费:无需邮箱、信用卡或许可证。
エージェントは増やす。
後始末は減らす。
ルールは必ず守らせる。
Nool はコーディングエージェントと Git の間に立ちます。誰が何を変更できるかはあなたが決め、ルールは着地前に必ず実行され、すべての変更に署名付きの証拠が残ります。
エンジニアの方へ:まずは自分のリポジトリで試してください。Community は永久無料です。メールもカードもライセンスも不要です。
더 많은 에이전트.
더 적은 뒷수습.
규칙은 강제됩니다.
Nool은 코딩 에이전트와 Git 사이에 있습니다. 누가 무엇을 바꿀 수 있는지는 여러분이 정하고, 규칙은 변경이 반영되기 전에 실행되며, 모든 변경에는 서명된 증거가 남습니다.
엔지니어라면 먼저 자신의 저장소에서 실행해 보세요. Community는 영구 무료입니다. 이메일도, 카드도, 라이선스도 필요 없습니다.
وكلاء أكثر.
إعادة عمل أقل.
قواعد مُطبَّقة.
يقف Nool بين وكلاء البرمجة لديك وبين Git: أنت تقرر من يغيّر ماذا، وتُنفَّذ قواعدك قبل أن يُدمج أي تغيير، ويحمل كل تغيير أدلة موقّعة.
للمهندسين: جرّبه أولاً على مستودعك. نسخة Community مجانية للأبد: بلا بريد إلكتروني ولا بطاقة ولا ترخيص.
Nothing reaches Git unchecked. Every change takes the same three steps before it reaches Git.
How it works in detail →- 01CoordinateAgents claim what they will change before they change it.
- 02CheckYour rules run before anything lands, the same way every time.
- 03LandEvery change reaches Git with signed evidence.
Faster source control, same collisions.
Anthropic went from 2,500 to over 30,000 merges a day and rebuilt source control to keep up; OpenAI rebuilt its Git server for Codex. Faster source control doesn't stop two agents from starting work that conflicts.
Without coordination
of tokens went to work that never landed.
35 agents on one codebase, unscheduled gitWhat happens with 35 agents on one codebase using Nool
of tasks landed. Same agents, same tickets, same model.
vs 33–62% for unscheduled gitVendor-run and pre-registered. Every result, condition and limit is published.
- 01Coordinate
Control
You decide what each agent may change. Agents claim code before they edit it, so overlap shows up first.
Original screenshots: Claude Code, opencode, Codex.
Claude CodeHolds quota_for $ nool announce intent --intent "Raise Team plan quota to 60,000 and update team_quota test" --target-nodes node:crates/billing/src/lib.rs#quota_for,node:crates/billing/src/lib.rs#team_quota --agent-id $NOOL_AGENT_ID✓ Announced intent: Raise Team plan quota to 60,000 and update team_quota test Lease: seq 4, exclusive mode, expires in 1800000 msopencodeRefused, then cleared $ nool announce intent --intent "Add startup plan (10,000 req/mo) to quota_for and a test" --target-nodes node:crates/billing/src/lib.rs#quota_for --agent-id $NOOL_AGENT_IDError: Coordination conflict: agent b0deb2ca (Raise Team plan quota to 60,000 and update team_quota test) on node:crates/billing/src/lib.rs#quota_for.$ nool announce wait node:crates/billing/src/lib.rs#quota_for✓ node:crates/billing/src/lib.rs#quota_for is free.Real sessions, 2026-11-04 · nool 7.24.0
Bring your agents. Keep your Git.
Why Nool →Keep your Git forge. Keep your CI/CD.
Your code stays in Git. Your team keeps its repositories, reviews and CI, so agentic engineering can scale across the company without a migration.
Use the agents you already run: Claude Code, Codex or opencode. Want a harness your team owns? nool code is the one Nool ships, optional and governed the same way.
How nool code worksAn AI reviewer can approve tomorrow what it rejected today. A rule can't.
- 02Check
Enforcement
Tests and policy run before a change lands. A change that breaks them is refused, not flagged afterwards.
Configurable rules. YAML beside the code; edit the file and it applies to the next change.
policies/no_secret_keys.yaml
policies/no_secret_keys.yaml inv_id: POL-WS-001title: "No secret keys in source code"scope: { type: global }kind: behavioralseverity: criticalmode: blockingreason_code: 403when: # skip tests: fixtures may hold fakes not: { semantic_path_is_test: true }forbids: # refuse AWS access key IDs - diff_matches: "AKIA[0-9A-Z]{16}"Hard rules, installed for your teams. Compiled to WASM and sealed; changed only by rebuilding.
billing_needs_test/src/lib.rs
billing_needs_test/src/lib.rs fn evaluate(ctx: &PolicyContext) -> PolicyResult { let changed = changed_paths(ctx); let has_test = changed.iter().any(|p| p.ends_with(".test.ts")); for p in &changed { if p.starts_with("src/billing/") && !has_test { return PolicyResult::deny(499, format!( "{p} is billing code: include a test for it in the same change")); } } PolicyResult::Allow}billing-api — zsh ~/billing-api $ ls policiesbilling_needs_test.wasm no_secret_keys.yaml~/billing-api $ nool propose --path src/config.ts --intent "Add AWS config for usage export" --solidify[Aram DSL] POL-WS-001 failed: diff_matches(AKIA[0-9A-Z]{16})Error: Gate stack denied [POLICY_DENY] at stage pre-propose: reason code 403Rulesno-secret-keysYAMLBlockedbilling_needs_testWASMShow the terminal output
billing-api — zsh ~/billing-api $ ls policies billing_needs_test.wasm no_secret_keys.yaml ~/billing-api $ nool propose --path src/config.ts --intent "Add AWS config for usage export" --solidify [Aram DSL] POL-WS-001 failed: diff_matches(AKIA[0-9A-Z]{16}) Error: Gate stack denied [POLICY_DENY] at stage pre-propose: reason code 403 ~/billing-api $ nool propose --path src/billing/invoice.ts --intent "Add invoice totals" --solidify Error: Gate stack denied [POLICY_DENY] at stage pre-propose: src/billing/invoice.ts is billing code: include a test for it in the same change (code 499) ~/billing-api $ nool propose --path src/billing/invoice.ts --path src/billing/invoice.test.ts --intent "Add invoice totals with a test" --solidify ID : 222638be Intent : Add invoice totals with a testnool 7.24.0, fresh repository
- 03Land
Audit evidence
Every change carries its intent, test results and approvals in a signed record anyone can verify.
auth-service — zsh ~/auth-service $ nool solidify [Engine] ✅ No conflicts detected. [Attest] ✅ 2 attestation(s) recorded for dd4652dc (evidence c02807a5)✓ Solidified Knot [dd4652dc] Knot dd4652dc ├── 🔀 Concurrency: Commutative linear merge (0 conflicts) ├── 🛡️ Invariants: 1 architectural rules satisfied · 0 breaking API changes (avoided ~90m incident risk) └── 🔗 Git Mirror: Dual-state commit [b908c79f] live on 'main'Evidencecompileintegrity-driverpassunit-testsintegrity-driverpasstests_constrain_change2 mutant(s) killedpassShow the terminal output
auth-service — zsh ~/auth-service $ nool propose --path crates/auth/src/lib.rs --intent "Refactor authentication token validation" ▸ Collecting changes & verifying scopes... [Reify] 👻 Ghost-Run: Executing project-level tests... [Mutation] tests_constrain_change: pass (2 mutant(s) killed) ▸ Simulating commutative merge & invariants... 📋 Staged Proposal [d81c96f7a29b] Refactor authentication token validation ├── 🛡️ Invariants: 3 architectural rules satisfied · 0 breaking API changes (avoided ~90m incident risk) ├── 🪙 Token Savings: Scoped AST context saved ~1k tokens (~$0.00) ├── 🧵 Thread: Scoped to thread 'main' └── ⚡ Mode: Full (Semantic verification) ~/auth-service $ nool solidify [Engine] ✅ No conflicts detected. [Attest] ✅ 2 attestation(s) recorded for dd4652dc (evidence c02807a5) ✓ Solidified Knot [dd4652dc] Knot dd4652dc ├── 🔀 Concurrency: Commutative linear merge (0 conflicts) ├── 🛡️ Invariants: 1 architectural rules satisfied · 0 breaking API changes (avoided ~90m incident risk) └── 🔗 Git Mirror: Dual-state commit [b908c79f] live on 'main' Evidence: compile pass (integrity-driver) · unit-tests pass (integrity-driver) · tests_constrain_change pass (2 mutant(s) killed)nool 7.24.0, fresh repository
Security teams ask where the code lives, who signs what, how rules are protected from tampering and what happens if a signing key is compromised. The answers are on one page.