[{"data":1,"prerenderedAt":1413},["ShallowReactive",2],{"navigation_docs":3,"-guides-agent-integration":270,"-guides-agent-integration-surround":1408},[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":59,"body":272,"description":1401,"extension":1402,"links":1403,"meta":1404,"navigation":1405,"path":60,"seo":1406,"stem":61,"__hash__":1407},"docs\u002F3.guides\u002F01.agent-integration.md",{"type":273,"value":274,"toc":1392},"minimark",[275,284,306,311,314,852,858,861,867,870,902,930,942,953,957,967,979,1172,1181,1185,1193,1321,1325,1339,1345,1348,1379,1383,1388],[276,277,278,279,283],"p",{},"Drive Kraft from a coding-agent session: file work, read the board, and approve\nor reject gates without switching to the browser. Every agent reaches Kraft\nthrough its MCP server, the command ",[280,281,282],"code",{},"kraft admin mcp",". With the Kraft plugin,\nClaude Code and Codex also get Kraft's skills.",[276,285,286,290,291,294,295,298,299,301,302,305],{},[287,288,289],"strong",{},"Before you start",", you need Kraft installed with ",[280,292,293],{},"kraft"," on your ",[280,296,297],{},"PATH",", and\nthe server running (",[280,300,293],{},"). See ",[303,304,17],"a",{"href":18},".",[307,308,310],"h2",{"id":309},"register-kraft-with-your-agent","Register Kraft with your agent",[276,312,313],{},"Pick your agent.",[315,316,318,412,547,704,751,804],"tabs",{"sync":317},"agent",[319,320,322,325,369,376,395,405],"tabs-item",{"label":321},"Claude Code",[276,323,324],{},"Add the Kraft marketplace and install the plugin:",[326,327,332],"pre",{"className":328,"code":329,"language":330,"meta":331,"style":331},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude plugin marketplace add itsOmidKarami\u002Fkraft\nclaude plugin install kraft@kraft\n","bash","",[280,333,334,356],{"__ignoreMap":331},[335,336,339,343,347,350,353],"span",{"class":337,"line":338},"line",1,[335,340,342],{"class":341},"sBMFI","claude",[335,344,346],{"class":345},"sfazB"," plugin",[335,348,349],{"class":345}," marketplace",[335,351,352],{"class":345}," add",[335,354,355],{"class":345}," itsOmidKarami\u002Fkraft\n",[335,357,359,361,363,366],{"class":337,"line":358},2,[335,360,342],{"class":341},[335,362,346],{"class":345},[335,364,365],{"class":345}," install",[335,367,368],{"class":345}," kraft@kraft\n",[276,370,371,372,375],{},"Then, in each repo you want Kraft to work on, open a session, run\n",[280,373,374],{},"\u002Fkraft:onboard",", and follow what it asks.",[276,377,378,379,386,387,390,391,394],{},"The plugin registers Kraft's MCP server with Claude Code and adds the\n",[303,380,382,385],{"href":381},"#the-skills",[280,383,384],{},"\u002Fkraft:*"," skills",". You do not need ",[280,388,389],{},"kraft admin init"," as well.\nTo check that it worked, run ",[280,392,393],{},"\u002Fkraft:board",": it lists the board for the repo\nyou are in.",[276,396,397,400,401,404],{},[280,398,399],{},"claude plugin update kraft"," picks up new skills. ",[280,402,403],{},"claude plugin uninstall kraft","\nremoves them.",[276,406,407,408,305],{},"To use plain files instead of a managed plugin, see\n",[303,409,411],{"href":410},"#set-up-without-the-plugin","Set up without the plugin",[319,413,415,418,446,476,479,507,514,537],{"label":414},"Codex",[276,416,417],{},"Codex installs the same plugin from the same marketplace:",[326,419,421],{"className":328,"code":420,"language":330,"meta":331,"style":331},"codex plugin marketplace add itsOmidKarami\u002Fkraft\ncodex plugin add kraft@kraft\n",[280,422,423,436],{"__ignoreMap":331},[335,424,425,428,430,432,434],{"class":337,"line":338},[335,426,427],{"class":341},"codex",[335,429,346],{"class":345},[335,431,349],{"class":345},[335,433,352],{"class":345},[335,435,355],{"class":345},[335,437,438,440,442,444],{"class":337,"line":358},[335,439,427],{"class":341},[335,441,346],{"class":345},[335,443,352],{"class":345},[335,445,368],{"class":345},[276,447,448,449,452,453,455,456,459,460,463,464,467,468,471,472,475],{},"The plugin registers Kraft's MCP server (",[280,450,451],{},"codex mcp list"," shows ",[280,454,293],{},") and\nadds the Kraft skills. Start a new Codex session to load them. ",[280,457,458],{},"\u002Fskills"," lists\nthem as ",[280,461,462],{},"kraft:board",", ",[280,465,466],{},"kraft:handoff"," and so on. Type ",[280,469,470],{},"$"," to pick one, or\ndescribe the task and let Codex choose. ",[280,473,474],{},"codex plugin remove kraft@kraft","\nuninstalls it.",[276,477,478],{},"Without the plugin, register the server alone:",[326,480,482],{"className":328,"code":481,"language":330,"meta":331,"style":331},"codex mcp add kraft -- kraft admin mcp\n",[280,483,484],{"__ignoreMap":331},[335,485,486,488,491,493,496,499,501,504],{"class":337,"line":338},[335,487,427],{"class":341},[335,489,490],{"class":345}," mcp",[335,492,352],{"class":345},[335,494,495],{"class":345}," kraft",[335,497,498],{"class":345}," --",[335,500,495],{"class":345},[335,502,503],{"class":345}," admin",[335,505,506],{"class":345}," mcp\n",[276,508,509,510,513],{},"This writes the server to ",[280,511,512],{},"~\u002F.codex\u002Fconfig.toml",":",[326,515,519],{"className":516,"code":517,"language":518,"meta":331,"style":331},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[mcp_servers.kraft]\ncommand = \"kraft\"\nargs = [\"admin\", \"mcp\"]\n","toml",[280,520,521,526,531],{"__ignoreMap":331},[335,522,523],{"class":337,"line":338},[335,524,525],{},"[mcp_servers.kraft]\n",[335,527,528],{"class":337,"line":358},[335,529,530],{},"command = \"kraft\"\n",[335,532,534],{"class":337,"line":533},3,[335,535,536],{},"args = [\"admin\", \"mcp\"]\n",[276,538,539,540,543,544,546],{},"To register it for one repo only, put the same table in that repo's\n",[280,541,542],{},".codex\u002Fconfig.toml"," instead. ",[280,545,451],{}," shows it.",[319,548,550,564,674,684,701],{"label":549},"Cursor",[276,551,552,553,555,556,559,560,563],{},"Cursor's CLI (",[280,554,317],{},") has no command that adds a server. Add it to\n",[280,557,558],{},"~\u002F.cursor\u002Fmcp.json"," for every project, or to ",[280,561,562],{},".cursor\u002Fmcp.json"," in one repo:",[326,565,569],{"className":566,"code":567,"language":568,"meta":331,"style":331},"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,570,571,577,594,662,668],{"__ignoreMap":331},[335,572,573],{"class":337,"line":338},[335,574,576],{"class":575},"sMK4o","{\n",[335,578,579,582,586,589,591],{"class":337,"line":358},[335,580,581],{"class":575},"  \"",[335,583,585],{"class":584},"spNyl","mcpServers",[335,587,588],{"class":575},"\"",[335,590,513],{"class":575},[335,592,593],{"class":575}," {\n",[335,595,596,599,601,603,605,608,611,615,617,619,621,623,625,628,630,633,635,637,640,642,645,647,649,651,654,656,659],{"class":337,"line":533},[335,597,598],{"class":575},"    \"",[335,600,293],{"class":341},[335,602,588],{"class":575},[335,604,513],{"class":575},[335,606,607],{"class":575}," {",[335,609,610],{"class":575}," \"",[335,612,614],{"class":613},"sbssI","command",[335,616,588],{"class":575},[335,618,513],{"class":575},[335,620,610],{"class":575},[335,622,293],{"class":345},[335,624,588],{"class":575},[335,626,627],{"class":575},",",[335,629,610],{"class":575},[335,631,632],{"class":613},"args",[335,634,588],{"class":575},[335,636,513],{"class":575},[335,638,639],{"class":575}," [",[335,641,588],{"class":575},[335,643,644],{"class":345},"admin",[335,646,588],{"class":575},[335,648,627],{"class":575},[335,650,610],{"class":575},[335,652,653],{"class":345},"mcp",[335,655,588],{"class":575},[335,657,658],{"class":575},"]",[335,660,661],{"class":575}," }\n",[335,663,665],{"class":337,"line":664},4,[335,666,667],{"class":575},"  }\n",[335,669,671],{"class":337,"line":670},5,[335,672,673],{"class":575},"}\n",[276,675,676,677,452,680,683],{},"The CLI loads a new server only once you approve it. Until then,\n",[280,678,679],{},"agent mcp list",[280,681,682],{},"kraft: not loaded (needs approval)",". Approve it with:",[326,685,687],{"className":328,"code":686,"language":330,"meta":331,"style":331},"agent mcp enable kraft\n",[280,688,689],{"__ignoreMap":331},[335,690,691,693,695,698],{"class":337,"line":338},[335,692,317],{"class":341},[335,694,490],{"class":345},[335,696,697],{"class":345}," enable",[335,699,700],{"class":345}," kraft\n",[276,702,703],{},"The Cursor editor reads the same file.",[319,705,707,734],{"label":706},"OpenCode",[326,708,710],{"className":328,"code":709,"language":330,"meta":331,"style":331},"opencode mcp add --global kraft -- kraft admin mcp\n",[280,711,712],{"__ignoreMap":331},[335,713,714,717,719,721,724,726,728,730,732],{"class":337,"line":338},[335,715,716],{"class":341},"opencode",[335,718,490],{"class":345},[335,720,352],{"class":345},[335,722,723],{"class":345}," --global",[335,725,495],{"class":345},[335,727,498],{"class":345},[335,729,495],{"class":345},[335,731,503],{"class":345},[335,733,506],{"class":345},[276,735,736,739,740,743,744,452,747,750],{},[280,737,738],{},"--global"," writes your user config. Without it, the server goes into\n",[280,741,742],{},"opencode.json"," in the current directory, for that project only.\n",[280,745,746],{},"opencode mcp list",[280,748,749],{},"kraft connected"," once OpenCode can start it.",[319,752,754,778],{"label":753},"Amp",[326,755,757],{"className":328,"code":756,"language":330,"meta":331,"style":331},"amp mcp add kraft -- kraft admin mcp\n",[280,758,759],{"__ignoreMap":331},[335,760,761,764,766,768,770,772,774,776],{"class":337,"line":338},[335,762,763],{"class":341},"amp",[335,765,490],{"class":345},[335,767,352],{"class":345},[335,769,495],{"class":345},[335,771,498],{"class":345},[335,773,495],{"class":345},[335,775,503],{"class":345},[335,777,506],{"class":345},[276,779,780,781,784,785,788,789,792,793,796,797,800,801,546],{},"This writes ",[280,782,783],{},"amp.mcpServers"," in ",[280,786,787],{},"~\u002F.config\u002Famp\u002Fsettings.json",". With\n",[280,790,791],{},"--workspace"," it writes the repo's ",[280,794,795],{},".amp\u002Fsettings.json"," instead, and Amp runs a\nworkspace server only after you approve it: ",[280,798,799],{},"amp mcp approve kraft",".\n",[280,802,803],{},"amp mcp list",[319,805,807,835],{"label":806},"Gemini CLI",[326,808,810],{"className":328,"code":809,"language":330,"meta":331,"style":331},"gemini mcp add --scope user kraft kraft admin mcp\n",[280,811,812],{"__ignoreMap":331},[335,813,814,817,819,821,824,827,829,831,833],{"class":337,"line":338},[335,815,816],{"class":341},"gemini",[335,818,490],{"class":345},[335,820,352],{"class":345},[335,822,823],{"class":345}," --scope",[335,825,826],{"class":345}," user",[335,828,495],{"class":345},[335,830,495],{"class":345},[335,832,503],{"class":345},[335,834,506],{"class":345},[276,836,837,840,841,844,845,848,849,546],{},[280,838,839],{},"--scope user"," writes ",[280,842,843],{},"~\u002F.gemini\u002Fsettings.json",". Without it, Gemini CLI writes\nthe project's ",[280,846,847],{},".gemini\u002Fsettings.json",", and connects a project's servers only in\na folder you have trusted. ",[280,850,851],{},"gemini mcp list",[276,853,854,855,305],{},"Kraft's skills reach Claude Code and Codex, through the plugin. A plugin for\nCursor, OpenCode, Amp or Gemini CLI isn't shipped yet. In those agents, ask for\nwhat you want in plain words (\"what is waiting on me in Kraft?\") and the agent\ncalls the ",[303,856,236],{"href":857},"#mcp-tools",[307,859,411],{"id":860},"set-up-without-the-plugin",[276,862,863,864,866],{},"Use this when you want plain files instead of a managed plugin. For Claude Code\nwithout the plugin, this step is required: without a registered ",[280,865,293],{}," MCP\nserver, Kraft refuses to launch a Claude worker.",[276,868,869],{},"For Claude Code, run one of:",[326,871,873],{"className":328,"code":872,"language":330,"meta":331,"style":331},"kraft admin init          # for every repo you open\nkraft admin init --repo   # for this repo only\n",[280,874,875,888],{"__ignoreMap":331},[335,876,877,879,881,884],{"class":337,"line":338},[335,878,293],{"class":341},[335,880,503],{"class":345},[335,882,883],{"class":345}," init",[335,885,887],{"class":886},"sHwdD","          # for every repo you open\n",[335,889,890,892,894,896,899],{"class":337,"line":358},[335,891,293],{"class":341},[335,893,503],{"class":345},[335,895,883],{"class":345},[335,897,898],{"class":345}," --repo",[335,900,901],{"class":886},"   # for this repo only\n",[276,903,904,905,908,909,912,913,915,916,919,920,923,924,926,927,929],{},"The first registers Kraft with Claude Code for your user\n(",[280,906,907],{},"claude mcp add --scope user kraft -- kraft admin mcp",") and writes the skills\nto ",[280,910,911],{},"~\u002F.claude\u002Fskills\u002Fkraft\u002F",". It needs the ",[280,914,342],{}," command; without it, it\nprints that command for you to run. The second writes a ",[280,917,918],{},".mcp.json"," and\n",[280,921,922],{},".claude\u002Fskills\u002Fkraft\u002F"," into the current repo, where other tools can read them\ntoo. Commit the ",[280,925,918],{},": each work item runs in a fresh checkout of the\nrepo, and an uncommitted file is not in it. Either way you get the same\n",[280,928,384],{}," commands. To remove them, delete the skills directory.",[276,931,932,934,935,938,939,941],{},[280,933,389],{}," registers Kraft with Claude Code only. For another agent, use\nits tab in ",[303,936,310],{"href":937},"#register-kraft-with-your-agent",".\nAn agent not listed there needs an MCP server that runs the command\n",[280,940,282],{}," over stdio.",[276,943,944,945,948,949,952],{},"To check a Claude Code setup, the plugin included, run ",[280,946,947],{},"kraft admin doctor",".\nIts ",[280,950,951],{},"mcp server"," row passes once Kraft is registered, and names the permission\ntool Claude workers will use. For another agent, use the list command in its\ntab.",[307,954,956],{"id":955},"run-workers-on-your-agent","Run workers on your agent",[276,958,959,960,963,964,305],{},"Registering Kraft with an agent lets you drive Kraft from it. Which agent CLI\nruns a work item's tasks is a separate choice, made per task in your templates:\nevery shipped task runs on Claude Code, and\n",[303,961,962],{"href":96},"Switch a task to another harness"," moves tasks to\nanother. Kraft calls that CLI a ",[303,965,966],{"href":207},"harness",[276,968,969,970,784,973,978],{},"A worker runs headless, with nobody to answer a login prompt, and its\nenvironment is an allowlist: a variable reaches it only when the repo's\n",[280,971,972],{},"env_passthrough",[303,974,975],{"href":147},[280,976,977],{},"repos.yaml"," names it.\nWhat each harness needs:",[315,980,981,1020,1053,1086,1115,1139],{"sync":317},[319,982,983],{"label":321},[984,985,986,1002],"ul",{},[987,988,989,992,993,995,996,998,999,1001],"li",{},[287,990,991],{},"Registration."," Required. An unsandboxed Claude worker asks Kraft's\npermission gate through the ",[280,994,293],{}," MCP server, and Kraft refuses to launch\none when nothing registers it. The plugin, ",[280,997,389],{},", or a committed\n",[280,1000,918],{}," each count.",[987,1003,1004,1007,1008,1010,1011,919,1014,1017,1018,305],{},[287,1005,1006],{},"Login."," Your normal ",[280,1009,342],{}," login works. ",[280,1012,1013],{},"ANTHROPIC_API_KEY",[280,1015,1016],{},"CLAUDE_CODE_OAUTH_TOKEN"," reach the worker without ",[280,1019,972],{},[319,1021,1022],{"label":414},[984,1023,1024,1029],{},[987,1025,1026,1028],{},[287,1027,991],{}," None. When a task's policy needs Kraft's permission hook,\nKraft passes it on that launch's command line and trusts it for that launch\nonly.",[987,1030,1031,1033,1034,1037,1038,1041,1042,1044,1045,1048,1049,1052],{},[287,1032,1006],{}," Sign in with ",[280,1035,1036],{},"codex login","; the login under your home directory\nreaches the worker. With an API key, name ",[280,1039,1040],{},"CODEX_API_KEY"," in\n",[280,1043,972],{},", not ",[280,1046,1047],{},"OPENAI_API_KEY",", which ",[280,1050,1051],{},"codex exec"," does not send.",[319,1054,1055],{"label":549},[984,1056,1057,1062],{},[987,1058,1059,1061],{},[287,1060,991],{}," None. When a task's policy needs Kraft's permission hook,\nKraft installs it in the worktree.",[987,1063,1064,1066,1067,1070,1071,1075,1076,784,1079,1081,1082,305],{},[287,1065,1006],{}," ",[280,1068,1069],{},"agent login"," keeps the login in the OS keychain, which a worker\nreaches unless it is ",[303,1072,1074],{"href":1073},"\u002Freference\u002Fconfiguration\u002Frepos#sandboxed-workers","sandboxed",".\nWith an API key, name ",[280,1077,1078],{},"CURSOR_API_KEY",[280,1080,972],{},". See\n",[303,1083,1085],{"href":1084},"\u002Fguides\u002Fadding-a-harness#set-up-amp-or-cursor-credentials","Set up Amp or Cursor credentials",[319,1087,1088],{"label":706},[984,1089,1090,1095,1104],{},[987,1091,1092,1094],{},[287,1093,991],{}," None. When a task's policy sets tool rules, Kraft writes\nthem into that launch's own OpenCode config.",[987,1096,1097,1100,1101,305],{},[287,1098,1099],{},"Version."," OpenCode 2.0.0 or newer. Kraft refuses to launch an older one,\nincluding npm's 1.x ",[280,1102,1103],{},"opencode-ai",[987,1105,1106,1108,1109,1112,1113,305],{},[287,1107,1006],{}," Log in to your provider with ",[280,1110,1111],{},"opencode auth",". A provider key read\nfrom the environment needs its variable in ",[280,1114,972],{},[319,1116,1117],{"label":753},[984,1118,1119,1124],{},[987,1120,1121,1123],{},[287,1122,991],{}," None. When a task's policy sets tool rules, Kraft writes\nthem into a settings file of that launch's own.",[987,1125,1126,1066,1128,1131,1132,784,1135,1081,1137,305],{},[287,1127,1006],{},[280,1129,1130],{},"amp login"," works on the machine where you ran it. Otherwise name\n",[280,1133,1134],{},"AMP_API_KEY",[280,1136,972],{},[303,1138,1085],{"href":1084},[319,1140,1141],{"label":806},[984,1142,1143,1160],{},[987,1144,1145,1147,1148,1151,1152,1155,1156,1159],{},[287,1146,991],{}," None. Gemini CLI takes no tool policy: Kraft refuses a\ntask on it whose policy sets ",[280,1149,1150],{},"deny_tools"," or ",[280,1153,1154],{},"allowed_tools",". It runs in its\n",[280,1157,1158],{},"yolo"," approval mode unless the task sets another.",[987,1161,1162,1007,1164,1166,1167,784,1170,305],{},[287,1163,1006],{},[280,1165,816],{}," login works. With an API key, name\n",[280,1168,1169],{},"GEMINI_API_KEY",[280,1171,972],{},[276,1173,1174,1175,1178,1179,305],{},"What each harness can and cannot do is in the\n",[303,1176,1177],{"href":207},"harness table",". To add an agent CLI Kraft does not ship,\nsee ",[303,1180,71],{"href":72},[307,1182,1184],{"id":1183},"the-skills","The skills",[276,1186,1187,1188,1190,1191,305],{},"Claude Code runs these as slash commands. In Codex they have the same names\nwithout the slash (",[280,1189,462],{},"), picked with ",[280,1192,470],{},[1194,1195,1196,1209],"table",{},[1197,1198,1199],"thead",{},[1200,1201,1202,1206],"tr",{},[1203,1204,1205],"th",{},"Skill",[1203,1207,1208],{},"Use it to",[1210,1211,1212,1222,1231,1241,1251,1261,1271,1281,1291,1301,1311],"tbody",{},[1200,1213,1214,1219],{},[1215,1216,1217],"td",{},[280,1218,374],{},[1215,1220,1221],{},"Connect the repo you are in and check its setup and test commands.",[1200,1223,1224,1228],{},[1215,1225,1226],{},[280,1227,393],{},[1215,1229,1230],{},"See what is running, blocked, or waiting on a person, or search specs and plans.",[1200,1232,1233,1238],{},[1215,1234,1235],{},[280,1236,1237],{},"\u002Fkraft:prepare",[1215,1239,1240],{},"Write a spec (and a plan, if you ask), then decide whether the work runs in this session or in Kraft.",[1200,1242,1243,1248],{},[1215,1244,1245],{},[280,1246,1247],{},"\u002Fkraft:handoff",[1215,1249,1250],{},"File work with Kraft, with any agreed spec and plan attached.",[1200,1252,1253,1258],{},[1215,1254,1255],{},[280,1256,1257],{},"\u002Fkraft:status",[1215,1259,1260],{},"Report where a work item has got to, or watch it until it ends.",[1200,1262,1263,1268],{},[1215,1264,1265],{},[280,1266,1267],{},"\u002Fkraft:gates",[1215,1269,1270],{},"Approve or reject the gate a work item is waiting on, leave review threads and submit a review, or pause and resume it.",[1200,1272,1273,1278],{},[1215,1274,1275],{},[280,1276,1277],{},"\u002Fkraft:review",[1215,1279,1280],{},"Read what a gate is about and recommend approve or reject, with reasons, drafted as review threads where they are about specific lines. It acts only once you answer.",[1200,1282,1283,1288],{},[1215,1284,1285],{},[280,1286,1287],{},"\u002Fkraft:steer",[1215,1289,1290],{},"Redirect a work item that is heading the wrong way.",[1200,1292,1293,1298],{},[1215,1294,1295],{},[280,1296,1297],{},"\u002Fkraft:triage",[1215,1299,1300],{},"Find out why a work item stopped, and retry it, raise a cap, or hand it to you.",[1200,1302,1303,1308],{},[1215,1304,1305],{},[280,1306,1307],{},"\u002Fkraft:check",[1215,1309,1310],{},"Report where a repo's Kraft config has drifted from this Kraft version.",[1200,1312,1313,1318],{},[1215,1314,1315],{},[280,1316,1317],{},"\u002Fkraft:doctor",[1215,1319,1320],{},"Diagnose an unhealthy Kraft server and fix what it can.",[307,1322,1324],{"id":1323},"what-an-agent-cannot-do","What an agent cannot do",[276,1326,1327,1330,1331,1335,1336,1338],{},[287,1328,1329],{},"An agent cannot file work and start it in one step."," Everything an agent\ncreates lands paused, and the board shows it as ",[1332,1333,1334],"em",{},"Not started"," with a single\nStart button. Nothing spends tokens until a person starts it, either by\nclicking that button or by asking your agent to resume the item\n(",[280,1337,1267],{},").",[276,1340,1341,1344],{},[287,1342,1343],{},"A worker cannot act on itself."," An agent session that Kraft started cannot\napprove, reject, pause, resume, retry, or abandon its own work item. Kraft\nrefuses the request. A gate is where a human decides; an agent approving its\nown would make the gate pointless.",[307,1346,236],{"id":1347},"mcp-tools",[276,1349,1350,1351,1353,1354,1357,1358,1361,1362,1365,1366,1357,1369,1372,1373,1375,1376,1378],{},"An agent without the skills calls the MCP tools ",[280,1352,282],{}," serves:\n",[280,1355,1356],{},"list_work_items"," and ",[280,1359,1360],{},"get_work_item"," to read the board, ",[280,1363,1364],{},"create_work_item","\nto file work, ",[280,1367,1368],{},"approve_gate",[280,1370,1371],{},"reject_gate"," to decide a gate, and so on.\n",[303,1374,236],{"href":237}," lists every tool, its parameters, and the\n",[280,1377,293],{}," command that does the same, so a hook or an agent without MCP gets the\nsame surface from the command line.",[307,1380,1382],{"id":1381},"without-the-kraft-server","Without the Kraft server",[276,1384,1385,1387],{},[303,1386,63],{"href":64}," runs a chain inside a single agent session\nwith no server and no MCP server.",[1389,1390,1391],"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 .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 .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}",{"title":331,"searchDepth":358,"depth":358,"links":1393},[1394,1395,1396,1397,1398,1399,1400],{"id":309,"depth":358,"text":310},{"id":860,"depth":358,"text":411},{"id":955,"depth":358,"text":956},{"id":1183,"depth":358,"text":1184},{"id":1323,"depth":358,"text":1324},{"id":1347,"depth":358,"text":236},{"id":1381,"depth":358,"text":1382},"Register Kraft with Claude Code, Codex, Cursor, OpenCode, Amp or Gemini CLI, drive it from that agent, and run workers on it.","md",null,{},true,{"title":59,"description":1401},"Sk24fAPb6ypDi0L1Lx-NhKtW-KAh3Tn3i2ttJkTL3tk",[1409,1411],{"title":10,"path":53,"stem":57,"description":1410,"children":-1},"Task-focused how-tos for driving, extending, and reaching Kraft.",{"title":63,"path":64,"stem":65,"description":1412,"children":-1},"The Kraft Lite plugin, which runs a chain inside one agent session with no service, and its slash commands.",1790824540912]