Writes to non-test paths are hook-refused until the test has been observed failing. The proof is sealed and the test set blob-SHA-locked, so a quietly weakened assertion refuses the completion transition.
The problem it solves
Agentic coding tools will happily tell you a test passed, a review approved, and a plan was followed. The interesting question is what happens when that is not true.
This harness moves every mechanical rule out of prose the model is asked to obey and into code that simply runs. Pipeline shape is declared data read by both the orchestrator and the enforcement layer, so there is no second copy to drift. Workflow state is HMAC-chain-sealed and the evidence ledgers are append-only — an out-of-band edit surfaces as a refusal, not a surprise. Your reply at a human gate is captured verbatim by a hook and parsed by deterministic code, so the model cannot approve on your behalf.
Full mode, end to end
Orange steps are human gates. Everything between them runs hands-off. Lean mode keeps identical rigor but gates by exception — one stop, right before the PR. Quick mode handles trivial changes, and mechanically escalates itself back to full if the real diff turns out to be anything but.
What is actually enforced
A task cannot reach done without a hook-captured APPROVED in the ledger. The orchestrator cannot summarize a review into an approval.
Raw history-mutating git verbs are blocked inside a bootstrapped workspace. Every mutation goes through an entry point that validates, executes, and ledgers in one place.
Only the subagent set the manifest declares for the current cursor position may be spawned — shape and mode header both checked, fail-closed even on ambiguity.
You confirm the target repos before a plan exists. Task registration then refuses anything outside that scope; widening mid-plan comes back through you.
Every deviation, token, verdict, and decision is ledgered and mirrored onto the feature branch at gate crossings — minus your raw replies, which never leave the workspace.
Install
Claude Code
/plugin marketplace add MostAshraf/ai-sdlc-harness /plugin install ai-sdlc-harness@ai-sdlc-harness
Qwen Code
qwen extensions install MostAshraf/ai-sdlc-harness
One repository, natively both — a Claude Code plugin and a Qwen Code extension, no conversion step. Restart the CLI so skills and hooks load, then:
/init-workspace # one-time interview: provider, repos, discovered toolchain /dev-workflow <work-item-id>
Needs Git and Python 3.10+. No language prerequisites — toolchains are discovered, and the setup step builds its own venv without touching system Python.
Work-item providers
Code modules behind one interface, each held to a shared contract test. local-markdown needs nothing at all — work items are just files.