[{"data":1,"prerenderedAt":1367},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-library-and-chains":520,"-reference-configuration-library-and-chains-surround":1362},[4,28,51,191,222,485],{"title":5,"path":6,"stem":7,"children":8},"Get started","\u002Fget-started","1.get-started",[9,12,16,20,24],{"title":10,"path":6,"stem":11},"Overview","1.get-started\u002Findex",{"title":13,"path":14,"stem":15},"Why Kraft","\u002Fget-started\u002Fwhy-kraft","1.get-started\u002F0.why-kraft",{"title":17,"path":18,"stem":19},"Install","\u002Fget-started\u002Finstall","1.get-started\u002F1.install",{"title":21,"path":22,"stem":23},"Your first work item","\u002Fget-started\u002Ffirst-work-item","1.get-started\u002F2.first-work-item",{"title":25,"path":26,"stem":27},"FAQ","\u002Fget-started\u002Ffaq","1.get-started\u002F3.faq",{"title":29,"path":30,"stem":31,"children":32},"Concepts","\u002Fconcepts","2.concepts",[33,35,39,43,47],{"title":10,"path":30,"stem":34},"2.concepts\u002Findex",{"title":36,"path":37,"stem":38},"How a work item runs","\u002Fconcepts\u002Fhow-a-work-item-runs","2.concepts\u002F1.how-a-work-item-runs",{"title":40,"path":41,"stem":42},"Caps and budgets","\u002Fconcepts\u002Fcaps-and-budgets","2.concepts\u002F2.caps-and-budgets",{"title":44,"path":45,"stem":46},"Why a permission gate","\u002Fconcepts\u002Fpermission-gate","2.concepts\u002F3.permission-gate",{"title":48,"path":49,"stem":50},"Vocabulary","\u002Fconcepts\u002Fvocabulary","2.concepts\u002F4.vocabulary",{"title":52,"path":53,"stem":54,"children":55},"Guides","\u002Fguides","3.guides",[56,58,96,117,138,187],{"title":10,"path":53,"stem":57},"3.guides\u002Findex",{"title":59,"path":60,"stem":61,"children":62,"page":95},"Day to day","\u002Fguides\u002Fday-to-day","3.guides\u002F1.day-to-day",[63,67,71,75,79,83,87,91],{"title":64,"path":65,"stem":66},"The setup wizard on first start","\u002Fguides\u002Fday-to-day\u002Ffirst-run","3.guides\u002F1.day-to-day\u002F2.first-run",{"title":68,"path":69,"stem":70},"File a work item","\u002Fguides\u002Fday-to-day\u002Ffile-a-work-item","3.guides\u002F1.day-to-day\u002F3.file-a-work-item",{"title":72,"path":73,"stem":74},"Use Kraft from your agent","\u002Fguides\u002Fday-to-day\u002Fagent-integration","3.guides\u002F1.day-to-day\u002F4.agent-integration",{"title":76,"path":77,"stem":78},"Reviewing a change","\u002Fguides\u002Fday-to-day\u002Freview-a-change","3.guides\u002F1.day-to-day\u002F5.review-a-change",{"title":80,"path":81,"stem":82},"Raise a cap on a stopped item","\u002Fguides\u002Fday-to-day\u002Fraise-a-cap","3.guides\u002F1.day-to-day\u002F6.raise-a-cap",{"title":84,"path":85,"stem":86},"Kraft for VS Code","\u002Fguides\u002Fday-to-day\u002Fvscode","3.guides\u002F1.day-to-day\u002F7.vscode",{"title":88,"path":89,"stem":90},"Kraft on a phone","\u002Fguides\u002Fday-to-day\u002Fkraft-on-a-phone","3.guides\u002F1.day-to-day\u002F8.kraft-on-a-phone",{"title":92,"path":93,"stem":94},"Get notified when an item needs you","\u002Fguides\u002Fday-to-day\u002Fnotifications","3.guides\u002F1.day-to-day\u002F9.notifications",false,{"title":97,"path":98,"stem":99,"children":100,"page":95},"Customize and automate","\u002Fguides\u002Fcustomize","3.guides\u002F2.customize",[101,105,109,113],{"title":102,"path":103,"stem":104},"Write your own chain","\u002Fguides\u002Fcustomize\u002Fwrite-your-own-chain","3.guides\u002F2.customize\u002F1.write-your-own-chain",{"title":106,"path":107,"stem":108},"Add a security review or a gate reviewer","\u002Fguides\u002Fcustomize\u002Fadd-review-agents","3.guides\u002F2.customize\u002F2.add-review-agents",{"title":110,"path":111,"stem":112},"Schedule or webhook work","\u002Fguides\u002Fcustomize\u002Fschedule-and-webhook-work","3.guides\u002F2.customize\u002F3.schedule-and-webhook-work",{"title":114,"path":115,"stem":116},"Share chains with add-ons","\u002Fguides\u002Fcustomize\u002Fshare-chains-with-addons","3.guides\u002F2.customize\u002F4.share-chains-with-addons",{"title":118,"path":119,"stem":120,"children":121,"page":95},"Agents and harnesses","\u002Fguides\u002Fharnesses","3.guides\u002F3.harnesses",[122,126,130,134],{"title":123,"path":124,"stem":125},"Switch a task to another harness","\u002Fguides\u002Fharnesses\u002Fswitch-harness","3.guides\u002F3.harnesses\u002F1.switch-harness",{"title":127,"path":128,"stem":129},"Add or override a harness","\u002Fguides\u002Fharnesses\u002Fadding-a-harness","3.guides\u002F3.harnesses\u002F2.adding-a-harness",{"title":131,"path":132,"stem":133},"Build a worker Kit","\u002Fguides\u002Fharnesses\u002Fworker-kit","3.guides\u002F3.harnesses\u002F3.worker-kit",{"title":135,"path":136,"stem":137},"Give a worker its login","\u002Fguides\u002Fharnesses\u002Fgive-a-worker-its-login","3.guides\u002F3.harnesses\u002F4.give-a-worker-its-login",{"title":139,"path":140,"stem":141,"children":142,"page":95},"Run the server","\u002Fguides\u002Frun","3.guides\u002F4.run",[143,147,151,155,159,163,167,171,175,179,183],{"title":144,"path":145,"stem":146},"Remote access","\u002Fguides\u002Frun\u002Fremote-access","3.guides\u002F4.run\u002F01.remote-access",{"title":148,"path":149,"stem":150},"Put a proxy in front of Kraft","\u002Fguides\u002Frun\u002Fput-a-proxy-in-front-of-kraft","3.guides\u002F4.run\u002F02.put-a-proxy-in-front-of-kraft",{"title":152,"path":153,"stem":154},"Restart Kraft without ending running agents","\u002Fguides\u002Frun\u002Frestart-kraft","3.guides\u002F4.run\u002F03.restart-kraft",{"title":156,"path":157,"stem":158},"Back up and restore the database","\u002Fguides\u002Frun\u002Fback-up-and-restore","3.guides\u002F4.run\u002F04.back-up-and-restore",{"title":160,"path":161,"stem":162},"Logs and disk space","\u002Fguides\u002Frun\u002Flogs-and-disk-space","3.guides\u002F4.run\u002F05.logs-and-disk-space",{"title":164,"path":165,"stem":166},"Run Kraft as a service","\u002Fguides\u002Frun\u002Frun-as-a-service","3.guides\u002F4.run\u002F06.run-as-a-service",{"title":168,"path":169,"stem":170},"Upgrade Kraft","\u002Fguides\u002Frun\u002Fupgrade-kraft","3.guides\u002F4.run\u002F07.upgrade-kraft",{"title":172,"path":173,"stem":174},"Upgrade your configuration","\u002Fguides\u002Frun\u002Fupgrade-your-configuration","3.guides\u002F4.run\u002F08.upgrade-your-configuration",{"title":176,"path":177,"stem":178},"Upgrade from 1.4","\u002Fguides\u002Frun\u002Fupgrade-from-1-4","3.guides\u002F4.run\u002F09.upgrade-from-1-4",{"title":180,"path":181,"stem":182},"Upgrade from 0.x or a release candidate","\u002Fguides\u002Frun\u002Fupgrade-from-0-x-or-a-release-candidate","3.guides\u002F4.run\u002F10.upgrade-from-0-x-or-a-release-candidate",{"title":184,"path":185,"stem":186},"Roll back to 1.4","\u002Fguides\u002Frun\u002Froll-back","3.guides\u002F4.run\u002F11.roll-back",{"title":188,"path":189,"stem":190},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F5.kraft-lite",{"title":192,"path":193,"stem":194,"children":195},"Troubleshooting","\u002Ftroubleshooting","4.troubleshooting",[196,198,202,206,210,214,218],{"title":10,"path":193,"stem":197},"4.troubleshooting\u002Findex",{"title":199,"path":200,"stem":201},"Why did my item stop?","\u002Ftroubleshooting\u002Fwhy-did-my-item-stop","4.troubleshooting\u002F1.why-did-my-item-stop",{"title":203,"path":204,"stem":205},"Stop reasons in detail","\u002Ftroubleshooting\u002Fstop-reasons-in-detail","4.troubleshooting\u002F2.stop-reasons-in-detail",{"title":207,"path":208,"stem":209},"Starting and reaching Kraft","\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft","4.troubleshooting\u002F3.starting-and-reaching-kraft",{"title":211,"path":212,"stem":213},"Doctor failures","\u002Ftroubleshooting\u002Fdoctor-failures","4.troubleshooting\u002F4.doctor-failures",{"title":215,"path":216,"stem":217},"Sandbox and Kit stops","\u002Ftroubleshooting\u002Fsandbox-and-kit-stops","4.troubleshooting\u002F5.sandbox-and-kit-stops",{"title":219,"path":220,"stem":221},"Add-on problems","\u002Ftroubleshooting\u002Faddon-problems","4.troubleshooting\u002F6.addon-problems",{"title":223,"path":224,"stem":225,"children":226},"Reference","\u002Freference","5.reference",[227,229,267,289,293,391,409,435,439,443,477,481],{"title":10,"path":224,"stem":228},"5.reference\u002Findex",{"title":230,"path":231,"stem":232,"children":233},"Web UI","\u002Freference\u002Fweb-ui","5.reference\u002F00.web-ui\u002Findex",[234,235,239,243,247,251,255,259,263],{"title":10,"path":231,"stem":232},{"title":236,"path":237,"stem":238},"Sidebar, search, and keyboard","\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard","5.reference\u002F00.web-ui\u002F0.sidebar-search-and-keyboard",{"title":240,"path":241,"stem":242},"The board","\u002Freference\u002Fweb-ui\u002Fboard","5.reference\u002F00.web-ui\u002F1.board",{"title":244,"path":245,"stem":246},"An item's page","\u002Freference\u002Fweb-ui\u002Fitem-page","5.reference\u002F00.web-ui\u002F2.item-page",{"title":248,"path":249,"stem":250},"Fix loops and test scopes","\u002Freference\u002Fweb-ui\u002Ffix-loops-and-test-scopes","5.reference\u002F00.web-ui\u002F3.fix-loops-and-test-scopes",{"title":252,"path":253,"stem":254},"Config before an item starts","\u002Freference\u002Fweb-ui\u002Fconfig-before-start","5.reference\u002F00.web-ui\u002F4.config-before-start",{"title":256,"path":257,"stem":258},"The review page","\u002Freference\u002Fweb-ui\u002Freview-page","5.reference\u002F00.web-ui\u002F5.review-page",{"title":260,"path":261,"stem":262},"Templates and Settings","\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings","5.reference\u002F00.web-ui\u002F6.templates-and-settings",{"title":264,"path":265,"stem":266},"Analytics","\u002Freference\u002Fweb-ui\u002Fanalytics","5.reference\u002F00.web-ui\u002F7.analytics",{"title":268,"path":269,"stem":270,"children":271},"CLI","\u002Freference\u002Fcli","5.reference\u002F01.cli\u002Findex",[272,273,277,281,285],{"title":10,"path":269,"stem":270},{"title":274,"path":275,"stem":276},"Item verbs","\u002Freference\u002Fcli\u002Fitem","5.reference\u002F01.cli\u002F2.item",{"title":278,"path":279,"stem":280},"View verbs","\u002Freference\u002Fcli\u002Fview","5.reference\u002F01.cli\u002F3.view",{"title":282,"path":283,"stem":284},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","5.reference\u002F01.cli\u002F4.repo",{"title":286,"path":287,"stem":288},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","5.reference\u002F01.cli\u002F5.admin",{"title":290,"path":291,"stem":292},"Work item statuses","\u002Freference\u002Fstatuses","5.reference\u002F02.statuses",{"title":294,"path":295,"stem":296,"children":297},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F03.configuration\u002Findex",[298,299,317,321,325,329,333,337,341,345,379,383,387],{"title":10,"path":295,"stem":296},{"title":300,"path":301,"stem":302,"children":303},"repos.yaml","\u002Freference\u002Fconfiguration\u002Frepos","5.reference\u002F03.configuration\u002F02.repos\u002Findex",[304,305,309,313],{"title":10,"path":301,"stem":302},{"title":306,"path":307,"stem":308},"How connect proposes commands","\u002Freference\u002Fconfiguration\u002Frepos\u002Fconnect-proposals","5.reference\u002F03.configuration\u002F02.repos\u002F1.connect-proposals",{"title":310,"path":311,"stem":312},"detectors.yaml","\u002Freference\u002Fconfiguration\u002Frepos\u002Fdetectors","5.reference\u002F03.configuration\u002F02.repos\u002F2.detectors",{"title":314,"path":315,"stem":316},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces",{"title":318,"path":319,"stem":320},"policy.yaml","\u002Freference\u002Fconfiguration\u002Fpolicy","5.reference\u002F03.configuration\u002F03.policy",{"title":322,"path":323,"stem":324},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","5.reference\u002F03.configuration\u002F04.library-and-chains",{"title":326,"path":327,"stem":328},"harnesses.yaml","\u002Freference\u002Fconfiguration\u002Fharnesses-file","5.reference\u002F03.configuration\u002F05.harnesses-file",{"title":330,"path":331,"stem":332},"access.yaml","\u002Freference\u002Fconfiguration\u002Faccess","5.reference\u002F03.configuration\u002F06.access",{"title":334,"path":335,"stem":336},"intake.yaml","\u002Freference\u002Fconfiguration\u002Fintake","5.reference\u002F03.configuration\u002F07.intake",{"title":338,"path":339,"stem":340},"notify.yaml","\u002Freference\u002Fconfiguration\u002Fnotify","5.reference\u002F03.configuration\u002F08.notify",{"title":342,"path":343,"stem":344},"theme.yaml","\u002Freference\u002Fconfiguration\u002Ftheme","5.reference\u002F03.configuration\u002F09.theme",{"title":346,"path":347,"stem":348,"children":349},"Sandboxed workers","\u002Freference\u002Fconfiguration\u002Fsandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002Findex",[350,351,355,359,363,367,371,375],{"title":10,"path":347,"stem":348},{"title":352,"path":353,"stem":354},"Resource limits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits","5.reference\u002F03.configuration\u002F10.sandbox\u002F1.resource-limits",{"title":356,"path":357,"stem":358},"Callbacks from a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks","5.reference\u002F03.configuration\u002F10.sandbox\u002F2.callbacks",{"title":360,"path":361,"stem":362},"Network policy","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy","5.reference\u002F03.configuration\u002F10.sandbox\u002F3.network-policy",{"title":364,"path":365,"stem":366},"Credentials","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials","5.reference\u002F03.configuration\u002F10.sandbox\u002F4.credentials",{"title":368,"path":369,"stem":370},"Kits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fkits","5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits",{"title":372,"path":373,"stem":374},"sandbox.yaml","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml","5.reference\u002F03.configuration\u002F10.sandbox\u002F6.sandbox-yaml",{"title":376,"path":377,"stem":378},"Git in a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002F7.git-in-a-sandbox",{"title":380,"path":381,"stem":382},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","5.reference\u002F03.configuration\u002F11.environment-variables",{"title":384,"path":385,"stem":386},"Add-ons and collections","\u002Freference\u002Fconfiguration\u002Faddons","5.reference\u002F03.configuration\u002F12.addons",{"title":388,"path":389,"stem":390},"Repo libraries","\u002Freference\u002Fconfiguration\u002Frepo-libraries","5.reference\u002F03.configuration\u002F13.repo-libraries",{"title":392,"path":393,"stem":394,"children":395},"Chain file keys","\u002Freference\u002Fchain-nodes","5.reference\u002F04.chain-nodes\u002Findex",[396,397,401,405],{"title":10,"path":393,"stem":394},{"title":398,"path":399,"stem":400},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","5.reference\u002F04.chain-nodes\u002F2.subprocess-tasks",{"title":402,"path":403,"stem":404},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","5.reference\u002F04.chain-nodes\u002F3.fix-loop",{"title":406,"path":407,"stem":408},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","5.reference\u002F04.chain-nodes\u002F4.result-file",{"title":410,"path":411,"stem":412,"children":413},"Agent harnesses","\u002Freference\u002Fharnesses","5.reference\u002F05.harnesses\u002Findex",[414,415,419,423,427,431],{"title":10,"path":411,"stem":412},{"title":416,"path":417,"stem":418},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","5.reference\u002F05.harnesses\u002F2.unattended-runs",{"title":420,"path":421,"stem":422},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","5.reference\u002F05.harnesses\u002F3.agent-profiles",{"title":424,"path":425,"stem":426},"Harness definition files","\u002Freference\u002Fharnesses\u002Fharness-files","5.reference\u002F05.harnesses\u002F4.harness-files",{"title":428,"path":429,"stem":430},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","5.reference\u002F05.harnesses\u002F5.fallback-and-escalation",{"title":432,"path":433,"stem":434},"Cost reporting","\u002Freference\u002Fharnesses\u002Fcost-reporting","5.reference\u002F05.harnesses\u002F6.cost-reporting",{"title":436,"path":437,"stem":438},"Permission gate","\u002Freference\u002Fpermissions","5.reference\u002F06.permissions",{"title":440,"path":441,"stem":442},"Inbound triggers","\u002Freference\u002Ftriggers","5.reference\u002F07.triggers",{"title":444,"path":445,"stem":446,"children":447},"HTTP API","\u002Freference\u002Fhttp-api","5.reference\u002F08.http-api\u002Findex",[448,449,453,457,461,465,469,473],{"title":10,"path":445,"stem":446},{"title":450,"path":451,"stem":452},"Filing, reading and changing work items","\u002Freference\u002Fhttp-api\u002Fwork-items","5.reference\u002F08.http-api\u002F2.work-items",{"title":454,"path":455,"stem":456},"Gates, run control, ending and retry","\u002Freference\u002Fhttp-api\u002Fgates-run-control-and-ending","5.reference\u002F08.http-api\u002F3.gates-run-control-and-ending",{"title":458,"path":459,"stem":460},"The work item object","\u002Freference\u002Fhttp-api\u002Fwork-item-object","5.reference\u002F08.http-api\u002F4.work-item-object",{"title":462,"path":463,"stem":464},"Budget, events, diff and documents","\u002Freference\u002Fhttp-api\u002Fbudget-and-events","5.reference\u002F08.http-api\u002F5.budget-and-events",{"title":466,"path":467,"stem":468},"Repos, chains, harnesses and the server","\u002Freference\u002Fhttp-api\u002Frepos-chains-harnesses-and-server","5.reference\u002F08.http-api\u002F6.repos-chains-harnesses-and-server",{"title":470,"path":471,"stem":472},"Drafts","\u002Freference\u002Fhttp-api\u002Fdrafts","5.reference\u002F08.http-api\u002F7.drafts",{"title":474,"path":475,"stem":476},"Ops for each draft area","\u002Freference\u002Fhttp-api\u002Fdraft-ops","5.reference\u002F08.http-api\u002F8.draft-ops",{"title":478,"path":479,"stem":480},"MCP tools","\u002Freference\u002Fmcp-tools","5.reference\u002F09.mcp-tools",{"title":482,"path":483,"stem":484},"Events","\u002Freference\u002Fevents","5.reference\u002F10.events",{"title":486,"path":487,"stem":488,"children":489},"Security and project","\u002Fproject","6.project",[490,492,496,500,504,508,512,516],{"title":10,"path":487,"stem":491},"6.project\u002Findex",{"title":493,"path":494,"stem":495},"Security","\u002Fproject\u002Fsecurity","6.project\u002F1.security",{"title":497,"path":498,"stem":499},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","6.project\u002F2.data-and-privacy",{"title":501,"path":502,"stem":503},"What's new in 2.0","\u002Fproject\u002Fwhats-new","6.project\u002F3.whats-new",{"title":505,"path":506,"stem":507},"Status and support","\u002Fproject\u002Fstatus-and-support","6.project\u002F4.status-and-support",{"title":509,"path":510,"stem":511},"Architecture","\u002Fproject\u002Farchitecture","6.project\u002F5.architecture",{"title":513,"path":514,"stem":515},"Source map","\u002Fproject\u002Fsource-map","6.project\u002F6.source-map",{"title":517,"path":518,"stem":519},"Contributing","\u002Fproject\u002Fcontributing","6.project\u002F7.contributing",{"id":521,"title":322,"body":522,"description":1355,"extension":1356,"links":1357,"meta":1358,"navigation":1359,"path":323,"seo":1360,"stem":324,"__hash__":1361},"docs\u002F5.reference\u002F03.configuration\u002F04.library-and-chains.md",{"type":523,"value":524,"toc":1343},"minimark",[525,541,548,557,696,806,811,838,926,932,936,955,1012,1077,1081,1107,1111,1123,1182,1257,1264,1270,1299,1310,1313,1317,1339],[526,527,528,532,533,536,537,540],"p",{},[529,530,531],"code",{},"library.yaml"," defines reusable components, and each ",[529,534,535],{},"chains\u002F*.yaml"," file composes them into a chain template. ",[538,539,392],"a",{"href":393}," defines every key a chain or a library component takes; this page maps the files.",[542,543,545,547],"h2",{"id":544},"libraryyaml-reusable-components",[529,546,531],{},": reusable components",[526,549,550,552,553,556],{},[529,551,531],{}," has four sections. Each maps a name to a definition, which any chain takes with ",[529,554,555],{},"extends: \u003Cname>",".",[558,559,565],"pre",{"className":560,"code":561,"filename":562,"language":563,"meta":564,"style":564},"language-yaml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","tasks:\n  implementer:\n    kind: agent\n    harness: claude\n    profile: strong\n    prompt: Implement the approved plan.\n  code_review:\n    kind: agent\n    harness: claude\n    prompt: Review this work item's change for defects its passing tests do not catch.\n    skill: kraft:code-review\n    inputs: [review_package]\n","config\u002Flibrary.yaml","yaml","",[529,566,567,580,588,601,612,623,634,642,651,660,670,681],{"__ignoreMap":564},[568,569,572,576],"span",{"class":570,"line":571},"line",1,[568,573,575],{"class":574},"sb7M8","tasks",[568,577,579],{"class":578},"s7iLA",":\n",[568,581,583,586],{"class":570,"line":582},2,[568,584,585],{"class":574},"  implementer",[568,587,579],{"class":578},[568,589,591,594,597],{"class":570,"line":590},3,[568,592,593],{"class":574},"    kind",[568,595,596],{"class":578},": ",[568,598,600],{"class":599},"semJd","agent\n",[568,602,604,607,609],{"class":570,"line":603},4,[568,605,606],{"class":574},"    harness",[568,608,596],{"class":578},[568,610,611],{"class":599},"claude\n",[568,613,615,618,620],{"class":570,"line":614},5,[568,616,617],{"class":574},"    profile",[568,619,596],{"class":578},[568,621,622],{"class":599},"strong\n",[568,624,626,629,631],{"class":570,"line":625},6,[568,627,628],{"class":574},"    prompt",[568,630,596],{"class":578},[568,632,633],{"class":599},"Implement the approved plan.\n",[568,635,637,640],{"class":570,"line":636},7,[568,638,639],{"class":574},"  code_review",[568,641,579],{"class":578},[568,643,645,647,649],{"class":570,"line":644},8,[568,646,593],{"class":574},[568,648,596],{"class":578},[568,650,600],{"class":599},[568,652,654,656,658],{"class":570,"line":653},9,[568,655,606],{"class":574},[568,657,596],{"class":578},[568,659,611],{"class":599},[568,661,663,665,667],{"class":570,"line":662},10,[568,664,628],{"class":574},[568,666,596],{"class":578},[568,668,669],{"class":599},"Review this work item's change for defects its passing tests do not catch.\n",[568,671,673,676,678],{"class":570,"line":672},11,[568,674,675],{"class":574},"    skill",[568,677,596],{"class":578},[568,679,680],{"class":599},"kraft:code-review\n",[568,682,684,687,690,693],{"class":570,"line":683},12,[568,685,686],{"class":574},"    inputs",[568,688,689],{"class":578},": [",[568,691,692],{"class":599},"review_package",[568,694,695],{"class":578},"]\n",[697,698,699,712],"table",{},[700,701,702],"thead",{},[703,704,705,709],"tr",{},[706,707,708],"th",{},"Section",[706,710,711],{},"Holds",[713,714,715,738,757,777],"tbody",{},[703,716,717,722],{},[718,719,720],"td",{},[529,721,575],{},[718,723,724,725,728,729,728,732,728,735,556],{},"Reusable tasks of any kind: ",[529,726,727],{},"agent",", ",[529,730,731],{},"subprocess",[529,733,734],{},"builtin",[529,736,737],{},"forge",[703,739,740,745],{},[718,741,742],{},[529,743,744],{},"steps",[718,746,747,748,751,752,756],{},"Reusable ordered groups of tasks. A step may set ",[529,749,750],{},"read_only: true"," (",[538,753,755],{"href":754},"\u002Freference\u002Fchain-nodes#read_only","read_only",").",[703,758,759,764],{},[718,760,761],{},[529,762,763],{},"nodes",[718,765,766,767,728,770,773,774,556],{},"Reusable nodes, with their own steps, ",[529,768,769],{},"on_failure",[529,771,772],{},"fix_loop"," and ",[529,775,776],{},"escalation",[703,778,779,784],{},[718,780,781],{},[529,782,783],{},"steering",[718,785,786,787,791,792,795,796,799,800,802,803,556],{},"Named guidance (a ",[538,788,790],{"href":789},"\u002Fconcepts\u002Fvocabulary#steering-profile","steering profile","), ",[529,793,794],{},"{instructions: \"...\"}",", that an agent task selects with ",[529,797,798],{},"steering: [name]"," and a repository selects with its ",[529,801,300],{}," ",[529,804,805],{},"steering:",[807,808,810],"h3",{"id":809},"keys-of-a-library-task","Keys of a library task",[526,812,813,814,728,817,728,819,728,821,728,824,773,827,830,831,833,834,756],{},"Every kind takes ",[529,815,816],{},"scope",[529,818,783],{},[529,820,769],{},[529,822,823],{},"policy",[529,825,826],{},"skippable",[529,828,829],{},"icon",". Then each kind takes its own keys. A library step or node may set an ",[529,832,829],{}," too (",[538,835,837],{"href":836},"\u002Freference\u002Fchain-nodes#icons","Icons",[697,839,840,850],{},[700,841,842],{},[703,843,844,847],{},[706,845,846],{},"Kind",[706,848,849],{},"Its own keys",[713,851,852,887,898,912],{},[703,853,854,858],{},[718,855,856],{},[529,857,727],{},[718,859,860,728,863,728,866,728,869,728,872,728,875,728,878,728,881,728,884],{},[529,861,862],{},"harness",[529,864,865],{},"prompt",[529,867,868],{},"skill",[529,870,871],{},"produces",[529,873,874],{},"profile",[529,876,877],{},"model",[529,879,880],{},"effort",[529,882,883],{},"fallback",[529,885,886],{},"inputs",[703,888,889,893],{},[718,890,891],{},[529,892,731],{},[718,894,895],{},[529,896,897],{},"command",[703,899,900,904],{},[718,901,902],{},[529,903,734],{},[718,905,906,728,909],{},[529,907,908],{},"ref",[529,910,911],{},"execution",[703,913,914,918],{},[718,915,916],{},[529,917,737],{},[718,919,920,728,923],{},[529,921,922],{},"target",[529,924,925],{},"wait",[526,927,928,931],{},[538,929,392],{"href":930},"\u002Freference\u002Fchain-nodes#task-keys"," defines each key.",[807,933,935],{"id":934},"extending-a-library-step","Extending a library step",[526,937,938,939,942,943,946,947,950,951,556],{},"A chain step extends a library step inside a node's ",[529,940,941],{},"steps:",". The chain step names its own ",[529,944,945],{},"id",". Its tasks come from the library step unless it sets ",[529,948,949],{},"tasks:"," of its own, which replace them. A component extends one parent of its own kind; the rest of the rule is in ",[538,952,954],{"href":953},"\u002Freference\u002Fchain-nodes#the-library-and-extends","The library and extends",[558,956,958],{"className":560,"code":957,"filename":562,"language":563,"meta":564,"style":564},"steps:\n  checks:\n    tasks:\n      - id: lint\n        kind: subprocess\n        command: just lint\n",[529,959,960,966,973,980,992,1002],{"__ignoreMap":564},[568,961,962,964],{"class":570,"line":571},[568,963,744],{"class":574},[568,965,579],{"class":578},[568,967,968,971],{"class":570,"line":582},[568,969,970],{"class":574},"  checks",[568,972,579],{"class":578},[568,974,975,978],{"class":570,"line":590},[568,976,977],{"class":574},"    tasks",[568,979,579],{"class":578},[568,981,982,985,987,989],{"class":570,"line":603},[568,983,984],{"class":578},"      - ",[568,986,945],{"class":574},[568,988,596],{"class":578},[568,990,991],{"class":599},"lint\n",[568,993,994,997,999],{"class":570,"line":614},[568,995,996],{"class":574},"        kind",[568,998,596],{"class":578},[568,1000,1001],{"class":599},"subprocess\n",[568,1003,1004,1007,1009],{"class":570,"line":625},[568,1005,1006],{"class":574},"        command",[568,1008,596],{"class":578},[568,1010,1011],{"class":599},"just lint\n",[558,1013,1016],{"className":560,"code":1014,"filename":1015,"language":563,"meta":564,"style":564},"nodes:\n  - id: verify\n    kind: exec\n    steps:\n      - id: checks\n        extends: checks   # runs verify.checks.lint\n","config\u002Fchains\u002Fmine.yaml",[529,1017,1018,1024,1036,1045,1052,1063],{"__ignoreMap":564},[568,1019,1020,1022],{"class":570,"line":571},[568,1021,763],{"class":574},[568,1023,579],{"class":578},[568,1025,1026,1029,1031,1033],{"class":570,"line":582},[568,1027,1028],{"class":578},"  - ",[568,1030,945],{"class":574},[568,1032,596],{"class":578},[568,1034,1035],{"class":599},"verify\n",[568,1037,1038,1040,1042],{"class":570,"line":590},[568,1039,593],{"class":574},[568,1041,596],{"class":578},[568,1043,1044],{"class":599},"exec\n",[568,1046,1047,1050],{"class":570,"line":603},[568,1048,1049],{"class":574},"    steps",[568,1051,579],{"class":578},[568,1053,1054,1056,1058,1060],{"class":570,"line":614},[568,1055,984],{"class":578},[568,1057,945],{"class":574},[568,1059,596],{"class":578},[568,1061,1062],{"class":599},"checks\n",[568,1064,1065,1068,1070,1073],{"class":570,"line":625},[568,1066,1067],{"class":574},"        extends",[568,1069,596],{"class":578},[568,1071,1072],{"class":599},"checks",[568,1074,1076],{"class":1075},"sq92B","   # runs verify.checks.lint\n",[807,1078,1080],{"id":1079},"inspect-and-edit-the-library","Inspect and edit the library",[1082,1083,1084,1098,1104],"ul",{},[1085,1086,1087,1090,1091,751,1094,1097],"li",{},[529,1088,1089],{},"kraft admin templates library"," lists every component as ",[529,1092,1093],{},"\u003Csection>.\u003Cname>",[529,1095,1096],{},"tasks.implementer",") with the chains that use it.",[1085,1099,1100,1103],{},[529,1101,1102],{},"kraft admin templates library ID"," shows one component with its definition and any lint issue that names it.",[1085,1105,1106],{},"Templates › Library shows the same and edits the file. Kraft refuses a save that would break any chain that loads today, and writes nothing.",[807,1108,1110],{"id":1109},"qualified-names","Qualified names",[526,1112,1113,1114,1118,1119,1122],{},"An installed ",[538,1115,1117],{"href":1116},"\u002Fconcepts\u002Fvocabulary#add-on","Kraft add-on"," adds its own components and chains beside yours. Each is named ",[529,1120,1121],{},"\u003Cnamespace>:\u003Cname>",", where the namespace is the add-on's name or the alias it was installed under.",[558,1124,1126],{"className":560,"code":1125,"filename":1015,"language":563,"meta":564,"style":564},"nodes:\n  - id: implementation\n    kind: exec\n    tasks:\n      - id: implement\n        extends: release:implementer   # the add-on's task\n",[529,1127,1128,1134,1145,1153,1159,1170],{"__ignoreMap":564},[568,1129,1130,1132],{"class":570,"line":571},[568,1131,763],{"class":574},[568,1133,579],{"class":578},[568,1135,1136,1138,1140,1142],{"class":570,"line":582},[568,1137,1028],{"class":578},[568,1139,945],{"class":574},[568,1141,596],{"class":578},[568,1143,1144],{"class":599},"implementation\n",[568,1146,1147,1149,1151],{"class":570,"line":590},[568,1148,593],{"class":574},[568,1150,596],{"class":578},[568,1152,1044],{"class":599},[568,1154,1155,1157],{"class":570,"line":603},[568,1156,977],{"class":574},[568,1158,579],{"class":578},[568,1160,1161,1163,1165,1167],{"class":570,"line":614},[568,1162,984],{"class":578},[568,1164,945],{"class":574},[568,1166,596],{"class":578},[568,1168,1169],{"class":599},"implement\n",[568,1171,1172,1174,1176,1179],{"class":570,"line":625},[568,1173,1067],{"class":574},[568,1175,596],{"class":578},[568,1177,1178],{"class":599},"release:implementer",[568,1180,1181],{"class":1075},"   # the add-on's task\n",[1082,1183,1184,1209,1222,1234,1247],{},[1085,1185,1186,728,1189,728,1191,773,1193,1195,1196,728,1199,1202,1203,1205,1206,556],{},[529,1187,1188],{},"extends",[529,1190,783],{},[529,1192,868],{},[529,1194,874],{}," take a qualified name. So does a chain id wherever one is named: ",[529,1197,1198],{},"--chain",[529,1200,1201],{},"default_chain"," in ",[529,1204,300],{},", a schedule's ",[529,1207,1208],{},"chain",[1085,1210,1211,1212,1214,1215,1217,1218,1221],{},"A bare name is always your own. A key of ",[529,1213,531],{}," and a chain's ",[529,1216,945],{}," never contain ",[529,1219,1220],{},":",", and Kraft refuses one that does.",[1085,1223,1224,1225,1229,1230,556],{},"An add-on's components and chains are read-only. Extend one, or copy it with ",[1226,1227,1228],"strong",{},"Copy to my library"," on the ",[538,1231,1233],{"href":1232},"\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings#content-from-an-add-on","Templates screens",[1085,1235,1236,1238,1239,1242,1243,1246],{},[529,1237,1089],{}," lists an add-on's component with its add-on, as ",[529,1240,1241],{},"tasks.release:implementer (release@acme 1.0.0)",", and ",[529,1244,1245],{},"kraft admin templates show release:ship"," heads the chain the same way.",[1085,1248,1249,1252,1253,1256],{},[529,1250,1251],{},"kraft admin templates lint --dir PATH"," loads no add-on. It prints each reference to one as ",[529,1254,1255],{},"not checked (add-on)"," and does not count it as an error.",[526,1258,1259,1263],{},[538,1260,1262],{"href":1261},"\u002Freference\u002Fconfiguration\u002Faddons#names","Names"," has the whole rule, including what a bare name means inside an add-on.",[542,1265,1267,1269],{"id":1266},"chainsyaml-chain-templates",[529,1268,535],{},": chain templates",[526,1271,1272,1273,1276,1277,1279,1280,1283,1284,1287,1288,1291,1292,773,1295,1298],{},"Each file in ",[529,1274,1275],{},"chains\u002F"," is one selectable chain, named by its ",[529,1278,945],{}," (or the file name), with an optional one-line ",[529,1281,1282],{},"description",". The keys are in ",[538,1285,392],{"href":1286},"\u002Freference\u002Fchain-nodes#chain-keys",". ",[538,1289,29],{"href":1290},"\u002Fconcepts\u002Fvocabulary#chain"," walks through the shipped ",[529,1293,1294],{},"default",[529,1296,1297],{},"quick-task"," chains as worked examples.",[1082,1300,1301,1307],{},[1085,1302,1303,1306],{},[529,1304,1305],{},"kraft admin templates show ID --resolved"," prints a chain with its library components expanded.",[1085,1308,1309],{},"Templates › Chains edits the file itself.",[526,1311,1312],{},"Kraft never overwrites these files on upgrade.",[542,1314,1316],{"id":1315},"related","Related",[1082,1318,1319,1324,1329,1334],{},[1085,1320,1321,1323],{},[538,1322,102],{"href":103},": add a node with a command task, a fix loop and a judge.",[1085,1325,1326,1328],{},[538,1327,172],{"href":173},": take what a new release ships.",[1085,1330,1331,1333],{},[538,1332,392],{"href":393},": every key of a node, step and task.",[1085,1335,1336,1338],{},[538,1337,384],{"href":385},": components and chains an installed add-on adds.",[1340,1341,1342],"style",{},"html pre.shiki code .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}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);}html pre.shiki code .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}",{"title":564,"searchDepth":582,"depth":582,"links":1344},[1345,1352,1354],{"id":544,"depth":582,"text":1346,"children":1347},"library.​yaml: reusable components",[1348,1349,1350,1351],{"id":809,"depth":590,"text":810},{"id":934,"depth":590,"text":935},{"id":1079,"depth":590,"text":1080},{"id":1109,"depth":590,"text":1110},{"id":1266,"depth":582,"text":1353},"chains\u002F​*.​yaml: chain templates",{"id":1315,"depth":582,"text":1316},"The sections of library.yaml, the keys a library task takes for each kind, and how chains\u002F*.yaml files compose them into chain templates.","md",null,{},true,{"title":322,"description":1355},"j7hgNiSmWjfsPXRwaNjmF74gX1CilxIFtL0s2Yk7jAc",[1363,1365],{"title":318,"path":319,"stem":320,"description":1364,"children":-1},"Every field in policy.yaml: caps, budget, concurrency, archiving, defaults and maxima, and the policy fields a layer may set.",{"title":326,"path":327,"stem":328,"description":1366,"children":-1},"Every field in harnesses.yaml: the harnesses section (harness profiles) and the profiles section (agent profiles).",1791801174141]