Skip to content

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 .
Get early access MIT, bring your own key. Private while the first engineers test it.

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.

195 of 195files found across 15 questions
405tests, zero failing
$0.30median cost per question, range $0.04 to $1.38
92gaps found and fixed in ten days
7bugs found by the first real agent session, in commands eight repos never ran
3times the model corrected my hand-written answer key
Structural pass timing on large repos
RepoFiles scannedStructural pass
Django2,8742.9s
cal.com6,2873.2s
PX4-Autopilot7,4688.3s

Structural pass only. No API call, no cost. The reasoning layer runs after, on the candidates it found.

Transcript-aware100%
Diff-only27%

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.

The full write-up, with every run.

What it reads

14 languages.

PythonJavaScriptTypeScriptGoRustJavaKotlinCC++C#SwiftRubyPHPSolidity

Beyond code.

package.jsonCargo.tomlgo.modpyproject.tomlrequirements.txtpackage.xmlCMakeLists.txtKconfigboard configsDockerfileshellMakefileTerraformKubernetesSQLPrisma.protoGraphQLAvroThrift.envplugin XMLbehavior-tree XMLuORB .msgROS .msgJinjaHandlebarsGo templatesHCLJSONYAML

Couplings imports can't show. Hover for an example.

event namesURL routesGo interfacesROS topicsRust macrosYAML to C++ pluginsenv variablespath referencesSolidity interfacesinheritance

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

Structural layer free, seconds, no API call Reads the whole repo once and finds the neighborhood: imports, routes, event names, config strings, interface implementations, path references.
Reasoning layer cents to a dollar, estimated first Decides what actually breaks, on only the files the first layer found. A verdict, a reason, and a confidence per file.

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.