[{"data":1,"prerenderedAt":1741},["ShallowReactive",2],{"navigation_docs":3,"-get-started-install":270,"-get-started-install-surround":1736},[4,28,51,110,243],{"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},"Troubleshooting and FAQ","\u002Fget-started\u002Ftroubleshooting","1.get-started\u002F3.troubleshooting",{"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},"Vocabulary","\u002Fconcepts\u002Fvocabulary","2.concepts\u002F1.vocabulary",{"title":40,"path":41,"stem":42},"How a work item runs","\u002Fconcepts\u002Fhow-a-work-item-runs","2.concepts\u002F2.how-a-work-item-runs",{"title":44,"path":45,"stem":46},"Caps and budgets","\u002Fconcepts\u002Fcaps-and-budgets","2.concepts\u002F3.caps-and-budgets",{"title":48,"path":49,"stem":50},"Why a permission gate","\u002Fconcepts\u002Fpermission-gate","2.concepts\u002F4.permission-gate",{"title":52,"path":53,"stem":54,"children":55},"Guides","\u002Fguides","3.guides",[56,58,62,66,70,74,78,82,86,90,94,98,102,106],{"title":10,"path":53,"stem":57},"3.guides\u002Findex",{"title":59,"path":60,"stem":61},"Use Kraft from your agent","\u002Fguides\u002Fagent-integration","3.guides\u002F01.agent-integration",{"title":63,"path":64,"stem":65},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F02.kraft-lite",{"title":67,"path":68,"stem":69},"Remote access","\u002Fguides\u002Fremote-access","3.guides\u002F03.remote-access",{"title":71,"path":72,"stem":73},"Add or override a harness","\u002Fguides\u002Fadding-a-harness","3.guides\u002F04.adding-a-harness",{"title":75,"path":76,"stem":77},"Schedule or webhook work","\u002Fguides\u002Fschedule-and-webhook-work","3.guides\u002F05.schedule-and-webhook-work",{"title":79,"path":80,"stem":81},"Add a security review or a gate reviewer","\u002Fguides\u002Fadd-review-agents","3.guides\u002F06.add-review-agents",{"title":83,"path":84,"stem":85},"Kraft for VS Code","\u002Fguides\u002Fvscode","3.guides\u002F07.vscode",{"title":87,"path":88,"stem":89},"Reviewing a change","\u002Fguides\u002Freview-a-change","3.guides\u002F08.review-a-change",{"title":91,"path":92,"stem":93},"Write your own chain","\u002Fguides\u002Fwrite-your-own-chain","3.guides\u002F09.write-your-own-chain",{"title":95,"path":96,"stem":97},"Switch a harness","\u002Fguides\u002Fswitch-harness","3.guides\u002F10.switch-harness",{"title":99,"path":100,"stem":101},"Upgrade your templates","\u002Fguides\u002Fupgrading-templates","3.guides\u002F11.upgrading-templates",{"title":103,"path":104,"stem":105},"Operations","\u002Fguides\u002Foperations","3.guides\u002F12.operations",{"title":107,"path":108,"stem":109},"Worker Kit","\u002Fguides\u002Fworker-kit","3.guides\u002F13.worker-kit",{"title":111,"path":112,"stem":113,"children":114},"Reference","\u002Freference","4.reference",[115,117,139,183,201,205,227,231,235,239],{"title":10,"path":112,"stem":116},"4.reference\u002Findex",{"title":118,"path":119,"stem":120,"children":121},"CLI","\u002Freference\u002Fcli","4.reference\u002F1.cli\u002Findex",[122,123,127,131,135],{"title":10,"path":119,"stem":120},{"title":124,"path":125,"stem":126},"Item verbs","\u002Freference\u002Fcli\u002Fitem","4.reference\u002F1.cli\u002F2.item",{"title":128,"path":129,"stem":130},"View verbs","\u002Freference\u002Fcli\u002Fview","4.reference\u002F1.cli\u002F3.view",{"title":132,"path":133,"stem":134},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","4.reference\u002F1.cli\u002F4.repo",{"title":136,"path":137,"stem":138},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","4.reference\u002F1.cli\u002F5.admin",{"title":140,"path":141,"stem":142,"children":143},"Configuration","\u002Freference\u002Fconfiguration","4.reference\u002F2.configuration\u002Findex",[144,145,155,159,163,167,171,175,179],{"title":10,"path":141,"stem":142},{"title":146,"path":147,"stem":148,"children":149},"Repos","\u002Freference\u002Fconfiguration\u002Frepos","4.reference\u002F2.configuration\u002F2.repos\u002Findex",[150,151],{"title":10,"path":147,"stem":148},{"title":152,"path":153,"stem":154},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","4.reference\u002F2.configuration\u002F2.repos\u002F3.workspaces",{"title":156,"path":157,"stem":158},"Policy","\u002Freference\u002Fconfiguration\u002Fpolicy","4.reference\u002F2.configuration\u002F3.policy",{"title":160,"path":161,"stem":162},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","4.reference\u002F2.configuration\u002F4.library-and-chains",{"title":164,"path":165,"stem":166},"Harnesses file","\u002Freference\u002Fconfiguration\u002Fharnesses-file","4.reference\u002F2.configuration\u002F5.harnesses-file",{"title":168,"path":169,"stem":170},"Access","\u002Freference\u002Fconfiguration\u002Faccess","4.reference\u002F2.configuration\u002F6.access",{"title":172,"path":173,"stem":174},"Intake","\u002Freference\u002Fconfiguration\u002Fintake","4.reference\u002F2.configuration\u002F7.intake",{"title":176,"path":177,"stem":178},"Sandbox host","\u002Freference\u002Fconfiguration\u002Fsandbox","4.reference\u002F2.configuration\u002F8.sandbox",{"title":180,"path":181,"stem":182},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","4.reference\u002F2.configuration\u002F9.environment-variables",{"title":184,"path":185,"stem":186,"children":187},"Chain nodes","\u002Freference\u002Fchain-nodes","4.reference\u002F3.chain-nodes\u002Findex",[188,189,193,197],{"title":10,"path":185,"stem":186},{"title":190,"path":191,"stem":192},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","4.reference\u002F3.chain-nodes\u002F2.subprocess-tasks",{"title":194,"path":195,"stem":196},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","4.reference\u002F3.chain-nodes\u002F3.fix-loop",{"title":198,"path":199,"stem":200},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","4.reference\u002F3.chain-nodes\u002F4.result-file",{"title":202,"path":203,"stem":204},"Permission gate","\u002Freference\u002Fpermissions","4.reference\u002F4.permissions",{"title":206,"path":207,"stem":208,"children":209},"Agent harnesses","\u002Freference\u002Fharnesses","4.reference\u002F5.harnesses\u002Findex",[210,211,215,219,223],{"title":10,"path":207,"stem":208},{"title":212,"path":213,"stem":214},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","4.reference\u002F5.harnesses\u002F2.unattended-runs",{"title":216,"path":217,"stem":218},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","4.reference\u002F5.harnesses\u002F3.agent-profiles",{"title":220,"path":221,"stem":222},"Harness files","\u002Freference\u002Fharnesses\u002Fharness-files","4.reference\u002F5.harnesses\u002F4.harness-files",{"title":224,"path":225,"stem":226},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","4.reference\u002F5.harnesses\u002F5.fallback-and-escalation",{"title":228,"path":229,"stem":230},"Inbound triggers","\u002Freference\u002Ftriggers","4.reference\u002F6.triggers",{"title":232,"path":233,"stem":234},"HTTP API","\u002Freference\u002Fhttp-api","4.reference\u002F7.http-api",{"title":236,"path":237,"stem":238},"MCP tools","\u002Freference\u002Fmcp-tools","4.reference\u002F8.mcp-tools",{"title":240,"path":241,"stem":242},"Events","\u002Freference\u002Fevents","4.reference\u002F9.events",{"title":244,"path":245,"stem":246,"children":247},"Project","\u002Fproject","5.project",[248,250,254,258,262,266],{"title":10,"path":245,"stem":249},"5.project\u002Findex",{"title":251,"path":252,"stem":253},"Architecture","\u002Fproject\u002Farchitecture","5.project\u002F1.architecture",{"title":255,"path":256,"stem":257},"Contributing","\u002Fproject\u002Fcontributing","5.project\u002F2.contributing",{"title":259,"path":260,"stem":261},"Security","\u002Fproject\u002Fsecurity","5.project\u002F3.security",{"title":263,"path":264,"stem":265},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","5.project\u002F4.data-and-privacy",{"title":267,"path":268,"stem":269},"Status and support","\u002Fproject\u002Fstatus-and-support","5.project\u002F5.status-and-support",{"id":271,"title":17,"body":272,"description":1729,"extension":1730,"links":1731,"meta":1732,"navigation":1733,"path":18,"seo":1734,"stem":19,"__hash__":1735},"docs\u002F1.get-started\u002F1.install.md",{"type":273,"value":274,"toc":1717},"minimark",[275,288,293,296,332,336,339,540,544,551,1142,1151,1157,1171,1175,1180,1219,1229,1232,1261,1269,1274,1278,1285,1308,1312,1343,1357,1372,1391,1422,1428,1440,1445,1450,1456,1478,1488,1509,1545,1549,1579,1585,1589,1599,1684,1693,1698,1713],[276,277,278,279,283,284,287],"p",{},"Install Kraft with uv, Homebrew, the install script, or from source. Then run\n",[280,281,282],"code",{},"kraft"," to serve the board at ",[280,285,286],{},"http:\u002F\u002F127.0.0.1:8765",".",[289,290,292],"h2",{"id":291},"requirements","Requirements",[276,294,295],{},"To install and run Kraft you need:",[297,298,299,303,316,321],"ul",{},[300,301,302],"li",{},"macOS or Linux. Windows is not supported, and WSL is untested.",[300,304,305,312,313,287],{},[306,307,311],"a",{"href":308,"rel":309},"https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F",[310],"nofollow","uv",", or Homebrew. uv uses a Python 3.12 or newer\nalready on your machine, or fetches one. To choose the interpreter yourself:\n",[280,314,315],{},"uv tool install --python 3.13 kraft-sdlc",[300,317,318,287],{},[280,319,320],{},"git",[300,322,323,324,327,328,331],{},"Claude Code (",[280,325,326],{},"claude","), installed and logged in. Every agent task in the\nshipped chains runs on it. Kraft supports other agent CLIs as\n",[306,329,330],{"href":207},"harnesses",", but using one means editing the chains.",[289,333,335],{"id":334},"installation-methods","Installation methods",[276,337,338],{},"Pick one. uv is the shortest path.",[340,341,343,396,429,471],"tabs",{"sync":342},"install",[344,345,346,379],"tabs-item",{"label":311},[347,348,353],"pre",{"className":349,"code":350,"language":351,"meta":352,"style":352},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","uv tool install kraft-sdlc\nkraft\n","bash","",[280,354,355,373],{"__ignoreMap":352},[356,357,360,363,367,370],"span",{"class":358,"line":359},"line",1,[356,361,311],{"class":362},"sBMFI",[356,364,366],{"class":365},"sfazB"," tool",[356,368,369],{"class":365}," install",[356,371,372],{"class":365}," kraft-sdlc\n",[356,374,376],{"class":358,"line":375},2,[356,377,378],{"class":362},"kraft\n",[276,380,381,382,390,391,393,394,287],{},"The package is ",[306,383,386,389],{"href":384,"rel":385},"https:\u002F\u002Fpypi.org\u002Fproject\u002Fkraft-sdlc\u002F",[310],[280,387,388],{},"kraft-sdlc"," on PyPI","\nbecause other tools already use the name ",[280,392,282],{}," (Unikraft's CLI, for one). The\ncommand it installs is still ",[280,395,282],{},[344,397,399],{"label":398},"Homebrew (macOS)",[347,400,402],{"className":349,"code":401,"language":351,"meta":352,"style":352},"brew tap itsOmidKarami\u002Fkraft\nbrew install kraft\nkraft\n",[280,403,404,415,424],{"__ignoreMap":352},[356,405,406,409,412],{"class":358,"line":359},[356,407,408],{"class":362},"brew",[356,410,411],{"class":365}," tap",[356,413,414],{"class":365}," itsOmidKarami\u002Fkraft\n",[356,416,417,419,421],{"class":358,"line":375},[356,418,408],{"class":362},[356,420,369],{"class":365},[356,422,423],{"class":365}," kraft\n",[356,425,427],{"class":358,"line":426},3,[356,428,378],{"class":362},[344,430,432,438,461],{"label":431},"Install script",[276,433,434,435,437],{},"The script fetches the newest release and installs ",[280,436,311],{}," first if you do not have\nit:",[347,439,441],{"className":349,"code":440,"language":351,"meta":352,"style":352},"curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FitsOmidKarami\u002Fkraft\u002Fmain\u002Finstall.sh | sh\n",[280,442,443],{"__ignoreMap":352},[356,444,445,448,451,454,458],{"class":358,"line":359},[356,446,447],{"class":362},"curl",[356,449,450],{"class":365}," -fsSL",[356,452,453],{"class":365}," https:\u002F\u002Fraw.githubusercontent.com\u002FitsOmidKarami\u002Fkraft\u002Fmain\u002Finstall.sh",[356,455,457],{"class":456},"sMK4o"," |",[356,459,460],{"class":362}," sh\n",[276,462,463,470],{},[306,464,467],{"href":465,"rel":466},"https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\u002Fblob\u002Fmain\u002Finstall.sh",[310],[280,468,469],{},"install.sh"," is\nshort and worth reading before you pipe it to a shell.",[344,472,474,486,535],{"label":473},"From source",[276,475,476,477,479,480,485],{},"Use this to run an unreleased commit or to work on Kraft itself. Besides uv and\n",[280,478,320],{},", you need ",[306,481,484],{"href":482,"rel":483},"https:\u002F\u002Fjust.systems\u002F",[310],"just"," and Node 22 to build the board:",[347,487,489],{"className":349,"code":488,"language":351,"meta":352,"style":352},"git clone https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft.git\ncd kraft\njust setup     # Python and frontend dependencies\njust install   # builds the board and installs the `kraft` command\nkraft\n",[280,490,491,501,509,520,530],{"__ignoreMap":352},[356,492,493,495,498],{"class":358,"line":359},[356,494,320],{"class":362},[356,496,497],{"class":365}," clone",[356,499,500],{"class":365}," https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft.git\n",[356,502,503,507],{"class":358,"line":375},[356,504,506],{"class":505},"s2Zo4","cd",[356,508,423],{"class":365},[356,510,511,513,516],{"class":358,"line":426},[356,512,484],{"class":362},[356,514,515],{"class":365}," setup",[356,517,519],{"class":518},"sHwdD","     # Python and frontend dependencies\n",[356,521,523,525,527],{"class":358,"line":522},4,[356,524,484],{"class":362},[356,526,369],{"class":365},[356,528,529],{"class":518},"   # builds the board and installs the `kraft` command\n",[356,531,533],{"class":358,"line":532},5,[356,534,378],{"class":362},[276,536,537,538,287],{},"To develop Kraft rather than run it, see ",[306,539,255],{"href":256},[289,541,543],{"id":542},"connect-your-agent","Connect your agent",[276,545,546,547,550],{},"Kraft talks to agents through its MCP server, the command ",[280,548,549],{},"kraft admin mcp",".\nRegister it with the agent you want to drive Kraft from. Pick your agent:",[340,552,554,640,701,878,926,984,1094],{"sync":553},"agent",[344,555,557,560,591,601,608],{"label":556},"Claude Code",[276,558,559],{},"Install the plugin:",[347,561,563],{"className":349,"code":562,"language":351,"meta":352,"style":352},"claude plugin marketplace add itsOmidKarami\u002Fkraft\nclaude plugin install kraft@kraft\n",[280,564,565,580],{"__ignoreMap":352},[356,566,567,569,572,575,578],{"class":358,"line":359},[356,568,326],{"class":362},[356,570,571],{"class":365}," plugin",[356,573,574],{"class":365}," marketplace",[356,576,577],{"class":365}," add",[356,579,414],{"class":365},[356,581,582,584,586,588],{"class":358,"line":375},[356,583,326],{"class":362},[356,585,571],{"class":365},[356,587,369],{"class":365},[356,589,590],{"class":365}," kraft@kraft\n",[276,592,593,594,597,598,287],{},"Then, with the Kraft server running, open a session in your repo, run\n",[280,595,596],{},"\u002Fkraft:onboard",", and follow what it asks. It connects the repo and checks its\nsetup and test commands. The plugin registers the MCP server itself: do not\nalso run ",[280,599,600],{},"kraft admin init",[276,602,603,604,607],{},"Without the plugin, register the server and the ",[280,605,606],{},"\u002Fkraft:*"," skills from a\nterminal, then connect the repo:",[347,609,611],{"className":349,"code":610,"language":351,"meta":352,"style":352},"kraft admin init\ncd ~\u002Fcode\u002Fmy-project\nkraft repo connect\n",[280,612,613,623,630],{"__ignoreMap":352},[356,614,615,617,620],{"class":358,"line":359},[356,616,282],{"class":362},[356,618,619],{"class":365}," admin",[356,621,622],{"class":365}," init\n",[356,624,625,627],{"class":358,"line":375},[356,626,506],{"class":505},[356,628,629],{"class":365}," ~\u002Fcode\u002Fmy-project\n",[356,631,632,634,637],{"class":358,"line":426},[356,633,282],{"class":362},[356,635,636],{"class":365}," repo",[356,638,639],{"class":365}," connect\n",[344,641,643,645,673,679,682],{"label":642},"Codex",[276,644,559],{},[347,646,648],{"className":349,"code":647,"language":351,"meta":352,"style":352},"codex plugin marketplace add itsOmidKarami\u002Fkraft\ncodex plugin add kraft@kraft\n",[280,649,650,663],{"__ignoreMap":352},[356,651,652,655,657,659,661],{"class":358,"line":359},[356,653,654],{"class":362},"codex",[356,656,571],{"class":365},[356,658,574],{"class":365},[356,660,577],{"class":365},[356,662,414],{"class":365},[356,664,665,667,669,671],{"class":358,"line":375},[356,666,654],{"class":362},[356,668,571],{"class":365},[356,670,577],{"class":365},[356,672,590],{"class":365},[276,674,675,676,287],{},"It registers the MCP server and adds the Kraft skills. Without the plugin,\nregister the server alone with ",[280,677,678],{},"codex mcp add kraft -- kraft admin mcp",[276,680,681],{},"Then connect the repo:",[347,683,685],{"className":349,"code":684,"language":351,"meta":352,"style":352},"cd ~\u002Fcode\u002Fmy-project\nkraft repo connect\n",[280,686,687,693],{"__ignoreMap":352},[356,688,689,691],{"class":358,"line":359},[356,690,506],{"class":505},[356,692,629],{"class":365},[356,694,695,697,699],{"class":358,"line":375},[356,696,282],{"class":362},[356,698,636],{"class":365},[356,700,639],{"class":365},[344,702,704,707,725,738,745,852,858,860],{"label":703},"Cursor",[276,705,706],{},"Add the Kraft marketplace:",[347,708,710],{"className":349,"code":709,"language":351,"meta":352,"style":352},"agent plugin marketplace add https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\n",[280,711,712],{"__ignoreMap":352},[356,713,714,716,718,720,722],{"class":358,"line":359},[356,715,553],{"class":362},[356,717,571],{"class":365},[356,719,574],{"class":365},[356,721,577],{"class":365},[356,723,724],{"class":365}," https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\n",[276,726,727,728,730,731,734,735,737],{},"Then start ",[280,729,553],{},", run ",[280,732,733],{},"\u002Fplugins",", open the Marketplace tab, pick ",[280,736,282],{},", and\ninstall it. It registers the MCP server and adds the Kraft skills.",[276,739,740,741,744],{},"Without the plugin, add the server to ",[280,742,743],{},"~\u002F.cursor\u002Fmcp.json",":",[347,746,750],{"className":747,"code":748,"language":749,"meta":352,"style":352},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"mcpServers\": {\n    \"kraft\": { \"command\": \"kraft\", \"args\": [\"admin\", \"mcp\"] }\n  }\n}\n","json",[280,751,752,757,774,842,847],{"__ignoreMap":352},[356,753,754],{"class":358,"line":359},[356,755,756],{"class":456},"{\n",[356,758,759,762,766,769,771],{"class":358,"line":375},[356,760,761],{"class":456},"  \"",[356,763,765],{"class":764},"spNyl","mcpServers",[356,767,768],{"class":456},"\"",[356,770,744],{"class":456},[356,772,773],{"class":456}," {\n",[356,775,776,779,781,783,785,788,791,795,797,799,801,803,805,808,810,813,815,817,820,822,825,827,829,831,834,836,839],{"class":358,"line":426},[356,777,778],{"class":456},"    \"",[356,780,282],{"class":362},[356,782,768],{"class":456},[356,784,744],{"class":456},[356,786,787],{"class":456}," {",[356,789,790],{"class":456}," \"",[356,792,794],{"class":793},"sbssI","command",[356,796,768],{"class":456},[356,798,744],{"class":456},[356,800,790],{"class":456},[356,802,282],{"class":365},[356,804,768],{"class":456},[356,806,807],{"class":456},",",[356,809,790],{"class":456},[356,811,812],{"class":793},"args",[356,814,768],{"class":456},[356,816,744],{"class":456},[356,818,819],{"class":456}," [",[356,821,768],{"class":456},[356,823,824],{"class":365},"admin",[356,826,768],{"class":456},[356,828,807],{"class":456},[356,830,790],{"class":456},[356,832,833],{"class":365},"mcp",[356,835,768],{"class":456},[356,837,838],{"class":456},"]",[356,840,841],{"class":456}," }\n",[356,843,844],{"class":358,"line":522},[356,845,846],{"class":456},"  }\n",[356,848,849],{"class":358,"line":532},[356,850,851],{"class":456},"}\n",[276,853,854,855,287],{},"and approve it with ",[280,856,857],{},"agent mcp enable kraft",[276,859,681],{},[347,861,862],{"className":349,"code":684,"language":351,"meta":352,"style":352},[280,863,864,870],{"__ignoreMap":352},[356,865,866,868],{"class":358,"line":359},[356,867,506],{"class":505},[356,869,629],{"class":365},[356,871,872,874,876],{"class":358,"line":375},[356,873,282],{"class":362},[356,875,636],{"class":365},[356,877,639],{"class":365},[344,879,881],{"label":880},"OpenCode",[347,882,884],{"className":349,"code":883,"language":351,"meta":352,"style":352},"opencode mcp add --global kraft -- kraft admin mcp\ncd ~\u002Fcode\u002Fmy-project\nkraft repo connect\n",[280,885,886,912,918],{"__ignoreMap":352},[356,887,888,891,894,896,899,902,905,907,909],{"class":358,"line":359},[356,889,890],{"class":362},"opencode",[356,892,893],{"class":365}," mcp",[356,895,577],{"class":365},[356,897,898],{"class":365}," --global",[356,900,901],{"class":365}," kraft",[356,903,904],{"class":365}," --",[356,906,901],{"class":365},[356,908,619],{"class":365},[356,910,911],{"class":365}," mcp\n",[356,913,914,916],{"class":358,"line":375},[356,915,506],{"class":505},[356,917,629],{"class":365},[356,919,920,922,924],{"class":358,"line":426},[356,921,282],{"class":362},[356,923,636],{"class":365},[356,925,639],{"class":365},[344,927,929],{"label":928},"Amp",[347,930,932],{"className":349,"code":931,"language":351,"meta":352,"style":352},"amp mcp add kraft -- kraft admin mcp\namp skill add itsOmidKarami\u002Fkraft\u002Fplugins\u002Fkraft\u002Fskills --global   # optional: the Kraft skills\ncd ~\u002Fcode\u002Fmy-project\nkraft repo connect\n",[280,933,934,953,970,976],{"__ignoreMap":352},[356,935,936,939,941,943,945,947,949,951],{"class":358,"line":359},[356,937,938],{"class":362},"amp",[356,940,893],{"class":365},[356,942,577],{"class":365},[356,944,901],{"class":365},[356,946,904],{"class":365},[356,948,901],{"class":365},[356,950,619],{"class":365},[356,952,911],{"class":365},[356,954,955,957,960,962,965,967],{"class":358,"line":375},[356,956,938],{"class":362},[356,958,959],{"class":365}," skill",[356,961,577],{"class":365},[356,963,964],{"class":365}," itsOmidKarami\u002Fkraft\u002Fplugins\u002Fkraft\u002Fskills",[356,966,898],{"class":365},[356,968,969],{"class":518},"   # optional: the Kraft skills\n",[356,971,972,974],{"class":358,"line":426},[356,973,506],{"class":505},[356,975,629],{"class":365},[356,977,978,980,982],{"class":358,"line":522},[356,979,282],{"class":362},[356,981,636],{"class":365},[356,983,639],{"class":365},[344,985,987,990,1069,1074,1076],{"label":986},"Antigravity",[276,988,989],{},"Antigravity imports the plugin from a local copy of the repo. The import copies\nit, so the clone can go afterwards:",[347,991,993],{"className":349,"code":992,"language":351,"meta":352,"style":352},"clone=$(mktemp -d)\ngit clone --depth 1 https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft.git \"$clone\"\nagy plugin import \"$clone\u002Fplugins\u002Fkraft\"\nrm -rf \"$clone\"\n",[280,994,995,1013,1036,1055],{"__ignoreMap":352},[356,996,997,1001,1004,1007,1010],{"class":358,"line":359},[356,998,1000],{"class":999},"sTEyZ","clone",[356,1002,1003],{"class":456},"=$(",[356,1005,1006],{"class":362},"mktemp",[356,1008,1009],{"class":365}," -d",[356,1011,1012],{"class":456},")\n",[356,1014,1015,1017,1019,1022,1025,1028,1030,1033],{"class":358,"line":375},[356,1016,320],{"class":362},[356,1018,497],{"class":365},[356,1020,1021],{"class":365}," --depth",[356,1023,1024],{"class":793}," 1",[356,1026,1027],{"class":365}," https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft.git",[356,1029,790],{"class":456},[356,1031,1032],{"class":999},"$clone",[356,1034,1035],{"class":456},"\"\n",[356,1037,1038,1041,1043,1046,1048,1050,1053],{"class":358,"line":426},[356,1039,1040],{"class":362},"agy",[356,1042,571],{"class":365},[356,1044,1045],{"class":365}," import",[356,1047,790],{"class":456},[356,1049,1032],{"class":999},[356,1051,1052],{"class":365},"\u002Fplugins\u002Fkraft",[356,1054,1035],{"class":456},[356,1056,1057,1060,1063,1065,1067],{"class":358,"line":522},[356,1058,1059],{"class":362},"rm",[356,1061,1062],{"class":365}," -rf",[356,1064,790],{"class":456},[356,1066,1032],{"class":999},[356,1068,1035],{"class":456},[276,1070,675,1071,287],{},[280,1072,1073],{},"agy mcp add kraft kraft admin mcp",[276,1075,681],{},[347,1077,1078],{"className":349,"code":684,"language":351,"meta":352,"style":352},[280,1079,1080,1086],{"__ignoreMap":352},[356,1081,1082,1084],{"class":358,"line":359},[356,1083,506],{"class":505},[356,1085,629],{"class":365},[356,1087,1088,1090,1092],{"class":358,"line":375},[356,1089,282],{"class":362},[356,1091,636],{"class":365},[356,1093,639],{"class":365},[344,1095,1097,1100],{"label":1096},"Gemini CLI",[276,1098,1099],{},"Since 2026-06-18, Gemini CLI works only with an API key or Gemini Code Assist.\nWith an individual Google account, use Antigravity instead.",[347,1101,1103],{"className":349,"code":1102,"language":351,"meta":352,"style":352},"gemini mcp add --scope user kraft kraft admin mcp\ncd ~\u002Fcode\u002Fmy-project\nkraft repo connect\n",[280,1104,1105,1128,1134],{"__ignoreMap":352},[356,1106,1107,1110,1112,1114,1117,1120,1122,1124,1126],{"class":358,"line":359},[356,1108,1109],{"class":362},"gemini",[356,1111,893],{"class":365},[356,1113,577],{"class":365},[356,1115,1116],{"class":365}," --scope",[356,1118,1119],{"class":365}," user",[356,1121,901],{"class":365},[356,1123,901],{"class":365},[356,1125,619],{"class":365},[356,1127,911],{"class":365},[356,1129,1130,1132],{"class":358,"line":375},[356,1131,506],{"class":505},[356,1133,629],{"class":365},[356,1135,1136,1138,1140],{"class":358,"line":426},[356,1137,282],{"class":362},[356,1139,636],{"class":365},[356,1141,639],{"class":365},[276,1143,1144,1145,1147,1148,1150],{},"The shipped chains run every worker on Claude Code, and Kraft refuses to launch\na Claude worker unless Claude Code knows the ",[280,1146,282],{}," MCP server: the worker\nasks the permission gate through it. So even when you drive Kraft from another\nagent, install the Claude Code plugin or run ",[280,1149,600],{}," as well.",[276,1152,1153,1154,287],{},"The Kraft plugin, with its skills, installs on Claude Code, Codex, Cursor and\nAntigravity. OpenCode and Gemini CLI get the MCP server alone, and Amp adds the\nskills with ",[280,1155,1156],{},"amp skill add",[276,1158,1159,1160,1162,1163,1166,1167,1170],{},"The ",[280,1161,282],{}," command must be on your ",[280,1164,1165],{},"PATH"," for every agent.\n",[306,1168,1169],{"href":60},"Agent integration"," covers each agent in detail,\nincluding what a worker needs when a chain runs on it.",[289,1172,1174],{"id":1173},"verify","Verify",[276,1176,1177,1179],{},[280,1178,282],{}," runs the server in the foreground, so open a second terminal for this:",[347,1181,1183],{"className":349,"code":1182,"language":351,"meta":352,"style":352},"kraft --version      # prints the installed version\nkraft admin health   # exits 1 if the server is down or degraded\nkraft admin doctor   # runs every check; exits 1 if any fails\n",[280,1184,1185,1195,1207],{"__ignoreMap":352},[356,1186,1187,1189,1192],{"class":358,"line":359},[356,1188,282],{"class":362},[356,1190,1191],{"class":365}," --version",[356,1193,1194],{"class":518},"      # prints the installed version\n",[356,1196,1197,1199,1201,1204],{"class":358,"line":375},[356,1198,282],{"class":362},[356,1200,619],{"class":365},[356,1202,1203],{"class":365}," health",[356,1205,1206],{"class":518},"   # exits 1 if the server is down or degraded\n",[356,1208,1209,1211,1213,1216],{"class":358,"line":426},[356,1210,282],{"class":362},[356,1212,619],{"class":365},[356,1214,1215],{"class":365}," doctor",[356,1217,1218],{"class":518},"   # runs every check; exits 1 if any fails\n",[276,1220,1221,1222,1225,1226,1228],{},"You know it worked when ",[280,1223,1224],{},"kraft admin doctor"," exits 0 and\n",[280,1227,286],{}," shows the board.",[276,1230,1231],{},"Run it after you connect a repo: most of its rows are about connected repos.\nTwo of them fail on a repo that is not ready yet:",[297,1233,1234,1252],{},[300,1235,1236,1239,1240,1243,1244,1247,1248,1251],{},[280,1237,1238],{},"forge \u003Crepo>"," fails when the repo has no GitHub or GitLab ",[280,1241,1242],{},"origin"," remote,\nbecause no forge is recorded for it. ",[280,1245,1246],{},"quick-task"," does not need one; the\n",[280,1249,1250],{},"default"," chain does.",[300,1253,1254,1257,1258,287],{},[280,1255,1256],{},"setup \u003Crepo>"," fails when the repo has no ",[280,1259,1260],{},"setup_command",[276,1262,1263,1266,1267,287],{},[280,1264,1265],{},"mcp server"," fails when nothing registers Kraft's MCP server: install the\nplugin, or run ",[280,1268,600],{},[276,1270,1271,1272,287],{},"Next: ",[306,1273,21],{"href":22},[289,1275,1277],{"id":1276},"enable-vector-search","Enable vector search",[276,1279,1280,1281,1284],{},"Search works out of the box in full-text mode. To add vector (semantic) search\nto a uv or script install, reinstall with the ",[280,1282,1283],{},"vector"," extra. It downloads a\nmodel of about 130 MB on the first search.",[347,1286,1288],{"className":349,"code":1287,"language":351,"meta":352,"style":352},"uv tool install --force \"kraft-sdlc[vector]\"\n",[280,1289,1290],{"__ignoreMap":352},[356,1291,1292,1294,1296,1298,1301,1303,1306],{"class":358,"line":359},[356,1293,311],{"class":362},[356,1295,366],{"class":365},[356,1297,369],{"class":365},[356,1299,1300],{"class":365}," --force",[356,1302,790],{"class":456},[356,1304,1305],{"class":365},"kraft-sdlc[vector]",[356,1307,1035],{"class":456},[289,1309,1311],{"id":1310},"upgrading","Upgrading",[347,1313,1315],{"className":349,"code":1314,"language":351,"meta":352,"style":352},"kraft admin update             # install the newest release\nkraft admin update --restart   # also restart a running server, the same way it was running\n",[280,1316,1317,1329],{"__ignoreMap":352},[356,1318,1319,1321,1323,1326],{"class":358,"line":359},[356,1320,282],{"class":362},[356,1322,619],{"class":365},[356,1324,1325],{"class":365}," update",[356,1327,1328],{"class":518},"             # install the newest release\n",[356,1330,1331,1333,1335,1337,1340],{"class":358,"line":375},[356,1332,282],{"class":362},[356,1334,619],{"class":365},[356,1336,1325],{"class":365},[356,1338,1339],{"class":365}," --restart",[356,1341,1342],{"class":518},"   # also restart a running server, the same way it was running\n",[276,1344,1345,1346,1349,1350,1353,1354,287],{},"On a Homebrew install, ",[280,1347,1348],{},"kraft admin update"," runs ",[280,1351,1352],{},"brew upgrade kraft"," instead of\n",[280,1355,1356],{},"uv tool install",[276,1358,1359,1360,1363,1364,1368,1369,287],{},"An upgrade never changes ",[280,1361,1362],{},"$KRAFT_HOME\u002Ftemplates\u002F",", with one exception: an\ninstall still on the pre-V1 template format is migrated, after a prompt (see\n",[306,1365,1367],{"href":1366},"\u002Freference\u002Fcli\u002Fadmin#migrating-a-pre-v1-template-configuration","Migrating a pre-V1 template configuration",").\nTo take new shipped chains\nand library tasks, see ",[306,1370,1371],{"href":100},"Upgrading your templates",[276,1373,1374,1381,1382,1384,1385,1387,1388,1390],{},[1375,1376,1377,1378,1380],"strong",{},"From before the ",[280,1379,388],{}," rename."," An older install can still hold a\n",[280,1383,282],{}," uv tool next to ",[280,1386,388],{},". ",[280,1389,1348],{}," then stops and names\nthe two commands that clear it:",[347,1392,1394],{"className":349,"code":1393,"language":351,"meta":352,"style":352},"uv tool uninstall kraft\nuv tool install --force --reinstall kraft-sdlc\n",[280,1395,1396,1407],{"__ignoreMap":352},[356,1397,1398,1400,1402,1405],{"class":358,"line":359},[356,1399,311],{"class":362},[356,1401,366],{"class":365},[356,1403,1404],{"class":365}," uninstall",[356,1406,423],{"class":365},[356,1408,1409,1411,1413,1415,1417,1420],{"class":358,"line":375},[356,1410,311],{"class":362},[356,1412,366],{"class":365},[356,1414,369],{"class":365},[356,1416,1300],{"class":365},[356,1418,1419],{"class":365}," --reinstall",[356,1421,372],{"class":365},[276,1423,1424,1425,1427],{},"The reinstall is needed because the uninstall removes the ",[280,1426,282],{}," command both\npackages share.",[276,1429,1430,1433,1434,1439],{},[1375,1431,1432],{},"From a 0.x install."," Read the\n",[306,1435,1438],{"href":1436,"rel":1437},"https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\u002Fblob\u002Fmain\u002FCHANGELOG.md#100",[310],"1.0.0 changelog","\nfirst. Finish or abandon in-flight items, and note that harness profile names\nand the template layout changed.",[1441,1442,1444],"h3",{"id":1443},"pin-or-roll-back-a-version","Pin or roll back a version",[276,1446,1447,1449],{},[280,1448,1348],{}," only installs the newest release on a channel; it cannot\ntarget a version. Install a specific version with the package manager instead.",[276,1451,1452,1455],{},[1375,1453,1454],{},"uv or script install."," Name the version:",[347,1457,1459],{"className":349,"code":1458,"language":351,"meta":352,"style":352},"uv tool install --force \"kraft-sdlc==X.Y.Z\"\n",[280,1460,1461],{"__ignoreMap":352},[356,1462,1463,1465,1467,1469,1471,1473,1476],{"class":358,"line":359},[356,1464,311],{"class":362},[356,1466,366],{"class":365},[356,1468,369],{"class":365},[356,1470,1300],{"class":365},[356,1472,790],{"class":456},[356,1474,1475],{"class":365},"kraft-sdlc==X.Y.Z",[356,1477,1035],{"class":456},[276,1479,1480,1481,1484,1485,1487],{},"Add the extra if you use vector search: ",[280,1482,1483],{},"\"kraft-sdlc[vector]==X.Y.Z\"",". To\nstay on that version, do not run ",[280,1486,1348],{},"; it moves you to the\nnewest release again.",[276,1489,1490,1493,1494,1497,1498,1501,1502,1504,1505,1508],{},[1375,1491,1492],{},"Homebrew."," The tap has one formula, which each release rewrites to the\nnewest version, so Homebrew cannot install an older one. ",[280,1495,1496],{},"brew pin kraft"," stops\n",[280,1499,1500],{},"brew upgrade",", and with it ",[280,1503,1348],{},", from moving the version you\nhave. To go back to an older release, ",[280,1506,1507],{},"brew uninstall kraft"," and install that\nversion with uv.",[276,1510,1511,1517,1518,1521,1522,1525,1526,1532,1533,1536,1537,1540,1541,1544],{},[1375,1512,1513,1514,287],{},"What a rollback does to ",[280,1515,1516],{},"$KRAFT_HOME"," Starting a newer Kraft migrates\n",[280,1519,1520],{},"run\u002Forchestrator.db"," forward in place, and there is no downgrade migration.\nAn older Kraft refuses to start on a database a newer one migrated\n(",[280,1523,1524],{},"database schema vN is newer than code vM","). So\n",[306,1527,1529,1530],{"href":1528},"\u002Fguides\u002Foperations#back-up-the-database","back up ",[280,1531,1520],{},"\nbefore you upgrade, and restore that backup when you roll back. ",[280,1534,1535],{},"run\u002Findex.db","\nneeds nothing: an older Kraft rebuilds a search index it cannot read.\nA rollback does not rewrite ",[280,1538,1539],{},"templates\u002F","; run ",[280,1542,1543],{},"kraft admin templates lint"," after\na rollback to check the older version still accepts them.",[289,1546,1548],{"id":1547},"uninstall","Uninstall",[347,1550,1552],{"className":349,"code":1551,"language":351,"meta":352,"style":352},"uv tool uninstall kraft-sdlc   # uv or script install\nbrew uninstall kraft           # Homebrew install\n",[280,1553,1554,1568],{"__ignoreMap":352},[356,1555,1556,1558,1560,1562,1565],{"class":358,"line":359},[356,1557,311],{"class":362},[356,1559,366],{"class":365},[356,1561,1404],{"class":365},[356,1563,1564],{"class":365}," kraft-sdlc",[356,1566,1567],{"class":518},"   # uv or script install\n",[356,1569,1570,1572,1574,1576],{"class":358,"line":375},[356,1571,408],{"class":362},[356,1573,1404],{"class":365},[356,1575,901],{"class":365},[356,1577,1578],{"class":518},"           # Homebrew install\n",[276,1580,1581,1582,1584],{},"Neither removes ",[280,1583,1516],{},". Delete that directory yourself to discard all\nKraft state.",[289,1586,1588],{"id":1587},"where-state-lives","Where state lives",[276,1590,1591,1592,1594,1595,1598],{},"Kraft keeps state in ",[280,1593,1516],{}," (default ",[280,1596,1597],{},"~\u002F.kraft","):",[1600,1601,1602,1615],"table",{},[1603,1604,1605],"thead",{},[1606,1607,1608,1612],"tr",{},[1609,1610,1611],"th",{},"Path",[1609,1613,1614],{},"Holds",[1616,1617,1618,1647],"tbody",{},[1606,1619,1620,1626],{},[1621,1622,1623],"td",{},[280,1624,1625],{},"~\u002F.kraft\u002Frun\u002F",[1621,1627,1628,1631,1632,1631,1635,1631,1638,1631,1641,1631,1644],{},[280,1629,1630],{},"orchestrator.db",", ",[280,1633,1634],{},"index.db",[280,1636,1637],{},"logs\u002F",[280,1639,1640],{},"results\u002F",[280,1642,1643],{},"worktrees\u002F",[280,1645,1646],{},"attachments\u002F",[1606,1648,1649,1654],{},[1621,1650,1651],{},[280,1652,1653],{},"~\u002F.kraft\u002Ftemplates\u002F",[1621,1655,1656,1657,1631,1660,1631,1663,1631,1666,1631,1669,1631,1672,1675,1676,1679,1680,1683],{},"The YAML the Settings screens edit: ",[280,1658,1659],{},"library.yaml",[280,1661,1662],{},"chains\u002F",[280,1664,1665],{},"harnesses.yaml",[280,1667,1668],{},"policy.yaml",[280,1670,1671],{},"repos.yaml",[280,1673,1674],{},"intake.yaml","; ",[280,1677,1678],{},"access.yaml"," and ",[280,1681,1682],{},"notify.yaml"," appear once you save those Settings screens",[276,1685,1686,1688,1689,1692],{},[280,1687,1539],{}," is seeded from the packaged defaults on first run and never\noverwritten after, so an upgrade cannot clobber an edited policy. It is a plain\ndirectory of files, so you can diff it, revert it, or ",[280,1690,1691],{},"git init"," it.",[276,1694,1695,1696,287],{},"To reach the board from another device, see ",[306,1697,67],{"href":68},[276,1699,1700,1701,1704,1705,1709,1710,287],{},"A second, fully separate instance needs its own ",[280,1702,1703],{},"KRAFT_HOME"," and its own port.\nSee ",[306,1706,1708],{"href":1707},"\u002Fguides\u002Foperations#run-two-instances","Run two instances",". For backups,\nlogs and disk use, see ",[306,1711,1712],{"href":104},"Operate a Kraft server",[1714,1715,1716],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":352,"searchDepth":375,"depth":375,"links":1718},[1719,1720,1721,1722,1723,1724,1727,1728],{"id":291,"depth":375,"text":292},{"id":334,"depth":375,"text":335},{"id":542,"depth":375,"text":543},{"id":1173,"depth":375,"text":1174},{"id":1276,"depth":375,"text":1277},{"id":1310,"depth":375,"text":1311,"children":1725},[1726],{"id":1443,"depth":426,"text":1444},{"id":1547,"depth":375,"text":1548},{"id":1587,"depth":375,"text":1588},"Install, verify, upgrade, and uninstall Kraft with uv, Homebrew, the install script, or from source.","md",null,{},true,{"title":17,"description":1729},"Q2BjjB0w5VSTfS2-0tuF6_leuMsl-vpXSjpsoO89iz4",[1737,1739],{"title":13,"path":14,"stem":15,"description":1738,"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":1740,"children":-1},"Start Kraft, connect a repo, run a work item end to end, and approve its gates.",1790824505397]