[{"data":1,"prerenderedAt":1511},["ShallowReactive",2],{"navigation_docs":3,"-get-started-install":504,"-get-started-install-surround":1506},[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":17,"body":506,"description":1500,"extension":1501,"links":1502,"meta":1503,"navigation":1131,"path":18,"seo":1504,"stem":19,"__hash__":1505},"docs\u002F1.get-started\u002F1.install.md",{"type":507,"value":508,"toc":1488},"minimark",[509,522,527,530,598,602,609,829,833,842,845,856,868,886,890,897,902,913,916,947,953,960,975,982,996,1015,1021,1025,1040,1044,1047,1077,1084,1137,1157,1196,1211,1272,1276,1282,1296,1299,1313,1323,1363,1366,1404,1411,1446,1450,1484],[510,511,512,513,517,518,521],"p",{},"Install Kraft, start its server, and register it with Claude Code. At the end\nthe board loads at ",[514,515,516],"code",{},"http:\u002F\u002F127.0.0.1:8765"," and ",[514,519,520],{},"kraft admin doctor"," has nothing\nto say against your install.",[523,524,526],"h2",{"id":525},"before-you-start","Before you start",[510,528,529],{},"You need:",[531,532,533,542,555,583],"ul",{},[534,535,536,537,541],"li",{},"macOS or Linux. Windows is not supported, and WSL is untested: see the\n",[538,539,25],"a",{"href":540},"\u002Fget-started\u002Ffaq#does-it-run-on-windows",".",[534,543,544,550,551,554],{},[538,545,549],{"href":546,"rel":547},"https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F",[548],"nofollow","uv",", or Homebrew: ",[514,552,553],{},"uv --version"," prints a\nversion.",[534,556,557,560,561,564,565,568,569,572,573,576,577,541],{},[514,558,559],{},"git"," with a commit identity: ",[514,562,563],{},"git config user.name"," and\n",[514,566,567],{},"git config user.email"," each print a value. Kraft commits the agents' work\nunder that identity. If either prints nothing, run\n",[514,570,571],{},"git config --global user.name \"Your Name\""," and the same for ",[514,574,575],{},"user.email",". A\nrepo that sets its own identity is the case in\n",[538,578,580],{"href":579},"\u002Ftroubleshooting\u002Fstop-reasons-in-detail#no-username-configured",[514,581,582],{},"no user.name configured",[534,584,585,586,589,590,593,594,597],{},"Claude Code (",[514,587,588],{},"claude","), installed and logged in: ",[514,591,592],{},"claude --version"," prints a\nversion. The shipped chains run every agent task on it; another agent CLI is a\n",[538,595,596],{"href":395},"harness"," and needs a chain edit.",[523,599,601],{"id":600},"installation-methods","Installation methods",[510,603,604,605,541],{},"Pick one. Each tab says who it suits. Kraft is Apache-2.0 licensed: see\n",[538,606,608],{"href":607},"\u002Fproject\u002Fstatus-and-support#licenses","Licenses",[610,611,613,667,706,760],"tabs",{"sync":612},"install",[614,615,616,622,649],"tabs-item",{"label":549},[510,617,618,619,541],{},"For anyone with uv. It is the shortest path, and installs from PyPI. uv uses a\nPython 3.12 or newer already on your machine, or fetches one. To choose the\ninterpreter yourself, add ",[514,620,621],{},"--python 3.13",[623,624,629],"pre",{"className":625,"code":626,"language":627,"meta":628,"style":628},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","uv tool install kraft-sdlc\n","bash","",[514,630,631],{"__ignoreMap":628},[632,633,636,639,643,646],"span",{"class":634,"line":635},"line",1,[632,637,549],{"class":638},"szw1H",[632,640,642],{"class":641},"semJd"," tool",[632,644,645],{"class":641}," install",[632,647,648],{"class":641}," kraft-sdlc\n",[510,650,651,652,660,661,664,665,541],{},"The package is ",[538,653,656,659],{"href":654,"rel":655},"https:\u002F\u002Fpypi.org\u002Fproject\u002Fkraft-sdlc\u002F",[548],[514,657,658],{},"kraft-sdlc"," on PyPI","\nbecause other tools already use the name ",[514,662,663],{},"kraft"," (Unikraft's CLI, for one). The\ncommand it installs is still ",[514,666,663],{},[614,668,670,680],{"label":669},"Homebrew (macOS)",[510,671,672,673,676,677,541],{},"For a Mac where you manage tools with Homebrew: ",[514,674,675],{},"kraft admin update"," then runs\n",[514,678,679],{},"brew upgrade kraft",[623,681,683],{"className":625,"code":682,"language":627,"meta":628,"style":628},"brew tap itsOmidKarami\u002Fkraft\nbrew install kraft\n",[514,684,685,696],{"__ignoreMap":628},[632,686,687,690,693],{"class":634,"line":635},[632,688,689],{"class":638},"brew",[632,691,692],{"class":641}," tap",[632,694,695],{"class":641}," itsOmidKarami\u002Fkraft\n",[632,697,699,701,703],{"class":634,"line":698},2,[632,700,689],{"class":638},[632,702,645],{"class":641},[632,704,705],{"class":641}," kraft\n",[614,707,709,715,739],{"label":708},"Install script",[510,710,711,712,714],{},"For a machine with neither uv nor Homebrew. The script fetches the newest\nrelease and installs ",[514,713,549],{}," first if you do not have it:",[623,716,718],{"className":625,"code":717,"language":627,"meta":628,"style":628},"curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FitsOmidKarami\u002Fkraft\u002Fmain\u002Finstall.sh | sh\n",[514,719,720],{"__ignoreMap":628},[632,721,722,725,729,732,736],{"class":634,"line":635},[632,723,724],{"class":638},"curl",[632,726,728],{"class":727},"ssYy9"," -fsSL",[632,730,731],{"class":641}," https:\u002F\u002Fraw.githubusercontent.com\u002FitsOmidKarami\u002Fkraft\u002Fmain\u002Finstall.sh",[632,733,735],{"class":734},"sklAV"," |",[632,737,738],{"class":638}," sh\n",[510,740,741,748,749,751,752,755,756,759],{},[538,742,745],{"href":743,"rel":744},"https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\u002Fblob\u002Fmain\u002Finstall.sh",[548],[514,746,747],{},"install.sh"," is\nshort and worth reading before you pipe it to a shell. It says where it put\n",[514,750,663],{},", and when that directory is not on your ",[514,753,754],{},"PATH"," yet (usually after it\ninstalled uv), it says to run ",[514,757,758],{},"uv tool update-shell"," and open a new terminal.",[614,761,763,786,824],{"label":762},"From source",[510,764,765,766,768,769,774,775,778,779,782,783,785],{},"To run an unreleased commit or to work on Kraft itself. Besides uv and ",[514,767,559],{},",\nyou need ",[538,770,773],{"href":771,"rel":772},"https:\u002F\u002Fjust.systems\u002F",[548],"just"," and Node 22 to build the board.\n",[514,776,777],{},"just setup"," installs the Python and frontend dependencies, and ",[514,780,781],{},"just install","\nbuilds the board and installs the ",[514,784,663],{}," command:",[623,787,789],{"className":625,"code":788,"language":627,"meta":628,"style":628},"git clone https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft.git\ncd kraft\njust setup\njust install\n",[514,790,791,801,808,816],{"__ignoreMap":628},[632,792,793,795,798],{"class":634,"line":635},[632,794,559],{"class":638},[632,796,797],{"class":641}," clone",[632,799,800],{"class":641}," https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft.git\n",[632,802,803,806],{"class":634,"line":698},[632,804,805],{"class":727},"cd",[632,807,705],{"class":641},[632,809,811,813],{"class":634,"line":810},3,[632,812,773],{"class":638},[632,814,815],{"class":641}," setup\n",[632,817,819,821],{"class":634,"line":818},4,[632,820,773],{"class":638},[632,822,823],{"class":641}," install\n",[510,825,826,827,541],{},"To develop Kraft rather than run it, see ",[538,828,501],{"href":502},[523,830,832],{"id":831},"start-the-server","Start the server",[623,834,836],{"className":625,"code":835,"language":627,"meta":628,"style":628},"kraft\n",[514,837,838],{"__ignoreMap":628},[632,839,840],{"class":634,"line":635},[632,841,835],{"class":638},[510,843,844],{},"It prints its address and keeps running in this terminal:",[623,846,851],{"className":847,"code":849,"language":850,"meta":628},[848],"language-text","kraft: http:\u002F\u002F127.0.0.1:8765\n","text",[514,852,853],{"__ignoreMap":628},[632,854,849],{"className":855},[634],[510,857,858,859,862,863,867],{},"When a newer release exists, a line ",[514,860,861],{},"kraft: \u003Cinstalled> installed, \u003Cnew> available - kraft admin update","\ncomes first; it is only a notice.\nLeave the server running and open the address in a browser. With no repo connected, the\nboard shows ",[864,865,866],"strong",{},"Nothing on the board yet",". Open a second terminal for everything\nthat follows.",[510,869,870,871,877,878,881,882,541],{},"If the command is not found, see\n",[538,872,874,876],{"href":873},"\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft#kraft-command-not-found",[514,875,663],{},": command not found",".\nIf it prints ",[514,879,880],{},"kraft: refusing to start - something is already answering on ...",",\nsee\n",[538,883,885],{"href":884},"\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft#kraft-wont-start-port-already-in-use","Kraft won't start: port already in use",[523,887,889],{"id":888},"connect-your-agent","Connect your agent",[510,891,892,893,896],{},"Kraft talks to agents through its MCP server, the command ",[514,894,895],{},"kraft admin mcp",".\nRegister it with Claude Code first, then with any other agent you want to drive\nKraft from.",[898,899,901],"h3",{"id":900},"claude-code","Claude Code",[510,903,904,905,909,910,912],{},"The shipped chains run every ",[538,906,908],{"href":907},"\u002Fconcepts\u002Fvocabulary#worker","worker"," on Claude Code, and Kraft refuses to launch\na Claude worker unless Claude Code knows the ",[514,911,663],{}," MCP server: the worker asks\nthe permission gate through it. So register it even when you drive Kraft from\nanother agent.",[510,914,915],{},"Install the plugin:",[623,917,919],{"className":625,"code":918,"language":627,"meta":628,"style":628},"claude plugin marketplace add itsOmidKarami\u002Fkraft\nclaude plugin install kraft@kraft\n",[514,920,921,936],{"__ignoreMap":628},[632,922,923,925,928,931,934],{"class":634,"line":635},[632,924,588],{"class":638},[632,926,927],{"class":641}," plugin",[632,929,930],{"class":641}," marketplace",[632,932,933],{"class":641}," add",[632,935,695],{"class":641},[632,937,938,940,942,944],{"class":634,"line":698},[632,939,588],{"class":638},[632,941,927],{"class":641},[632,943,645],{"class":641},[632,945,946],{"class":641}," kraft@kraft\n",[510,948,949,950,541],{},"The plugin registers the MCP server itself: do not also run ",[514,951,952],{},"kraft admin init",[510,954,955,956,959],{},"Without the plugin, register the server and the ",[514,957,958],{},"\u002Fkraft:*"," skills from a\nterminal instead:",[623,961,963],{"className":625,"code":962,"language":627,"meta":628,"style":628},"kraft admin init\n",[514,964,965],{"__ignoreMap":628},[632,966,967,969,972],{"class":634,"line":635},[632,968,663],{"class":638},[632,970,971],{"class":641}," admin",[632,973,974],{"class":641}," init\n",[510,976,977,978,981],{},"It prints one ",[514,979,980],{},"kraft: wrote \u003Cpath>"," line for each file it writes, starting with\nthe plugin's manifest:",[623,983,986],{"className":984,"code":985,"language":850,"meta":628},[848],"kraft: wrote \u002Fhome\u002Fyou\u002F.claude\u002Fskills\u002Fkraft\u002F.claude-plugin\u002Fplugin.json\nkraft: wrote \u002Fhome\u002Fyou\u002F.claude\u002Fskills\u002Fkraft\u002Fskills\u002Fboard\u002FSKILL.md\n",[514,987,988,992],{"__ignoreMap":628},[632,989,991],{"className":990},[634],"kraft: wrote \u002Fhome\u002Fyou\u002F.claude\u002Fskills\u002Fkraft\u002F.claude-plugin\u002Fplugin.json\n",[632,993,995],{"className":994},[634],"kraft: wrote \u002Fhome\u002Fyou\u002F.claude\u002Fskills\u002Fkraft\u002Fskills\u002Fboard\u002FSKILL.md\n",[510,997,998,999,1002,1003,1006,1007,1009,1010,1012,1013,541],{},"If it exits with ",[514,1000,1001],{},"kraft admin init: could not register the MCP server automatically",", it prints the ",[514,1004,1005],{},"claude mcp add"," command to run yourself. This\nhappens whenever ",[514,1008,1005],{}," exits non-zero, for example when ",[514,1011,588],{}," is\nnot on your ",[514,1014,754],{},[510,1016,1017,1018,541],{},"Connecting a repo is step 2 of\n",[538,1019,21],{"href":1020},"\u002Fget-started\u002Ffirst-work-item#_2-connect-a-repo",[898,1022,1024],{"id":1023},"other-agents-optional","Other agents (optional)",[510,1026,1027,1028,1030,1031,1033,1034,1036,1037,1039],{},"To drive Kraft from Codex, Cursor, OpenCode, Amp, Antigravity or Gemini CLI,\nregister the MCP server with it.\n",[538,1029,72],{"href":73}," has the\nsteps for each agent. ",[538,1032,131],{"href":132},"\ncovers what a worker needs when a chain runs on it. The\n",[514,1035,663],{}," command must be on your ",[514,1038,754],{}," for every agent.",[523,1041,1043],{"id":1042},"check-it-worked","Check it worked",[510,1045,1046],{},"In the second terminal:",[623,1048,1050],{"className":625,"code":1049,"language":627,"meta":628,"style":628},"kraft --version\nkraft admin health\nkraft admin doctor\n",[514,1051,1052,1059,1068],{"__ignoreMap":628},[632,1053,1054,1056],{"class":634,"line":635},[632,1055,663],{"class":638},[632,1057,1058],{"class":727}," --version\n",[632,1060,1061,1063,1065],{"class":634,"line":698},[632,1062,663],{"class":638},[632,1064,971],{"class":641},[632,1066,1067],{"class":641}," health\n",[632,1069,1070,1072,1074],{"class":634,"line":810},[632,1071,663],{"class":638},[632,1073,971],{"class":641},[632,1075,1076],{"class":641}," doctor\n",[510,1078,1079,1080,1083],{},"Each prints a few lines, cut here to the ones that matter. The paths in the\n",[514,1081,1082],{},"doctor"," rows are your own, and more rows come between them:",[623,1085,1088],{"className":1086,"code":1087,"language":850,"meta":628},[848],"$ kraft --version\nkraft 2.0.0\n$ kraft admin health\nstatus         ok\nversion        2.0.0\n$ kraft admin doctor\nok    server         http:\u002F\u002F127.0.0.1:8765\nok    agent: claude  \u002Fusr\u002Flocal\u002Fbin\u002Fclaude\nok    kraft on PATH  \u002Fhome\u002Fyou\u002F.local\u002Fbin\u002Fkraft\n\nall \u003CN> checks passed\n",[514,1089,1090,1094,1098,1102,1106,1110,1114,1118,1122,1126,1133],{"__ignoreMap":628},[632,1091,1093],{"className":1092},[634],"$ kraft --version\n",[632,1095,1097],{"className":1096},[634],"kraft 2.0.0\n",[632,1099,1101],{"className":1100},[634],"$ kraft admin health\n",[632,1103,1105],{"className":1104},[634],"status         ok\n",[632,1107,1109],{"className":1108},[634],"version        2.0.0\n",[632,1111,1113],{"className":1112},[634],"$ kraft admin doctor\n",[632,1115,1117],{"className":1116},[634],"ok    server         http:\u002F\u002F127.0.0.1:8765\n",[632,1119,1121],{"className":1120},[634],"ok    agent: claude  \u002Fusr\u002Flocal\u002Fbin\u002Fclaude\n",[632,1123,1125],{"className":1124},[634],"ok    kraft on PATH  \u002Fhome\u002Fyou\u002F.local\u002Fbin\u002Fkraft\n",[632,1127,1129],{"className":1128},[634],[632,1130,1132],{"emptyLinePlaceholder":1131},true,"\n",[632,1134,1136],{"className":1135},[634],"all \u003CN> checks passed\n",[510,1138,1139,1141,1142,1145,1146,1145,1149,1152,1153,1156],{},[514,1140,1082],{}," prints one line per check, led by ",[514,1143,1144],{},"ok",", ",[514,1147,1148],{},"warn",[514,1150,1151],{},"FAIL"," or ",[514,1154,1155],{},"skip"," (a\ncheck that needs the server, when none is up), and a count at the end. You know\nit worked when:",[531,1158,1159,1164,1177],{},[534,1160,1161,1163],{},[514,1162,516],{}," shows the board.",[534,1165,1166,1169,1170,1173,1174,1176],{},[514,1167,1168],{},"kraft admin health"," shows a ",[514,1171,1172],{},"status"," of ",[514,1175,1144],{}," and exits 0. It exits 1 when\nthe server is down or degraded.",[534,1178,1179,1181,1182,1185,1186,1189,1190,1192,1193,541],{},[514,1180,520],{}," ends in ",[514,1183,1184],{},"all \u003CN> checks passed",", followed by\n",[514,1187,1188],{},", \u003CW> warned"," when a row warns. While any row reads ",[514,1191,1151],{}," it exits 1 and\nends in ",[514,1194,1195],{},"\u003CF> of \u003CN> checks failed",[510,1197,1198,1199,1201,1202,1204,1205,1207,1208,1210],{},"A ",[514,1200,1151],{}," row names its cause, and ",[538,1203,207],{"href":208},"\nhas every row and its fix. Once you connect a repo, ",[514,1206,1082],{}," adds rows about\nit. Four ",[514,1209,1151],{}," rows are common right after an install:",[531,1212,1213,1221,1239,1259],{},[534,1214,1215,1218,1219,541],{},[514,1216,1217],{},"mcp server",": nothing registers Kraft's MCP server with Claude Code. Install\nthe plugin, or run ",[514,1220,952],{},[534,1222,1223,1226,1227,1229,1230,1232,1233,1235,1236,1238],{},[514,1224,1225],{},"kraft on PATH",": the ",[514,1228,663],{}," command is not on your ",[514,1231,754],{},". After a uv\ninstall, run ",[514,1234,758],{},", then start ",[514,1237,663],{}," again from a new\nterminal.",[534,1240,1241,1244,1245,1248,1249,1252,1253,1256,1257,541],{},[514,1242,1243],{},"forge \u003Crepo>",": a connected repo has no GitHub or GitLab ",[514,1246,1247],{},"origin",", or ",[514,1250,1251],{},"gh","\nor ",[514,1254,1255],{},"glab"," is not on your ",[514,1258,754],{},[534,1260,1261,1264,1265,1268,1269,1271],{},[514,1262,1263],{},"setup \u003Crepo>",": a connected repo has no ",[514,1266,1267],{},"setup_command",". See\n",[538,1270,207],{"href":208}," for both.",[523,1273,1275],{"id":1274},"uninstall-and-where-state-lives","Uninstall and where state lives",[510,1277,1278,1279,1281],{},"Uninstalling removes the ",[514,1280,663],{}," command and nothing else, so stop what runs\nfirst, while the command exists. Stop a running server:",[623,1283,1285],{"className":625,"code":1284,"language":627,"meta":628,"style":628},"kraft admin stop\n",[514,1286,1287],{"__ignoreMap":628},[632,1288,1289,1291,1293],{"class":634,"line":635},[632,1290,663],{"class":638},[632,1292,971],{"class":641},[632,1294,1295],{"class":641}," stop\n",[510,1297,1298],{},"If you installed a service, remove it too:",[623,1300,1302],{"className":625,"code":1301,"language":627,"meta":628,"style":628},"kraft admin uninstall-service\n",[514,1303,1304],{"__ignoreMap":628},[632,1305,1306,1308,1310],{"class":634,"line":635},[632,1307,663],{"class":638},[632,1309,971],{"class":641},[632,1311,1312],{"class":641}," uninstall-service\n",[510,1314,1315,1318,1319,1322],{},[514,1316,1317],{},"uninstall-service"," deletes the launchd agent or the systemd unit, and a systemd\ndrop-in you made stays. ",[538,1320,160],{"href":1321},"\u002Fguides\u002Frun\u002Frun-as-a-service#remove-the-service","\nsays what to save before you remove it. Then remove Kraft with the command for\nhow you installed it:",[1324,1325,1326,1339],"table",{},[1327,1328,1329],"thead",{},[1330,1331,1332,1336],"tr",{},[1333,1334,1335],"th",{},"Installed with",[1333,1337,1338],{},"Run",[1340,1341,1342,1353],"tbody",{},[1330,1343,1344,1348],{},[1345,1346,1347],"td",{},"uv or the script",[1345,1349,1350],{},[514,1351,1352],{},"uv tool uninstall kraft-sdlc",[1330,1354,1355,1358],{},[1345,1356,1357],{},"Homebrew",[1345,1359,1360],{},[514,1361,1362],{},"brew uninstall kraft",[510,1364,1365],{},"Two things are left:",[531,1367,1368,1392],{},[534,1369,1370,1373,1374,1377,1378,1380,1381,1384,1385,1388,1389,1391],{},[864,1371,1372],{},"Claude Code's registration."," Remove the plugin with\n",[514,1375,1376],{},"claude plugin uninstall kraft",". If you ran ",[514,1379,952],{}," instead, remove\nits registration with ",[514,1382,1383],{},"claude mcp remove --scope user kraft",", and delete the\nskill files it wrote under ",[514,1386,1387],{},"~\u002F.claude\u002Fskills\u002Fkraft\u002F",". Another agent you\nregistered keeps its registration: ",[538,1390,72],{"href":73},"\ncovers each one.",[534,1393,1394,1399,1400,1403],{},[864,1395,1396],{},[514,1397,1398],{},"$KRAFT_HOME"," (default ",[514,1401,1402],{},"~\u002F.kraft","), where Kraft keeps its state. Delete that\ndirectory yourself to discard it.",[510,1405,1406,1407,1410],{},"uv itself, and a Python it fetched for Kraft, stay too: they are uv's, and\n",[514,1408,1409],{},"uv python uninstall"," removes a Python.",[510,1412,1413,1416,1417,1420,1421,1423,1424,1427,1428,1432,1433,1437,1438,1441,1442,541],{},[514,1414,1415],{},"config\u002F"," holds the YAML you edit, a plain directory you can diff, revert or\n",[514,1418,1419],{},"git init",": see ",[538,1422,286],{"href":287},". ",[514,1425,1426],{},"run\u002F"," holds the\ndatabases, logs, ",[538,1429,1431],{"href":1430},"\u002Fconcepts\u002Fvocabulary#worktree","worktrees"," and attachment\ncopies: see ",[538,1434,1436],{"href":1435},"\u002Fproject\u002Fdata-and-privacy#secrets-and-state","Secrets and state",". A\nsecond, fully separate instance needs its own ",[514,1439,1440],{},"KRAFT_HOME"," and its own port: see\n",[538,1443,1445],{"href":1444},"\u002Fguides\u002Frun\u002Frun-as-a-service#run-two-instances","Run two instances",[523,1447,1449],{"id":1448},"next-steps","Next steps",[531,1451,1452,1457,1462,1473,1479],{},[534,1453,1454,1456],{},[538,1455,21],{"href":22},": connect a repo, run a work item to a merged pull request, and approve its gates.",[534,1458,1459,1461],{},[538,1460,164],{"href":165},": upgrade, restart safely, or roll back an installed Kraft.",[534,1463,1464,1468,1469,1472],{},[538,1465,1467],{"href":1466},"\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard#vector-search","Vector search",": search works as full-text search out of the box; the optional ",[514,1470,1471],{},"vector"," extra adds semantic search.",[534,1474,1475,1478],{},[538,1476,135],{"href":1477},"\u002Fguides#run-the-server",": back up, read logs, and keep the server running as a service.",[534,1480,1481,1483],{},[538,1482,140],{"href":141},": reach the board from another device.",[1485,1486,1487],"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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .sklAV, html code.shiki .sklAV{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF9492}",{"title":628,"searchDepth":698,"depth":698,"links":1489},[1490,1491,1492,1493,1497,1498,1499],{"id":525,"depth":698,"text":526},{"id":600,"depth":698,"text":601},{"id":831,"depth":698,"text":832},{"id":888,"depth":698,"text":889,"children":1494},[1495,1496],{"id":900,"depth":810,"text":901},{"id":1023,"depth":810,"text":1024},{"id":1042,"depth":698,"text":1043},{"id":1274,"depth":698,"text":1275},{"id":1448,"depth":698,"text":1449},"Install Kraft with uv, Homebrew, the install script, or from source, start the server, register it with Claude Code, and check that it works.","md",null,{},{"title":17,"description":1500},"JUQB723Swb7J0m0mBW40iJvMhPp2GAvu_tSYKD01R8k",[1507,1509],{"title":13,"path":14,"stem":15,"description":1508,"children":-1},"What Kraft does that an interactive session, a loop, or a skill does not, and when it is the wrong tool.",{"title":21,"path":22,"stem":23,"description":1510,"children":-1},"Start Kraft, connect a repo, run a work item end to end, and approve its gates.",1791801242447]