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 init

Skills, 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.

docs/features/payment-retries/evidence/ · 3 runs
npm test41 passed · 8.2s · sha256 e3f1…9b7c0
arsdlc scan0 findings across 214 tracked files0
arsdlc approve G1 --by Anshrefused: approver is the author1

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.

  1. discover
  2. spec
  3. plan
  4. tasks
  5. build
  6. verify
  7. accept
  8. release
  9. 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.

G1
Plan approvalhuman, not the author
  • plan.md exists and is not a stub
  • approval bound to the plan's hash
  • approver ≠ author, agents refused
G2
Artifact consistencythe CLI, from files
  • spec passes EARS validation
  • every requirement traced to a task
  • every value the build produces names its source
G3
Merge safetythe CLI, from a run it spawned
  • secrets scan clean across tracked files
  • full suite recorded, or the declared test policy printed
  • latest run exit code 0
G4
Acceptance proofreviewer plus a human signature
  • 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
G5
Release approvalhuman, on the rollout hash
  • rollback written as steps, not intent
  • approval invalidated the moment rollout.md changes
G6
Runtime guardrailsthe CLI, from config
  • 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.

01
The spec is the source of truth

Code is generated output. Intent changes go through a delta, never a quiet edit.

02
Gates are transitions, not suggestions

No evidence, no progress. The CLI refuses to move the state forward.

03
Approver is never the author

Segregation of duties is enforced by the tool, and agents cannot approve at all.

04
Humans own the acceptance bar

Approved-by lines are human-signed. Underscores mean unsigned.

05
Done means a recorded run

Command, exit code, output hash. Claims without artifacts do not count.

06
Disk is state, chat is not

arsdlc next derives the truth from files. Same files, same answer, any machine.

07
Secrets never land in files

Eight pattern families, placeholder-aware, blocks G3.

08
Fail loud, never fake green

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 openthe run records nothing, so the claim is prose
invariant 5
any arsdlc approve the agent tries to runapprovals are human actions, held before the call
invariants 3 and 4
an edit to a signed spec.mdintent changes go through a delta, not a quiet rewrite
invariant 1
a write to evidence/ or approvals.jsonthose are the files the gates trust; a hand-made one is a forged one
invariant 2
an answer claiming the suite passedno 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-deltaAny change of intent after the spec is signed - new requirement, changed behaviour, removed scope, or a bug that reveals the spec was wrong.
arsdlc-flowThe arsdlc router.
arsdlc-grillRelentless structured interview that turns a vague plan, idea or spec into shared understanding before anything is built.
arsdlc-handoffCompact the session into a handoff document so a fresh session, another agent, or a human continues without loss.

discover

arsdlc-brainstormFront door for any new request, before creative or engineering work.
arsdlc-brownfieldSafe entry into an existing codebase.
arsdlc-discoverDouble-Diamond discovery intake for a new idea in the standard or regulated lane.

specify

arsdlc-specWrite or repair an EARS specification (spec.md) that passes `npx arsdlc check spec`.

plan

arsdlc-planProduce plan.md - architecture, constitution check, explicit decisions with alternatives and ladder rung, data model, interface contracts, research that resolves every unknown, …

tasks

arsdlc-tasksGenerate 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-craftBridge to code-craft, the line-level clean-code discipline.
arsdlc-debugEvidence-backed debugging loop for bugs, flaky tests, regressions and "works on my machine".
arsdlc-implementImplement one task at a time, test-first at the agreed seam, with the ponytail ladder, recorded evidence and zero scope creep.

verify

arsdlc-qualityBridge 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-verifyRun 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-reviewIndependent reviewer for the acceptance gate G4.

release

arsdlc-releasePrepare 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-retroClose 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