Git shows what changed.
Aition shows what broke.
A command-line tool that answers "what breaks if we change this?" for a codebase. Every affected file, with a verdict: throw away, rework, review, or safe. Built for teams running AI coding agents.
$ aition ask "What would break if we dropped Redis?" --project . The outage is usually an assumption that didn't move.
The failures aren't in the diff
When an AI coding agent changes your code, git shows what it touched. It does not show the event handler three files away that just stopped firing, the YAML that selects a plugin by a string that no longer exists, or the background pipeline that now quietly drops one record in fifty.
Those failures live in assumptions the agent made and nobody wrote down. Aition reads the agent's transcript, where the assumptions are, and the codebase, where the consequences are, and tells you which files to distrust.
What it returns
A verdict per file, a one-line reason, a confidence, and how the file got into the set. Then the list of files it did not examine, with the reason. It never calls a file safe by omission.
$ aition triage --change "We can't use Stripe anymore; we're moving to Paddle." --transcript session.jsonl parsed transcript 79,522 chars of narrative, 34 turns structural pass 22 files touched by the agent (12 edited, 10 created) estimated cost $0.67 (cap: --max-cost 1.00) DISCARD fixtures/stripe-fixtures.json Stripe CLI fixtures; nothing survives the move 0.87 REWORK utils/usage/billing.ts creates and finalizes Stripe invoices 0.83 REWORK app/api/webhooks/route.ts Stripe invoice.* event handlers 0.90 REWORK utils/usage/quota.ts reads plan limits from Stripe product metadata 0.85 REWORK supabase/migrations/..._metering.sql overage_invoices modeled on Stripe's status enum 0.80 REWORK types_db.ts generated from that schema; regenerate 0.77 REWORK schema.sql same tables as the migration 0.80 REVIEW utils/usage/metering.ts decides overage from the Stripe-synced prices 0.50 REVIEW components/ui/AccountForms/UsageCard displays quota; nothing said it's Stripe-free 0.50 SAFE app/api/v1/ping/route.ts meters calls; never touches billing 0.75 SAFE .env.local.example the agent added quota and cron vars, not Stripe 0.78 SAFE components/ui/Navbar/Navlinks.tsx adds an admin link 0.80 not examined (0) every file the agent touched received a verdict 1 discard 6 rework 2 review 3 safe (22 files; 10 shown)
Real run on a Claude Code session that built usage metering on Stripe, then was told Stripe was going away. Diff-only got 11 of 22 right; with the transcript, 14 of 22. Three moved toward the truth, none away. The SAFE on .env.local.example corrected my own answer key.
Four verdicts: DISCARD (throw it away), REWORK, REVIEW, SAFE. DISCARD is the only one that needs unanimity across samples. Low confidence goes to REVIEW, never SAFE. It fails closed.
Measured, not estimated
Eight real open-source repos, sent cold. Never seen by me or the tool before the run. Ground truth came from grep on the code, not from a model.
Django, cal.com, ROS 2 Nav2, Autoware, PX4-Autopilot, terraform-provider-aws, Docker Compose, Next.js + Supabase template. Plus five I knew: Flask, ripgrep, cobra, express, Uniswap v2.
| Repo | Files scanned | Structural pass |
|---|---|---|
| Django | 2,874 | 2.9s |
| cal.com | 6,287 | 3.2s |
| PX4-Autopilot | 7,468 | 8.3s |
Structural pass only. No API call, no cost. The reasoning layer runs after, on the candidates it found.
Frozen benchmark, unchanged through every change: recall from the agent's transcript versus recall from the diff alone. On a real Claude Code session: 14 of 22 with the transcript, 11 of 22 without.
Three times the model corrected my hand-written answer key. A migration file that shouldn't change. An interface method that gets implemented once, not 33 times. A .env file the agent added quota variables to, not Stripe keys. Each time it was right.
What it reads
14 languages.
Beyond code.
Couplings imports can't show. Hover for an example.
Who it's for
- Teams running AI coding agents The transcript layer and the assumption ledger. The primary audience.
- Robotics ROS 2 plugins declared in C++, registered in XML, selected in YAML. Nav2: "rename the NavfnPlanner plugin" came back 14 of 14 across five file types.
- DeFi and smart contracts A vault only ever sees IPriceOracle. Replace the oracle and the vault never names the new one. Uniswap v2 and a lending vault fixture, exact.
- Web monorepos Barrel files, computed imports, path aliases, shared event names, routes. cal.com, 6,000+ files.
- Infrastructure Ansible roles, Dockerfile stages, ROS_DISTRO threaded through devcontainers. Autoware.
- Go services Implicit interfaces, generated mocks. Docker Compose's 40-method interface across 51 files.
How it works
It reads the agent's transcript, not just the diff. And it tells you what it didn't look at. When the code changes later, audit re-checks every assumption the agent made and names the ones that went false.
What it doesn't do
- Recall is measured against files that mention the thing. A coupling with no textual trace (pure runtime reflection, a database trigger, an external queue configured elsewhere) is outside what these numbers measure.
- DISCARD verdicts have been checked by reading the model's reasons, not by deleting the files and running the build. That step is next, not done.
- Zero strangers have run it yet. Every number on this page is my own run.
- No hosted version. It runs on your machine with your key.
Get it
Open core, MIT license. You supply an Anthropic API key. Aition never sees your key or your code beyond your own API calls. Every command estimates cost before it spends and accepts --max-cost. Linux, macOS, and Windows, each verified by running the suite.
$ pip install -e . $ export ANTHROPIC_API_KEY=... $ aition setup --project /path/to/repo
The repo is private while the first engineers test it. Get on the list and bring a codebase you'd like to see it fail on.