ChangeBlast Run it locally →

Memory for AI coding agents

Every change complete,
before it ships.

Agents miss the parts of a change that aren't written down anywhere. ChangeBlast knows how your codebase implements its business rules and catches what a change missed, with evidence for every claim.

10files behind one "simple" refund change
3found by searching the request's words
12 msmedian answer, code stays on your machine
4 services · same rule, 7 disguises
  1. billing-service/src/refunds/policy.py:7REFUND_WINDOW_DAYS = 1430
  2. billing-service/src/refunds/policy.py:25window = timedelta(days=REFUND_WINDOW_DAYS)
  3. billing-service/openapi.yaml:9description: Refunds are available within 14 days of purchase.
  4. checkout-web/src/components/RefundEligibility.tsx:5const REFUND_WINDOW_MS = 1_209_600_000;
  5. billing-service/src/reports/refund_metrics.sql:6… s.purchased_at + INTERVAL '336 hours' THEN 1 …
  6. checkout-web/src/components/RefundEligibility.tsx:10const tooOld = Date.now() - new Date(purchasedAt).getTime() > REFUND_WINDOW_MS;
  7. notification-service/templates/refund_approved.html:8…subscriptions cancelled within two weeks of purchase.
  8. notification-service/templates/refund_denied.html:5…it was made after our 14-day refund window.
  9. billing-service/openapi.yaml:45days_remaining: { type: integer, minimum: 0, maximum: 14 }
  10. billing-service/tests/test_refund_policy.py:16is_refund_eligible(make_sub(), PURCHASED + timedelta(days=13))
grep "14" misses 3 of thesechangeblast check · 81 ms · no model

Fig. 1 · Blast map

One line changed. Four services felt it.

The engine's own test scenario: raise the refund window from 14 to 30 days. Inner ring holds files that encode the same value. Outer ring holds files the change needs for other reasons.

billing-service/src/refunds/policy.py:7
REFUND_WINDOW_DAYS = 14
REFUND_WINDOW_DAYS = 30
3/10found by searching "refund window", "14"
1/10found by changeblast check
0false alarms
81 msno model, on a laptop
Press changeblast check to send the shockwave.
flagged with evidence found by text search needed, not flagged yet no evidence, stays silent

Fig. 2 · Value normalization

One rule, seven disguises.

The engine turns every literal into one canonical value: units, SQL, timedeltas, plain English. Drag the dial and watch the same rule change shape.

14days

The quiet protocol

It speaks twice per task, only with proof.

ChangeBlast limits what it says, not what it searches. Every edit in between is re-indexed silently in about 45 ms.

Before

Where the change lives

From the request alone, it names the business rules and the code that implements them. Without hard evidence, it says nothing.

changeblast_predict  12 ms
"Increase the refund window from 14 to 30 days"

rule      window refund = 14 days
AFFECTED  billing-service/src/refunds/policy.py:7
          REFUND_WINDOW_DAYS
          evidence: concept "refund window" + value
AFFECTED  checkout-web/…/RefundEligibility.tsx:5
          REFUND_WINDOW_MS
          evidence: 1_209_600_000 ms = 14 days
After

What the change missed

From the real diff, it lists coupled files the agent left untouched, each with the line that proves it.

changeblast check  81 ms · no model
rules touched: window refund = 14 days
CB-003  reports/refund_metrics.sql:6
        INTERVAL '336 hours'
CB-004  components/RefundEligibility.tsx:5
        REFUND_WINDOW_MS = 1_209_600_000
CB-005  templates/refund_approved.html:8
        "within two weeks"
CB-007  tests/test_refund_policy.py:16
        boundary test at 13 days

Fig. 3 · New features

The new screen has no companions.

An agent adds an admin resource and the code runs. ChangeBlast compares it with its 37 peers and reports the wiring every peer has and the new one lacks.

has a policy · 37 of 38 registered in filament-shield · 36 of 38 RefundTypeResource, added by the agent
changeblast finish  2 findings · 41 ms

+ RefundTypeResource.php
  added by the agent

✗ Policies/RefundTypePolicy.php
  missing · 37 of 38 resources in this
  plugin have a policy

✗ config/filament-shield.php
  not updated · 36 of 38 resources are
  registered here

evidence: Filament 5 rule pack
          + peer conventions mined from
            this repository

The bug this prevents shows up in production, not in review.

Fig. 4 · Core sample

Four layers of memory under every check.

One SQLite file next to your code. No server, and no language model on the fast path, so a check costs nothing to repeat.

Layer 1 · indexer

Evidence graph

Function-level tree-sitter parsing of PHP, Python, TypeScript, Java, Go, Ruby and C#. Each call resolves to the class it reaches. Every business value is normalized across units, languages and wording.

68→91%PHP references resolved
Layer 2 · rule packs

Framework knowledge

Versioned knowledge of how frameworks wire code: a Laravel route to its controller, a Filament resource to its pages, policy and model, a Frappe doctype to its handlers.

3ecosystems first
Layer 3 · history

History memory

Which functions your own engineers change together, learned from your git history and from every change ChangeBlast checks afterwards.

per orgstays in your install
Layer 4 · rankers

Trained rankers, served fast

A large model trained offline teaches small models that run on a developer's laptop. No code leaves the machine.

<200 mslocal budget

Measured · October 2026

The expensive 30%.

~70 of 100 files found by a current coding agent on 20 real merged PRs from two open-source ERP systems. ~30 missed. They become regressions, review rounds and hotfixes.
MeasureResultStatus
Answer time before coding (predict, median)12 ms● met
Re-index after each edit (95th percentile)139 ms● met
PHP references linked to their definition68 → 91%● met
Real PR files ranked in the top tier, 20 PRs28 → 48%▲ improving
Agent with ChangeBlast vs agent alone, files foundparity○ not yet a win

The last row is the one that matters. Closing it is what the next phase is for: checking the agent's actual diff, framework rule packs, and trained models.

1Check the agent's diff 2Record whichfindings were right 3Retrain the ranker 4Sharpernext check your org's memory

Why it compounds

Sharper with every change it sees.

  • Verified outcomes

    Every check records which findings were right and which omissions mattered. That data doesn't exist publicly, and it trains the ranker for every customer.

  • Per-organization memory

    Your rules, decisions and change patterns accumulate inside your own installation and stay valuable only there.

  • Framework depth

    Version-aware rule packs take months per ecosystem to build well.

Next six months

From parity to a win.

01Diff-based completion check

Plus the missing-companions check for new features.

02Laravel, Filament, Livewire rule packs

Then trained rankers: 0.6B–3B teachers, 23M–110M serving models.

03Head-to-head benchmark

Against a plain agent and AI review tools, on repositories the models never saw. Hundreds of paired tasks, not twenty.

04Five design partners

Running ChangeBlast in their real development process.

Built first for

Laravel teams with years of business rules.

Laravel is where the engine is strongest and where one feature spreads across the most files. Python, TypeScript and Java follow as rule packs and models are added.

5–50developers on the team
Yearsof history in the codebase
MCPfor the Claude Code or Cursor you already use

Run it locally

Give your agent a memory.

The engine runs today as a local CLI and an MCP server. A free local tool, an individual plan with full history memory, and a team plan with shared memory and a pull request check. Pricing is being tested with design partners.

# index once, ask before, check after
pip install -e ".[mcp]"
changeblast index ../billing-service ../checkout-web
changeblast context "Increase the refund window from 14 to 30 days"
changeblast check

# give it to Claude Code or Cursor
changeblast-mcp --db .changeblast/graph.db