[{"data":1,"prerenderedAt":2317},["ShallowReactive",2],{"navigation_docs":3,"-troubleshooting-doctor-failures":504,"-troubleshooting-doctor-failures-surround":2312},[4,28,51,187,214,469],{"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,113,134,183],{"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],{"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,"children":117,"page":95},"Agents and harnesses","\u002Fguides\u002Fharnesses","3.guides\u002F3.harnesses",[118,122,126,130],{"title":119,"path":120,"stem":121},"Switch a task to another harness","\u002Fguides\u002Fharnesses\u002Fswitch-harness","3.guides\u002F3.harnesses\u002F1.switch-harness",{"title":123,"path":124,"stem":125},"Add or override a harness","\u002Fguides\u002Fharnesses\u002Fadding-a-harness","3.guides\u002F3.harnesses\u002F2.adding-a-harness",{"title":127,"path":128,"stem":129},"Build a worker Kit","\u002Fguides\u002Fharnesses\u002Fworker-kit","3.guides\u002F3.harnesses\u002F3.worker-kit",{"title":131,"path":132,"stem":133},"Give a worker its login","\u002Fguides\u002Fharnesses\u002Fgive-a-worker-its-login","3.guides\u002F3.harnesses\u002F4.give-a-worker-its-login",{"title":135,"path":136,"stem":137,"children":138,"page":95},"Run the server","\u002Fguides\u002Frun","3.guides\u002F4.run",[139,143,147,151,155,159,163,167,171,175,179],{"title":140,"path":141,"stem":142},"Remote access","\u002Fguides\u002Frun\u002Fremote-access","3.guides\u002F4.run\u002F01.remote-access",{"title":144,"path":145,"stem":146},"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":148,"path":149,"stem":150},"Restart Kraft without ending running agents","\u002Fguides\u002Frun\u002Frestart-kraft","3.guides\u002F4.run\u002F03.restart-kraft",{"title":152,"path":153,"stem":154},"Back up and restore the database","\u002Fguides\u002Frun\u002Fback-up-and-restore","3.guides\u002F4.run\u002F04.back-up-and-restore",{"title":156,"path":157,"stem":158},"Logs and disk space","\u002Fguides\u002Frun\u002Flogs-and-disk-space","3.guides\u002F4.run\u002F05.logs-and-disk-space",{"title":160,"path":161,"stem":162},"Run Kraft as a service","\u002Fguides\u002Frun\u002Frun-as-a-service","3.guides\u002F4.run\u002F06.run-as-a-service",{"title":164,"path":165,"stem":166},"Upgrade Kraft","\u002Fguides\u002Frun\u002Fupgrade-kraft","3.guides\u002F4.run\u002F07.upgrade-kraft",{"title":168,"path":169,"stem":170},"Upgrade your configuration","\u002Fguides\u002Frun\u002Fupgrade-your-configuration","3.guides\u002F4.run\u002F08.upgrade-your-configuration",{"title":172,"path":173,"stem":174},"Upgrade from 1.4","\u002Fguides\u002Frun\u002Fupgrade-from-1-4","3.guides\u002F4.run\u002F09.upgrade-from-1-4",{"title":176,"path":177,"stem":178},"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":180,"path":181,"stem":182},"Roll back to 1.4","\u002Fguides\u002Frun\u002Froll-back","3.guides\u002F4.run\u002F11.roll-back",{"title":184,"path":185,"stem":186},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F5.kraft-lite",{"title":188,"path":189,"stem":190,"children":191},"Troubleshooting","\u002Ftroubleshooting","4.troubleshooting",[192,194,198,202,206,210],{"title":10,"path":189,"stem":193},"4.troubleshooting\u002Findex",{"title":195,"path":196,"stem":197},"Why did my item stop?","\u002Ftroubleshooting\u002Fwhy-did-my-item-stop","4.troubleshooting\u002F1.why-did-my-item-stop",{"title":199,"path":200,"stem":201},"Stop reasons in detail","\u002Ftroubleshooting\u002Fstop-reasons-in-detail","4.troubleshooting\u002F2.stop-reasons-in-detail",{"title":203,"path":204,"stem":205},"Starting and reaching Kraft","\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft","4.troubleshooting\u002F3.starting-and-reaching-kraft",{"title":207,"path":208,"stem":209},"Doctor failures","\u002Ftroubleshooting\u002Fdoctor-failures","4.troubleshooting\u002F4.doctor-failures",{"title":211,"path":212,"stem":213},"Sandbox and Kit stops","\u002Ftroubleshooting\u002Fsandbox-and-kit-stops","4.troubleshooting\u002F5.sandbox-and-kit-stops",{"title":215,"path":216,"stem":217,"children":218},"Reference","\u002Freference","5.reference",[219,221,259,281,285,375,393,419,423,427,461,465],{"title":10,"path":216,"stem":220},"5.reference\u002Findex",{"title":222,"path":223,"stem":224,"children":225},"Web UI","\u002Freference\u002Fweb-ui","5.reference\u002F00.web-ui\u002Findex",[226,227,231,235,239,243,247,251,255],{"title":10,"path":223,"stem":224},{"title":228,"path":229,"stem":230},"Sidebar, search, and keyboard","\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard","5.reference\u002F00.web-ui\u002F0.sidebar-search-and-keyboard",{"title":232,"path":233,"stem":234},"The board","\u002Freference\u002Fweb-ui\u002Fboard","5.reference\u002F00.web-ui\u002F1.board",{"title":236,"path":237,"stem":238},"An item's page","\u002Freference\u002Fweb-ui\u002Fitem-page","5.reference\u002F00.web-ui\u002F2.item-page",{"title":240,"path":241,"stem":242},"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":244,"path":245,"stem":246},"Config before an item starts","\u002Freference\u002Fweb-ui\u002Fconfig-before-start","5.reference\u002F00.web-ui\u002F4.config-before-start",{"title":248,"path":249,"stem":250},"The review page","\u002Freference\u002Fweb-ui\u002Freview-page","5.reference\u002F00.web-ui\u002F5.review-page",{"title":252,"path":253,"stem":254},"Templates and Settings","\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings","5.reference\u002F00.web-ui\u002F6.templates-and-settings",{"title":256,"path":257,"stem":258},"Analytics","\u002Freference\u002Fweb-ui\u002Fanalytics","5.reference\u002F00.web-ui\u002F7.analytics",{"title":260,"path":261,"stem":262,"children":263},"CLI","\u002Freference\u002Fcli","5.reference\u002F01.cli\u002Findex",[264,265,269,273,277],{"title":10,"path":261,"stem":262},{"title":266,"path":267,"stem":268},"Item verbs","\u002Freference\u002Fcli\u002Fitem","5.reference\u002F01.cli\u002F2.item",{"title":270,"path":271,"stem":272},"View verbs","\u002Freference\u002Fcli\u002Fview","5.reference\u002F01.cli\u002F3.view",{"title":274,"path":275,"stem":276},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","5.reference\u002F01.cli\u002F4.repo",{"title":278,"path":279,"stem":280},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","5.reference\u002F01.cli\u002F5.admin",{"title":282,"path":283,"stem":284},"Work item statuses","\u002Freference\u002Fstatuses","5.reference\u002F02.statuses",{"title":286,"path":287,"stem":288,"children":289},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F03.configuration\u002Findex",[290,291,309,313,317,321,325,329,333,337,371],{"title":10,"path":287,"stem":288},{"title":292,"path":293,"stem":294,"children":295},"repos.yaml","\u002Freference\u002Fconfiguration\u002Frepos","5.reference\u002F03.configuration\u002F02.repos\u002Findex",[296,297,301,305],{"title":10,"path":293,"stem":294},{"title":298,"path":299,"stem":300},"How connect proposes commands","\u002Freference\u002Fconfiguration\u002Frepos\u002Fconnect-proposals","5.reference\u002F03.configuration\u002F02.repos\u002F1.connect-proposals",{"title":302,"path":303,"stem":304},"detectors.yaml","\u002Freference\u002Fconfiguration\u002Frepos\u002Fdetectors","5.reference\u002F03.configuration\u002F02.repos\u002F2.detectors",{"title":306,"path":307,"stem":308},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces",{"title":310,"path":311,"stem":312},"policy.yaml","\u002Freference\u002Fconfiguration\u002Fpolicy","5.reference\u002F03.configuration\u002F03.policy",{"title":314,"path":315,"stem":316},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","5.reference\u002F03.configuration\u002F04.library-and-chains",{"title":318,"path":319,"stem":320},"harnesses.yaml","\u002Freference\u002Fconfiguration\u002Fharnesses-file","5.reference\u002F03.configuration\u002F05.harnesses-file",{"title":322,"path":323,"stem":324},"access.yaml","\u002Freference\u002Fconfiguration\u002Faccess","5.reference\u002F03.configuration\u002F06.access",{"title":326,"path":327,"stem":328},"intake.yaml","\u002Freference\u002Fconfiguration\u002Fintake","5.reference\u002F03.configuration\u002F07.intake",{"title":330,"path":331,"stem":332},"notify.yaml","\u002Freference\u002Fconfiguration\u002Fnotify","5.reference\u002F03.configuration\u002F08.notify",{"title":334,"path":335,"stem":336},"theme.yaml","\u002Freference\u002Fconfiguration\u002Ftheme","5.reference\u002F03.configuration\u002F09.theme",{"title":338,"path":339,"stem":340,"children":341},"Sandboxed workers","\u002Freference\u002Fconfiguration\u002Fsandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002Findex",[342,343,347,351,355,359,363,367],{"title":10,"path":339,"stem":340},{"title":344,"path":345,"stem":346},"Resource limits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits","5.reference\u002F03.configuration\u002F10.sandbox\u002F1.resource-limits",{"title":348,"path":349,"stem":350},"Callbacks from a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks","5.reference\u002F03.configuration\u002F10.sandbox\u002F2.callbacks",{"title":352,"path":353,"stem":354},"Network policy","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy","5.reference\u002F03.configuration\u002F10.sandbox\u002F3.network-policy",{"title":356,"path":357,"stem":358},"Credentials","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials","5.reference\u002F03.configuration\u002F10.sandbox\u002F4.credentials",{"title":360,"path":361,"stem":362},"Kits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fkits","5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits",{"title":364,"path":365,"stem":366},"sandbox.yaml","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml","5.reference\u002F03.configuration\u002F10.sandbox\u002F6.sandbox-yaml",{"title":368,"path":369,"stem":370},"Git in a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002F7.git-in-a-sandbox",{"title":372,"path":373,"stem":374},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","5.reference\u002F03.configuration\u002F11.environment-variables",{"title":376,"path":377,"stem":378,"children":379},"Chain file keys","\u002Freference\u002Fchain-nodes","5.reference\u002F04.chain-nodes\u002Findex",[380,381,385,389],{"title":10,"path":377,"stem":378},{"title":382,"path":383,"stem":384},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","5.reference\u002F04.chain-nodes\u002F2.subprocess-tasks",{"title":386,"path":387,"stem":388},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","5.reference\u002F04.chain-nodes\u002F3.fix-loop",{"title":390,"path":391,"stem":392},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","5.reference\u002F04.chain-nodes\u002F4.result-file",{"title":394,"path":395,"stem":396,"children":397},"Agent harnesses","\u002Freference\u002Fharnesses","5.reference\u002F05.harnesses\u002Findex",[398,399,403,407,411,415],{"title":10,"path":395,"stem":396},{"title":400,"path":401,"stem":402},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","5.reference\u002F05.harnesses\u002F2.unattended-runs",{"title":404,"path":405,"stem":406},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","5.reference\u002F05.harnesses\u002F3.agent-profiles",{"title":408,"path":409,"stem":410},"Harness definition files","\u002Freference\u002Fharnesses\u002Fharness-files","5.reference\u002F05.harnesses\u002F4.harness-files",{"title":412,"path":413,"stem":414},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","5.reference\u002F05.harnesses\u002F5.fallback-and-escalation",{"title":416,"path":417,"stem":418},"Cost reporting","\u002Freference\u002Fharnesses\u002Fcost-reporting","5.reference\u002F05.harnesses\u002F6.cost-reporting",{"title":420,"path":421,"stem":422},"Permission gate","\u002Freference\u002Fpermissions","5.reference\u002F06.permissions",{"title":424,"path":425,"stem":426},"Inbound triggers","\u002Freference\u002Ftriggers","5.reference\u002F07.triggers",{"title":428,"path":429,"stem":430,"children":431},"HTTP API","\u002Freference\u002Fhttp-api","5.reference\u002F08.http-api\u002Findex",[432,433,437,441,445,449,453,457],{"title":10,"path":429,"stem":430},{"title":434,"path":435,"stem":436},"Filing, reading and changing work items","\u002Freference\u002Fhttp-api\u002Fwork-items","5.reference\u002F08.http-api\u002F2.work-items",{"title":438,"path":439,"stem":440},"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":442,"path":443,"stem":444},"The work item object","\u002Freference\u002Fhttp-api\u002Fwork-item-object","5.reference\u002F08.http-api\u002F4.work-item-object",{"title":446,"path":447,"stem":448},"Budget, events, diff and documents","\u002Freference\u002Fhttp-api\u002Fbudget-and-events","5.reference\u002F08.http-api\u002F5.budget-and-events",{"title":450,"path":451,"stem":452},"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":454,"path":455,"stem":456},"Drafts","\u002Freference\u002Fhttp-api\u002Fdrafts","5.reference\u002F08.http-api\u002F7.drafts",{"title":458,"path":459,"stem":460},"Ops for each draft area","\u002Freference\u002Fhttp-api\u002Fdraft-ops","5.reference\u002F08.http-api\u002F8.draft-ops",{"title":462,"path":463,"stem":464},"MCP tools","\u002Freference\u002Fmcp-tools","5.reference\u002F09.mcp-tools",{"title":466,"path":467,"stem":468},"Events","\u002Freference\u002Fevents","5.reference\u002F10.events",{"title":470,"path":471,"stem":472,"children":473},"Security and project","\u002Fproject","6.project",[474,476,480,484,488,492,496,500],{"title":10,"path":471,"stem":475},"6.project\u002Findex",{"title":477,"path":478,"stem":479},"Security","\u002Fproject\u002Fsecurity","6.project\u002F1.security",{"title":481,"path":482,"stem":483},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","6.project\u002F2.data-and-privacy",{"title":485,"path":486,"stem":487},"What's new in 2.0","\u002Fproject\u002Fwhats-new","6.project\u002F3.whats-new",{"title":489,"path":490,"stem":491},"Status and support","\u002Fproject\u002Fstatus-and-support","6.project\u002F4.status-and-support",{"title":493,"path":494,"stem":495},"Architecture","\u002Fproject\u002Farchitecture","6.project\u002F5.architecture",{"title":497,"path":498,"stem":499},"Source map","\u002Fproject\u002Fsource-map","6.project\u002F6.source-map",{"title":501,"path":502,"stem":503},"Contributing","\u002Fproject\u002Fcontributing","6.project\u002F7.contributing",{"id":505,"title":207,"body":506,"description":2305,"extension":2306,"links":2307,"meta":2308,"navigation":2309,"path":208,"seo":2310,"stem":209,"__hash__":2311},"docs\u002F4.troubleshooting\u002F4.doctor-failures.md",{"type":507,"value":508,"toc":2278},"minimark",[509,529,534,543,576,587,592,841,845,1129,1133,1364,1368,1565,1569,1576,1779,1793,1796,1799,1871,1874,1877,1880,1904,1907,1921,1937,1940,1955,1961,1964,1970,1976,1990,2003,2006,2023,2036,2052,2058,2061,2078,2081,2093,2096,2121,2131,2134,2140,2203,2213,2216,2229,2247,2251],[510,511,512,513,517,518,523,524,528],"p",{},"Start here when ",[514,515,516],"code",{},"kraft admin doctor"," prints a row that fails or warns.\nThe tables below hold every row that can fail or warn, and ",[519,520,522],"a",{"href":521},"#rows-that-never-fail","Rows that never fail"," the rest. Find the row's name in the first column, then its fix. A row that needs more than a cell links to an entry under ",[519,525,527],{"href":526},"#doctor-rows-in-detail","Doctor rows in detail",".",[530,531,533],"h2",{"id":532},"doctor-rows","Doctor rows",[510,535,536,538,539,542],{},[514,537,516],{}," runs every check, one row per line, and exits 1 if any row fails. ",[514,540,541],{},"kraft admin health"," checks only the server.",[510,544,545,546,549,550,549,553,556,557,560,561,563,564,567,568,571,572,575],{},"Each row starts with a verdict: ",[514,547,548],{},"ok",", ",[514,551,552],{},"warn",[514,554,555],{},"FAIL"," or ",[514,558,559],{},"skip",". Only ",[514,562,555],{}," sets the exit code: a warning means the check ran and found something worth reading, and a skip means it did not run. The last line counts them: ",[514,565,566],{},"N of M checks failed",", or ",[514,569,570],{},"all M checks passed"," with ",[514,573,574],{},", W warned"," when any row warned.",[510,577,578,579,582,583,586],{},"A row about one repository carries its name, such as ",[514,580,581],{},"setup my-repo",". In the tables, ",[514,584,585],{},"\u003Crepo>"," stands for that name.",[588,589,591],"h3",{"id":590},"the-server-and-its-files","The server and its files",[593,594,595,611],"table",{},[596,597,598],"thead",{},[599,600,601,605,608],"tr",{},[602,603,604],"th",{},"Row",[602,606,607],{},"What it means",[602,609,610],{},"Fix",[612,613,614,647,665,683,700,719,736,768,788,811,824],"tbody",{},[599,615,616,623,636],{},[617,618,619,622],"td",{},[514,620,621],{},"home"," (a warning)",[617,624,625,626,629,630,549,633,635],{},"No server has ever run on this ",[514,627,628],{},"KRAFT_HOME",". ",[514,631,632],{},"config",[514,634,318],{}," and the tokens fail until one has.",[617,637,638,639,642,643,646],{},"Start ",[514,640,641],{},"kraft"," once, then run ",[514,644,645],{},"doctor"," again.",[599,648,649,654,657],{},[617,650,651],{},[514,652,653],{},"server",[617,655,656],{},"Nothing answers on the configured address.",[617,658,659,660,567,662,528],{},"Start it: ",[514,661,641],{},[514,663,664],{},"kraft admin start --detach",[599,666,667,672,678],{},[617,668,669,622],{},[514,670,671],{},"restart",[617,673,674,677],{},[514,675,676],{},"kraft admin update"," installed a new release, but the running server still runs the old one. Until it restarts, the board shows a page saying so instead of the interface.",[617,679,680,528],{},[514,681,682],{},"kraft admin restart",[599,684,685,694,697],{},[617,686,687,690,691],{},[514,688,689],{},"health",": ",[514,692,693],{},"orphaned agent sessions",[617,695,696],{},"After a restart, Kraft could not confirm some sessions, and stopped their items. A session leaves the list once its item is retried or has ended.",[617,698,699],{},"Retry the affected items.",[599,701,702,709,712],{},[617,703,704,690,706],{},[514,705,689],{},[514,707,708],{},"index: ...",[617,710,711],{},"The search index reported an error, and the row names it.",[617,713,714,715,718],{},"Fix the cause the row names. ",[514,716,717],{},"kraft admin reindex"," rescans documents into the index.",[599,720,721,726,729],{},[617,722,723],{},[514,724,725],{},"embeddings",[617,727,728],{},"An installed vector-search extra's model will not load. Search keeps working as full-text search.",[617,730,731,732,528],{},"See ",[519,733,735],{"href":734},"\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard#vector-search","Vector search",[599,737,738,743,756],{},[617,739,740],{},[514,741,742],{},"pidfile",[617,744,745,748,749,752,753,755],{},[514,746,747],{},"run\u002Fkraft.pid"," names a process that is gone, or one that is not this Kraft server: its pid was reused, or the process belongs to another program or user. ",[514,750,751],{},"kraft admin stop"," and ",[514,754,671],{}," never signal such a process.",[617,757,758,759,549,762,556,765,767],{},"Nothing. The next ",[514,760,761],{},"kraft admin start",[514,763,764],{},"stop",[514,766,671],{}," clears it.",[599,769,770,778,781],{},[617,771,772,549,775],{},[514,773,774],{},"mcp token",[514,776,777],{},"trigger token",[617,779,780],{},"The token file is missing, or other users can read it.",[617,782,783,784,787],{},"Start the server once to write it, or ",[514,785,786],{},"chmod 600"," it.",[599,789,790,795,808],{},[617,791,792],{},[514,793,794],{},"worktrees",[617,796,797,798,802,803,807],{},"A ",[519,799,801],{"href":800},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," has no ",[519,804,806],{"href":805},"\u002Fconcepts\u002Fvocabulary#work-item","work item",", not even an ended or archived one. A cancelled item's worktree is not flagged.",[617,809,810],{},"Check it for work you want, then delete it.",[599,812,813,818,821],{},[617,814,815],{},[514,816,817],{},"spa bundle",[617,819,820],{},"This install has no web UI.",[617,822,823],{},"Reinstall from a release.",[599,825,826,831,834],{},[617,827,828,622],{},[514,829,830],{},"version",[617,832,833],{},"The install could not reach the release feed, so it cannot say whether a newer release exists.",[617,835,836,837,840],{},"Nothing needs fixing. ",[514,838,839],{},"KRAFT_NO_UPDATE_CHECK"," skips the check.",[588,842,844],{"id":843},"configuration-files","Configuration files",[593,846,847,857],{},[596,848,849],{},[599,850,851,853,855],{},[602,852,604],{},[602,854,607],{},[602,856,610],{},[612,858,859,873,900,921,957,984,1009,1028,1045,1066,1078,1109],{},[599,860,861,865,868],{},[617,862,863],{},[514,864,632],{},[617,866,867],{},"The config directory does not exist: no server has started on this home.",[617,869,638,870,872],{},[514,871,641],{}," once to seed it.",[599,874,875,883,894],{},[617,876,877,879,880],{},[514,878,632],{}," (a warning): ",[514,881,882],{},"... both exist and only one is read",[617,884,885,886,889,890,893],{},"Before 2.0 the config directory was ",[514,887,888],{},"templates\u002F",". One is still a directory of its own beside ",[514,891,892],{},"config\u002F",", not the link 2.0's first start leaves.",[617,895,731,896,528],{},[519,897,899],{"href":898},"#both-templates-and-config-exist","Both templates and config exist",[599,901,902,909,914],{},[617,903,904,879,906],{},[514,905,632],{},[514,907,908],{},"templates is a link to ..., which is not read: 2.0 reads ...",[617,910,911,913],{},[514,912,888],{}," is a link to a directory other than the one 2.0 reads, so what that directory holds is not read. Kraft does not move a linked directory.",[617,915,916,917,920],{},"Set ",[514,918,919],{},"KRAFT_CONFIG_DIR"," to the link's target, as the row says, to keep using it.",[599,922,923,928,951],{},[617,924,925,622],{},[514,926,927],{},"moved keys",[617,929,930,931,933,934,549,937,933,939,942,943,567,946,933,948,528],{},"A file still has a key under its name before 2.0, or in its old file: ",[514,932,310],{},"'s ",[514,935,936],{},"triggers",[514,938,326],{},[514,940,941],{},"max_concurrent",", a repo's ",[514,944,945],{},"default_chain_template",[514,947,334],{},[514,949,950],{},"group_by: template",[617,952,731,953,528],{},[519,954,956],{"href":955},"#moved-keys","Moved keys",[599,958,959,969,974],{},[617,960,961,690,963,556,966],{},[514,962,689],{},[514,964,965],{},"invalid policy",[514,967,968],{},"invalid template",[617,970,971,973],{},[514,972,310],{}," or a chain file does not load. Kraft refuses new work.",[617,975,976,977,629,980,983],{},"Fix the named file, then ",[514,978,979],{},"kraft admin reload",[514,981,982],{},"kraft admin templates lint"," checks every chain.",[599,985,986,993,999],{},[617,987,988,690,990],{},[514,989,689],{},[514,991,992],{},"invalid intake.yaml, auto-intake and its schedules are off",[617,994,995,996,998],{},"The server started on an ",[514,997,326],{}," that does not load. Auto-intake is off and none of its schedules fires.",[617,1000,1001,1002,1004,1005,528],{},"Fix the named field, then ",[514,1003,979],{},". See ",[519,1006,1008],{"href":1007},"#invalid-intakeyaml","Invalid intake.yaml",[599,1010,1011,1018,1024],{},[617,1012,1013,690,1015],{},[514,1014,689],{},[514,1016,1017],{},"invalid intake.yaml, not applied",[617,1019,1020,1021,1023],{},"A reload refused an edited ",[514,1022,326],{}," for the same reasons. The auto-intake and schedules that were running are kept.",[617,1025,1001,1026,528],{},[514,1027,979],{},[599,1029,1030,1035,1038],{},[617,1031,1032],{},[514,1033,1034],{},"chains",[617,1036,1037],{},"A chain in the library does not resolve. The row names it, with the resolver's message.",[617,1039,1040,1041,629,1043,983],{},"Fix the named chain, then ",[514,1042,979],{},[514,1044,982],{},[599,1046,1047,1051,1063],{},[617,1048,1049],{},[514,1050,302],{},[617,1052,1053,1054,1058,1059,1062],{},"Your own ",[519,1055,1056],{"href":303},[514,1057,302],{}," does not load: a key Kraft does not know, an unknown task reader, or a regex that does not compile. ",[514,1060,1061],{},"kraft repo connect"," refuses to probe until it does.",[617,1064,1065],{},"Fix the named field, or delete the file to use the shipped detectors alone. Nothing needs reloading.",[599,1067,1068,1072,1075],{},[617,1069,1070],{},[514,1071,322],{},[617,1073,1074],{},"The file does not load. The row says why.",[617,1076,1077],{},"Fix the named field.",[599,1079,1080,1087,1102],{},[617,1081,1082,690,1084],{},[514,1083,322],{},[514,1085,1086],{},"allowed_hosts: '...' is not a host name or IP address",[617,1088,1089,1090,1093,1094,1097,1098,1101],{},"An ",[514,1091,1092],{},"allowed_hosts"," entry, usually a wildcard such as ",[514,1095,1096],{},"*.ts.net"," written into the file by hand, is not one host. No browser's ",[514,1099,1100],{},"Host"," ever matches it, so a device using that name gets a 403.",[617,1103,1104,1105,528],{},"Replace it with the exact name each device uses. See ",[519,1106,1108],{"href":1107},"#allowed-hosts-rows","Allowed hosts rows",[599,1110,1111,1118,1124],{},[617,1112,1113,879,1115],{},[514,1114,322],{},[514,1116,1117],{},"bound to ... with no allowed_hosts",[617,1119,1120,1121,1123],{},"The server is bound off loopback and ",[514,1122,1092],{}," is empty, so a browser on any other device gets a page saying the name it used is not allowed.",[617,1125,1126,1127,528],{},"Add each exact name the devices use. See ",[519,1128,1108],{"href":1107},[588,1130,1132],{"id":1131},"agents-and-registration","Agents and registration",[593,1134,1135,1145],{},[596,1136,1137],{},[599,1138,1139,1141,1143],{},[602,1140,604],{},[602,1142,607],{},[602,1144,610],{},[612,1146,1147,1170,1188,1219,1235,1254,1282,1306,1341],{},[599,1148,1149,1154,1160],{},[617,1150,1151],{},[514,1152,1153],{},"mcp server",[617,1155,1156,1157,1159],{},"Nothing registers a ",[514,1158,641],{}," MCP server with Claude Code: not your user scope, and not any connected repo. Every Claude worker is refused.",[617,1161,1162,1163,1004,1166,528],{},"Install the Kraft plugin, or run ",[514,1164,1165],{},"kraft admin init",[519,1167,1169],{"href":1168},"#the-mcp-server-warning","The mcp server warning",[599,1171,1172,1176,1179],{},[617,1173,1174,622],{},[514,1175,1153],{},[617,1177,1178],{},"A registration exists, but a connected repo has none of its own, or no chain launches an unsandboxed Claude task.",[617,1180,1181,1182,1185,1186,528],{},"Register it for that repo (",[514,1183,1184],{},"kraft admin init --repo","), or ignore it. See ",[519,1187,1169],{"href":1168},[599,1189,1190,1195,1210],{},[617,1191,1192],{},[514,1193,1194],{},"agent: \u003Cprofile>",[617,1196,1197,1198,1201,1202,1204,1205,1209],{},"The agent CLI is not on the ",[514,1199,1200],{},"PATH"," of the shell running ",[514,1203,645],{},". The row names the chains that select that ",[519,1206,1208],{"href":1207},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," and so cannot run, or says no chain can run when every chain does.",[617,1211,1212,1213,1004,1215,528],{},"Install the CLI and put it on ",[514,1214,1200],{},[519,1216,1218],{"href":1217},"#the-agent-row-and-the-service-path","The agent row and the service PATH",[599,1220,1221,1225,1230],{},[617,1222,1223],{},[514,1224,318],{},[617,1226,1227,1229],{},[514,1228,318],{}," does not load, or the config directory is missing.",[617,1231,1232,1233,872],{},"Fix the field the row names, or start ",[514,1234,641],{},[599,1236,1237,1242,1249],{},[617,1238,1239],{},[514,1240,1241],{},"harness: \u003Cid>",[617,1243,797,1244,1248],{},[519,1245,1247],{"href":1246},"\u002Fconcepts\u002Fvocabulary#harness","harness"," definition does not load. The row says why.",[617,1250,1251,1252,528],{},"Fix the harness file the row names. See ",[519,1253,408],{"href":409},[599,1255,1256,1261,1277],{},[617,1257,1258],{},[514,1259,1260],{},"profile: \u003Cname>",[617,1262,1263,1264,1268,1269,1271,1272,1276],{},"A task selects an ",[519,1265,1267],{"href":1266},"\u002Fconcepts\u002Fvocabulary#agent-profile","agent profile"," its launch would refuse: it is not defined in ",[514,1270,318],{},", has no model for the harness's ",[519,1273,1275],{"href":1274},"\u002Fconcepts\u002Fvocabulary#provider","provider",", or the provider takes no such model or effort. The row names each chain and task.",[617,1278,1279,1280,528],{},"Fix the agent profile or the task's choice of it, as the row names. See ",[519,1281,404],{"href":405},[599,1283,1284,1289,1296],{},[617,1285,1286,622],{},[514,1287,1288],{},"cost: \u003Charness>",[617,1290,1291,1292,1295],{},"That harness reports no cost, and the chains launch it on a model ",[514,1293,1294],{},"prices.json"," cannot price, or on no model (the CLI's default).",[617,1297,1298,1299,1004,1302,528],{},"Give its tasks or agent profile a priced model, or bound them with ",[514,1300,1301],{},"token_budget",[519,1303,1305],{"href":1304},"\u002Freference\u002Fharnesses\u002Fcost-reporting#harnesses-that-report-no-cost","Harnesses that report no cost",[599,1307,1308,1316,1325],{},[617,1309,1310,690,1313],{},[514,1311,1312],{},"kraft on PATH",[514,1314,1315],{},"not on PATH",[617,1317,1318,1319,1321,1322,1324],{},"The ",[514,1320,641],{}," command is not on ",[514,1323,1200],{},", usually right after a uv install. The plugin, every MCP registration and the hooks run it by name, so they start nothing.",[617,1326,1327,1328,1331,1332,1334,1335,528],{},"Run ",[514,1329,1330],{},"uv tool update-shell",", then start ",[514,1333,641],{}," from a new terminal. See ",[519,1336,1338,1340],{"href":1337},"\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft#kraft-command-not-found",[514,1339,641],{},": command not found",[599,1342,1343,1350,1359],{},[617,1344,1345,690,1347],{},[514,1346,1312],{},[514,1348,1349],{},"another install",[617,1351,1352,1353,1355,1356,1358],{},"Another install of ",[514,1354,641],{}," comes first on ",[514,1357,1200],{},". The MCP server and hooks run it.",[617,1360,1361,1362,528],{},"Uninstall the other one, or reorder ",[514,1363,1200],{},[588,1365,1367],{"id":1366},"connected-repositories","Connected repositories",[593,1369,1370,1380],{},[596,1371,1372],{},[599,1373,1374,1376,1378],{},[602,1375,604],{},[602,1377,607],{},[602,1379,610],{},[612,1381,1382,1398,1425,1449,1469,1493,1520,1542],{},[599,1383,1384,1389,1392],{},[617,1385,1386],{},[514,1387,1388],{},"repo \u003Crepo>",[617,1390,1391],{},"A connected repo's path is gone or is not a git repo.",[617,1393,1394,1395,528],{},"Reconnect it, or ",[514,1396,1397],{},"kraft repo disconnect PATH",[599,1399,1400,1405,1415],{},[617,1401,1402],{},[514,1403,1404],{},"setup \u003Crepo>",[617,1406,1407,1408,1411,1412,1414],{},"The repo has no ",[514,1409,1410],{},"setup_command"," in ",[514,1413,292],{},", so its next work item will stop. The row names a command when it found one.",[617,1416,1327,1417,1420,1421,528],{},[514,1418,1419],{},"kraft repo connect \u003Cpath>"," again to save the suggested command, or see ",[519,1422,1424],{"href":1423},"#the-setup-row","The setup row",[599,1426,1427,1432,1438],{},[617,1428,1429,622],{},[514,1430,1431],{},"tests \u003Crepo>",[617,1433,1434,1437],{},[514,1435,1436],{},"test_command \"\"",": the repo's work items pass verify without running a test. Or the repo has no test command, so its items stop at their test node.",[617,1439,1440,1441,1444,1445,528],{},"For ",[514,1442,1443],{},"\"\"",", nothing, if the repo really has no tests. Otherwise see ",[519,1446,1448],{"href":1447},"#older-entries-and-the-tests-row","Older entries and the tests row",[599,1450,1451,1456,1462],{},[617,1452,1453],{},[514,1454,1455],{},"keys \u003Crepo>",[617,1457,1458,1459,1461],{},"The repo's entry in ",[514,1460,292],{}," has keys nothing reads, such as a typo. The row lists them.",[617,1463,1464,1465,528],{},"Remove them. A key an older Kraft wrote is a warning that names its replacement: see ",[519,1466,1467],{"href":293},[514,1468,292],{},[599,1470,1471,1476,1488],{},[617,1472,1473],{},[514,1474,1475],{},"steering \u003Crepo>",[617,1477,1478,1479,1482,1483,1487],{},"The repo's ",[514,1480,1481],{},"steering:"," names a ",[519,1484,1486],{"href":1485},"\u002Fconcepts\u002Fvocabulary#steering-profile","steering profile"," the library does not define.",[617,1489,1490,1491,528],{},"Define the steering profile in the library, or remove the name from the repo's ",[514,1492,1481],{},[599,1494,1495,1500,1514],{},[617,1496,1497],{},[514,1498,1499],{},"forge \u003Crepo>",[617,1501,1502,556,1505,1508,1509,1513],{},[514,1503,1504],{},"gh",[514,1506,1507],{},"glab"," is missing, or the repo has no ",[519,1510,1512],{"href":1511},"\u002Fconcepts\u002Fvocabulary#forge","forge"," recorded.",[617,1515,731,1516,528],{},[519,1517,1519],{"href":1518},"#the-forge-row","The forge row",[599,1521,1522,1526,1533],{},[617,1523,1524,622],{},[514,1525,1499],{},[617,1527,1528,1529,1532],{},"The repo's forge is ",[514,1530,1531],{},"fake",", which is for dev only: it opens, merges and pushes nothing.",[617,1534,1535,1536,556,1539,528],{},"Nothing on a dev instance. On any other, set ",[514,1537,1538],{},"forge: github",[514,1540,1541],{},"forge: gitlab",[599,1543,1544,1549,1552],{},[617,1545,1546,622],{},[514,1547,1548],{},"duplicate \u003Crepo>",[617,1550,1551],{},"A repo you connected and a submodule checkout Kraft detected are one repository, usually a member you connected on its own and its root's submodule. A workspace member naming the second runs with none of the first's settings.",[617,1553,1554,1555,1411,1558,1560,1561,1564],{},"Point the workspace member at the entry you configured (",[514,1556,1557],{},"workspaces:",[514,1559,292],{},"), then ",[514,1562,1563],{},"kraft repo disconnect"," the other.",[588,1566,1568],{"id":1567},"the-sandbox","The sandbox",[510,1570,1571,1572,528],{},"These rows appear only for a repository that runs ",[519,1573,1575],{"href":1574},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxed",[593,1577,1578,1588],{},[596,1579,1580],{},[599,1581,1582,1584,1586],{},[602,1583,604],{},[602,1585,607],{},[602,1587,610],{},[612,1589,1590,1606,1628,1645,1670,1699,1719,1738,1763],{},[599,1591,1592,1597,1600],{},[617,1593,1594],{},[514,1595,1596],{},"sandbox \u003Crepo>",[617,1598,1599],{},"The runtime does not answer, the image is not pulled, or the sandbox sets something the runtime cannot enforce. The row says which.",[617,1601,731,1602,528],{},[519,1603,1605],{"href":1604},"#the-sandbox-row","The sandbox row",[599,1607,1608,1615,1622],{},[617,1609,1610,690,1612],{},[514,1611,1596],{},[514,1613,1614],{},"the Kit \u003Cref> is refused: ...",[617,1616,1617,1618,1621],{},"The repository's ",[519,1619,1620],{"href":361},"Kit"," cannot be fetched or will not run, so each item there stops.",[617,1623,731,1624,528],{},[519,1625,1627],{"href":1626},"\u002Ftroubleshooting\u002Fsandbox-and-kit-stops#a-kit-is-refused","A Kit is refused",[599,1629,1630,1635,1638],{},[617,1631,1632,622],{},[514,1633,1634],{},"kit hosts \u003Crepo>",[617,1636,1637],{},"The Kit does not allow a host a harness requires, so that harness's sessions under it are refused the host.",[617,1639,1640,1641,1644],{},"Add the host to the Kit's ",[514,1642,1643],{},"runtime"," allow list and rebuild it, or run that harness elsewhere.",[599,1646,1647,1652,1658],{},[617,1648,1649,622],{},[514,1650,1651],{},"kit credentials \u003Crepo>",[617,1653,1654,1655,1657],{},"An optional Kit credential has no binding in ",[514,1656,364],{},", so it is skipped.",[617,1659,1660,1661,1664,1665,1411,1668,528],{},"Add ",[514,1662,1663],{},"\u003Cservice>: \u003CDAEMON_ENV_NAME>"," under ",[514,1666,1667],{},"credentials",[519,1669,364],{"href":365},[599,1671,1672,1677,1691],{},[617,1673,1674],{},[514,1675,1676],{},"egress \u003Crepo>",[617,1678,1679,1680,1683,1684,1687,1688,1690],{},"The sandbox sets no ",[514,1681,1682],{},"network:"," and no ",[514,1685,1686],{},"unrestricted_network: true",", so every agent launch into it is refused. With ",[514,1689,1686],{}," it is a warning: tasks there reach any host, the cloud metadata address included, and gates are not enforced.",[617,1692,916,1693,1695,1696,528],{},[514,1694,1682],{}," in the sandbox policy to allow only the hosts they need. See ",[519,1697,352],{"href":1698},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy#without-a-network-policy",[599,1700,1701,1706,1714],{},[617,1702,1703],{},[514,1704,1705],{},"egress listener",[617,1707,1708,1709,1711,1712,528],{},"The server's TLS listener did not answer, so a sandbox under ",[514,1710,1682],{}," on a runtime in a VM has no route out. The row appears when some sandbox sets ",[514,1713,1682],{},[617,1715,1716,1717,528],{},"Restart the server: ",[514,1718,682],{},[599,1720,1721,1726,1729],{},[617,1722,1723,622],{},[514,1724,1725],{},"proxy \u003Crepo>",[617,1727,1728],{},"A proxy variable points at this machine's loopback, which a container cannot reach, so sandboxed tasks run without it.",[617,1730,916,1731,1733,1734,528],{},[514,1732,1682],{}," in the sandbox policy to route them through Kraft's own proxy. See ",[519,1735,1737],{"href":1736},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml#proxy","Proxy",[599,1739,1740,1745,1751],{},[617,1741,1742,622],{},[514,1743,1744],{},"ca \u003Crepo>",[617,1746,1747,1750],{},[514,1748,1749],{},"SSL_CERT_FILE"," is set but cannot be used as the sandbox's extra CA, so sandboxed tasks trust only their image's roots.",[617,1752,1753,1754,1411,1757,1004,1759,528],{},"Fix the file, or name a CA in ",[514,1755,1756],{},"ca_bundle",[514,1758,364],{},[519,1760,1762],{"href":1761},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml#ca-certificates","CA certificates",[599,1764,1765,1770,1773],{},[617,1766,1767],{},[514,1768,1769],{},"credentials \u003Crepo>",[617,1771,1772],{},"A credential the sandbox's proxy manages has no value here, so the proxy refuses every request that should carry it. A name no harness declares how to inject only warns.",[617,1774,1775,1776,528],{},"Give each name the row lists a value. See ",[519,1777,356],{"href":1778},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials#where-the-value-is-kept",[510,1780,1318,1781,549,1784,752,1787,1789,1790,1792],{},[514,1782,1783],{},"proxy",[514,1785,1786],{},"ca",[514,1788,1667],{}," rows read the environment of the ",[514,1791,516],{}," process, not the running server's. They agree when both started from the same shell. If the server runs as a service with its own environment, check that one.",[588,1794,522],{"id":1795},"rows-that-never-fail",[510,1797,1798],{},"Five rows report and never fail:",[593,1800,1801,1810],{},[596,1802,1803],{},[599,1804,1805,1807],{},[602,1806,604],{},[602,1808,1809],{},"What it reports",[612,1811,1812,1822,1835,1848,1858],{},[599,1813,1814,1819],{},[617,1815,1816],{},[514,1817,1818],{},"chain_templates",[617,1820,1821],{},"Nodes this version's shipped chains have that your copy lacks.",[599,1823,1824,1829],{},[617,1825,1826],{},[514,1827,1828],{},"capabilities",[617,1830,1831,1832,1834],{},"What this version can do that your seeded ",[514,1833,892],{}," does not yet use, and how to adopt each.",[599,1836,1837,1842],{},[617,1838,1839],{},[514,1840,1841],{},"bd",[617,1843,1844,1845,1847],{},"Whether the optional ",[514,1846,1841],{}," issue tracker is installed.",[599,1849,1850,1855],{},[617,1851,1852],{},[514,1853,1854],{},"shell completion",[617,1856,1857],{},"Whether zsh's tab completion is set up. It skips on any other shell.",[599,1859,1860,1865],{},[617,1861,1862],{},[514,1863,1864],{},"repos",[617,1866,1867,1870],{},[514,1868,1869],{},"none connected"," when no repo is connected. It skips when no server is up.",[530,1872,527],{"id":1873},"doctor-rows-in-detail",[510,1875,1876],{},"The tables link here from the rows with more to say.",[588,1878,899],{"id":1879},"both-templates-and-config-exist",[510,1881,1882,1883,1885,1886,1888,1889,1891,1892,1894,1895,1897,1898,690,1900,1903],{},"Before 2.0, the config directory was ",[514,1884,888],{},". The 2.0 first start found a ",[514,1887,892],{}," you had made and moved in only what it lacked; what both held stayed in ",[514,1890,888],{},", and Kraft does not read it. Merge what ",[514,1893,888],{}," holds into ",[514,1896,892],{},", keeping the copy you want of each, and remove ",[514,1899,888],{},[519,1901,172],{"href":1902},"\u002Fguides\u002Frun\u002Fupgrade-from-1-4#config-directory-and-files"," has the steps.",[588,1905,956],{"id":1906},"moved-keys",[510,1908,1909,1910,933,1912,1914,1915,1917,1918,1920],{},"Before 2.0, each key the row names lived in another file or under another name. Kraft still reads it, so nothing stops, except ",[514,1911,326],{},[514,1913,941],{},": the server ignores it, with a warning, until the next start moves it to ",[514,1916,310],{},". Move or rename each key by hand, as ",[519,1919,172],{"href":1902}," lists.",[510,1922,1440,1923,1925,1926,1929,1930,1933,1934,1936],{},[514,1924,936],{},", the row says how many the next start moves, and for each that stays, the entry and key ",[514,1927,1928],{},"schedules:"," refuses (",[514,1931,1932],{},"triggers.0.enabled",", say). Fix that entry and restart; ",[519,1935,172],{"href":1902}," says which triggers are skipped.",[588,1938,1008],{"id":1939},"invalid-intakeyaml",[510,1941,995,1942,1944,1945,1948,1949,1952,1953,528],{},[514,1943,326],{}," that does not load: a key Kraft does not know, or a schedule's ",[514,1946,1947],{},"cron"," it can't run (minute ",[514,1950,1951],{},"61",", say). Settings › Auto-intake shows the field on the schedule. Fix it, then ",[514,1954,979],{},[510,1956,1957,1958,1960],{},"A trigger left in ",[514,1959,310],{}," still fires.",[588,1962,1169],{"id":1963},"the-mcp-server-warning",[510,1965,1966,1967,1969],{},"The row reads Claude Code's registration only, not Codex's, Cursor's, OpenCode's, Amp's, Antigravity's or Gemini CLI's. ",[519,1968,72],{"href":73}," has each one's own check.",[510,1971,1972,1973,1975],{},"The row fails when nothing registers a ",[514,1974,641],{}," MCP server and some chain launches an unsandboxed Claude task, so that worker would be refused. It is a warning instead when:",[1977,1978,1979,1987],"ul",{},[1980,1981,1982,1983,1986],"li",{},"a registration exists, but a connected repo has none of its own, often because its committed ",[514,1984,1985],{},".claude\u002Fsettings.json"," turns the plugin off. In that repo an unsandboxed task on the harness the row names is refused. A repo whose items run sandboxed or on another harness is unaffected.",[1980,1988,1989],{},"no chain launches an unsandboxed Claude task, for example when every repo is sandboxed or the library is Codex-only.",[510,1991,1992,1993,1995,1996,2002],{},"Register it for the repo with ",[514,1994,1184],{},", or ignore the warning if no unsandboxed Claude task runs there. The stop an item shows is ",[519,1997,1999],{"href":1998},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#nothing-registers-it-for-claude-code",[514,2000,2001],{},"nothing registers it for Claude Code",", which has the steps.",[588,2004,1218],{"id":2005},"the-agent-row-and-the-service-path",[510,2007,1318,2008,2010,2011,2014,2015,1201,2017,2019,2020,528],{},[514,2009,1194],{}," row, where ",[514,2012,2013],{},"\u003Cprofile>"," is a harness profile, passes when the agent CLI is on the ",[514,2016,1200],{},[514,2018,645],{},". For the shipped chains the CLI is ",[514,2021,2022],{},"claude",[2024,2025,2026,2031],"ol",{},[1980,2027,2028,2029,528],{},"Install the agent CLI, and make sure it runs from the shell that starts ",[514,2030,641],{},[1980,2032,2033,2034,528],{},"Restart Kraft with ",[514,2035,682],{},[510,2037,2038,2039,2041,2042,2044,2045,2051],{},"Doctor does not read the server's ",[514,2040,1200],{},". Under a service, the unit's ",[514,2043,1200],{}," is the one that counts when an item runs, and a restart keeps it: see ",[519,2046,1318,2048,2050],{"href":2047},"\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft#the-kraft-on-path-doctor-row",[514,2049,1312],{}," doctor row"," for reinstalling it.",[510,2053,2054,2055,528],{},"The row passes whether or not the CLI is signed in. A login error shows up in an item's log instead: see ",[519,2056,195],{"href":2057},"\u002Ftroubleshooting\u002Fwhy-did-my-item-stop#find-your-reason",[588,2059,1424],{"id":2060},"the-setup-row",[510,2062,2063,2064,2067,2068,2070,2071,2077],{},"The row reads ",[514,2065,2066],{},"no setup_command in repos.yaml — suggest: ...",", and names a command when it found one. Kraft will not guess what to run in a fresh worktree, so the repo's next work item stops at its first node. Running ",[514,2069,1419],{}," again saves the suggested command; ",[519,2072,2074],{"href":2073},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#no-setup_command-declared",[514,2075,2076],{},"no setup_command declared"," has every way to fix it.",[588,2079,1448],{"id":2080},"older-entries-and-the-tests-row",[510,2082,2083,2084,2086,2087,1903],{},"A repo connected before 2.0 often has no test command where the probe now finds one, and the row then names it: ",[514,2085,1419],{}," saves it. When the row names none, ",[519,2088,2090],{"href":2089},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#declares-neither-test_scopes-nor-test_command",[514,2091,2092],{},"declares neither test_scopes nor test_command",[588,2094,1519],{"id":2095},"the-forge-row",[510,2097,2098,2099,2101,2102,2104,2105,2108,2109,2115,2116,2120],{},"The row fails when ",[514,2100,1504],{}," (GitHub) or ",[514,2103,1507],{}," (GitLab) is missing, or when no forge is recorded for the repo because it had no GitHub or GitLab ",[514,2106,2107],{},"origin"," when you connected it. For the second, ",[519,2110,2112],{"href":2111},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#no-forge-is-recorded-for-this-repo",[514,2113,2114],{},"no forge is recorded for this repo"," has the fix; for the first, install the forge CLI and sign it in: ",[519,2117,2119],{"href":2118},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#forge-authentication-fails","Forge authentication fails"," has the commands.",[510,2122,2123,2124,2127,2128,2130],{},"Doctor checks every connected repo while any chain runs a forge task. ",[514,2125,2126],{},"quick-task"," needs no forge, so on a repo with no remote that you use only with ",[514,2129,2126],{},", this one row fails and doctor exits 1; every other row should pass.",[588,2132,1605],{"id":2133},"the-sandbox-row",[510,2135,2136,2137,2139],{},"For a sandboxed repository, the row names the runtime it found (Docker or Podman, rootless or not) and the resource limits it can enforce. It reads ",[514,2138,364],{}," afresh each run. It fails when:",[1977,2141,2142,2149,2160,2167,2175,2185,2194],{},[1980,2143,2144,2145,528],{},"the runtime does not answer. Start the Docker or Podman daemon. Doctor can wait about a minute for a runtime that is slow to answer: see ",[519,2146,2148],{"href":2147},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml#a-runtime-that-does-not-answer","A runtime that does not answer",[1980,2150,2151,2152,2155,2156,2159],{},"SELinux enforces and ",[519,2153,364],{"href":2154},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml#selinux"," does not say how to get past it. Set ",[514,2157,2158],{},"selinux"," there.",[1980,2161,2162,2164,2165,528],{},[514,2163,1756],{}," cannot be used. Fix the path, which must be an absolute path to a PEM file, or unset it. See ",[519,2166,1762],{"href":1761},[1980,2168,2169,2170,2174],{},"the sandbox sets a ",[519,2171,2173],{"href":2172},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits#when-a-limit-cannot-be-enforced","limit"," the runtime cannot enforce. Remove the limit or change it.",[1980,2176,2177,2178,2181,2182,528],{},"the sandbox image is not pulled. Run the ",[514,2179,2180],{},"pull"," command the row names, such as ",[514,2183,2184],{},"docker pull \u003Cimage>",[1980,2186,2187,2188,2190,2191,2193],{},"with a ",[514,2189,1682],{}," policy, the egress relay image is not pulled. Run the ",[514,2192,2180],{}," command the row names.",[1980,2195,2187,2196,2198,2199,528],{},[514,2197,1682],{}," policy, the channel to the relay cannot be reached. See ",[519,2200,2202],{"href":2201},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy#it-fails-closed","It fails closed",[510,2204,2205,2206,2208,2209,2212],{},"For a repository whose sandbox is a ",[519,2207,1620],{"href":361},", doctor fetches and lowers the Kit first. The ",[514,2210,2211],{},"sandbox"," row fails naming the Kit and why when it cannot, and otherwise it and the egress, proxy and credentials rows check the sandbox the Kit lowers to. Doctor fetches each Kit it has not cached; under Podman a single-manifest Kit is pulled, which can take up to 10 minutes per repository the first time.",[588,2214,1108],{"id":2215},"allowed-hosts-rows",[510,2217,2218,2219,2221,2222,2225,2226,2228],{},"For the ",[514,2220,1086],{}," row: replace the entry with the exact name each device uses, such as ",[514,2223,2224],{},"mybox.tailnet-name.ts.net",", in ",[514,2227,322],{}," or on the Access screen. While the server is bound to loopback the list is not read, so the row is only a warning there.",[510,2230,2218,2231,2233,2234,2237,2238,1411,2240,2242,2243,528],{},[514,2232,1117],{}," row: add each exact name the devices use on the Access screen (from this machine, at ",[514,2235,2236],{},"http:\u002F\u002F127.0.0.1:PORT","), or to ",[514,2239,1092],{},[514,2241,322],{},". After an upgrade from 1.4, a board that opened on another device can stop opening: see ",[519,2244,2246],{"href":2245},"\u002Fguides\u002Frun\u002Fupgrade-from-1-4#network-access","Network access",[530,2248,2250],{"id":2249},"related","Related",[1977,2252,2253,2258,2270],{},[1980,2254,2255,2257],{},[519,2256,195],{"href":196},": the reason on a stopped item, which several doctor rows predict.",[1980,2259,2260,2262,2263,549,2265,752,2268,528],{},[519,2261,278],{"href":279},": every admin command, including ",[514,2264,645],{},[514,2266,2267],{},"reload",[514,2269,671],{},[1980,2271,2272,2274,2275,2277],{},[519,2273,203],{"href":204},": a missing ",[514,2276,641],{}," command or a taken port.",{"title":2279,"searchDepth":2280,"depth":2280,"links":2281},"",2,[2282,2291,2304],{"id":532,"depth":2280,"text":533,"children":2283},[2284,2286,2287,2288,2289,2290],{"id":590,"depth":2285,"text":591},3,{"id":843,"depth":2285,"text":844},{"id":1131,"depth":2285,"text":1132},{"id":1366,"depth":2285,"text":1367},{"id":1567,"depth":2285,"text":1568},{"id":1795,"depth":2285,"text":522},{"id":1873,"depth":2280,"text":527,"children":2292},[2293,2294,2295,2297,2298,2299,2300,2301,2302,2303],{"id":1879,"depth":2285,"text":899},{"id":1906,"depth":2285,"text":956},{"id":1939,"depth":2285,"text":2296},"Invalid intake.​yaml",{"id":1963,"depth":2285,"text":1169},{"id":2005,"depth":2285,"text":1218},{"id":2060,"depth":2285,"text":1424},{"id":2080,"depth":2285,"text":1448},{"id":2095,"depth":2285,"text":1519},{"id":2133,"depth":2285,"text":1605},{"id":2215,"depth":2285,"text":1108},{"id":2249,"depth":2280,"text":2250},"What each failing or warning row of `kraft admin doctor` means and how to clear it.","md",null,{},true,{"title":207,"description":2305},"8eGUEicpszuJqX1P-G57GVUEUkVoZqNtiBZxB-VHiMQ",[2313,2315],{"title":203,"path":204,"stem":205,"description":2314,"children":-1},"Fix a `kraft` command that is not found, a server that will not start because its port is taken, and a 403 \"unexpected Host\" from a webhook or proxy.",{"title":211,"path":212,"stem":213,"description":2316,"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.",1791801249111]