{"id":51223174,"url":"https://github.com/qwerfunch/cladding","last_synced_at":"2026-07-11T11:02:31.161Z","repository":{"id":360868123,"uuid":"1241990383","full_name":"qwerfunch/cladding","owner":"qwerfunch","description":"Ending vibe coding. The integrity layer for AI-coded software — spec-driven, drift-aware, iron-clad. Reference implementation of the Ironclad standard, with a plugin and MCP server for Claude Code, Codex CLI, Gemini CLI, and Cursor.","archived":false,"fork":false,"pushed_at":"2026-07-02T09:28:27.000Z","size":16424,"stargazers_count":9,"open_issues_count":16,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T11:13:45.770Z","etag":null,"topics":["ai-coding","claude-code","claude-code-plugin","codex-cli","cursor-ide","drift-detection","gemini-cli","gemini-cli-extension","harness","harness-engineering","ironclad","mcp-server","spec-driven-development","typescript","vibe-coding"],"latest_commit_sha":null,"homepage":"https://github.com/qwerfunch/ironclad","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qwerfunch.png","metadata":{"files":{"readme":"README.html","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-18T03:10:24.000Z","updated_at":"2026-07-02T09:28:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/qwerfunch/cladding","commit_stats":null,"previous_names":["qwerfunch/cladding"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/qwerfunch/cladding","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qwerfunch%2Fcladding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qwerfunch%2Fcladding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qwerfunch%2Fcladding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qwerfunch%2Fcladding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qwerfunch","download_url":"https://codeload.github.com/qwerfunch/cladding/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qwerfunch%2Fcladding/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35360371,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-coding","claude-code","claude-code-plugin","codex-cli","cursor-ide","drift-detection","gemini-cli","gemini-cli-extension","harness","harness-engineering","ironclad","mcp-server","spec-driven-development","typescript","vibe-coding"],"created_at":"2026-06-28T09:00:31.117Z","updated_at":"2026-07-11T11:02:31.153Z","avatar_url":"https://github.com/qwerfunch.png","language":"TypeScript","funding_links":[],"categories":["Source Catalog"],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\u003ctitle\u003ecladding — the verification layer around your host LLM\u003c/title\u003e\n\u003cstyle\u003e\n  * { box-sizing: border-box; }\n  html, body { margin: 0; padding: 0; }\n  body {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Pretendard, \"Apple SD Gothic Neo\", \"Noto Sans KR\", sans-serif;\n    font-size: 16px;\n    line-height: 1.7;\n    color: #1e293b;\n    background: #ffffff;\n  }\n  .container {\n    max-width: 920px;\n    margin: 0 auto;\n    padding: 48px 24px 96px;\n  }\n  h1 {\n    font-size: 56px;\n    font-weight: 800;\n    letter-spacing: -1.5px;\n    text-align: center;\n    margin: 24px 0 12px;\n    color: #1e293b;\n  }\n  h2 {\n    font-size: 28px;\n    font-weight: 700;\n    margin: 64px 0 16px;\n    padding-bottom: 10px;\n    border-bottom: 1px solid #e2e8f0;\n    color: #0f172a;\n  }\n  h3 {\n    font-size: 20px;\n    font-weight: 700;\n    margin: 40px 0 12px;\n    color: #1e293b;\n  }\n  p { margin: 14px 0; }\n  strong { font-weight: 700; color: #0f172a; }\n  em { font-style: italic; color: #475569; }\n  a { color: #2563eb; text-decoration: none; }\n  a:hover { text-decoration: underline; }\n  code {\n    font-family: \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace;\n    font-size: 0.88em;\n    background: #f1f5f9;\n    padding: 2px 6px;\n    border-radius: 4px;\n    color: #0f172a;\n  }\n  pre {\n    background: #0f172a;\n    color: #e2e8f0;\n    padding: 20px 24px;\n    border-radius: 8px;\n    overflow-x: auto;\n    margin: 20px 0;\n    font-size: 14px;\n    line-height: 1.6;\n  }\n  pre code {\n    background: transparent;\n    color: inherit;\n    padding: 0;\n    font-size: inherit;\n  }\n  ul, ol { margin: 14px 0 14px 28px; padding: 0; }\n  li { margin: 8px 0; }\n  img.diagram-img { max-width: 100%; height: auto; }\n  hr { border: 0; border-top: 1px solid #e2e8f0; margin: 48px 0; }\n\n  /* Tagline */\n  .tagline {\n    text-align: center;\n    color: #475569;\n    font-size: 18px;\n    margin: 0 0 24px;\n  }\n  .tagline strong {\n    font-size: 19px;\n    color: #1e293b;\n  }\n\n  /* Badges */\n  .badges {\n    text-align: center;\n    margin: 20px 0 28px;\n  }\n  .badges img {\n    margin: 2px 4px;\n    vertical-align: middle;\n  }\n\n  /* Lead description */\n  .lead {\n    text-align: center;\n    color: #475569;\n    font-size: 16px;\n    margin: 0 0 32px;\n    line-height: 1.6;\n  }\n\n  /* Goal statement under the hero diagram */\n  .goal {\n    text-align: center;\n    margin: 28px auto 8px;\n    max-width: 760px;\n  }\n  .goal .what {\n    font-size: 20px;\n    font-weight: 700;\n    color: #0f172a;\n    line-height: 1.55;\n  }\n  .goal .what em { font-style: normal; color: #1d4ed8; }\n  .goal .why {\n    font-size: 15px;\n    color: #475569;\n    margin-top: 10px;\n  }\n\n  /* before · after · record 3-card */\n  .flow-cards {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 16px;\n    margin: 24px 0;\n  }\n  .flow-card {\n    border-radius: 12px;\n    padding: 20px 22px;\n    background: #ffffff;\n    border: 1px solid #e2e8f0;\n  }\n  .flow-card .badge {\n    display: inline-block;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 1.2px;\n    padding: 3px 10px;\n    border-radius: 99px;\n    margin-bottom: 10px;\n    color: #ffffff;\n  }\n  .flow-card.before .badge { background: #3b82f6; }\n  .flow-card.after  .badge { background: #1d4ed8; }\n  .flow-card.record .badge { background: #64748b; }\n  .flow-card .title { font-size: 15px; font-weight: 700; color: #0f172a; margin-bottom: 8px; }\n  .flow-card p { margin: 8px 0; font-size: 14px; line-height: 1.65; color: #475569; }\n  .flow-card ul { margin: 8px 0 0 18px; }\n  .flow-card li { font-size: 13.5px; color: #475569; margin: 5px 0; }\n\n  /* Earn callout */\n  .earn {\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    padding: 20px 24px;\n    margin: 20px 0;\n  }\n  .earn .line { font-size: 15px; color: #334155; margin: 6px 0; }\n  .earn code { background: #eff6ff; }\n\n  /* Tables */\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 20px 0;\n    font-size: 14px;\n  }\n  th, td {\n    border: 1px solid #e2e8f0;\n    padding: 12px 16px;\n    text-align: left;\n  }\n  th {\n    background: #f8fafc;\n    font-weight: 700;\n    color: #0f172a;\n  }\n  td.center { text-align: center; }\n  td.vanilla-cell { color: #64748b; text-align: center; }\n  td.cladding-cell { color: #1d4ed8; font-weight: 700; text-align: center; }\n\n  /* Diagram container */\n  .diagram {\n    margin: 24px 0;\n    text-align: center;\n  }\n\n  /* Section spacing under h2 */\n  h2 + p, h2 + div { margin-top: 8px; }\n\n  /* Footer */\n  footer {\n    margin-top: 80px;\n    padding-top: 32px;\n    border-top: 1px solid #e2e8f0;\n    text-align: center;\n    color: #64748b;\n    font-size: 13px;\n  }\n\n  /* Responsive */\n  @media (max-width: 720px) {\n    .container { padding: 32px 16px 64px; }\n    h1 { font-size: 40px; }\n    h2 { font-size: 24px; margin-top: 48px; }\n    .flow-cards { grid-template-columns: 1fr; }\n    table { font-size: 13px; }\n    th, td { padding: 10px 12px; }\n  }\n\u003c/style\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv class=\"container\"\u003e\n\n  \u003cp style=\"text-align:center;margin:0 0 24px\"\u003e\u003cimg src=\"docs/img/social-preview.png\" alt=\"cladding — Unified Governance for AI-Coupled Engineering\" style=\"width:100%;max-width:920px;border-radius:8px\"\u003e\u003c/p\u003e\n\n  \u003cp style=\"text-align:center;font-size:14px;color:#64748b;margin:0 0 12px\"\u003e\u003cstrong\u003eEnglish\u003c/strong\u003e · \u003ca href=\"README.ko.html\"\u003e한국어\u003c/a\u003e\u003c/p\u003e\n\n  \u003ch1\u003ecladding\u003c/h1\u003e\n\n  \u003cp class=\"tagline\"\u003e\n    \u003cstrong\u003eTo trust AI with coding, an organization needs three things —\u003cbr\u003ethat the code can be trusted, that it's traced, and that it holds up as you scale. cladding builds those three.\u003c/strong\u003e\u003cbr\u003e\n    True to its name (cladding = the outer layer), it wraps the host LLM and verifies what comes before and after.\n  \u003c/p\u003e\n\n  \u003cp class=\"badges\"\u003e\n    \u003ca href=\"https://github.com/qwerfunch/ironclad\"\u003e\u003cimg src=\"https://img.shields.io/badge/ironclad-L4%20conformant-brightgreen\" alt=\"ironclad\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/qwerfunch/ironclad\"\u003e\u003cimg src=\"https://img.shields.io/badge/spec-v0.0.23-blue\" alt=\"spec\"\u003e\u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/badge/tests-2392%2F2392-brightgreen\" alt=\"tests\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/detectors-41-brightgreen\" alt=\"detectors\"\u003e\n    \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-lightgrey\" alt=\"license\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\n  \u003cp class=\"lead\"\u003e\n    The official reference implementation of the \u003ca href=\"https://github.com/qwerfunch/ironclad\"\u003eIronclad\u003c/a\u003e standard.\u003cbr\u003e\n    It feeds the project's intent to the host LLM (Claude Code · Codex · Gemini · Cursor) \u003cem\u003ebefore\u003c/em\u003e work begins,\u003cbr\u003e\n    and verifies the result with 41 detectors and a 15-stage gate \u003cem\u003eafter\u003c/em\u003e the work is done.\n  \u003c/p\u003e\n\n  \u003c!-- ─────────────── Why an organization can trust AI with coding (intuition hook) ─────────────── --\u003e\n  \u003cdiv class=\"flow-cards\"\u003e\n    \u003cdiv class=\"flow-card\"\u003e\n      \u003cdiv class=\"title\"\u003eOnly verified code ships as 'done'\u003c/div\u003e\n      \u003cp\u003eEven when the AI says \"it's done\", it has to pass the checks — so code that wasn't verified is never accepted as 'done'.\u003c/p\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"flow-card\"\u003e\n      \u003cdiv class=\"title\"\u003eWhat shipped is on the record\u003c/div\u003e\n      \u003cp\u003eWhat was verified is stamped into committed content, who and when land in the local session ledger, and why lives in the spec — so handoff and review can trace decisions without archaeology.\u003c/p\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"flow-card\"\u003e\n      \u003cdiv class=\"title\"\u003eIt holds up as the team grows and you add more AIs\u003c/div\u003e\n      \u003cp\u003eBecause the spec is the shared standard, conflicts and drift are blocked automatically.\u003c/p\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003c!-- ─────────────── Core diagram: the collaboration loop with the host LLM ─────────────── --\u003e\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/relationship.svg\" alt=\"Host LLM before (inject intent) · after (verify) · record (feedback loop) — how cladding wraps the LLM in a collaborative structure\" width=\"920\"\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"goal\"\u003e\n    \u003cp class=\"what\"\u003e\n      This loop aims at one thing —\u003cbr\u003e\n      turning the AI's \u003cem\u003e\"it's done\"\u003c/em\u003e from a claim into a \u003cem\u003eproof\u003c/em\u003e.\n    \u003c/p\u003e\n    \u003cp class=\"why\"\u003e\n      So you can ship AI-written code \u003cstrong\u003etrusting it as much as code a human wrote\u003c/strong\u003e.\n    \u003c/p\u003e\n    \u003cp class=\"why\" style=\"margin-top:14px\"\u003e\n      cladding builds \u003cstrong\u003eitself with cladding too\u003c/strong\u003e — 242 of its 245 features passed the same gate, and it's the first L4 implementation of the Ironclad standard.\n    \u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003c!-- ─────────────── How we work together ─────────────── --\u003e\n  \u003ch2\u003eHow cladding works with your host LLM\u003c/h2\u003e\n\n  \u003cdiv class=\"flow-cards\"\u003e\n    \u003cdiv class=\"flow-card before\"\u003e\n      \u003cspan class=\"badge\"\u003eBEFORE — INJECT INTENT\u003c/span\u003e\n      \u003cdiv class=\"title\"\u003eSo the LLM starts with the right context\u003c/div\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eProject map injection\u003c/strong\u003e — at the start of every session, the features, what's in progress, and the last verification result are handed over automatically \u003cspan style=\"font-size:13px;color:#64748b\"\u003e(now you can see it with your eyes too ↓)\u003c/span\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eExtract only the intent that matters\u003c/strong\u003e — just the \u003cem\u003ewhy\u003c/em\u003e, the related features, and the acceptance criteria for the feature you're working on (it does not dump the whole spec)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eApply project rules\u003c/strong\u003e — the team's forbidden and preferred patterns go in as standing instructions every time\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cp style=\"text-align:center;font-size:14px;color:#475569\"\u003e\u003cstrong\u003eAfter — verify:\u003c/strong\u003e the 15-stage gate, 41 drift detectors, and an implementation-blind grader (below).\u003c/p\u003e\n  \u003cp style=\"font-size:13px;color:#64748b;text-align:center;margin-top:4px\"\u003e\n    Real-time intervention (map injection · instant block · stop block) works fully in Claude Code.\n    On Codex · Gemini · Cursor the same verification runs through in-conversation tool calls and git · CI gates.\n  \u003c/p\u003e\n\n  \u003c!-- ─────────────── done is earned ─────────────── --\u003e\n  \u003ch2\u003edone is not declared, it's earned\u003c/h2\u003e\n  \u003cp\u003e\n    The chronic disease of AI coding is that \u003cem\u003e\"it's done\"\u003c/em\u003e gets declared without verification. In cladding, a feature's\n    \u003ccode\u003estatus: done\u003c/code\u003e is not a value you write but a value you \u003cstrong\u003eearn\u003c/strong\u003e.\n  \u003c/p\u003e\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/intervention.svg\" alt=\"One scene — a hook blocks the LLM's done declaration, a RED gate feeds back as a repair card, and done is earned only when GREEN\" width=\"920\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"earn\"\u003e\n    \u003cdiv class=\"line\"\u003e① If the AI tries to \u003cem\u003ewrite the completion flag itself\u003c/em\u003e → it is \u003cstrong\u003eblocked on the spot\u003c/strong\u003e (\"earn completion through verification\")\u003c/div\u003e\n    \u003cdiv class=\"line\"\u003e② If the AI \u003cem\u003erequests\u003c/em\u003e completion → it runs all 9 decisive stages and records done \u003cstrong\u003eonly when they all pass\u003c/strong\u003e, auto-reverting if even one fails — the E2E · evidence stages are handled by CI's full 15 stages\u003c/div\u003e\n    \u003cdiv class=\"line\"\u003e③ The moment it passes, a \u003cstrong\u003everification signature\u003c/strong\u003e is left behind — committable proof that \"this code was verified at this point\"\u003c/div\u003e\n    \u003cdiv class=\"line\"\u003e④ If you try to end a conversation while a failure remains → it \u003cstrong\u003estops you once\u003c/strong\u003e (if you end again on the same failure, it records rather than letting it through) and carries the repair card into the next conversation\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp style=\"font-size:13.5px;color:#64748b\"\u003e\n    The limits are disclosed openly too: bypass paths exist that the instant block can't see, and those are caught by after-the-fact verification (the gate · drift checks).\n    The instant block is the first line of defense, after-the-fact verification the second — and neither is a guarantee on its own.\n  \u003c/p\u003e\n\n  \u003c!-- ─────────────── What changes ─────────────── --\u003e\n  \u003ch2\u003eWhat changes\u003c/h2\u003e\n  \u003cp\u003eHow behavior differs between a \u003cem\u003etypical AI coding environment\u003c/em\u003e and a cladding environment in the same situation.\u003c/p\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\u003cth\u003eSituation\u003c/th\u003e\u003cth class=\"center\"\u003eTypical AI coding\u003c/th\u003e\u003cth class=\"center\"\u003ecladding\u003c/th\u003e\u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eWhen code drifts from the spec\u003c/strong\u003e\u003c/td\u003e\u003ctd class=\"vanilla-cell\"\u003eFixed \u003cem\u003eif\u003c/em\u003e caught in review\u003c/td\u003e\u003ctd class=\"cladding-cell\"\u003eAuto-detected right after editing (alert) · \"done\" can't pass while drifted\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eWhen the AI says \"it's done\"\u003c/strong\u003e\u003c/td\u003e\u003ctd class=\"vanilla-cell\"\u003eNo choice but to trust its word\u003c/td\u003e\u003ctd class=\"cladding-cell\"\u003edone earned only when the gate is GREEN\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eWhen you end a session in a failed state\u003c/strong\u003e\u003c/td\u003e\u003ctd class=\"vanilla-cell\"\u003eEnds as-is, forgotten next time\u003c/td\u003e\u003ctd class=\"cladding-cell\"\u003eStops the exit once and hands off a repair card\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eTwo people add a feature at once\u003c/strong\u003e\u003c/td\u003e\u003ctd class=\"vanilla-cell\"\u003emerge conflict\u003c/td\u003e\u003ctd class=\"cladding-cell\"\u003ehash-8 ID · separate files → 0 conflicts\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eWho verifies AI-written code?\u003c/strong\u003e\u003c/td\u003e\u003ctd class=\"vanilla-cell\"\u003eThe AI that wrote it self-verifies (risky)\u003c/td\u003e\u003ctd class=\"cladding-cell\"\u003eAn implementation-blind grader + mechanical gate\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eWhen you switch AI tools\u003c/strong\u003e\u003c/td\u003e\u003ctd class=\"vanilla-cell\"\u003eReconfigure per tool\u003c/td\u003e\u003ctd class=\"cladding-cell\"\u003e1 spec → auto-wired to 4 hosts\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\n  \u003c!-- ─────────────── Project map (graph) ─────────────── --\u003e\n  \u003ch2\u003eProject map — now you can see it and ask it \u003cspan style=\"font-size:13px;font-weight:400;color:#94a3b8\"\u003eNEW\u003c/span\u003e\u003c/h2\u003e\n  \u003cp\u003e\n    cladding always keeps a \u003cstrong\u003emap\u003c/strong\u003e inside it that links spec · code · tests · docs. Now you can see that map with your own eyes.\n  \u003c/p\u003e\n\n  \u003cdiv class=\"earn\"\u003e\n    \u003cdiv class=\"line\"\u003e\u003cstrong\u003eWhy it's special — the explanation and the code don't drift apart.\u003c/strong\u003e\u003c/div\u003e\n    \u003cdiv class=\"line\"\u003eDocumentation lies as time passes — the code changes while the description stays put. cladding re-aligns that link every time the code is read, and blocks 'done' while they're out of sync.\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cp style=\"text-align:center;font-size:15px;color:#475569;margin:28px 0 0\"\u003e\n    This is cladding's \u003cstrong\u003emental map\u003c/strong\u003e of your project — blue = spec (center), orange = code, green = tests, pink = docs; more-connected nodes grow larger and pull to the center.\n  \u003c/p\u003e\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/graph.gif\" alt=\"cladding knowledge graph — spec · code · tests · docs color-coded and connected (animated view)\" width=\"920\" style=\"border-radius:12px\"\u003e\n\n  \u003c/div\u003e\n\n  \u003cdiv class=\"flow-cards\"\u003e\n    \u003cdiv class=\"flow-card before\"\u003e\n      \u003cspan class=\"badge\"\u003eSEE\u003c/span\u003e\n      \u003cdiv class=\"title\"\u003eYour whole project in one picture\u003c/div\u003e\n      \u003cp\u003eRun \u003ccode\u003eclad graph serve\u003c/code\u003e and it opens in your browser, so you can see at a glance what connects to what.\u003c/p\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"flow-card after\"\u003e\n      \u003cspan class=\"badge\"\u003eASK\u003c/span\u003e\n      \u003cdiv class=\"title\"\u003e\"What breaks if I change this?\"\u003c/div\u003e\n      \u003cp\u003eAsk the map and it tells you what's affected and which tests to run — no guessing.\u003c/p\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"flow-card record\"\u003e\n      \u003cspan class=\"badge\"\u003eMEASURE\u003c/span\u003e\n      \u003cdiv class=\"title\"\u003eThe larger the project, the brighter it shines\u003c/div\u003e\n      \u003cp\u003eThe amount you have to read to make a change drops sharply — on average \u003cstrong\u003e4× less\u003c/strong\u003e than reading everything. (\u003ccode\u003eclad measure\u003c/code\u003e)\u003c/p\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cp style=\"font-size:14px;color:#475569;margin-top:18px\"\u003eTo launch it yourself — from your project folder:\u003c/p\u003e\n  \u003cpre\u003e\u003ccode\u003eclad graph serve                                  # live graph — localhost:3000, auto-reloads on save\nclad graph export --format html --out graph.html  # or export to a single offline .html file\u003c/code\u003e\u003c/pre\u003e\n  \u003cp style=\"font-size:13px;color:#64748b\"\u003eBoth require cladding 0.7.0+.\u003c/p\u003e\n\n  \u003c!-- ─────────────── How it works ─────────────── --\u003e\n  \u003ch2\u003eHow it works\u003c/h2\u003e\n  \u003cp\u003e\u003cstrong\u003eSpec → Code → Tests\u003c/strong\u003e circulates as one cycle — the spec records the \u003cem\u003ewhy\u003c/em\u003e, the gate verifies, and detectors block drift.\u003c/p\u003e\n\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/cycle.svg\" alt=\"Spec → Code → Tests cycle — a 15-stage verification and 41 drift detectors guard the cycle\" width=\"700\"\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003e1. Spec — the standard for everything (SSoT)\u003c/h3\u003e\n  \u003cp\u003eThe spec records the \u003cem\u003ewhy\u003c/em\u003e (what is being built and why). A 4-tier single source of truth — \u003cem\u003eintent on top, artifacts below, and the code follows the spec\u003c/em\u003e.\u003c/p\u003e\n\n  \u003ctable\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\u003cth\u003eTier\u003c/th\u003e\u003cth\u003eRole\u003c/th\u003e\u003cth\u003eDefined · authored by\u003c/th\u003e\u003cth\u003eAuthority\u003c/th\u003e\u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eA — Spec\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eIntent (what · why)\u003c/td\u003e\u003ctd\u003eHumans define intent → the LLM writes it in EARS form\u003c/td\u003e\u003ctd\u003eDoesn't change without human approval · top priority\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eB — Design\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eDesign (how)\u003c/td\u003e\u003ctd\u003eHumans steer the direction → the LLM writes it\u003c/td\u003e\u003ctd\u003eChecked for consistency with A\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eC — Derived\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eArtifacts (code · tests) + \u003cstrong\u003eattestation\u003c/strong\u003e (verification signature)\u003c/td\u003e\u003ctd\u003eThe LLM writes it\u003c/td\u003e\u003ctd\u003eAuto-regenerated from the code\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eD — Audit\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eAudit record (what happened)\u003c/td\u003e\u003ctd\u003eAuto-recorded (append-only)\u003c/td\u003e\u003ctd\u003eLocal\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\n  \u003cp\u003e\u003cstrong\u003eA takes precedence over every tier below\u003c/strong\u003e — if the spec (A) and the code (C) differ, the wrong one is the \u003cem\u003ecode\u003c/em\u003e.\u003c/p\u003e\n\n  \u003cp\u003e\u003cstrong\u003eSharding · multi-dev safe\u003c/strong\u003e — like \u003ccode\u003espec/features/\u0026lt;slug\u0026gt;-\u0026lt;hash8\u0026gt;.yaml\u003c/code\u003e, with a \u003cem\u003eseparate file per feature\u003c/em\u003e + an \u003cem\u003e8-character hash ID\u003c/em\u003e (e.g. \u003ccode\u003eF-d86375d8\u003c/code\u003e). Even if two people create a new feature at the same time, they get \u003cem\u003edifferent files · different IDs\u003c/em\u003e, so merge conflicts are 0. Details in \u003ca href=\"docs/spec-ids-multi-dev.md\"\u003eHash-based feature IDs\u003c/a\u003e.\u003c/p\u003e\n\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/ssot-tier.svg\" alt=\"4-tier SSoT — A(Spec) → B(Design) → C(Derived + attestation) → D(Audit), A takes precedence over B\" width=\"640\"\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003e2. Gate — the 15-stage Iron Law\u003c/h3\u003e\n  \u003cp\u003eOne check engine, bundled by cost — 3 stages at commit, 9 at push · completion, all 15 in CI. Only the depth differs.\u003c/p\u003e\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/iron-law.svg\" alt=\"15-stage Iron Law gate — static(6) · tests·conformance(4) · E2E(3) · evidence(2), attestation signed when GREEN\" width=\"640\"\u003e\n  \u003c/div\u003e\n\n  \u003ctable\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\u003cth\u003eStage\u003c/th\u003e\u003cth\u003eWhat it checks\u003c/th\u003e\u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e1.1 Type · 1.2 Lint\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eType errors · code style\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e1.3 Drift\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003espec ↔ code drift across 41 detectors\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e1.4 Commit · 1.5 Arch · 1.6 Secret\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eClean working tree · architecture invariant · API key exposure\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e2.1 Unit · 2.2 Coverage\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eUnit tests pass · coverage drop blocked\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e2.3 Spec conformance · 2.4 Deliverable smoke\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eThe implementation-blind grader's tests pass · whether the declared deliverable actually runs \u003cem\u003e(blocks the \"tests pass but the deliverable won't run\" vacuous green)\u003c/em\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e3.1 Smoke · 3.2 Perf · 3.3 Visual\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003ee2e core behavior · performance budget · UI visual regression\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e4.1 Audit · 4.2 UAT\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003eAt least 1 piece of evidence per AC (acceptance criterion) · at least 1 piece of evidence per done feature\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\n  \u003ch3\u003e3. Detector — 41 drift detectors\u003c/h3\u003e\n  \u003cp\u003eAutomatically detects drift in every direction among spec · code · test. Full catalog: \u003ca href=\"src/stages/detectors/README.md\"\u003edetector catalog\u003c/a\u003e.\u003c/p\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\u003cth\u003eDirection\u003c/th\u003e\u003cth\u003eWhat it catches\u003c/th\u003e\u003cth class=\"center\"\u003eCount\u003c/th\u003e\u003cth\u003eRepresentative detectors\u003c/th\u003e\u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003espec ↔ code\u003c/td\u003e\u003ctd\u003eIn the spec but not the code, or code straying from the spec\u003c/td\u003e\u003ctd class=\"center\"\u003e10\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eMISSING_IMPLEMENTATION\u003c/code\u003e, \u003ccode\u003eAC_DRIFT\u003c/code\u003e, \u003ccode\u003eDELIVERABLE_INTEGRITY\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003ecode ↔ test\u003c/td\u003e\u003ctd\u003eCode exists but no tests · coverage drop · secrets\u003c/td\u003e\u003ctd class=\"center\"\u003e6\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eMISSING_TESTS\u003c/code\u003e, \u003ccode\u003eCOVERAGE_DROP\u003c/code\u003e, \u003ccode\u003eHARDCODED_SECRET\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003espec ↔ test\u003c/td\u003e\u003ctd\u003eSpec ACs not verified by tests · false status\u003c/td\u003e\u003ctd class=\"center\"\u003e5\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eUNTESTED_AC\u003c/code\u003e, \u003ccode\u003eSTATUS_DRIFT\u003c/code\u003e, \u003ccode\u003eSPEC_CONFORMANCE\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003espec hygiene\u003c/td\u003e\u003ctd\u003eIntegrity of the spec itself (ID collision · dependency cycle)\u003c/td\u003e\u003ctd class=\"center\"\u003e8\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eID_COLLISION\u003c/code\u003e, \u003ccode\u003eSLUG_CONFLICT\u003c/code\u003e, \u003ccode\u003eDEPENDENCY_CYCLE\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003eenvironment integrity\u003c/td\u003e\u003ctd\u003eBuild environment · meta files\u003c/td\u003e\u003ctd class=\"center\"\u003e3\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eHARNESS_INTEGRITY\u003c/code\u003e, \u003ccode\u003eMETA_INTEGRITY\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003everification freshness\u003c/td\u003e\u003ctd\u003eWhether code changed after the verification signature\u003c/td\u003e\u003ctd class=\"center\"\u003e1\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eSTALE_ATTESTATION\u003c/code\u003e \u003cem\u003e(new)\u003c/em\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003egovernance · docs\u003c/td\u003e\u003ctd\u003ePolicy violations · documentation drift · README claims beyond the evidence\u003c/td\u003e\u003ctd class=\"center\"\u003e4\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eABSENCE_OF_GOVERNANCE\u003c/code\u003e, \u003ccode\u003ePROJECT_CONTEXT_DRIFT\u003c/code\u003e, \u003ccode\u003eHOST_CLAIM_DRIFT\u003c/code\u003e \u003cem\u003e(new)\u003c/em\u003e\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003egraph · doc links\u003c/td\u003e\u003ctd\u003eBroken doc ↔ spec links · missing dependency edges\u003c/td\u003e\u003ctd class=\"center\"\u003e4\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eDOC_LINK_INTEGRITY\u003c/code\u003e, \u003ccode\u003eREFERENCE_INTEGRITY\u003c/code\u003e, \u003ccode\u003eINFERABLE_DEPENDS_ON\u003c/code\u003e \u003cem\u003e(new)\u003c/em\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\n  \u003ch3\u003e4. Cycle — the lifecycle of one feature\u003c/h3\u003e\n  \u003cp\u003eDefine → sync → implement → \u003cstrong\u003eearn\u003c/strong\u003e. You earn \"done\" only by passing every check.\u003c/p\u003e\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/workflow.svg\" alt=\"Lifecycle of one feature — define → sync → implement → earn, completion earned when all checks pass / auto-reverted on failure\" width=\"760\"\u003e\n  \u003c/div\u003e\n\n  \u003c!-- ─────────────── Agent-loop verifier ─────────────── --\u003e\n  \u003ch2\u003eUsing cladding as your agent loop's verifier\u003c/h2\u003e\n  \u003cp\u003e\n    You own the loop — whatever harness or orchestrator drives your agent. cladding is the\n    \u003cstrong\u003everifier and state layer inside it\u003c/strong\u003e: it doesn't run your loop, it tells the loop what's still wrong and when it's allowed to stop.\n  \u003c/p\u003e\n  \u003cul\u003e\n    \u003cli\u003e\u003cstrong\u003eFeedback signal\u003c/strong\u003e — run \u003ccode\u003eclad check --json\u003c/code\u003e each iteration. The verdict is machine-readable: a top-level \u003ccode\u003eanyFailed\u003c/code\u003e and a \u003ccode\u003eworst\u003c/code\u003e severity, plus per-stage \u003ccode\u003efindings[]\u003c/code\u003e where each entry carries its \u003ccode\u003edetector\u003c/code\u003e, \u003ccode\u003eseverity\u003c/code\u003e, and \u003ccode\u003emessage\u003c/code\u003e. Feed that straight back as the loop's error signal — no scraping console text.\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eHonest stop\u003c/strong\u003e — gate the loop on \u003ccode\u003eclad done\u003c/code\u003e, not on the agent's say-so. It flips a feature to \u003ccode\u003edone\u003c/code\u003e only when the strict pre-push gate is GREEN, and reverts otherwise. \"The loop says it's finished\" becomes \"the gate let it stand.\"\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eLoop memory\u003c/strong\u003e — the local event log (\u003ccode\u003e.cladding/events.log.jsonl\u003c/code\u003e, gitignored) carries what happened across iterations: gate runs (deduped per HEAD), done attempts, drift firings, value serves. The next iteration reads it as local working memory — not a durable or authoritative record, and it rotates at 5 MB (a single generation), so the oldest entries fall away.\u003c/li\u003e\n  \u003c/ul\u003e\n  \u003cp\u003e\n    The honest boundary: this hardens the loop's \u003cstrong\u003estop condition and feedback signal\u003c/strong\u003e, not the model's code quality. cladding's own A/B record is the receipt — governance is orthogonal to correctness.\n  \u003c/p\u003e\n\n  \u003c!-- ─────────────── Multi-Agent ─────────────── --\u003e\n  \u003ch2\u003eMulti-Agent — separating the maker from the verifier\u003c/h2\u003e\n  \u003cp\u003e\n    The \u003cstrong\u003emaking\u003c/strong\u003e agent and the \u003cstrong\u003everifying\u003c/strong\u003e agent are separated, so no agent can approve its own work\n    by itself. \u003cstrong\u003eblind-author\u003c/strong\u003e goes one step further — the agent that writes the tests\n    \u003cem\u003ehas no tool to read the implementation at all\u003c/em\u003e (no Read/Grep granted). \"Written without seeing the implementation\" becomes a structural fact, not a promise.\n    This separation aligns with the segregation-of-duties principle that regulatory · audit frameworks (EU AI Act · SOX) call for — it maps onto the spirit of those frameworks, not a certification.\n  \u003c/p\u003e\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/multi-agent.svg\" alt=\"Agent separation of duties — orchestrator distributes, planner/developer/reviewer work, blind-author writes tests without seeing the implementation, observability observes\" width=\"700\"\u003e\n  \u003c/div\u003e\n\n  \u003c!-- ─────────────── Ecosystem ─────────────── --\u003e\n  \u003ch2\u003eEcosystem\u003c/h2\u003e\n  \u003cp\u003ecladding sits at the junction of three existing categories.\u003c/p\u003e\n  \u003cdiv class=\"diagram\"\u003e\n    \u003cimg class=\"diagram-img\" src=\"docs/img/en/ecosystem.svg\" alt=\"Ecosystem Venn — cladding at the junction of three categories: SDD · runners · multi-agent governance\" width=\"640\"\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003eDifferences from adjacent tools\u003c/h3\u003e\n  \u003cul\u003e\n    \u003cli\u003e\u003cstrong\u003eSpec Kit · OpenSpec · Tessl · Kiro\u003c/strong\u003e — tools that help you \u003cem\u003ewrite specs well\u003c/em\u003e. On top of that, cladding \u003cem\u003ekeeps automatically cross-checking that the spec and the actual code don't drift, inside the development loop\u003c/em\u003e.\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eBMAD · ChatDev · Claude Code Agent Teams\u003c/strong\u003e — systems for \u003cem\u003edividing roles among multiple AI agents\u003c/em\u003e. cladding's agent division of labor operates on top of that, combined with \u003cem\u003espec · gate · audit record\u003c/em\u003e.\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003etdd-guard\u003c/strong\u003e — a tool that \u003cem\u003eforces the AI to write tests first\u003c/em\u003e. cladding's Unit · Coverage · oracle stages among the 15 do the same thing more structurally.\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eOpenHands · Cline · Aider · Goose\u003c/strong\u003e — \u003cem\u003erunners that make the AI write code\u003c/em\u003e. cladding is the \u003cem\u003eupper layer that verifies and controls\u003c/em\u003e the code those runners write.\u003c/li\u003e\n  \u003c/ul\u003e\n  \u003cp\u003ecladding's distinction is the \u003cem\u003ecombination\u003c/em\u003e — tying the core of the above categories into \u003cem\u003eone verification loop\u003c/em\u003e.\u003c/p\u003e\n\n  \u003c!-- ─────────────── Install ─────────────── --\u003e\n  \u003ch2\u003eInstall\u003c/h2\u003e\n  \u003cp\u003eTwo steps — install the infrastructure → create the project spec.\u003c/p\u003e\n\n  \u003ch3\u003eStep 1 — Install the infrastructure (npm)\u003c/h3\u003e\n  \u003cpre\u003e\u003ccode\u003enpm install -g cladding   # install the cladding CLI\ncd \u0026lt;project\u0026gt;                # move into your project\nclad setup                  # auto-wire AI tools (Claude / Codex / Gemini / Cursor)\u003c/code\u003e\u003c/pre\u003e\n\n  \u003cdetails style=\"margin:16px 0;background:#f8fafc;border-radius:6px;padding:12px 16px\"\u003e\n    \u003csummary style=\"cursor:pointer;color:#475569;font-size:14px\"\u003eWhere \u003ccode\u003eclad setup\u003c/code\u003e wires (4 hosts · 5 connection points)\u003c/summary\u003e\n    \u003ctable style=\"margin-top:12px\"\u003e\n      \u003cthead\u003e\u003ctr\u003e\u003cth\u003eHost (when detected)\u003c/th\u003e\u003cth\u003eWire location\u003c/th\u003e\u003cth\u003eAuto-activation\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n      \u003ctbody\u003e\n        \u003ctr\u003e\u003ctd\u003eClaude Code (\u003ccode\u003e~/.claude/\u003c/code\u003e)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e~/.claude/plugins/cladding\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003eclaude plugin marketplace add\u003c/code\u003e + \u003ccode\u003einstall\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eCodex CLI skills (\u003ccode\u003e~/.agents/\u003c/code\u003e)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e~/.agents/skills/cladding-*\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e(automatic on Codex restart)\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eCodex CLI MCP server (\u003ccode\u003e~/.codex/\u003c/code\u003e)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e[mcp_servers.cladding]\u003c/code\u003e in \u003ccode\u003e~/.codex/config.toml\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e(the TOML entry itself)\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eGemini CLI (\u003ccode\u003e~/.gemini/\u003c/code\u003e)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e~/.gemini/extensions/cladding\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003egemini extensions link\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eCursor (\u003ccode\u003e~/.cursor/\u003c/code\u003e)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003emcpServers.cladding\u003c/code\u003e in \u003ccode\u003e~/.cursor/mcp.json\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e(the JSON entry itself)\u003c/td\u003e\u003c/tr\u003e\n      \u003c/tbody\u003e\n    \u003c/table\u003e\n    \u003cp style=\"font-size:13px;color:#64748b;margin-top:8px\"\u003e\u003ccode\u003eclad setup\u003c/code\u003e auto-invokes each host's activation command when the \u003ccode\u003eclaude\u003c/code\u003e / \u003ccode\u003egemini\u003c/code\u003e binary is on PATH. It's safe to re-run after an upgrade or after installing a new AI tool.\u003c/p\u003e\n    \u003cp style=\"font-size:13px;color:#64748b;margin-top:8px\"\u003e\u003cstrong\u003eVerification level (honest disclosure):\u003c/strong\u003e Claude Code is verified across all features through real-usage campaigns (including real-time intervention). Codex · Gemini CLI have their wiring automated + basic behavior confirmed. Cursor wires automatically but is not yet real-usage verified — to be updated as verification lands.\u003c/p\u003e\n    \u003cblockquote style=\"border-left:4px solid #cbd5e1;padding:8px 16px;margin:12px 0;background:#f8fafc;color:#475569;font-size:13px\"\u003e\u003cstrong\u003eAbout the MCP server.\u003c/strong\u003e All 4 hosts wire cladding as an MCP server — only the wire \u003cem\u003elocation\u003c/em\u003e differs. MCP is not something the user calls directly — there's no \u003ccode\u003e/mcp\u003c/code\u003e slash, no manual connection step. Each host's AI calls cladding's features on its own in response to \u003cem\u003enatural-language requests\u003c/em\u003e, while the user types just one \u003ccode\u003e/cladding:init\u003c/code\u003e and ordinary conversation.\u003c/blockquote\u003e\n  \u003c/details\u003e\n\n  \u003ch3\u003eStep 2 — Init (create the project spec)\u003c/h3\u003e\n  \u003cp\u003eIn the project directory, called once from inside the AI tool:\u003c/p\u003e\n  \u003cpre\u003e\u003ccode\u003e[inside the AI tool] /cladding:init \"B2B payments SaaS\"\u003c/code\u003e\u003c/pre\u003e\n  \u003cp\u003eThe project's \u003ccode\u003espec.yaml\u003c/code\u003e and related docs are created — once per project.\u003c/p\u003e\n  \u003cp style=\"font-size:14px;color:#475569\"\u003eTo raise enforcement: \u003ccode\u003eclad init --with-hook\u003c/code\u003e (installs pre-commit + pre-push git hooks) · \u003ccode\u003eclad init --with-ci\u003c/code\u003e (scaffolds the CI gate — real enforcement lives in CI).\u003c/p\u003e\n\n  \u003ch3\u003eThree init scenarios\u003c/h3\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\u003cth\u003eStarting situation\u003c/th\u003e\u003cth\u003eCommand\u003c/th\u003e\u003cth\u003eWhat happens\u003c/th\u003e\u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eWhen you only have an idea\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e/cladding:init \"I'm going to build a B2B payments SaaS\"\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eLLM analyzes the domain → auto-generates spec · docs · policy + 2–3 follow-up questions\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eWhen you have a planning doc\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e/cladding:init docs/plan.md\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eRecognizes the file path → auto-loads its content and uses it as intent\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e\u003cstrong\u003eAdopting into an existing project\u003c/strong\u003e\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e/cladding:init \"apply cladding to this project\"\u003c/code\u003e\u003c/td\u003e\u003ctd\u003eAuto-scans the existing code → combines observed patterns + intent\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\n  \u003ch3\u003eOne init and you're done\u003c/h3\u003e\n  \u003cp\u003eInit once and that's it — after that you develop as usual. cladding runs the before/after loop in the background, so there are no commands to memorize.\u003c/p\u003e\n\n  \u003ch3\u003eUpgrade\u003c/h3\u003e\n  \u003cpre\u003e\u003ccode\u003enpm update -g cladding     # 1. install the new version\ncd \u0026lt;your project\u0026gt;          # 2. once per project\nclad update                # 3. tidy up for the new version\u003c/code\u003e\u003c/pre\u003e\n  \u003cp\u003eYour code · \u003ccode\u003espec.yaml\u003c/code\u003e · docs are left untouched, so it's safe; and if a stricter new version has something to point out, it \u003cstrong\u003eonly tells you\u003c/strong\u003e (it won't block or fix).\u003c/p\u003e\n\n  \u003c!-- ─────────────── Status ─────────────── --\u003e\n  \u003ch2\u003eStatus\u003c/h2\u003e\n\n  \u003ctable style=\"margin:24px auto;border:none\"\u003e\n    \u003ctr style=\"border:none\"\u003e\n      \u003ctd style=\"text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none\"\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600\"\u003eversion\u003c/div\u003e\n        \u003cdiv style=\"font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px\"\u003ev0.8.2\u003c/div\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b\"\u003e2026-07\u003c/div\u003e\n      \u003c/td\u003e\n      \u003ctd style=\"text-align:center;width:140px;background:#dcfce7;padding:18px 10px;border-radius:8px;border:none\"\u003e\n        \u003cdiv style=\"font-size:11px;color:#15803d;letter-spacing:1.5px;text-transform:uppercase;font-weight:600\"\u003econformance\u003c/div\u003e\n        \u003cdiv style=\"font-size:24px;font-weight:800;color:#16a34a;margin:8px 0;letter-spacing:-0.5px\"\u003eL4\u003c/div\u003e\n        \u003cdiv style=\"font-size:11px;color:#15803d\"\u003e\u003ca href=\"https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md\" style=\"color:#15803d\"\u003ehighest of L0–L4 · self-declared\u003c/a\u003e\u003c/div\u003e\n      \u003c/td\u003e\n      \u003ctd style=\"text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none\"\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600\"\u003etests\u003c/div\u003e\n        \u003cdiv style=\"font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px\"\u003e2392\u003cspan style=\"font-size:16px;color:#94a3b8\"\u003e/2392\u003c/span\u003e\u003c/div\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b\"\u003eall pass\u003c/div\u003e\n      \u003c/td\u003e\n      \u003ctd style=\"text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none\"\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600\"\u003egate\u003c/div\u003e\n        \u003cdiv style=\"font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px\"\u003e15\u003cspan style=\"font-size:16px;color:#94a3b8\"\u003e stages\u003c/span\u003e\u003c/div\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b\"\u003e41 detectors\u003c/div\u003e\n      \u003c/td\u003e\n      \u003ctd style=\"text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none\"\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600\"\u003efeatures\u003c/div\u003e\n        \u003cdiv style=\"font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px\"\u003e245\u003c/div\u003e\n        \u003cdiv style=\"font-size:11px;color:#64748b\"\u003e242 done · self-spec\u003c/div\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003cp style=\"text-align:center;font-size:13px;color:#64748b;margin-top:12px\"\u003e226 test files · coverage drop blocked by the COVERAGE_DROP detector\u003c/p\u003e\n\n  \u003cblockquote style=\"border-left:4px solid #cbd5e1;padding:8px 16px;margin:24px 0;background:#f8fafc;color:#475569;font-size:14px\"\u003e\u003cstrong\u003eThe road to Ironclad 1.0\u003c/strong\u003e — 1.0 locks only when \u003cem\u003etwo independent implementations pass the L4 verification set\u003c/em\u003e (\u003ca href=\"https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md\"\u003eGOVERNANCE § 1\u003c/a\u003e). cladding is the first.\u003c/blockquote\u003e\n\n  \u003c!-- ─────────────── Docs ─────────────── --\u003e\n  \u003ch2\u003eDocs\u003c/h2\u003e\n  \u003cul\u003e\n    \u003cli\u003e\u003ca href=\"docs/project-context.md\"\u003eWhy cladding (project context)\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"docs/ssot-model.md\"\u003e4-tier governance model\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"docs/spec-ids-multi-dev.md\"\u003eHash-based feature ID\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"src/stages/detectors/README.md\"\u003e41 detector catalog\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"docs/glossary.md\"\u003eGlossary (EN · KO)\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"GOVERNANCE.md\"\u003eGovernance · roadmap to 1.0\u003c/a\u003e\u003c/li\u003e\n  \u003c/ul\u003e\n\n  \u003c!-- ─────────────── License ─────────────── --\u003e\n  \u003ch2\u003eLicense\u003c/h2\u003e\n  \u003cp\u003eMIT. \u003ca href=\"LICENSE\"\u003eLICENSE\u003c/a\u003e · related: \u003ca href=\"https://github.com/qwerfunch/ironclad\"\u003eIronclad\u003c/a\u003e (the standard being implemented) · \u003ca href=\"https://github.com/qwerfunch/harness-boot\"\u003eharness-boot\u003c/a\u003e (seed).\u003c/p\u003e\n\n  \u003cfooter\u003e\n    cladding · MIT License\n  \u003c/footer\u003e\n\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqwerfunch%2Fcladding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqwerfunch%2Fcladding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqwerfunch%2Fcladding/lists"}