[{"data":1,"prerenderedAt":1681},["ShallowReactive",2],{"navigation_docs":3,"-troubleshooting-addon-problems":520,"-troubleshooting-addon-problems-surround":1676},[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":219,"body":522,"description":1669,"extension":1670,"links":1671,"meta":1672,"navigation":1673,"path":220,"seo":1674,"stem":221,"__hash__":1675},"docs\u002F4.troubleshooting\u002F6.addon-problems.md",{"type":523,"value":524,"toc":1652},"minimark",[525,548,575,591,596,603,631,636,820,827,831,1149,1153,1206,1210,1253,1257,1275,1279,1465,1469,1612,1623,1627],[526,527,528,529,533,534,537,538,543,544,547],"p",{},"Start here when a ",[530,531,532],"code",{},"kraft admin addon"," verb refuses, or ",[530,535,536],{},"validate"," reports a problem in a ",[539,540,542],"a",{"href":541},"\u002Fconcepts\u002Fvocabulary#add-on","Kraft add-on"," you are writing. A refused verb leaves ",[530,545,546],{},"addons.yaml",", the lock and the store as they were, so run it again once you have fixed the cause.",[526,549,550,551,554,555,558,559,562,563,566,567,570,571,574],{},"An ",[530,552,553],{},"add-ons"," or ",[530,556,557],{},"add-on updates"," row of ",[530,560,561],{},"kraft admin doctor"," is on ",[539,564,211],{"href":565},"\u002Ftroubleshooting\u002Fdoctor-failures#doctor-rows",". A work item that stopped with ",[530,568,569],{},"add-on ... could not be read"," is under ",[539,572,203],{"href":573},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#add-on-could-not-be-read",".",[526,576,577,578,581,582,584,585,587,588,590],{},"To confirm a fix, run the verb again, then ",[530,579,580],{},"kraft admin addon list",". ",[530,583,561],{}," does not report a refused install or update: its ",[530,586,553],{}," row reports what is installed, and ",[530,589,557],{}," only the last auto-update.",[592,593,595],"h2",{"id":594},"adding-installing-updating-and-removing","Adding, installing, updating and removing",[526,597,598,599,602],{},"The first column is the text the command prints after its prefix. ",[530,600,601],{},"..."," stands for text that varies, and a path is shortened.",[604,605,606,625],"ul",{},[607,608,609,612,613,616,617,620,621,624],"li",{},[530,610,611],{},"install"," and ",[530,614,615],{},"update"," print ",[530,618,619],{},"ADDON@COLLECTION: refused: ..."," when the add-on or your instance is the problem, and ",[530,622,623],{},"ADDON@COLLECTION: failed: ..."," when git, the lock or the store is.",[607,626,627,628,574],{},"Every other refusal starts with ",[530,629,630],{},"error:",[632,633,635],"h3",{"id":634},"adding-a-collection","Adding a collection",[637,638,639,655],"table",{},[640,641,642],"thead",{},[643,644,645,649,652],"tr",{},[646,647,648],"th",{},"The message says",[646,650,651],{},"What happened",[646,653,654],{},"Fix",[656,657,658,675,713,729,759,784,801],"tbody",{},[643,659,660,669,672],{},[661,662,663,612,666],"td",{},[530,664,665],{},"\u003Caddress>: fatal: '\u002Fnonexistent\u002Frepo.git' does not appear to be a git repository",[530,667,668],{},"fatal: Could not read from remote repository.",[661,670,671],{},"git could not reach the address.",[661,673,674],{},"Check the address, and that this machine can reach it.",[643,676,677,696,710],{},[661,678,679,682,683,686,687,686,690,554,693],{},[530,680,681],{},"\u003Caddress>: ..."," and one of ",[530,684,685],{},"Permission denied (publickey)",", ",[530,688,689],{},"Authentication failed",[530,691,692],{},"could not read Username",[530,694,695],{},"terminal prompts disabled",[661,697,698,686,701,612,703,705,706,709],{},[530,699,700],{},"collection add",[530,702,611],{},[530,704,615],{}," run git in your shell, and Kraft runs it without prompting, so a password or passphrase prompt fails. GitHub answers a missing or private ",[530,707,708],{},"owner\u002Frepo"," over https this way too.",[661,711,712],{},"Load your key into your shell's SSH agent, or set a git credential helper, then run the verb again. For GitHub, check the name and your access.",[643,714,715,720,723],{},[661,716,717],{},[530,718,719],{},"\u003Caddress>: fatal: transport 'file' not allowed",[661,721,722],{},"The address is a path that is not a directory, so Kraft tried it as a git address, and a path is not one.",[661,724,725,726,574],{},"Check the path. For a git repository on this machine, give ",[530,727,728],{},"file:\u002F\u002F\u002Fabs\u002Fpath",[643,730,731,736,743],{},[661,732,733],{},[530,734,735],{},"\u003Caddress>: ref 'nonexistent' does not exist: fatal: couldn't find remote ref nonexistent",[661,737,738,739,742],{},"The ref names no branch, tag or commit. Kraft reports it as ",[530,740,741],{},"refused",", not as a network failure.",[661,744,745,746,748,749,752,753,755,756,574],{},"After a failed ",[530,747,700],{}," nothing was added: run it again with a ref that exists. For a collection added earlier, fix its ",[530,750,751],{},"ref:"," in ",[530,754,546],{},", then run ",[530,757,758],{},"kraft admin addon update",[643,760,761,766,773],{},[661,762,763],{},[530,764,765],{},"\u003Ccommit>: no regular file .kraft\u002Fcollection.json",[661,767,768,769,772],{},"A git collection has no ",[530,770,771],{},".kraft\u002Fcollection.json"," at the ref Kraft read, so it is not a collection.",[661,774,775,776,779,780,574],{},"Check the address and ",[530,777,778],{},"--ref",". The author lays one out in ",[539,781,783],{"href":782},"\u002Fguides\u002Fcustomize\u002Fshare-chains-with-addons#publish-a-collection","Publish a collection",[643,785,786,791,796],{},[661,787,788],{},[530,789,790],{},"[Errno 2] No such file or directory: '\u003Cdir>\u002F.kraft\u002Fcollection.json'",[661,792,793,794,574],{},"A directory collection has no ",[530,795,771],{},[661,797,798,799,574],{},"Check the path you gave, or add the file as in ",[539,800,783],{"href":782},[643,802,803,808,813],{},[661,804,805],{},[530,806,807],{},"collection acme is already added from \u003Csource>; remove it first to add it from another source",[661,809,810,812],{},[530,811,546],{}," already holds a collection of that name, from a different address or directory.",[661,814,815,816,819],{},"Add it from the source it has. To change source, uninstall its add-ons and run ",[530,817,818],{},"kraft admin addon collection remove NAME"," first.",[526,821,822,823,574],{},"Auto-update runs in the server, which as a service may lack your SSH agent or credential helper: see ",[539,824,825],{"href":573},[530,826,569],{},[632,828,830],{"id":829},"installing-and-updating","Installing and updating",[637,832,833,843],{},[640,834,835],{},[643,836,837,839,841],{},[646,838,648],{},[646,840,651],{},[646,842,654],{},[656,844,845,862,882,903,925,951,976,1000,1029,1053,1070,1086,1103,1126],{},[643,846,847,852,855],{},[661,848,849],{},[530,850,851],{},"addons.yaml: release@acme: no collection 'acme' under collections",[661,853,854],{},"The add-on's collection is not added on this instance.",[661,856,857,858,861],{},"Run ",[530,859,860],{},"kraft admin addon collection add SOURCE",", then install again.",[643,863,864,869,872],{},[661,865,866],{},[530,867,868],{},"collection acme has no add-on nope",[661,870,871],{},"The collection does not list an add-on of that name.",[661,873,874,875,878,879,574],{},"Compare the name with ",[530,876,877],{},"kraft admin addon collection list",", and check the collection's ",[530,880,881],{},"ref",[643,883,884,889,896],{},[661,885,886],{},[530,887,888],{},"declined release@acme: no terminal to ask at; pass -y to accept",[661,890,891,612,893,895],{},[530,892,611],{},[530,894,615],{}," show a review and ask first. With no terminal, as in a script, they decline.",[661,897,898,899,902],{},"Read the review in a terminal, then pass ",[530,900,901],{},"-y"," in the script.",[643,904,905,910,915],{},[661,906,907],{},[530,908,909],{},"release@acme is already installed; `update` it, or pass --re-install to take the newest commit",[661,911,912,914],{},[530,913,611],{}," refuses an add-on the lock already holds.",[661,916,857,917,920,921,924],{},[530,918,919],{},"kraft admin addon update release@acme",", or ",[530,922,923],{},"install release@acme --re-install"," to take the commit the ref names now.",[643,926,927,936,939],{},[661,928,929,932,933],{},[530,930,931],{},"requires agent profile 'ghost', which harnesses.yaml does not define",", or the same with ",[530,934,935],{},"requires harness",[661,937,938],{},"The add-on needs an agent profile or a harness this instance does not define.",[661,940,941,942,947,948,574],{},"Define it in ",[539,943,945],{"href":944},"\u002Freference\u002Fharnesses\u002Fagent-profiles#define-an-agent-profile",[530,946,326],{},", or ask the author to drop it from ",[530,949,950],{},"requires",[643,952,953,958,973],{},[661,954,955],{},[530,956,957],{},"1.0.0 needs Kraft 3.x; this is Kraft 2.4.1",[661,959,960,961,964,965,968,969,972],{},"The add-on's ",[530,962,963],{},"requires.kraft"," names a Kraft this one is not. The message reads ",[530,966,967],{},"needs Kraft 3.x"," for a major, or ",[530,970,971],{},"needs Kraft 2.9 or later"," for a minimum.",[661,974,975],{},"Run a Kraft the add-on supports, or ask the author for a version that supports yours.",[643,977,978,983,990],{},[661,979,980],{},[530,981,982],{},"addons.yaml: release@other: namespace 'release' is taken by release@acme; install one under another name with --as",[661,984,985,986,574],{},"Two add-ons would share a ",[539,987,989],{"href":988},"\u002Freference\u002Fconfiguration\u002Faddons#names","namespace",[661,991,992,993,996,997,574],{},"Install it again under another ",[539,994,995],{"href":988},"alias",": ",[530,998,999],{},"--as ALIAS",[643,1001,1002,1007,1018],{},[661,1003,1004],{},[530,1005,1006],{},"its namespace 'release' is now a repository id",[661,1008,550,1009,752,1012,1014,1015,1017],{},[530,1010,1011],{},"id",[530,1013,300],{}," is the add-on's namespace. ",[530,1016,536],{}," prints the same line after the path.",[661,1019,1020,1021,1023,1024,752,1026,1028],{},"Install it with ",[530,1022,999],{},", choosing an alias that no ",[530,1025,1011],{},[530,1027,300],{}," uses.",[643,1030,1031,1036,1047],{},[661,1032,1033],{},[530,1034,1035],{},"a@acme: chains\u002Fgo.yaml: ...: skill 'b:method' names this add-on's namespace 'b'; there are no add-on dependencies",[661,1037,1038,1039,1042,1043,1046],{},"An installed add-on, ",[530,1040,1041],{},"a@acme",", already names a skill in the namespace ",[530,1044,1045],{},"b"," of the add-on you are installing or updating, from before that add-on existed.",[661,1048,1049,1050,1052],{},"Install the add-on you are installing under another name with ",[530,1051,999],{},", or ask the author of the installed add-on the message names to drop the reference.",[643,1054,1055,1060,1067],{},[661,1056,1057],{},[530,1058,1059],{},"chain mine would stop resolving: ...: extends no task named 'release:implementer'",[661,1061,1062,1063,1066],{},"The new version drops something one of your own files uses. ",[530,1064,1065],{},"update --check"," exits 2 for it.",[661,1068,1069],{},"Edit the chain the message names so it stops extending the removed task, or ask the author to keep it. The locked version keeps running.",[643,1071,1072,1077,1080],{},[661,1073,1074],{},[530,1075,1076],{},"its chain release:ship does not resolve: ...: extends no task named 'release:implementor'",[661,1078,1079],{},"The add-on's own chain names something the add-on does not declare.",[661,1081,1082,1083,1085],{},"Ask the author to correct the chain; ",[530,1084,536],{}," finds it before publishing.",[643,1087,1088,1093,1098],{},[661,1089,1090],{},[530,1091,1092],{},"is not in addons.yaml; install it first",[661,1094,1095,1097],{},[530,1096,615],{}," named an add-on this instance has not installed.",[661,1099,857,1100,574],{},[530,1101,1102],{},"kraft admin addon install ADDON@COLLECTION",[643,1104,1105,1110,1116],{},[661,1106,1107],{},[530,1108,1109],{},"release@acme: current: version 1.0.0 unchanged, but its files changed at \u003Ccommit>; --re-install to take it",[661,1111,1112,1113,1115],{},"Not a refusal: ",[530,1114,615],{}," exits 0. A new commit at the same version is not an update.",[661,1117,1118,1119,1122,1123,574],{},"Ask the author to raise ",[530,1120,1121],{},"version",", or run ",[530,1124,1125],{},"kraft admin addon install ADDON@COLLECTION --re-install",[643,1127,1128,1133,1141],{},[661,1129,1130],{},[530,1131,1132],{},"add-ons changed while you reviewed; run update again",[661,1134,1135,554,1137,1140],{},[530,1136,546],{},[530,1138,1139],{},"addons.lock"," changed while the review was open. Nothing was written, and an install's new entry is not kept.",[661,1142,1143,1144,554,1146,1148],{},"Run the same ",[530,1145,611],{},[530,1147,615],{}," again.",[632,1150,1152],{"id":1151},"removing","Removing",[637,1154,1155,1165],{},[640,1156,1157],{},[643,1158,1159,1161,1163],{},[646,1160,648],{},[646,1162,651],{},[646,1164,654],{},[656,1166,1167,1187],{},[643,1168,1169,1175,1184],{},[661,1170,1171,1174],{},[530,1172,1173],{},"cannot uninstall release@acme: its namespace 'release' is still referenced by"," and a list of files",[661,1176,1177,612,1180,1183],{},[530,1178,1179],{},"uninstall",[530,1181,1182],{},"disable"," refuse while your own files name the add-on's namespace.",[661,1185,1186],{},"Edit each file listed, or copy what you use into your library, then run the verb again.",[643,1188,1189,1194,1200],{},[661,1190,1191],{},[530,1192,1193],{},"collection acme still has add-ons installed: release@acme; uninstall them first",[661,1195,1196,1199],{},[530,1197,1198],{},"collection remove"," refuses while an add-on of that collection is installed or locked.",[661,1201,857,1202,1205],{},[530,1203,1204],{},"kraft admin addon uninstall ADDON@COLLECTION"," for each one listed, then remove the collection.",[632,1207,1209],{"id":1208},"any-verb-that-writes","Any verb that writes",[637,1211,1212,1222],{},[640,1213,1214],{},[643,1215,1216,1218,1220],{},[646,1217,648],{},[646,1219,651],{},[646,1221,654],{},[656,1223,1224,1240],{},[643,1225,1226,1231,1237],{},[661,1227,1228],{},[530,1229,1230],{},"another add-on change is running; try again",[661,1232,1233,1234,1236],{},"Another ",[530,1235,532],{}," command, or an auto-update, held the add-on lock while this one waited 5 seconds.",[661,1238,1239],{},"Wait for it to finish, then run the verb again.",[643,1241,1242,1247,1250],{},[661,1243,1244],{},[530,1245,1246],{},"a worker does not change the instance's add-ons",[661,1248,1249],{},"A work item's agent ran a verb that changes add-ons. A worker may not.",[661,1251,1252],{},"Run the verb yourself, from a terminal.",[592,1254,1256],{"id":1255},"writing-an-add-on","Writing an add-on",[526,1258,1259,1262,1263,1266,1267,1270,1271,1274],{},[530,1260,1261],{},"kraft admin addon validate PATH"," prints each problem as ",[530,1264,1265],{},"error: \u003Cfile>: \u003Cmessage>",", and exits 1. A line that starts with ",[530,1268,1269],{},"warning:"," does not fail it. ",[530,1272,1273],{},"\u003Cfile>"," is an absolute path, shortened below.",[632,1276,1278],{"id":1277},"manifests-and-layout","Manifests and layout",[637,1280,1281,1291],{},[640,1282,1283],{},[643,1284,1285,1287,1289],{},[646,1286,648],{},[646,1288,651],{},[646,1290,654],{},[656,1292,1293,1315,1328,1349,1374,1390,1409,1431,1449],{},[643,1294,1295,1300,1306],{},[661,1296,1297],{},[530,1298,1299],{},"\u003Cpath>: holds neither .kraft\u002Fcollection.json nor .kraft\u002Faddon.json",[661,1301,1302,1305],{},[530,1303,1304],{},"PATH"," is not a collection or an add-on directory.",[661,1307,1308,1309,1311,1312,574],{},"Point ",[530,1310,536],{}," at the directory that holds ",[530,1313,1314],{},".kraft\u002F",[643,1316,1317,1322,1325],{},[661,1318,1319],{},[530,1320,1321],{},".kraft\u002Faddon.json: is not JSON: ...",[661,1323,1324],{},"A manifest is not valid JSON. The message gives the line and column.",[661,1326,1327],{},"Fix the syntax. JSON allows no trailing comma and no comment.",[643,1329,1330,1335,1343],{},[661,1331,1332],{},[530,1333,1334],{},".kraft\u002Faddon.json: 'requires': Field required",[661,1336,1337,1340,1341,574],{},[530,1338,1339],{},"addon.json"," has no ",[530,1342,950],{},[661,1344,1345,1346,574],{},"Add ",[530,1347,1348],{},"\"requires\": { \"kraft\": \"2\" }",[643,1350,1351,1356,1364],{},[661,1352,1353],{},[530,1354,1355],{},".kraft\u002Faddon.json: 'version': String should match pattern ...",[661,1357,1358,1360,1361,574],{},[530,1359,1121],{}," is not ",[530,1362,1363],{},"MAJOR.MINOR.PATCH",[661,1365,1366,1367,920,1370,1373],{},"Write ",[530,1368,1369],{},"1.0.0",[530,1371,1372],{},"1.0.0-rc.1"," for a pre-release.",[643,1375,1376,1381,1387],{},[661,1377,1378],{},[530,1379,1380],{},".kraft\u002Faddon.json: 'name': 'kraft' is Kraft's own namespace",[661,1382,1383,1386],{},[530,1384,1385],{},"kraft"," is reserved for what Kraft ships.",[661,1388,1389],{},"Give the add-on another name.",[643,1391,1392,1397,1406],{},[661,1393,1394],{},[530,1395,1396],{},"addons\u002Frelease: .kraft\u002Faddon.json: name 'release' differs from its collection entry 'other'",[661,1398,1399,1401,1402,1405],{},[530,1400,1339],{}," and the collection's ",[530,1403,1404],{},"addons"," entry name the add-on differently.",[661,1407,1408],{},"Make the two names the same.",[643,1410,1411,1416,1426],{},[661,1412,1413],{},[530,1414,1415],{},"addons\u002Frelease: add-on 'release' holds none of library.yaml, chains\u002F, skills\u002F or profiles.yaml; it would add nothing",[661,1417,1418,1419,1421,1422,1425],{},"The directory holds nothing but ",[530,1420,1339],{},", or the entry's ",[530,1423,1424],{},"source"," points at the wrong one.",[661,1427,1428,1429,574],{},"Add a file, or correct ",[530,1430,1424],{},[643,1432,1433,1438,1443],{},[661,1434,1435],{},[530,1436,1437],{},".kraft\u002Faddon.json: release 1.0.0 needs Kraft 3.x; this is Kraft 2.4.1",[661,1439,1440,1442],{},[530,1441,963],{}," names a Kraft this one is not. An install or update refuses it too, without the name.",[661,1444,1445,1446,1448],{},"Set ",[530,1447,963],{}," to the Kraft you run, or upgrade Kraft. A source build skips the check.",[643,1450,1451,1456,1459],{},[661,1452,1453],{},[530,1454,1455],{},"warning: ...\u002Fchains\u002FShip.yaml is not part of the add-on layout and is ignored",[661,1457,1458],{},"Kraft reads only lowercase names in the fixed layout.",[661,1460,1461,1462,574],{},"Rename the file, for example ",[530,1463,1464],{},"chains\u002Fship.yaml",[632,1466,1468],{"id":1467},"what-the-files-may-hold","What the files may hold",[637,1470,1471,1481],{},[640,1472,1473],{},[643,1474,1475,1477,1479],{},[646,1476,648],{},[646,1478,651],{},[646,1480,654],{},[656,1482,1483,1500,1519,1539,1559,1572,1591],{},[643,1484,1485,1490,1493],{},[661,1486,1487],{},[530,1488,1489],{},"library.yaml: tasks.implementer: harness 'codex' is not listed in requires.harnesses (['claude'])",[661,1491,1492],{},"A task names a harness the manifest does not list.",[661,1494,1495,1496,1499],{},"Add the harness to ",[530,1497,1498],{},"requires.harnesses",", or use a listed one.",[643,1501,1502,1507,1510],{},[661,1503,1504],{},[530,1505,1506],{},"addons\u002Frelease: requires harness 'ghosty', which harnesses.yaml does not define",[661,1508,1509],{},"Checked on a machine with a Kraft home: this instance lacks a harness or agent profile the manifest requires.",[661,1511,941,1512,1516,1517,574],{},[539,1513,1514],{"href":944},[530,1515,326],{},", or remove it from ",[530,1518,950],{},[643,1520,1521,1526,1529],{},[661,1522,1523],{},[530,1524,1525],{},"library.yaml: tasks.lint: an add-on may not carry a subprocess task; a shell command runs outside the permission gate an agent works under",[661,1527,1528],{},"An add-on cannot run commands.",[661,1530,1531,1532,554,1535,1538],{},"Use an ",[530,1533,1534],{},"agent",[530,1536,1537],{},"builtin"," task. A command belongs in the repo's own configuration.",[643,1540,1541,1546,1553],{},[661,1542,1543],{},[530,1544,1545],{},"library.yaml: tasks.implementer: policy.allowed_tools is not a limit; an add-on may set only budget_usd, deny_tools, ...",[661,1547,1548,1549,1552],{},"An add-on's ",[530,1550,1551],{},"policy:"," takes limits only, never permissions.",[661,1554,1555,1556,1558],{},"Remove the key. The instance's ",[530,1557,318],{}," sets permissions.",[643,1560,1561,1566,1569],{},[661,1562,1563],{},[530,1564,1565],{},"chains\u002Fship.yaml: ...: extends 'other:implementer' reaches outside the add-on; an add-on is self-contained",[661,1567,1568],{},"A reference names another add-on.",[661,1570,1571],{},"Copy what you need into this add-on and extend that.",[643,1573,1574,1579,1588],{},[661,1575,1576],{},[530,1577,1578],{},"addons\u002Frelease: its chain release:ship does not resolve: ...: extends no task named 'release:implementor'",[661,1580,1581,1582,1584,1585,574],{},"A reference in the chain names nothing the add-on declares, often a typo. With no Kraft home, ",[530,1583,536],{}," prints the lint message without ",[530,1586,1587],{},"its chain ...:",[661,1589,1590],{},"Correct the name the message gives.",[643,1592,1593,1598,1605],{},[661,1594,1595],{},[530,1596,1597],{},"...: selects skill 'release:release-notes', which resolves to no method: ...: add-on 'release' has no skill 'release-notes' at ...\u002Fskills\u002Frelease-notes\u002FSKILL.md; a method Kraft ships is written kraft:release-notes",[661,1599,1600,1601,1604],{},"The skill's directory or its ",[530,1602,1603],{},"SKILL.md"," is missing or misnamed.",[661,1606,1607,1608,1611],{},"Create ",[530,1609,1610],{},"skills\u002Frelease-notes\u002FSKILL.md",". The directory name is the skill's name.",[526,1613,1614,612,1618,1622],{},[539,1615,1617],{"href":1616},"\u002Freference\u002Fconfiguration\u002Faddons#an-add-ons-files","An add-on's files",[539,1619,1621],{"href":1620},"\u002Freference\u002Fconfiguration\u002Faddons#what-an-add-on-may-set","What an add-on may set"," have the rules behind these.",[592,1624,1626],{"id":1625},"related","Related",[604,1628,1629,1634,1642],{},[607,1630,1631,1633],{},[539,1632,114],{"href":115},": write, validate, publish, install and update an add-on, step by step.",[607,1635,1636,1638,1639,1641],{},[539,1637,384],{"href":385},": every manifest field, ",[530,1640,546],{},", the lock, and when an add-on loads.",[607,1643,1644,1646,1647,612,1649,1651],{},[539,1645,211],{"href":565},": the ",[530,1648,553],{},[530,1650,557],{}," rows.",{"title":1653,"searchDepth":1654,"depth":1654,"links":1655},"",2,[1656,1663,1668],{"id":594,"depth":1654,"text":595,"children":1657},[1658,1660,1661,1662],{"id":634,"depth":1659,"text":635},3,{"id":829,"depth":1659,"text":830},{"id":1151,"depth":1659,"text":1152},{"id":1208,"depth":1659,"text":1209},{"id":1255,"depth":1654,"text":1664,"children":1665},"Writing an add-​on",[1666,1667],{"id":1277,"depth":1659,"text":1278},{"id":1467,"depth":1659,"text":1468},{"id":1625,"depth":1654,"text":1626},"Find the message a kraft admin addon command printed when it refused to add a collection, install, update or remove an add-on, or when validate rejected an add-on you wrote, and the fix for each.","md",null,{},true,{"title":219,"description":1669},"2ePu3Kf7hyQW2wgB0obheZT9GvL9Vo4ygXRNSLqP7u4",[1677,1679],{"title":215,"path":216,"stem":217,"description":1678,"children":-1},"Find the reason a sandboxed work item stopped, whether a sandbox with no network policy, the sandbox's memory limit, a Kit Kraft will not run, a workspace member Kraft cannot check out, or a nested git repository Kraft did not create, and the fix for each.",{"title":10,"path":224,"stem":228,"description":1680,"children":-1},"Look-up pages for the web UI, the CLI, configuration files, chain nodes, permissions, harnesses, triggers, the HTTP API, MCP tools, environment variables, and events.",1791801167965]