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.
- billing-service/src/refunds/policy.py:7
REFUND_WINDOW_DAYS =1430 - billing-service/src/refunds/policy.py:25
window = timedelta(days=REFUND_WINDOW_DAYS) - billing-service/openapi.yaml:9
description: Refunds are available within 14 days of purchase. - checkout-web/src/components/RefundEligibility.tsx:5
const REFUND_WINDOW_MS = 1_209_600_000; - billing-service/src/reports/refund_metrics.sql:6
… s.purchased_at + INTERVAL '336 hours' THEN 1 … - checkout-web/src/components/RefundEligibility.tsx:10
const tooOld = Date.now() - new Date(purchasedAt).getTime() > REFUND_WINDOW_MS; - notification-service/templates/refund_approved.html:8
…subscriptions cancelled within two weeks of purchase. - notification-service/templates/refund_denied.html:5
…it was made after our 14-day refund window. - billing-service/openapi.yaml:45
days_remaining: { type: integer, minimum: 0, maximum: 14 } - billing-service/tests/test_refund_policy.py:16
is_refund_eligible(make_sub(), PURCHASED + timedelta(days=13))
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.
changeblast checkFig. 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.
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.
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
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.
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.
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.
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.
History memory
Which functions your own engineers change together, learned from your git history and from every change ChangeBlast checks afterwards.
Trained rankers, served fast
A large model trained offline teaches small models that run on a developer's laptop. No code leaves the machine.
Measured · October 2026
The expensive 30%.
| Measure | Result | Status |
|---|---|---|
| Answer time before coding (predict, median) | 12 ms | ● met |
| Re-index after each edit (95th percentile) | 139 ms | ● met |
| PHP references linked to their definition | 68 → 91% | ● met |
| Real PR files ranked in the top tier, 20 PRs | 28 → 48% | ▲ improving |
| Agent with ChangeBlast vs agent alone, files found | parity | ○ 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.
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.
Plus the missing-companions check for new features.
Then trained rankers: 0.6B–3B teachers, 23M–110M serving models.
Against a plain agent and AI review tools, on repositories the models never saw. Hundreds of paired tasks, not twenty.
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.
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