FINOS CALM v1 · MCP-NATIVE · BYOC

Architecture governance for the AI-agent era
Code-gen-time + PR-time. Same engine.

ArchRails is the only governance product that gates AI agents before they write code — then enforces the same rules at PR-time. Agentic-friendly auth, federated cross-repo enforcement on the FINOS CALM v1 standard, audit-grade evidence, BYOC deployment. Built for regulated institutions.

Built on FINOS CALM v1 OSFF London 2026 speaker Patent pending · Filed March 2026 Works with Claude Code · Cursor · Windsurf · Copilot · autonomous agents Deterministic verdicts — no model decides whether your change ships
2 surfaces
Code-gen time + PR time
FINOS CALM
Open architecture standard
MCP
Open IDE protocol — works with any agent
Deterministic
Same change, same verdict — every time

The only product that gates AI agents at code-gen time

Every other architecture / governance / lint tool waits for PR-time. By then your agent has already written the wrong code. ArchRails runs inside the agent's MCP session — your controls fire before the diff exists. Then the same engine runs at PR-time as backstop.

Agentic-friendly auth

API keys for AI agents, CI pipelines, and IDE plugins. A human signs in once at the dashboard to issue a key; agents then run headless — no interactive browser sign-in mid-coding. Keys expire on a fixed schedule and are re-issued from the dashboard, so a forgotten key stops working rather than living forever.

Architecture is read-only to agents

Agents can't edit your CALM files to make non-compliant code legal. Architecture changes go through your normal human-reviewed PR process. The gate can't be rewritten by the thing it's gating.

Same engine at PR-time

If an agent is bypassed (raw git push, manual edit, a different agent), the merge gate runs the identical Python functions and still catches the violation. Two surfaces, one source of truth.

The deterministic layer

The same change always gets the same answer

Ask ArchRails the same question twice and you get the same verdict twice. No model sits in the decision path, so there is nothing to re-roll and no answer that drifts between Tuesday and Thursday. That is what makes a verdict something you can put in front of an auditor rather than something you have to defend.

And it is judged against an architecture that is current. The graph moves with your merges, so what gets enforced today reflects what shipped yesterday — not a diagram someone exported last quarter and forgot.

Verdict
Deterministic — no model in the decision path
Architecture
Current as of your last governed merge
Evidence
Signed — verify it offline, without trusting us
Governed agents

Your agents work under the same rules your engineers do

Most tooling reviews what an agent already wrote. By then the change exists, the branch is open, and someone is arguing about it in a comment thread. ArchRails applies your architecture at the point the agent is deciding what to do — so a change that would violate it doesn't get written, and the agent works out another way to solve the problem instead.

Crucially, the rules do not soften because the author was a machine. An agent gets the same verdict a human would get for the same change, and every refusal is recorded. When your risk function asks what your agents have been prevented from doing, that is a question with an answer — which is not the same as being able to say you allow agents but supervise them carefully.

When
Before the change is written, not after review
Standard applied
Identical for agents and engineers
Refusals
On the record, and answerable

Two surfaces. Same brain. One product.

Architecture governance has lived at PR review forever. ArchRails keeps it there — and ALSO pushes the same rule engine into your IDE so agents catch violations before any code is written. Devs ship faster. Regulators still get the audit trail.

Code-gen time

Inline in your agentic IDE

Architecture policy applied at the agent layer — before any code is written. Implemented as an MCP server the agent connects to over a stable URL. When the agent attempts a change that violates your declared CALM architecture, ArchRails returns a deterministic deny with the relevant context, and the agent proposes an alternative that respects the architecture.

  • Same rule engine as PR-time — not a lighter approximation of it
  • Works with any MCP-speaking agent — Claude Code, Cursor, Windsurf, autonomous agents in CI
  • Per-key audit log: every refusal records request_id, tenant, source IP, and the rule that fired
PR time

The authoritative merge gate

Every pull request is judged against your declared architecture, as it stands at that moment. Verdicts post as review comments, and anything the rules flag blocks the merge — there is no severity dial to turn down. This is the auditable surface — the answer to "what enforces architectural compliance here?".

  • Catches anything the IDE-time check missed (or anyone bypassed)
  • Every verdict cites the exact CALM node / relationship / control
  • Drift detection: code-vs-architecture comparison on demand
Identical Python rule functions run in both surfaces. Drift between them is regression-tested in CI.
PR verdicts post in seconds, not minutes — built to keep merge velocity intact.

Cursor attempts a forbidden DB call during a 3 AM hotfix. ArchRails MCP blocks it inline; the agent rewrites against the CALM-permitted intermediary. Production stays in PCI scope.

Generic AI review bots
Trained on open-source patterns. Suggests "best practices." Comments are confident but untraceable — no source, no context, no connection to your team's actual decisions.
ArchRails
Enforces your declared CALM architecture from Git. Every comment links back to the exact node, relationship, or interface it was derived from. Violations are provable — not guesses.
Architecture catalogs (Backstage, Cortex, Port, LeanIX, Ardoq)
Catalogs describe what shipped. They surface architecture after the fact and rely on humans to keep them in sync. Useful for inventory, not for stopping a violation from merging.
ArchRails
Enforces architecture at PR time and at code-gen time — the catalog is the merge gate, not a report. Drift can't accumulate because non-conforming changes never land.
Built on CALM — the open standard

ArchRails enforces architecture defined in FINOS CALM (Common Architecture Language Model) — an open standard maintained by the Fintech Open Source Foundation, not a proprietary YAML we invented.

Your architecture isn't locked in our format. The CALM JSON files describing your services, dependencies, and controls live in your repo, in your version control. If you ever leave ArchRails, your CALM files come with you and stay readable by every other CALM tool. New to CALM? Start with the FINOS tutorials.

On top of CALM, ArchRails layers per-tenant rules and bindings — deterministic structural verification at PR-time and at code-gen time, plus a contextual LLM explanation layer in the PR comment. Machine-verifiable constraint checking and human-readable guidance in the same review.

Architecture reviews you can trust

ArchRails doesn't invent standards. It enforces what your team defines in a CALM document, and cites every node it used.

No undocumented rules enforced

If a node, relationship, or interface constraint isn't in your calm.json, ArchRails won't enforce it. Full stop.

Every comment is CALM-traceable

Feedback cites the exact CALM node ID, relationship ID, or interface that triggered it — so teams align faster and argue less.

PR-scoped bounded context

Reviews resolve only the CALM nodes touched by the PR diff. Less noise, fewer false positives, no cross-service contamination.

Live Demo — Fully Interactive

Every PR shows exactly what it touched — and what it broke

This is the architecture graph ArchRails renders for every pull request. Drag nodes. Hover for details. Click any node to see how violations trace back to your CALM definition.

Architecture Graph · PR #847 — feature/order-refactor
2 violations detected · drag nodes · scroll to zoom
Service
Database
Actor
System
Violation
External
⚡ 2 violations
✓ 1 passed
🏗️ CALM Architecture Review
Relationship violation
OrderService calls PaymentService directly — must route via service-api-gateway
rel-connects-order-payment
Interface breach
OrderDatabase accessed via HTTP — node declares JDBC:5432 only
db-orders · iface-orders-sql
Node boundary respected
InventoryService changes scoped to service-inventory — no leakage
CALM sources: calm.json · rel-connects-order-payment calm.json · db-orders
Click any node above to inspect it Validate your own architecture
Audit-evidence posture

Built for regulated change-management

Evidence bundle
Per governed merge
Every governed merge produces a cryptographically signed manifest recording the architecture as it stood at that merge, and who promoted it. Generated automatically — nobody has to remember to produce it, which is the only kind of evidence that survives an audit.
Chain of custody
Tamper-evident
Each manifest chains to the one before it, so the architecture's history is tamper-evident rather than merely recorded. Signatures verify offline — your auditor can check them without taking our word for anything, and without calling our API at all.
FINOS CALM v1
Open standard
Architecture lives in your repo as portable CALM JSON. No proprietary YAML. Maintained by FINOS (Fintech Open Source Foundation). Your architecture isn't locked in our format.
CALM Visualizer — Free

Validate and visualize your CALM architecture before it ships

Paste your calm.json to instantly check for interface violations, missing controls, and structural issues — then render your architecture graph interactively. No account required.

  • Validates against FINOS CALM v1 schema
  • Interactive architecture graph with node detail panel
  • Flags relationship and interface violations inline
  • Free to use — no login, no limits
Open CALM Visualizer
Architecture Graph
● 6 nodes · 9 relationships
👤 Customer
⚡ API Gateway
📦 Order Service
⚠ Inv. Service
💳 Payment
🗄 Order DB
🗄 Inventory DB
■ Service ■ Database ■ Actor ■ Violation

Common questions

CALM (Common Architecture Language Model) is a FINOS open standard for describing architecture as machine-readable JSON. We use it because it solves a problem that has quietly worsened for 15 years: ask five engineers to draw your system's architecture and you get five different pictures — a point Google's Adam Bender called out at SE@TP 2026. CALM ends the divergence: one declared graph that every human, every coding agent, and every CI step reads off, with deterministic verification on top.
No. Run archrails arch generate in your repo and it reads your code and writes a first-draft architecture document, plus the configuration ArchRails needs to enforce it. It uses a coding agent you already have installed — Claude Code, Codex, Gemini CLI or Cursor Agent — so ArchRails calls no model service of its own and no AI API key is involved. Budget 20–40 minutes on a large repo; it is a one-time cost. You review the draft like any other PR, merge it, and enforcement starts on the next one. If you'd rather author by hand, the free CALM Visualizer is available with no account required. Declaring the architecture once is the fundamental that lets AI amplification go in a useful direction; without it, more agents just means more entropy.
No — there is no copy of your repository anywhere in ArchRails, and nothing is indexed, mirrored or retained after the fact. Review runs against the pull request's diff, which is held only for the life of that PR and deleted when it closes or merges. Nothing outside the diff is ever read. The workflow uses your repo's existing CI token, so ArchRails never holds repo-wide credentials of its own.
Copilot and generic AI review bots score code against general best practices learned from open-source training data. They have no idea what your system is or isn't supposed to do. ArchRails enforces your declared architecture — the specific nodes, allowed connections, controls, and interface contracts in your calm.json. Every comment is traceable to a node ID you authored. It's deterministic, not probabilistic, and the same gate runs at PR time and inside the coding agent — so the agent can't reach an API your architecture forbids. As Adam Bender put it at SE@TP 2026: “all of your APIs just became public” the moment you let agents loose. ArchRails is the contract that says which ones they're allowed to call.
Agents write whatever you let them write. The default behaviour is to find any API they can call and call it. ArchRails sits in front of the agent. Before a code change lands, the agent attests the proposed change against your architecture and gets back a deterministic verdict. Violations come back with the node ID, the rule that was broken, and sanctioned alternatives — the agent doesn't get to negotiate, and it doesn't waste tokens generating a path that would never have merged.
Yes. A single calm.json at the repo root describes your full system graph, and ArchRails only evaluates the slice of the graph a given PR actually touches — a payment-service change won't trigger inventory-service checks. This is deliberate: dependency graphs scale quadratically with codebase size, so at the 10× AI-driven velocity everyone is preparing for, evaluating everything on every PR is how you burn your test budget into the ground.
Because adding probabilistic review on top of a system you can't reason about doesn't get you intellectual control — it gets you a louder bottleneck. As Bender put it at SE@TP 2026, AI is an amplifier: magnitude, not direction. The deterministic CALM check is the fundamental layer: same engine, same verdict, every PR and every agent call. The LLM sits on top — translating the verdict into a readable PR comment, suggesting which sanctioned node to use instead. We use AI to explain a verdict; we never use it to be the verdict.
Two paths. Request a demo to walk through architecture governance with the founding team and scope the right engagement shape against your repo footprint. Request evaluation access for self-provisioned hands-on time with the product — corporate email required, full access to shipped features. Talk to the team when you're ready to take the engagement further.

Built by an engineer who's lived design drift

Marc Daniel Registre

Marc Daniel Registre

Founder & Engineer

ArchRails started as a practical system: keep architecture consistent as teams scale — without relying on tribal knowledge. By grounding reviews in a CALM architecture graph rather than generic training data, every violation is provable and every comment is traceable.

Make architecture review automatic — and provable

Start with one repo and one CALM document. ArchRails will enforce it on every pull request.

Request a demo Try CALM Visualizer