Keep AI-generatedUI on-system.
AI agents write most of the UI now, and drift off the system. Arrow71 is the fixed point they read over MCP and can’t drift from, and the CI check that catches the drift anyway.
Served to the agent
Your intents, scales, and component grammar, compiled to compact context over MCP, before the agent generates.
Validated in CI
The same engine runs as a post-hoc gate. A GitHub Action annotates the PR and fails on drift, even if the agent ignored the context.
No drift
Raw hex, off-scale spacing, a stray <button>, caught with the line and the fix. Built on your DTCG tokens.
Deterministicchecks,conservativebydefault.
no-raw-colorhex literals map to a color intenterrorspacing-steppadding / margin / gap / inset on the scaleerrortype-scalefont-size on the type scaleerrorradius-stepborder-radius is a named radiuserrorno-raw-componentuse the component, not raw HTMLerroraction-onceone primary action per viewadvisoryerror-intenterror color only on destructive UIadvisoryToken references like var(--space-8) are recognized as on-system and never flagged. False positives are treated as P0.
Runitoneverypullrequest.
The Action annotates the changed lines and fails on error-level drift. Adopting on a messy repo? arrow baseline once, and only new drift is reported — no wall of red on day one.
# .github/workflows/arrow.yml
name: Arrow71
on: pull_request
jobs:
arrow:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: 71static/arrow/action@v1
with: { fail-on: error }Freeissingle-playerandlocal.Paidismultiplayerandhosted.
The language, engine, CLI, MCP server, GitHub Action, and editor extension are Apache-2.0 and free, for good. A hosted layer for teams (shared registries, drift analytics, governance) is coming.