[{"data":1,"prerenderedAt":1347},["ShallowReactive",2],{"navigation_docs":3,"-guides-run-upgrade-from-0-x-or-a-release-candidate":520,"-guides-run-upgrade-from-0-x-or-a-release-candidate-surround":1342},[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":180,"body":522,"description":1335,"extension":1336,"links":1337,"meta":1338,"navigation":1339,"path":181,"seo":1340,"stem":182,"__hash__":1341},"docs\u002F3.guides\u002F4.run\u002F10.upgrade-from-0-x-or-a-release-candidate.md",{"type":523,"value":524,"toc":1321},"minimark",[525,541,568,573,596,599,610,708,715,739,750,760,763,791,799,822,825,828,836,848,896,902,906,926,1166,1169,1214,1223,1226,1247,1261,1291,1295,1317],[526,527,528,529,533,534,537,538,540],"p",{},"You will be on 2.0, coming from a 1.5.0 release candidate, an install from before\nthe ",[530,531,532],"code",{},"kraft-sdlc"," rename, or a Kraft 0.x home. A 1.4 install follows\n",[535,536,176],"a",{"href":177},", and an upgrade between 2.x\nreleases needs only ",[535,539,168],{"href":169},".",[542,543,544,556],"ul",{},[545,546,547,551,552,540],"li",{},[548,549,550],"strong",{},"On a 1.5.0 release candidate:"," go to ",[535,553,555],{"href":554},"#upgrading-from-a-150-release-candidate","Upgrading from a 1.5.0 release candidate",[545,557,558,551,564,540],{},[548,559,560,561,563],{},"On a 0.x install, or one from before the ",[530,562,532],{}," rename:",[535,565,567],{"href":566},"#upgrading-from-older-releases","Upgrading from older releases",[569,570,572],"h2",{"id":571},"before-you-start","Before you start",[542,574,575,582,589],{},[545,576,577,578,581],{},"You know which release you run: ",[530,579,580],{},"kraft --version"," prints it.",[545,583,584,585,588],{},"You know how Kraft was installed: with uv or ",[530,586,587],{},"install.sh",", with Homebrew, or\nwith pipx. The install command differs for each.",[545,590,591,592,540],{},"You can pick a moment when no agent runs, or you will pause the running items\nfirst. See ",[535,593,595],{"href":594},"\u002Fguides\u002Frun\u002Frestart-kraft#a-restart-ends-running-agents","A restart ends running agents",[569,597,555],{"id":598},"upgrading-from-a-150-release-candidate",[526,600,601,602,605,606,609],{},"The 1.5.0 release candidates, ",[530,603,604],{},"1.5.0rc1"," to ",[530,607,608],{},"1.5.0rc14",", were the pre-releases of\n2.0. No 1.5.0 was released.",[611,612,613,621,689,695],"ol",{},[545,614,615,616,620],{},"Back up the database, as step 1 of ",[535,617,619],{"href":618},"\u002Fguides\u002Frun\u002Fupgrade-kraft#upgrade","Upgrade","\nsays. Keep the file name it prints: a rollback to 1.4 needs it.",[545,622,623,624],{},"Update or install, by the candidate you run. Pause the running items first, or\nwait until none run. Which command updates you depends on the candidate:",[542,625,626,644,671],{},[545,627,628,631,632,635,636,639,640,643],{},[548,629,630],{},"1.5.0rc14:"," ",[530,633,634],{},"kraft admin update"," follows the release-candidate channel, so\nit moves to 2.0's candidates, and to 2.0.0 once that is out, and keeps\n",[530,637,638],{},"[vector]"," and your Python. ",[530,641,642],{},"kraft admin update --channel stable"," waits for\n2.0.0.",[545,645,646,631,649,651,652,654,655,658,659,663,664,667,668,540],{},[548,647,648],{},"1.5.0rc13:",[530,650,634],{}," follows the release-candidate channel too,\nbut installs without ",[530,653,638],{}," and on uv's default Python, as 1.4's does. Use\nthe ",[530,656,657],{},"uv tool install"," command from\n",[535,660,662],{"href":661},"\u002Fguides\u002Frun\u002Fupgrade-from-1-4#update-from-14","Update from 1.4"," instead,\nnaming the release you want (such as ",[530,665,666],{},"2.0.0","). Then run ",[530,669,670],{},"kraft admin restart",[545,672,673,631,676,678,679,681,682,685,686,688],{},[548,674,675],{},"An earlier candidate:",[530,677,634],{}," compares against stable\nreleases and says you are up to date. Use the same ",[530,680,657],{}," command.\nIts ",[530,683,684],{},"kraft admin update --channel rc"," installs the candidate too, but drops\n",[530,687,638],{}," and the Python as rc13's does.",[545,690,691,692,694],{},"Restart the server with ",[530,693,670],{},", unless step 2 already did. It\nlists the running items and asks before it ends their agents.",[545,696,697,698,700,701,704,705,707],{},"Check the result with ",[530,699,580],{}," and ",[530,702,703],{},"kraft admin health",". Both print\nthe release you installed, as step 5 of ",[535,706,619],{"href":618},"\nshows.",[526,709,710,711,540],{},"After an update run by rc14 or earlier, vector search may have stopped. Reinstall\nthe extra as in ",[535,712,714],{"href":713},"\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard#vector-search","Enable vector search",[526,716,717,718,721,722,724,725,728,729,731,732,735,736,540],{},"An update run by rc14 keeps the extra, but where uv had recorded no Python for\nKraft (an install without ",[530,719,720],{},"--python",", ",[530,723,587],{},", or one that 1.4 or an earlier\ncandidate updated), it records the exact interpreter it ran on, one Python patch\nrelease (",[530,726,727],{},"…\u002Fcpython-3.13.12-…\u002Fbin\u002Fpython3.13","). Every later ",[530,730,634],{},"\nkeeps it, so ",[530,733,734],{},"uv python upgrade"," leaves Kraft behind, and removing that patch\nrelease breaks ",[530,737,738],{},"kraft",[526,740,741,742,745,746,749],{},"To fix that, run ",[530,743,744],{},"grep python \"$(uv tool dir)\u002Fkraft-sdlc\u002Fuv-receipt.toml\""," to see\nwhat uv recorded. If it is a path, run the ",[530,747,748],{},"uv tool install --force --python 3.X …","\ncommand once to tie Kraft to the minor version.",[526,751,752,753,756,757,540],{},"The VS Code extension on the Marketplace stays at 1.4 until 2.0.0 ships, and is\nread-only against a 2.0 release candidate. Install the ",[530,754,755],{},"kraft-\u003Cversion>.vsix","\nattached to the candidate's GitHub release with\n",[530,758,759],{},"code --install-extension kraft-\u003Cversion>.vsix",[526,761,762],{},"What a candidate already did stays done:",[542,764,765,768,779],{},[545,766,767],{},"2.0 migrates the database from the schema the candidate left. It copies the\ndatabase first as any upgrade does, unless the candidate already ran 2.0's\nschema 52 (2.0.0rc9 and later), when it makes none.",[545,769,770,771,774,775,778],{},"A theme the candidate converted keeps its ",[530,772,773],{},"theme.yaml.pre-1.5","\n(",[530,776,777],{},"theme.yaml.pre-ux2"," from rc5 to rc9).",[545,780,781,782,785,786,790],{},"A ",[530,783,784],{},"uv.lock"," that an open item's setup command wrote under 1.5.0rc14 was\nrecorded without a digest. When the item rebases, Kraft sets aside a lockfile\nthe setup wrote and nobody changed, but keeps one with no digest in place, in\ncase the agent edited it. The rebase can then stop on it: see\n",[535,787,789],{"href":788},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#git-would-not-start-the-rebase","Git would not start the rebase",".\nNo action; items started on 2.0 are recorded with a digest.",[526,792,793,794,798],{},"To roll back to 1.4 from there, you need the database as 1.4 left it, schema 44:\nyour own backup, or the copy Kraft made when you first left 1.4, which is not the\nnewest one. See\n",[535,795,797],{"href":796},"\u002Fguides\u002Frun\u002Fback-up-and-restore#find-the-copy-to-restore","Find the copy to restore",".\nWhich copy holds it depends on the first release you ran after 1.4:",[542,800,801,804,810,816],{},[545,802,803],{},"1.5.0rc1 to rc11: no copy. These made none, so only your own backup rolls\nback.",[545,805,806,807,540],{},"1.5.0rc12 or rc13: ",[530,808,809],{},"pre-v50-*",[545,811,812,813,540],{},"1.5.0rc14, or 2.0.0rc1 to rc8: ",[530,814,815],{},"pre-v51-*",[545,817,818,819,540],{},"2.0.0rc9 or later, 2.0 included: ",[530,820,821],{},"pre-v52-*",[526,823,824],{},"Any later upgrade adds a newer copy that holds the schema before it, which 1.4\nrefuses.",[569,826,567],{"id":827},"upgrading-from-older-releases",[829,830,832,833,835],"h3",{"id":831},"an-install-from-before-the-kraft-sdlc-rename","An install from before the ",[530,834,532],{}," rename",[526,837,838,839,841,842,844,845,847],{},"An older install can still hold a ",[530,840,738],{}," uv tool next to ",[530,843,532],{},".\n",[530,846,634],{}," then stops and names the two commands that clear it:",[849,850,855],"pre",{"className":851,"code":852,"language":853,"meta":854,"style":854},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","uv tool uninstall kraft\nuv tool install --force --reinstall kraft-sdlc\n","bash","",[530,856,857,876],{"__ignoreMap":854},[858,859,862,866,870,873],"span",{"class":860,"line":861},"line",1,[858,863,865],{"class":864},"szw1H","uv",[858,867,869],{"class":868},"semJd"," tool",[858,871,872],{"class":868}," uninstall",[858,874,875],{"class":868}," kraft\n",[858,877,879,881,883,886,890,893],{"class":860,"line":878},2,[858,880,865],{"class":864},[858,882,869],{"class":868},[858,884,885],{"class":868}," install",[858,887,889],{"class":888},"ssYy9"," --force",[858,891,892],{"class":888}," --reinstall",[858,894,895],{"class":868}," kraft-sdlc\n",[526,897,898,899,901],{},"The reinstall is needed because the uninstall removes the ",[530,900,738],{}," command both\npackages share.",[829,903,905],{"id":904},"migrating-a-home-from-0x","Migrating a home from 0.x",[526,907,908,909,912,913,916,917,919,920,922,923,540],{},"A Kraft home from 0.x holds a ",[530,910,911],{},"registry.yaml"," and no ",[530,914,915],{},"library.yaml",". Kraft does\nnot convert or overwrite it: the server starts degraded and refuses new work\nuntil ",[530,918,634],{}," replaces the configuration. Since 1.0, a template\nconfiguration is a ",[530,921,915],{}," plus ",[530,924,925],{},"chains\u002F*.yaml",[611,927,928,966,979,1124,1158],{},[545,929,930,931],{},"Get ready.",[542,932,933,943,946,961],{},[545,934,935,936,942],{},"Read the\n",[535,937,941],{"href":938,"rel":939},"https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\u002Fblob\u002Fmain\u002FCHANGELOG.md#100",[940],"nofollow","1.0.0 changelog",".\nHarness profile names and the template layout changed.",[545,944,945],{},"Finish or abandon in-flight items.",[545,947,948,949,952,953,956,957,960],{},"Stop the old server with ",[530,950,951],{},"kraft admin stop",". It prints ",[530,954,955],{},"kraft: stopped (pid N)",",\nor ",[530,958,959],{},"kraft: no server running"," when none runs. The command exists from 0.6.0.\nOn an older install, stop the server in the terminal it runs in, or end its\nprocess from your process list.",[545,962,615,963,965],{},[535,964,619],{"href":618},"\nsays. The update keeps the old configuration whole in a backup folder of its\nown, so that needs no copy of yours.",[545,967,968,969,972,973,975,976,978],{},"Install 2.0 with the tool you installed Kraft with, as\n",[535,970,17],{"href":971},"\u002Fget-started\u002Finstall#installation-methods"," shows.\n",[530,974,580],{}," prints ",[530,977,738],{}," and a 2.x release.",[545,980,981,982,997,1000,1001,1053,1055,1056,1059,1060,1063,1064,1067,1068,1071,1072,1074,1075,1078,1079,1081,1082,1096,1098,1099,1102,1103,1105,1106,1109,1110,1112,1113,1116,1117,1120,1121,1123],{},"Run the update:",[849,983,985],{"className":851,"code":984,"language":853,"meta":854,"style":854},"kraft admin update\n",[530,986,987],{"__ignoreMap":854},[858,988,989,991,994],{"class":860,"line":861},[858,990,738],{"class":864},[858,992,993],{"class":868}," admin",[858,995,996],{"class":868}," update\n",[998,999],"br",{},"It works on the directory that holds the 0.x files, whether or not a server has\nstarted since you installed. It says what will change, then asks:",[849,1002,1007],{"className":1003,"code":1005,"language":1006,"meta":854},[1004],"language-text","kraft: \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig holds a Kraft 0.x template configuration (a hook\nregistry and gate_after chains). It is not compatible with this Kraft, which\nruns only the library.yaml format 1.0 introduced, and there is no migration:\nreplacing it installs the bundled configuration and moves the old one, whole,\nto a backup at\n  \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig.pre-v1-20261002-093015\nCarried across unchanged: access.yaml, notify.yaml, theme.yaml, repos.yaml, intake.yaml, harnesses.\npolicy.yaml keeps your value for every key the current format still has; any\nother key is dropped and listed. Your chains and registry.yaml are replaced.\nAll of it stays in the backup.\nReplace it? [y\u002FN]\n","text",[530,1008,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049],{"__ignoreMap":854},[858,1010,1012],{"className":1011},[860],"kraft: \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig holds a Kraft 0.x template configuration (a hook\n",[858,1014,1016],{"className":1015},[860],"registry and gate_after chains). It is not compatible with this Kraft, which\n",[858,1018,1020],{"className":1019},[860],"runs only the library.yaml format 1.0 introduced, and there is no migration:\n",[858,1022,1024],{"className":1023},[860],"replacing it installs the bundled configuration and moves the old one, whole,\n",[858,1026,1028],{"className":1027},[860],"to a backup at\n",[858,1030,1032],{"className":1031},[860],"  \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig.pre-v1-20261002-093015\n",[858,1034,1036],{"className":1035},[860],"Carried across unchanged: access.yaml, notify.yaml, theme.yaml, repos.yaml, intake.yaml, harnesses.\n",[858,1038,1040],{"className":1039},[860],"policy.yaml keeps your value for every key the current format still has; any\n",[858,1042,1044],{"className":1043},[860],"other key is dropped and listed. Your chains and registry.yaml are replaced.\n",[858,1046,1048],{"className":1047},[860],"All of it stays in the backup.\n",[858,1050,1052],{"className":1051},[860],"Replace it? [y\u002FN]\n",[998,1054],{},"The backup folder sits beside the directory it replaces and takes its name:\n",[530,1057,1058],{},"config.pre-v1-\u003Ctime>",", or ",[530,1061,1062],{},"templates.pre-v1-\u003Ctime>"," when no 2.0 server has\nstarted yet. Answer ",[530,1065,1066],{},"y",". With ",[530,1069,1070],{},"-y"," the command asks nothing. With no terminal\nand no ",[530,1073,1070],{},", it prints\n",[530,1076,1077],{},"kraft admin update: nothing changed. Answer y, or pass -y, to replace it."," and\nexits 1.",[998,1080],{},"After you accept, it prints what it did:",[849,1083,1086],{"className":1084,"code":1085,"language":1006,"meta":854},[1004],"kraft: installed the bundled configuration in \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig; the old one is at \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig.pre-v1-20261002-093015\nkraft: policy.yaml: dropped \u003Ckey> = \u003Cold value> (the current format has no such key, or refuses the value)\n",[530,1087,1088,1092],{"__ignoreMap":854},[858,1089,1091],{"className":1090},[860],"kraft: installed the bundled configuration in \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig; the old one is at \u002Fhome\u002Fyou\u002F.kraft\u002Fconfig.pre-v1-20261002-093015\n",[858,1093,1095],{"className":1094},[860],"kraft: policy.yaml: dropped \u003Ckey> = \u003Cold value> (the current format has no such key, or refuses the value)\n",[998,1097],{},"The ",[530,1100,1101],{},"dropped"," line appears once for each key the update drops. When the 0.x\n",[530,1104,318],{}," cannot be read, it prints\n",[530,1107,1108],{},"kraft: policy.yaml: no readable 0.x policy; the default is installed"," instead.",[998,1111],{},"The update then goes on to check for a newer release. When there is none, it\nprints ",[530,1114,1115],{},"kraft 2.0.0 is up to date (v2.0.0 is the newest release)"," and ends, with\nno restart line. When a newer release exists, it installs it and prints\n",[530,1118,1119],{},"Restart a running server: kraft admin restart","; step 4 covers the restart\neither way.",[998,1122],{},"When the release feed is unreachable, the command exits 1 after the\nconfiguration was replaced. Running it again changes no configuration, because\nno 0.x files are left.",[545,1125,1126,1127],{},"Start the server, or restart the one that is running. A server that came up\nbefore the update still holds its degraded state, and the update does not tell it\nto reload.",[542,1128,1129,1138],{},[545,1130,1131,1134,1135,540],{},[548,1132,1133],{},"No server is running:"," run ",[530,1136,1137],{},"kraft admin start --detach",[545,1139,1140,1134,1143,1145,1146,844,1148,1151,1152,1154,1155,1157],{},[548,1141,1142],{},"A server is running:",[530,1144,670],{},", which ends the agent of\nevery active item. See\n",[535,1147,595],{"href":594},[530,1149,1150],{},"kraft admin reload"," loads the new library, chains, ",[530,1153,318],{}," and\n",[530,1156,334],{}," with no restart, and leaves every other file as the server read\nit when it started.",[545,1159,1160,1161,1165],{},"Check the result, as ",[535,1162,1164],{"href":1163},"#check-it-worked","Check it worked"," says.",[526,1167,1168],{},"What the update does to your files:",[542,1170,1171,1187,1206,1211],{},[545,1172,1173,721,1175,721,1177,721,1179,721,1181,1154,1183,1186],{},[530,1174,330],{},[530,1176,338],{},[530,1178,342],{},[530,1180,300],{},[530,1182,334],{},[530,1184,1185],{},"harnesses\u002F"," carry across.",[545,1188,781,1189,1192,1193,1195,1196,1198,1199,1201,1202,1205],{},[530,1190,1191],{},"steering\u002F"," directory does not carry across: it stays in the\n",[530,1194,1058],{}," backup, and nothing folds it into ",[530,1197,915],{}," any more,\nso copy its text into ",[530,1200,915],{},"'s ",[530,1203,1204],{},"steering:"," by hand.",[545,1207,1208,1210],{},[530,1209,318],{}," starts from the shipped default and keeps your value for every key\nthe current format still has. Kraft prints each key it drops, with its old value.",[545,1212,1213],{},"Your old chains and registry stay only in the backup. There is no migration\nhelper.",[526,1215,1216,1217,1219,1220,540],{},"An update interrupted mid-swap is finished by the next start or the next\n",[530,1218,634],{},", which prints\n",[530,1221,1222],{},"kraft: finished an interrupted update: installed the staged template configuration in \u003Cthe directory>; the old one is at \u003Cthe backup>",[569,1224,1164],{"id":1225},"check-it-worked",[849,1227,1229],{"className":851,"code":1228,"language":853,"meta":854,"style":854},"kraft --version\nkraft admin health\n",[530,1230,1231,1238],{"__ignoreMap":854},[858,1232,1233,1235],{"class":860,"line":861},[858,1234,738],{"class":864},[858,1236,1237],{"class":888}," --version\n",[858,1239,1240,1242,1244],{"class":860,"line":878},[858,1241,738],{"class":864},[858,1243,993],{"class":868},[858,1245,1246],{"class":868}," health\n",[849,1248,1251],{"className":1249,"code":1250,"language":1006,"meta":854},[1004],"status         ok\nversion        2.0.0\n",[530,1252,1253,1257],{"__ignoreMap":854},[858,1254,1256],{"className":1255},[860],"status         ok\n",[858,1258,1260],{"className":1259},[860],"version        2.0.0\n",[526,1262,1263,1264,1267,1268,1271,1272,1275,1276,1279,1280,1283,1284,1287,1288,540],{},"You know it worked when ",[530,1265,1266],{},"--version"," prints a 2.x release and the ",[530,1269,1270],{},"status"," row of\n",[530,1273,1274],{},"health"," says ",[530,1277,1278],{},"ok",". A server that still refuses work reads ",[530,1281,1282],{},"degraded"," and adds an\n",[530,1285,1286],{},"invalid template"," row that names the reason. If it names the 0.x configuration,\nthe server has not read the new one yet: do step 4 of\n",[535,1289,905],{"href":1290},"#migrating-a-home-from-0x",[569,1292,1294],{"id":1293},"next-steps","Next steps",[542,1296,1297,1302,1307,1312],{},[545,1298,1299,1301],{},[535,1300,176],{"href":177},": what 2.0 changes from 1.4, which this page leaves out",[545,1303,1304,1306],{},[535,1305,168],{"href":169},": the backup, the update and the check that every upgrade uses",[545,1308,1309,1311],{},[535,1310,156],{"href":157},": find the copy to roll back to",[545,1313,1314,1316],{},[535,1315,184],{"href":185},": go back if the upgrade went wrong",[1318,1319,1320],"style",{},"html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":854,"searchDepth":878,"depth":878,"links":1322},[1323,1324,1326,1333,1334],{"id":571,"depth":878,"text":572},{"id":598,"depth":878,"text":1325},"Upgrading from a 1.​5.​0 release candidate",{"id":827,"depth":878,"text":567,"children":1327},[1328,1331],{"id":831,"depth":1329,"text":1330},3,"An install from before the kraft-​sdlc rename",{"id":904,"depth":1329,"text":1332},"Migrating a home from 0.​x",{"id":1225,"depth":878,"text":1164},{"id":1293,"depth":878,"text":1294},"Upgrade to 2.0 from a 1.5.0 release candidate, from an install made before the kraft-sdlc rename, or from a Kraft 0.x home that holds the old template configuration.","md",null,{},true,{"title":180,"description":1335},"JRfgiP3VWIswA2qdqL8shbNvedIrrlddKwUG5AdTAEE",[1343,1345],{"title":176,"path":177,"stem":178,"description":1344,"children":-1},"What 2.0 changes from 1.4 and what to do about each change, and the steps to update from 1.4 without losing the database.",{"title":184,"path":185,"stem":186,"description":1346,"children":-1},"What a rollback does to the database and the config directory, and the steps that take an upgraded install from 2.0 back to 1.4.",1791801172333]