AI Frontend Governance for production codebases

UI change control for AI-edited codebases.

Stable 3.9.4 prepares bounded, route-backed context and reports local verification evidence. Broader UI-surface authority and non-route preparation remain an unreleased 3.10 candidate.

v3.9.4 current stable · ★ 6 on GitHub · 8 MCP tools · 3.10 proof program active · MIT
npx @decantr/cli scan
Or press / to focus the command

Unreleased 3.10 candidate readiness transition

Unresolved topology Limited
Blocking axes resolved Ready evidence-dependent

Unreleased 3.10 candidate: readiness is an axis-by-axis evidence state, not a fit score. A strong framework or route count cannot hide unresolved topology, styling, taskability, or runtime evidence. This transition is illustrative, not shipped 3.9.4 output, a benchmark, a qualification result, or a Decantr 3.10 proof result. Project Health reference →

The 3.10 candidate is being tested across

AngularReactNext.jsRemixVue NuxtSvelteSvelteKitSolidStart AstroViteTailwindCSS Modules MUIshadcn/ui

What scan actually does

~/your-app — illustrative read-only scan stable v3.9.4
$npx @decantr/cli scan
scanning project structure...
Detected React + TypeScript + Vite in the selected app
Observed source-declared routes, taskable route candidates, components, and styling evidence
checking route authority, graph readiness, excluded source, and limitations...
!Route authority: partial · review representative implementation sources before adoption
Tests, fixtures, and generated outputs remain excluded from production route authority
Scan complete · zero files modified · limitations reported

The drift problem

The first AI edit looks fine. The tenth one drifts.

Coding agents are fast enough to outrun your product standards. Decantr gives them the context and evidence loop they were missing.

01 / Duplication

Components get rebuilt locally

The agent reimplements a button, card, or form instead of importing the primitive your app already owns.

02 / Tokens

Raw values sneak in

Inline colors, arbitrary Tailwind values, and one-off spacing slip past review because each prompt only sees part of the app.

03 / Authority

The wrong surface gets treated as truth

A test fixture, generated route tree, dependency, or sibling app can look authoritative unless evidence scope is explicit.

Stable route loop · 3.10 expansion unreleased

Observe. Prepare. Verify. Report.

These commands exist in 3.9.4 for attached route-backed work. Decantr 3.10 proposes broader target discovery and must prove its outcome claim before that expansion is presented as shipped value.

Observe

3.9.4 reads the selected app and reports route, component, styling, graph, and limitation evidence without writing files.

decantr scan
prints evidence + limitations with zero writes

Prepare

3.9.4 resolves one attached, graph-backed route. Component, layout, overlay, story, package, and file selectors are unreleased 3.10 candidate behavior.

decantr task /feed
returns bounded TaskCapsuleV1 context or explicit blocking guidance

Verify

Emits findings with stable codes, repair IDs, and an evidence bundle your agent reads automatically.

decantr verify
writes .decantr/evidence/latest.json

Report

Emits typed, reproducible evidence and keeps missing or incompatible proof visible instead of converting it into a pass.

decantr ci --json
reports missing proof as not_proven
Plugs into your agent natively. Cursor users can run decantr connect cursor; other MCP-compatible agents can use the stable eight-tool server. Decantr prepares and checks evidence; the chosen agent or developer still applies the source change explicitly.

Illustrative stable route case · Decantr 3.9.4

What your AI actually receives.

Decantr emits a finding. Your agent reads bounded task context. The change returns to an explicit verification gate: concrete codes, IDs, anchors, and authority.

1 · Finding emitted
// .decantr/evidence/latest.json
{
  "code": "COMP001",
  "route": "/feed",
  "file": "app/feed/SaveBtn.tsx",
  "issue": "Duplicate primitive",
  "expected": "@/ui/Button",
  "repair_id": "r_4a2"
}
2 · Agent reads context
# MCP-fetched repair prompt
route: /feed
duplicate: app/feed/SaveBtn.tsx
already-owned: @/ui/Button

action:
  replace local button
  with imported primitive
  preserve onClick + label
  no other changes
3 · Diff lands clean
// app/feed/SaveBtn.tsx
- import { motion } from "framer"
- const SaveBtn = (p) => (
-  <motion.button {...p} /> )
+ import { Button } from "@/ui/Button"
+ export const SaveBtn = (p) =>
+   <Button {...p} />
Illustrative repair · verify the actual diff and finding state in your project

A complementary layer

Project authority is not one tool's job.

Decantr is intended to connect repository evidence for an agent. Linters, stories, and tests remain the authorities for the checks they actually execute.

Decantr Linters Storybook Tests
Scope UI authority + evidence Source rules Component states Executable behavior
Separates UI authority axes 3.10 candidate Not its role Partial Partial
Change-scoped agent context 3.9 route-backed Rule-local Story-local Test-local
Primary evidence Repository + typed reports Deterministic diagnostics Stories + visual states Assertions + results
Known limitation Static evidence can be incomplete Rule scope only Authored states only Covered behavior only
Open source · MIT Yes Yes Yes Yes

Built for local control

Take the speed. Keep the authority.

Local-first

Runs from your terminal, your CI, or any MCP-compatible agent.

Your code stays yours

Findings, baselines, and screenshots live on your machine by default.

Attach deliberately

Brownfield adoption is reviewable and contract-only by default. Unsupported or unresolved authority should stop the workflow.

Host styling stays authoritative

Decantr records styling evidence and limitations. A dependency alone does not prove the active styling system.

Agent-ready context · stable route example

Give the AI a map before it edits.

Decantr 3.9.4 can build a bounded TaskCapsuleV1 for a resolved route. The 3.10 candidate extends preparation to independent UI surfaces and must fail closed when the target or authority is ambiguous.

decantr task /feed "add save action" 3.9
ROUTE      /feed
OWNS       SavedRecipes, FeedItem, ActionsBar
PRIMITIVES @/ui/Button, @/ui/Card, @/ui/Dialog
TOKENS     text-primary, bg-card, gap-sm
RULES      no inline styles · import primitives only · ARIA labels required
BEHAVIOR   confirmation-dialog · accessible name · destructive copy
CAPSULE    task-capsule.v1 · bounded · implementation source rank 1
EVIDENCE   3 findings open · 8 stable MCP tool IDs

Built in the open

Specific. Inspectable. Local.

The contracts and schemas are public, telemetry has no hosted default, and incomplete change evidence remains visible as not proven instead of silently passing.

Packages shipping 9 public packages npm
Stable MCP tool IDs 8 for any MCP agent
License MIT permissive open-source license
Source TypeScript GitHub

Current capability and license: the published CLI, verifier, MCP server, and contract libraries are available under the MIT license. Their local workflows do not require an account or hosted control plane; the Fly API serves optional corpus and reference data.

Momentum

Current release and product boundary.

Current stable · v3.9.4

Governed Change Proof

AdoptionTruthV1, route-backed TaskCapsuleV1 context, and GovernanceDeltaV1 are shipped. The sole-maintainer qualification waiver means 3.9.4 is not a quantitative adoption-proof claim.

3.10 active program · unreleased

UI Change Control Proof

A frozen 40-task, two-model A/B protocol will test whether Decantr materially improves outcomes. No result or value claim exists before that gate passes.

3.10 candidate · unreleased

Surfaces, not route supremacy

The candidate treats routes, layouts, components, stories, overlays, flows, packages, and runtime states as separate evidence, with ready, limited, blocked, or unsupported readiness.

Product boundary

Compatibility stays bounded

@decantr/content owns corpus references; registry names and Decantr CSS are compatibility surfaces, Studio remains read-only, and MCP keeps exactly eight tool identities.

Already scanned?

Review the scan. Attach deliberately.

Adopt writes reviewable, repo-owned project law beneath Brownfield production source. In 3.9.4, check selected-app, route, styling, graph, and reported limitations before accepting it.

npx @decantr/cli adopt --yes