[{"data":1,"prerenderedAt":1361},["ShallowReactive",2],{"navigation_docs_en":3,"-en-reference-scripts":188,"-en-reference-scripts-surround":1356},[4,35,85,145],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Project layout","\u002Fen\u002Fgetting-started\u002Fproject-layout","en\u002F1.getting-started\u002F3.project-layout","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":29},"Upgrade and uninstall","\u002Fen\u002Fgetting-started\u002Fupgrade-uninstall","en\u002F1.getting-started\u002F4.upgrade-uninstall","i-lucide-refresh-cw",{"title":31,"path":32,"stem":33,"icon":34},"Channels","\u002Fen\u002Fgetting-started\u002Fchannels","en\u002F1.getting-started\u002F5.channels","i-lucide-radio-tower",{"title":36,"icon":6,"path":37,"stem":38,"children":39,"page":6},"Concepts","\u002Fen\u002Fconcepts","en\u002F2.concepts",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Lanes and methods","\u002Fen\u002Fconcepts\u002Flanes-and-methods","en\u002F2.concepts\u002F1.lanes-and-methods","i-lucide-route",{"title":46,"path":47,"stem":48,"icon":49},"Living specs and changes","\u002Fen\u002Fconcepts\u002Fliving-specs","en\u002F2.concepts\u002F2.living-specs","i-lucide-book-open-check",{"title":51,"path":52,"stem":53,"icon":54},"Notation","\u002Fen\u002Fconcepts\u002Fnotation","en\u002F2.concepts\u002F3.notation","i-lucide-pen-line",{"title":56,"path":57,"stem":58,"icon":59},"QA and test data","\u002Fen\u002Fconcepts\u002Fqa-and-test-data","en\u002F2.concepts\u002F4.qa-and-test-data","i-lucide-clipboard-check",{"title":61,"path":62,"stem":63,"icon":64},"Knowledge","\u002Fen\u002Fconcepts\u002Fknowledge","en\u002F2.concepts\u002F5.knowledge","i-lucide-brain",{"title":66,"path":67,"stem":68,"icon":69},"Scripts","\u002Fen\u002Fconcepts\u002Fscripts","en\u002F2.concepts\u002F6.scripts","i-lucide-file-code",{"title":71,"path":72,"stem":73,"icon":74},"Guardrails","\u002Fen\u002Fconcepts\u002Fguardrails","en\u002F2.concepts\u002F7.guardrails","i-lucide-shield",{"title":76,"path":77,"stem":78,"icon":79},"Session context","\u002Fen\u002Fconcepts\u002Fsession-context","en\u002F2.concepts\u002F8.session-context","i-lucide-gauge",{"title":81,"path":82,"stem":83,"icon":84},"How the kit improves","\u002Fen\u002Fconcepts\u002Fself-improvement","en\u002F2.concepts\u002F9.self-improvement","i-lucide-sprout",{"title":86,"icon":6,"path":87,"stem":88,"children":89,"page":6},"Guides","\u002Fen\u002Fguides","en\u002F3.guides",[90,95,100,105,110,115,120,125,130,135,140],{"title":91,"path":92,"stem":93,"icon":94},"New app monorepo","\u002Fen\u002Fguides\u002Fnew-app-monorepo","en\u002F3.guides\u002F01.new-app-monorepo","i-lucide-boxes",{"title":96,"path":97,"stem":98,"icon":99},"Your website with Claude","\u002Fen\u002Fguides\u002Fcontent-site","en\u002F3.guides\u002F02.content-site","i-lucide-globe",{"title":101,"path":102,"stem":103,"icon":104},"Adopt an existing project","\u002Fen\u002Fguides\u002Fadopt-existing-project","en\u002F3.guides\u002F03.adopt-existing-project","i-lucide-git-merge",{"title":106,"path":107,"stem":108,"icon":109},"A change, end to end","\u002Fen\u002Fguides\u002Fspec-lane-change","en\u002F3.guides\u002F04.spec-lane-change","i-lucide-git-pull-request",{"title":111,"path":112,"stem":113,"icon":114},"A fast-track change","\u002Fen\u002Fguides\u002Ffast-track-change","en\u002F3.guides\u002F05.fast-track-change","i-lucide-zap",{"title":116,"path":117,"stem":118,"icon":119},"The TDD loop","\u002Fen\u002Fguides\u002Ftdd-loop","en\u002F3.guides\u002F06.tdd-loop","i-lucide-repeat",{"title":121,"path":122,"stem":123,"icon":124},"A QA pass","\u002Fen\u002Fguides\u002Fqa-pass","en\u002F3.guides\u002F07.qa-pass","i-lucide-clipboard-list",{"title":126,"path":127,"stem":128,"icon":129},"Test data","\u002Fen\u002Fguides\u002Ftest-data","en\u002F3.guides\u002F08.test-data","i-lucide-database",{"title":131,"path":132,"stem":133,"icon":134},"Releasing and upgrading","\u002Fen\u002Fguides\u002Freleasing-and-upgrading","en\u002F3.guides\u002F09.releasing-and-upgrading","i-lucide-rocket",{"title":136,"path":137,"stem":138,"icon":139},"Proposing improvements","\u002Fen\u002Fguides\u002Fproposing-improvements","en\u002F3.guides\u002F10.proposing-improvements","i-lucide-lightbulb",{"title":141,"path":142,"stem":143,"icon":144},"Docs for agents","\u002Fen\u002Fguides\u002Fdocs-for-agents","en\u002F3.guides\u002F11.docs-for-agents","i-lucide-bot",{"title":146,"icon":6,"path":147,"stem":148,"children":149,"page":6},"Reference","\u002Fen\u002Freference","en\u002F4.reference",[150,155,160,165,170,173,178,183],{"title":151,"path":152,"stem":153,"icon":154},"CLI","\u002Fen\u002Freference\u002Fcli","en\u002F4.reference\u002F1.cli","i-lucide-terminal",{"title":156,"path":157,"stem":158,"icon":159},"Configuration","\u002Fen\u002Freference\u002Fconfiguration","en\u002F4.reference\u002F2.configuration","i-lucide-settings",{"title":161,"path":162,"stem":163,"icon":164},"Skills","\u002Fen\u002Freference\u002Fskills","en\u002F4.reference\u002F3.skills","i-lucide-sparkles",{"title":166,"path":167,"stem":168,"icon":169},"Hooks","\u002Fen\u002Freference\u002Fhooks","en\u002F4.reference\u002F4.hooks","i-lucide-webhook",{"title":66,"path":171,"stem":172,"icon":69},"\u002Fen\u002Freference\u002Fscripts","en\u002F4.reference\u002F5.scripts",{"title":174,"path":175,"stem":176,"icon":177},"Changelog","\u002Fen\u002Freference\u002Fchangelog","en\u002F4.reference\u002F6.changelog","i-lucide-history",{"title":179,"path":180,"stem":181,"icon":182},"Templates","\u002Fen\u002Freference\u002Ftemplates","en\u002F4.reference\u002F7.templates","i-lucide-layout-template",{"title":184,"path":185,"stem":186,"icon":187},"Privacy","\u002Fen\u002Freference\u002Fprivacy","en\u002F4.reference\u002F8.privacy","i-lucide-lock",{"id":189,"title":66,"body":190,"description":1349,"extension":1350,"links":1351,"meta":1352,"navigation":1353,"path":171,"seo":1354,"stem":172,"__hash__":1355},"docs_en\u002Fen\u002F4.reference\u002F5.scripts.md",{"type":191,"value":192,"toc":1329},"minimark",[193,202,206,209,212,215,218,221,346,349,352,355,358,394,397,400,403,406,409,412,520,523,526,541,544,551,722,725,728,731,738,740,751,947,950,953,956,974,1102,1105,1108,1164,1167,1170,1188,1191,1197,1325],[194,195,196,197,201],"p",{},"The scripts folder path is in the session context; most are also ",[198,199,200],"code",{},"agent-kit"," commands.",[203,204,205],"h2",{"id":205},"changes",[194,207,208],{},"What changed since the base branch: committed + staged + unstaged + untracked. Shared by preflight.mjs and tdd.mjs. Read-only git.",[203,210,211],{"id":211},"checkpoint",[194,213,214],{},"Stop hook: after every turn (sync: async hooks are dropped when a headless run exits), saves where the work stands so the next session can resume — branch, changed files, active work. Silent; never fails.",[203,216,217],{"id":217},"commit",[194,219,220],{},"Conventional Commit helpers for agents.",[222,223,228],"pre",{"className":224,"code":225,"language":226,"meta":227,"style":227},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","node commit.mjs draft [--staged]        changed files → suggested scope(s) and type\nnode commit.mjs check \"\u003Cmessage>\"       validate: project commitlint if installed,\nnode commit.mjs check --file \u003Cpath>     else the built-in rules below (exit 1 = invalid)\n","bash","",[198,229,230,256,291],{"__ignoreMap":227},[231,232,235,239,243,246,250,253],"span",{"class":233,"line":234},"line",1,[231,236,238],{"class":237},"sBMFI","node",[231,240,242],{"class":241},"sfazB"," commit.mjs",[231,244,245],{"class":241}," draft",[231,247,249],{"class":248},"sTEyZ"," [--staged]        changed files → suggested scope(",[231,251,252],{"class":237},"s",[231,254,255],{"class":248},") and type\n",[231,257,259,261,263,266,270,273,276,279,282,285,288],{"class":233,"line":258},2,[231,260,238],{"class":237},[231,262,242],{"class":241},[231,264,265],{"class":241}," check",[231,267,269],{"class":268},"sMK4o"," \"",[231,271,272],{"class":241},"\u003Cmessage>",[231,274,275],{"class":268},"\"",[231,277,278],{"class":241},"       validate:",[231,280,281],{"class":241}," project",[231,283,284],{"class":241}," commitlint",[231,286,287],{"class":241}," if",[231,289,290],{"class":241}," installed,\n",[231,292,294,296,298,300,303,306,309,312,315,318,321,324,327,330,333,337,340,343],{"class":233,"line":293},3,[231,295,238],{"class":237},[231,297,242],{"class":241},[231,299,265],{"class":241},[231,301,302],{"class":241}," --file",[231,304,305],{"class":268}," \u003C",[231,307,308],{"class":241},"pat",[231,310,311],{"class":248},"h",[231,313,314],{"class":268},">",[231,316,317],{"class":241},"     else",[231,319,320],{"class":241}," the",[231,322,323],{"class":241}," built-in",[231,325,326],{"class":241}," rules",[231,328,329],{"class":241}," below",[231,331,332],{"class":248}," (exit ",[231,334,336],{"class":335},"sbssI","1",[231,338,339],{"class":241}," =",[231,341,342],{"class":241}," invalid",[231,344,345],{"class":248},")\n",[203,347,348],{"id":348},"config",[194,350,351],{},"Shared paths and config for the agent-kit plugin scripts and CLI.",[203,353,354],{"id":354},"context",[194,356,357],{},"Estimates the context loaded into EVERY Claude Code session of a project (CLAUDE.md chain + imports, memory index, agent-kit session context, skill listings) and finds skills Claude Code can't see. ~4 characters per token.",[222,359,361],{"className":224,"code":360,"language":226,"meta":227,"style":227},"node context.mjs [dir] [--budget 8000]      exit 1 over budget\nnode context.mjs [dir] --sections            cost of every heading in the CLAUDE.md chain\n",[198,362,363,385],{"__ignoreMap":227},[231,364,365,367,370,373,376,379,382],{"class":233,"line":234},[231,366,238],{"class":237},[231,368,369],{"class":241}," context.mjs",[231,371,372],{"class":248}," [dir] ",[231,374,375],{"class":268},"[",[231,377,378],{"class":248},"--budget 8000",[231,380,381],{"class":268},"]",[231,383,384],{"class":248},"      exit 1 over budget\n",[231,386,387,389,391],{"class":233,"line":258},[231,388,238],{"class":237},[231,390,369],{"class":241},[231,392,393],{"class":248}," [dir] --sections            cost of every heading in the CLAUDE.md chain\n",[203,395,396],{"id":396},"git-guard",[194,398,399],{},"PreToolUse(Bash) hook: blocks git commands the project's git flow forbids. Exit 2 blocks the call and shows stderr to Claude. Silent outside agent-kit projects.",[203,401,402],{"id":402},"git-rules",[194,404,405],{},"Which git commands never change a repository: data for the git guard (git-guard.mjs). Subcommands that never change the repo, whatever their arguments.",[203,407,408],{"id":408},"knowledge",[194,410,411],{},"Knowledge base: one concept per Markdown file with frontmatter, grouped in scopes, linked with [[name]]. This script does the deterministic work (index, search, validation) so agents spend tokens only on the entries they open.",[222,413,415],{"className":224,"code":414,"language":226,"meta":227,"style":227},"node knowledge.mjs paths\nnode knowledge.mjs find \u003Cterms...> [--body]\nnode knowledge.mjs related \u003Cname>       the entry, what it links to, what links to it\nnode knowledge.mjs index [--global]\nnode knowledge.mjs check [--global]\n",[198,416,417,427,449,496,509],{"__ignoreMap":227},[231,418,419,421,424],{"class":233,"line":234},[231,420,238],{"class":237},[231,422,423],{"class":241}," knowledge.mjs",[231,425,426],{"class":241}," paths\n",[231,428,429,431,433,436,438,441,444,446],{"class":233,"line":258},[231,430,238],{"class":237},[231,432,423],{"class":241},[231,434,435],{"class":241}," find",[231,437,305],{"class":268},[231,439,440],{"class":241},"terms..",[231,442,443],{"class":248},".",[231,445,314],{"class":268},[231,447,448],{"class":248}," [--body]\n",[231,450,451,453,455,458,460,463,466,468,471,474,477,480,483,486,488,490,493],{"class":233,"line":293},[231,452,238],{"class":237},[231,454,423],{"class":241},[231,456,457],{"class":241}," related",[231,459,305],{"class":268},[231,461,462],{"class":241},"nam",[231,464,465],{"class":248},"e",[231,467,314],{"class":268},[231,469,470],{"class":241},"       the",[231,472,473],{"class":241}," entry,",[231,475,476],{"class":241}," what",[231,478,479],{"class":241}," it",[231,481,482],{"class":241}," links",[231,484,485],{"class":241}," to,",[231,487,476],{"class":241},[231,489,482],{"class":241},[231,491,492],{"class":241}," to",[231,494,495],{"class":241}," it\n",[231,497,499,501,503,506],{"class":233,"line":498},4,[231,500,238],{"class":237},[231,502,423],{"class":241},[231,504,505],{"class":241}," index",[231,507,508],{"class":248}," [--global]\n",[231,510,512,514,516,518],{"class":233,"line":511},5,[231,513,238],{"class":237},[231,515,423],{"class":241},[231,517,265],{"class":241},[231,519,508],{"class":248},[203,521,522],{"id":522},"preflight",[194,524,525],{},"Pre-merge checklist from the diff between the merge base and the working tree (committed + staged + unstaged + untracked). Read-only git.",[222,527,529],{"className":224,"code":528,"language":226,"meta":227,"style":227},"node preflight.mjs [base-branch]      exit 1 when a violation is found\n",[198,530,531],{"__ignoreMap":227},[231,532,533,535,538],{"class":233,"line":234},[231,534,238],{"class":237},[231,536,537],{"class":241}," preflight.mjs",[231,539,540],{"class":248}," [base-branch]      exit 1 when a violation is found\n",[203,542,543],{"id":543},"qa",[194,545,546,547,550],{},"QA dimension: a checklist generated from the living specs (one item per scenario), dated QA runs that record results, and the map from scenarios to the test-data fixtures (",[198,548,549],{},"-- @fixture \u003Cids…> @tag"," in seed.sql).",[222,552,554],{"className":224,"code":553,"language":226,"meta":227,"style":227},"node qa.mjs sync [--check]   regenerate work\u002Fqa\u002Fchecklist.md + checklist.html (--check: exit 1 if stale)\nnode qa.mjs run              start work\u002Fqa\u002Fruns\u002F\u003Ctoday>.md with every scenario unticked\nnode qa.mjs status           latest result per scenario (pass \u002F fail \u002F blocked \u002F n\u002Fa \u002F re-check \u002F never run)\nnode qa.mjs gaps             scenarios without a fixture; fixtures naming unknown scenarios (exit 1)\n",[198,555,556,585,626,680],{"__ignoreMap":227},[231,557,558,560,563,566,569,572,575,578,580,583],{"class":233,"line":234},[231,559,238],{"class":237},[231,561,562],{"class":241}," qa.mjs",[231,564,565],{"class":241}," sync",[231,567,568],{"class":248}," [--check]   regenerate work\u002Fqa\u002Fchecklist.md + checklist.html (",[231,570,571],{"class":237},"--check:",[231,573,574],{"class":241}," exit",[231,576,577],{"class":335}," 1",[231,579,287],{"class":241},[231,581,582],{"class":241}," stale",[231,584,345],{"class":248},[231,586,587,589,591,594,597,600,603,606,609,611,614,617,620,623],{"class":233,"line":258},[231,588,238],{"class":237},[231,590,562],{"class":241},[231,592,593],{"class":241}," run",[231,595,596],{"class":241},"              start",[231,598,599],{"class":241}," work\u002Fqa\u002Fruns\u002F",[231,601,602],{"class":268},"\u003C",[231,604,605],{"class":241},"toda",[231,607,608],{"class":248},"y",[231,610,314],{"class":268},[231,612,613],{"class":241},".md",[231,615,616],{"class":241}," with",[231,618,619],{"class":241}," every",[231,621,622],{"class":241}," scenario",[231,624,625],{"class":241}," unticked\n",[231,627,628,630,632,635,638,641,644,646,649,652,655,658,661,663,666,668,671,673,676,678],{"class":233,"line":293},[231,629,238],{"class":237},[231,631,562],{"class":241},[231,633,634],{"class":241}," status",[231,636,637],{"class":241},"           latest",[231,639,640],{"class":241}," result",[231,642,643],{"class":241}," per",[231,645,622],{"class":241},[231,647,648],{"class":248}," (pass ",[231,650,651],{"class":241},"\u002F",[231,653,654],{"class":241}," fail",[231,656,657],{"class":241}," \u002F",[231,659,660],{"class":241}," blocked",[231,662,657],{"class":241},[231,664,665],{"class":241}," n\u002Fa",[231,667,657],{"class":241},[231,669,670],{"class":241}," re-check",[231,672,657],{"class":241},[231,674,675],{"class":241}," never",[231,677,593],{"class":241},[231,679,345],{"class":248},[231,681,682,684,686,689,692,695,698,701,704,707,710,713,716,718,720],{"class":233,"line":498},[231,683,238],{"class":237},[231,685,562],{"class":241},[231,687,688],{"class":241}," gaps",[231,690,691],{"class":241},"             scenarios",[231,693,694],{"class":241}," without",[231,696,697],{"class":241}," a",[231,699,700],{"class":241}," fixture",[231,702,703],{"class":268},";",[231,705,706],{"class":237}," fixtures",[231,708,709],{"class":241}," naming",[231,711,712],{"class":241}," unknown",[231,714,715],{"class":241}," scenarios",[231,717,332],{"class":248},[231,719,336],{"class":335},[231,721,345],{"class":248},[203,723,724],{"id":724},"run",[194,726,727],{},"Runs a command and returns a compact result for the agent: exit code, time, the lines that matter (failures, errors) and the tail. The full output goes to a log file, so a long run costs a few dozen lines of context, not thousands.",[203,729,730],{"id":730},"script-nudge",[194,732,733,734,737],{},"PostToolUse(Write) hook: when the agent writes a script somewhere it will be lost (outside the project, at the project root, or in a tmp folder), remind it of the ",[198,735,736],{},"scripts"," skill so the script is found and reused next time.",[203,739,736],{"id":736},[194,741,742,743,746,747,750],{},"Script registry: find, run, test, scaffold and document the scripts agents and users write, so they are reused instead of rebuilt. A script is documented by ",[198,744,745],{},"@key: value"," lines in its first 40 lines (any comment style): @name @summary @usage (required: summary, usage) · @tags ",[231,748,749],{},"a, b"," · @test file",[222,752,754],{"className":224,"code":753,"language":226,"meta":227,"style":227},"node scripts.mjs find \u003Cwords...>          scripts (project, scratch, library) + skills\nnode scripts.mjs list\nnode scripts.mjs run \u003Cname|path> [--lines N] [-- args...]\nnode scripts.mjs test [name]\nnode scripts.mjs new \u003Carea>\u002F\u003Cname>.\u003Cext> --summary \"…\" [--usage \"…\"] [--scratch|--library]\nnode scripts.mjs index                    regenerate scripts\u002FREADME.md\nnode scripts.mjs check                    undocumented, duplicate, missing tests\n",[198,755,756,789,798,829,841,911,926],{"__ignoreMap":227},[231,757,758,760,763,765,767,770,772,774,777,780,783,786],{"class":233,"line":234},[231,759,238],{"class":237},[231,761,762],{"class":241}," scripts.mjs",[231,764,435],{"class":241},[231,766,305],{"class":268},[231,768,769],{"class":241},"words..",[231,771,443],{"class":248},[231,773,314],{"class":268},[231,775,776],{"class":241},"          scripts",[231,778,779],{"class":248}," (project, ",[231,781,782],{"class":241},"scratch,",[231,784,785],{"class":241}," library",[231,787,788],{"class":248},") + skills\n",[231,790,791,793,795],{"class":233,"line":258},[231,792,238],{"class":237},[231,794,762],{"class":241},[231,796,797],{"class":241}," list\n",[231,799,800,802,804,806,808,811,814,817,820,823,826],{"class":233,"line":293},[231,801,238],{"class":237},[231,803,762],{"class":241},[231,805,593],{"class":241},[231,807,305],{"class":268},[231,809,810],{"class":241},"name",[231,812,813],{"class":268},"|",[231,815,816],{"class":237},"path",[231,818,819],{"class":248},"> [--lines ",[231,821,822],{"class":241},"N]",[231,824,825],{"class":248}," [-- ",[231,827,828],{"class":241},"args...]\n",[231,830,831,833,835,838],{"class":233,"line":498},[231,832,238],{"class":237},[231,834,762],{"class":241},[231,836,837],{"class":241}," test",[231,839,840],{"class":248}," [name]\n",[231,842,843,845,847,850,852,855,858,860,862,864,866,868,870,872,874,877,880,882,885,887,890,892,895,897,899,901,903,906,908],{"class":233,"line":511},[231,844,238],{"class":237},[231,846,762],{"class":241},[231,848,849],{"class":241}," new",[231,851,305],{"class":268},[231,853,854],{"class":241},"are",[231,856,857],{"class":248},"a",[231,859,314],{"class":268},[231,861,651],{"class":241},[231,863,602],{"class":268},[231,865,462],{"class":241},[231,867,465],{"class":248},[231,869,314],{"class":268},[231,871,443],{"class":241},[231,873,602],{"class":268},[231,875,876],{"class":241},"ex",[231,878,879],{"class":248},"t",[231,881,314],{"class":268},[231,883,884],{"class":241}," --summary",[231,886,269],{"class":268},[231,888,889],{"class":241},"…",[231,891,275],{"class":268},[231,893,894],{"class":248}," [--usage ",[231,896,275],{"class":268},[231,898,889],{"class":241},[231,900,275],{"class":268},[231,902,381],{"class":241},[231,904,905],{"class":248}," [--scratch",[231,907,813],{"class":268},[231,909,910],{"class":237},"--library]\n",[231,912,914,916,918,920,923],{"class":233,"line":913},6,[231,915,238],{"class":237},[231,917,762],{"class":241},[231,919,505],{"class":241},[231,921,922],{"class":241},"                    regenerate",[231,924,925],{"class":241}," scripts\u002FREADME.md\n",[231,927,929,931,933,935,938,941,944],{"class":233,"line":928},7,[231,930,238],{"class":237},[231,932,762],{"class":241},[231,934,265],{"class":241},[231,936,937],{"class":241},"                    undocumented,",[231,939,940],{"class":241}," duplicate,",[231,942,943],{"class":241}," missing",[231,945,946],{"class":241}," tests\n",[203,948,949],{"id":949},"session-start",[194,951,952],{},"SessionStart hook: injects the project profile (voice, language, git flow, method, work lanes), a compact knowledge index and the script index. Silent outside agent-kit projects.",[203,954,955],{"id":955},"specs",[194,957,958,959],{},"Living specs (work\u002Fspecs\u002F",[960,961,962,963],"capability",{},"\u002Fspec.md) and the delta specs of changes (work\u002Fchanges\u002FNNN-slug\u002Fspecs\u002F",[960,964,965,966,969,970,973],{},".md). Notation: EARS requirements (",[198,967,968],{},"### cap.R1 — name","), Given\u002FWhen\u002FThen scenarios tagged with one ZOMBIES category (",[198,971,972],{},"#### cap.R1.S1 — name @boundary","). IDs are never reused.",[222,975,977],{"className":224,"code":976,"language":226,"meta":227,"style":227},"node specs.mjs lint [cap|NNN]          notation + id checks (exit 1 on errors)\nnode specs.mjs next \u003Ccap|cap.Rn>       next free requirement \u002F scenario id\nnode specs.mjs merge \u003CNNN>             apply a change's deltas to the living specs\nnode specs.mjs trace [NNN|cap]         scenario → tests (id in the test name) or ✅ rows\nnode specs.mjs list                    capabilities with requirement and scenario counts\n",[198,978,979,1021,1059,1092,1097],{"__ignoreMap":227},[231,980,981,983,986,989,992,994,997,1000,1003,1006,1009,1011,1013,1016,1019],{"class":233,"line":234},[231,982,238],{"class":237},[231,984,985],{"class":241}," specs.mjs",[231,987,988],{"class":241}," lint",[231,990,991],{"class":248}," [cap",[231,993,813],{"class":268},[231,995,996],{"class":237},"NNN]",[231,998,999],{"class":241},"          notation",[231,1001,1002],{"class":241}," +",[231,1004,1005],{"class":241}," id",[231,1007,1008],{"class":241}," checks",[231,1010,332],{"class":248},[231,1012,336],{"class":335},[231,1014,1015],{"class":241}," on",[231,1017,1018],{"class":241}," errors",[231,1020,345],{"class":248},[231,1022,1023,1025,1027,1030,1032,1035,1037,1040,1043,1046,1049,1052,1054,1056],{"class":233,"line":258},[231,1024,238],{"class":237},[231,1026,985],{"class":241},[231,1028,1029],{"class":241}," next",[231,1031,305],{"class":268},[231,1033,1034],{"class":241},"cap",[231,1036,813],{"class":268},[231,1038,1039],{"class":237},"cap.Rn",[231,1041,1042],{"class":248},">       ",[231,1044,1045],{"class":241},"next",[231,1047,1048],{"class":241}," free",[231,1050,1051],{"class":241}," requirement",[231,1053,657],{"class":241},[231,1055,622],{"class":241},[231,1057,1058],{"class":241}," id\n",[231,1060,1061,1063,1065,1068,1070,1073,1076,1078,1081,1083,1086,1089],{"class":233,"line":293},[231,1062,238],{"class":237},[231,1064,985],{"class":241},[231,1066,1067],{"class":241}," merge",[231,1069,305],{"class":268},[231,1071,1072],{"class":241},"NN",[231,1074,1075],{"class":248},"N",[231,1077,314],{"class":268},[231,1079,1080],{"class":241},"             apply",[231,1082,697],{"class":241},[231,1084,1085],{"class":241}," change",[231,1087,1088],{"class":268},"'",[231,1090,1091],{"class":241},"s deltas to the living specs\n",[231,1093,1094],{"class":233,"line":498},[231,1095,1096],{"class":241},"node specs.mjs trace [NNN|cap]         scenario → tests (id in the test name) or ✅ rows\n",[231,1098,1099],{"class":233,"line":511},[231,1100,1101],{"class":241},"node specs.mjs list                    capabilities with requirement and scenario counts\n",[203,1103,1104],{"id":1104},"tdd",[194,1106,1107],{},"TDD support: which changed logic files have no test, and a compact run of only the tests related to the current changes.",[222,1109,1111],{"className":224,"code":1110,"language":226,"meta":227,"style":227},"node tdd.mjs status [base]\nnode tdd.mjs run [test files...] [--all] [--base \u003Cbranch>] [--lines N]\n",[198,1112,1113,1125],{"__ignoreMap":227},[231,1114,1115,1117,1120,1122],{"class":233,"line":234},[231,1116,238],{"class":237},[231,1118,1119],{"class":241}," tdd.mjs",[231,1121,634],{"class":241},[231,1123,1124],{"class":248}," [base]\n",[231,1126,1127,1129,1131,1133,1136,1139,1142,1144,1147,1149,1152,1155,1158,1161],{"class":233,"line":258},[231,1128,238],{"class":237},[231,1130,1119],{"class":241},[231,1132,593],{"class":241},[231,1134,1135],{"class":248}," [test ",[231,1137,1138],{"class":241},"files...]",[231,1140,1141],{"class":248}," [--all] ",[231,1143,375],{"class":268},[231,1145,1146],{"class":248},"--base ",[231,1148,602],{"class":268},[231,1150,1151],{"class":248},"branch",[231,1153,1154],{"class":268},">]",[231,1156,1157],{"class":268}," [",[231,1159,1160],{"class":248},"--lines N",[231,1162,1163],{"class":268},"]\n",[203,1165,1166],{"id":1166},"usage",[194,1168,1169],{},"Usage signals for a retro: what ran and failed, scripts never used, scratch scripts to promote or delete, knowledge nobody links to, work status.",[222,1171,1173],{"className":224,"code":1172,"language":226,"meta":227,"style":227},"node usage.mjs [--days 30]\n",[198,1174,1175],{"__ignoreMap":227},[231,1176,1177,1179,1182,1185],{"class":233,"line":234},[231,1178,238],{"class":237},[231,1180,1181],{"class":241}," usage.mjs",[231,1183,1184],{"class":248}," [--days ",[231,1186,1187],{"class":241},"30]\n",[203,1189,1190],{"id":1190},"work",[194,1192,1193,1194],{},"Work tracking: fast-track features (work\u002Ffeatures\u002F) and changes (work\u002Fchanges\u002FNNN-slug\u002F: proposal, delta specs, plan, tasks), their status and next task, and traceability (scenario → test or verified check). Living specs (work\u002Fspecs\u002F",[960,1195,1196],{},"\u002Fspec.md) are handled by specs.mjs.",[222,1198,1200],{"className":224,"code":1199,"language":226,"meta":227,"style":227},"node work.mjs status              active work with progress and next task\nnode work.mjs board               regenerate work\u002FBOARD.md\nnode work.mjs trace [NNN]         scenarios (or legacy AC-n) → tests or ✅ checks\nnode work.mjs new feature|change \u003Cslug> [--title \"…\"]   next number + files from the templates\n",[198,1201,1202,1230,1245,1269],{"__ignoreMap":227},[231,1203,1204,1206,1209,1211,1214,1217,1219,1222,1225,1227],{"class":233,"line":234},[231,1205,238],{"class":237},[231,1207,1208],{"class":241}," work.mjs",[231,1210,634],{"class":241},[231,1212,1213],{"class":241},"              active",[231,1215,1216],{"class":241}," work",[231,1218,616],{"class":241},[231,1220,1221],{"class":241}," progress",[231,1223,1224],{"class":241}," and",[231,1226,1029],{"class":241},[231,1228,1229],{"class":241}," task\n",[231,1231,1232,1234,1236,1239,1242],{"class":233,"line":258},[231,1233,238],{"class":237},[231,1235,1208],{"class":241},[231,1237,1238],{"class":241}," board",[231,1240,1241],{"class":241},"               regenerate",[231,1243,1244],{"class":241}," work\u002FBOARD.md\n",[231,1246,1247,1249,1251,1254,1257,1260,1263,1266],{"class":233,"line":293},[231,1248,238],{"class":237},[231,1250,1208],{"class":241},[231,1252,1253],{"class":241}," trace",[231,1255,1256],{"class":248}," [NNN]         scenarios (",[231,1258,1259],{"class":237},"or",[231,1261,1262],{"class":241}," legacy",[231,1264,1265],{"class":241}," AC-n",[231,1267,1268],{"class":248},") → tests or ✅ checks\n",[231,1270,1271,1273,1275,1277,1280,1282,1285,1287,1290,1293,1295,1298,1300,1302,1304,1306,1309,1312,1314,1317,1320,1322],{"class":233,"line":498},[231,1272,238],{"class":237},[231,1274,1208],{"class":241},[231,1276,849],{"class":241},[231,1278,1279],{"class":241}," feature",[231,1281,813],{"class":268},[231,1283,1284],{"class":237},"change",[231,1286,305],{"class":268},[231,1288,1289],{"class":241},"slu",[231,1291,1292],{"class":248},"g",[231,1294,314],{"class":268},[231,1296,1297],{"class":248}," [--title ",[231,1299,275],{"class":268},[231,1301,889],{"class":241},[231,1303,275],{"class":268},[231,1305,381],{"class":241},[231,1307,1308],{"class":241},"   next",[231,1310,1311],{"class":241}," number",[231,1313,1002],{"class":241},[231,1315,1316],{"class":241}," files",[231,1318,1319],{"class":241}," from",[231,1321,320],{"class":241},[231,1323,1324],{"class":241}," templates\n",[1326,1327,1328],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":227,"searchDepth":258,"depth":258,"links":1330},[1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348],{"id":205,"depth":258,"text":205},{"id":211,"depth":258,"text":211},{"id":217,"depth":258,"text":217},{"id":348,"depth":258,"text":348},{"id":354,"depth":258,"text":354},{"id":396,"depth":258,"text":396},{"id":402,"depth":258,"text":402},{"id":408,"depth":258,"text":408},{"id":522,"depth":258,"text":522},{"id":543,"depth":258,"text":543},{"id":724,"depth":258,"text":724},{"id":730,"depth":258,"text":730},{"id":736,"depth":258,"text":736},{"id":949,"depth":258,"text":949},{"id":955,"depth":258,"text":955},{"id":1104,"depth":258,"text":1104},{"id":1166,"depth":258,"text":1166},{"id":1190,"depth":258,"text":1190},"The zero-dependency plugin scripts and their commands.","md",null,{},{"icon":69},{"title":66,"description":1349},"higeS_QZTLJ4AXPOhvPe6JbeIfcrCT2iXipRfagjqHI",[1357,1359],{"title":166,"path":167,"stem":168,"description":1358,"icon":169,"children":-1},"The plugin hooks and what they enforce.",{"title":174,"path":175,"stem":176,"description":1360,"icon":177,"children":-1},"What changed in every version.",1793099616718]