Agents write code. arsdlc runs the process.
EARS specs, six evidence gates, and an evidence log your agent cannot fake. Local-first, any harness. Your laptop is the sandbox.
npx arsdlc initSkills, instructions, commands and subagents, detected for your harness. Skills only: npx skills add AnshRoshan/arsdlc. Claude Code: /plugin marketplace add AnshRoshan/arsdlc. The CLI ships on npm as arsdlc; --version tracks the tags.
state stayed BUILD. A signature you did not earn is not a signature, so the pipeline moved backwards on purpose and the next arsdlc next says who is blocked.
Nothing here is a status message. Each row is a file with a hash, and the gate reads the file.
- discover
- spec
- plan
- tasks
- build
- verify
- accept
- release
- operate
VERIFY is waiting on a recorded run · ACCEPT is held by a human signature
“All tests pass” is a sentence. A run is a file.
The agent wrote the sentence it predicted you wanted. Nothing ran. arsdlc only counts a run it recorded itself: command, exit code, output hash, timestamp, appended to an evidence log in your repo and reviewable in the PR.
And when a requirement quietly drifts to match the code at 2 a.m., the edit becomes a delta, the stale approvals go invalid, and the state moves backwards on purpose.
# the author tried to approve their own plan $ arsdlc evidence payment-retries --label full -- npm test … 41 passed (41), exit 0, 8.2s evidence/2026-10-04T09-12-03-full.json recorded sha256:e3f1…9b7c · label: full $ arsdlc approve G1 payment-retries --by "Ansh" ✗ segregation of duties: "Ansh" is the author $ arsdlc next payment-retries --json state: BUILD · owner: human · blocking: G1 approval
Six gates. Each one is a file check.
The agent runs arsdlc next, gets the state and the one skill to load, does the work, and runs it again. Humans are asked for exactly two things: signatures and approvals. A lane can skip a gate, and a skip prints as skipped, never as a pass.
- plan.md exists and is not a stub
- approval bound to the plan's hash
- approver ≠ author, agents refused
- spec passes EARS validation
- every requirement traced to a task
- every value the build produces names its source
- secrets scan clean across tracked files
- full suite recorded, or the declared test policy printed
- latest run exit code 0
- every scenario cites a recorded evidence file
- review ran on a different model than wrote the code
- signed by a human who is not the author
- rollback written as steps, not intent
- approval invalidated the moment rollout.md changes
- budgets named with numbers from a baseline
- kill switch that exists in the deployed config
- runbook maps symptoms to first actions
Eight invariants, written into every repo the CLI touches.
They land in docs/constitution.md and in your agent's instructions file. You add your own below the line; these eight are enforced so nobody has to remember them.
Code is generated output. Intent changes go through a delta, never a quiet edit.
No evidence, no progress. The CLI refuses to move the state forward.
Segregation of duties is enforced by the tool, and agents cannot approve at all.
Approved-by lines are human-signed. Underscores mean unsigned.
Command, exit code, output hash. Claims without artifacts do not count.
arsdlc next derives the truth from files. Same files, same answer, any machine.
Eight pattern families, placeholder-aware, blocks G3.
Infra down means IMPLEMENTED-NOT-VERIFIED, not PASS.
A referee only sees what gets reported.
So in Claude Code the guard mod runs inside the agent's process and holds the four moves that used to be invisible. It fails open when it cannot decide, and nothing else in the kit depends on it: the other six harnesses keep the same contract without the interception.
| a bare npm test while a feature is open | the run records nothing, so the claim is prose invariant 5 |
| any arsdlc approve the agent tries to run | approvals are human actions, held before the call invariants 3 and 4 |
| an edit to a signed spec.md | intent changes go through a delta, not a quiet rewrite invariant 1 |
| a write to evidence/ or approvals.json | those are the files the gates trust; a hand-made one is a forged one invariant 2 |
| an answer claiming the suite passed | no recorded run, or a run older than the code, and the log says so in front of you invariant 5 |
20 skills. One entry point per scenario.
Plain Markdown in the open Agent Skills format, read identically by every harness above.Browse the full index.
cross-cutting
| arsdlc-delta | Any change of intent after the spec is signed - new requirement, changed behaviour, removed scope, or a bug that reveals the spec was wrong. |
| arsdlc-flow | The arsdlc router. |
| arsdlc-grill | Relentless structured interview that turns a vague plan, idea or spec into shared understanding before anything is built. |
| arsdlc-handoff | Compact the session into a handoff document so a fresh session, another agent, or a human continues without loss. |
discover
| arsdlc-brainstorm | Front door for any new request, before creative or engineering work. |
| arsdlc-brownfield | Safe entry into an existing codebase. |
| arsdlc-discover | Double-Diamond discovery intake for a new idea in the standard or regulated lane. |
specify
| arsdlc-spec | Write or repair an EARS specification (spec.md) that passes `npx arsdlc check spec`. |
plan
| arsdlc-plan | Produce plan.md - architecture, constitution check, explicit decisions with alternatives and ladder rung, data model, interface contracts, research that resolves every unknown, … |
tasks
| arsdlc-tasks | Generate or repair tasks.md from the plan's work breakdown so every task is a small tracer bullet, traceable to a requirement, checkable, ordered by blocking edges, then run the… |
build
| arsdlc-craft | Bridge to code-craft, the line-level clean-code discipline. |
| arsdlc-debug | Evidence-backed debugging loop for bugs, flaky tests, regressions and "works on my machine". |
| arsdlc-implement | Implement one task at a time, test-first at the agreed seam, with the ponytail ladder, recorded evidence and zero scope creep. |
verify
| arsdlc-quality | Bridge to code-quality-tools, the runner guide for lint, autofix, dead-code, complexity and security CLIs on JS/TS and Python (fallow, eslint, biome, knip, tsc, ruff, mypy, vult… |
| arsdlc-verify | Run merge-safety gate G3 with recorded full-suite evidence, secrets scan and kind-specific checks, then final security verification for web/API/auth/data/infra changes. |
accept
| arsdlc-review | Independent reviewer for the acceptance gate G4. |
release
| arsdlc-release | Prepare and gate a release - rollout.md with strategy and rollback (G5, human approved), then guardrails.yaml and runbook.md for runtime budgets, kill switch and on-call actions… |
| arsdlc-retro | Close the loop on a finished feature, incident or sprint so the process gets better instead of just longer. |
Short answers.
Is this a SaaS? Do I need an account?
No. It is a folder of SKILL.md files and a zero-dependency Node CLI. Everything runs on your machine against your own repo. There is no server, no telemetry and nothing to sign up for.
Which model or subscription do I need?
Whatever you already have. The skills are plain Markdown in the open Agent Skills format, so Claude Code, Codex CLI, Cursor, Antigravity CLI, Copilot, Devin Desktop, OpenCode and local open-weight models all read them the same way.
What is the difference between the skills and the CLI?
Skills tell the agent how to behave at each stage. The CLI is the referee: it validates EARS specs, derives the state, runs the six gates, records evidence and holds the approval chain. Skills without the CLI still work; the CLI is what makes done mean something.
How is this different from Spec Kit or BMAD?
Those give you excellent templates and advice. arsdlc adds enforcement: approvals bound to artifact hashes that go stale when you edit, an evidence log that cannot be faked by prose, and segregation of duties the agent cannot bypass.
Can I use it on an existing codebase?
Yes, that is what arsdlc-brownfield is for: baseline, characterization tests and named seams before any delta-only change is allowed.
What does this cost my agent in context?
A skill loads in full on the branch that uses it, so the corpus is budgeted and checked: per-file byte ceilings, per-path budgets for what a real run actually loads, and descriptions kept short because they load into every session. Run the checker to see the numbers.
Is it free?
MIT licensed. Fork it, vendor it, ship it inside your company. If it is useful, star the repo and file issues.
Install it where you are working right now.
Then tell your agent use arsdlc-brainstorm, I want to build …. It picks the lane, asks only what changes the outcome, and hands you a spec you can sign.
npx skills add AnshRoshan/arsdlc