[{"data":1,"prerenderedAt":1710},["ShallowReactive",2],{"navigation_docs":3,"-guides-agent-integration":270,"-guides-agent-integration-surround":1705},[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":1698,"extension":1699,"links":1700,"meta":1701,"navigation":1702,"path":60,"seo":1703,"stem":61,"__hash__":1704},"docs\u002F3.guides\u002F01.agent-integration.md",{"type":273,"value":274,"toc":1689},"minimark",[275,284,306,311,314,1092,1102,1105,1111,1114,1146,1174,1186,1197,1201,1211,1223,1470,1479,1483,1491,1619,1623,1637,1643,1646,1676,1680,1685],[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, Codex, Cursor and Antigravity 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,757,804,896,1041],"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,553,571,607,618,728,737,754],{"label":549},"Cursor",[276,551,552],{},"Add the Kraft marketplace to your Cursor account:",[326,554,556],{"className":328,"code":555,"language":330,"meta":331,"style":331},"agent plugin marketplace add https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\n",[280,557,558],{"__ignoreMap":331},[335,559,560,562,564,566,568],{"class":337,"line":338},[335,561,317],{"class":341},[335,563,346],{"class":345},[335,565,349],{"class":345},[335,567,352],{"class":345},[335,569,570],{"class":345}," https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\n",[276,572,573,574,576,577,580,581,583,584,586,587,590,591,594,595,598,599,602,603,606],{},"Then install the plugin. In an ",[280,575,317],{}," session, run ",[280,578,579],{},"\u002Fplugins",", open the\nMarketplace tab, pick ",[280,582,293],{},", and choose user scope (every project) or project\nscope (this repo). Its details list the Kraft skills and the ",[280,585,293],{}," MCP\nserver. Once installed, ",[280,588,589],{},"\u002Fmcp"," in a session lists ",[280,592,593],{},"Kraft (plugin)","; the\n",[280,596,597],{},"agent mcp list"," command shows only servers from ",[280,600,601],{},"mcp.json"," files, so it does\nnot list it. ",[280,604,605],{},"agent plugin marketplace remove kraft"," drops the marketplace.",[276,608,609,610,613,614,617],{},"Without the plugin, register the server alone. Cursor's CLI has no command that\nadds a server. Add it to ",[280,611,612],{},"~\u002F.cursor\u002Fmcp.json"," for every project, or to\n",[280,615,616],{},".cursor\u002Fmcp.json"," in one repo:",[326,619,623],{"className":620,"code":621,"language":622,"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,624,625,631,648,716,722],{"__ignoreMap":331},[335,626,627],{"class":337,"line":338},[335,628,630],{"class":629},"sMK4o","{\n",[335,632,633,636,640,643,645],{"class":337,"line":358},[335,634,635],{"class":629},"  \"",[335,637,639],{"class":638},"spNyl","mcpServers",[335,641,642],{"class":629},"\"",[335,644,513],{"class":629},[335,646,647],{"class":629}," {\n",[335,649,650,653,655,657,659,662,665,669,671,673,675,677,679,682,684,687,689,691,694,696,699,701,703,705,708,710,713],{"class":337,"line":533},[335,651,652],{"class":629},"    \"",[335,654,293],{"class":341},[335,656,642],{"class":629},[335,658,513],{"class":629},[335,660,661],{"class":629}," {",[335,663,664],{"class":629}," \"",[335,666,668],{"class":667},"sbssI","command",[335,670,642],{"class":629},[335,672,513],{"class":629},[335,674,664],{"class":629},[335,676,293],{"class":345},[335,678,642],{"class":629},[335,680,681],{"class":629},",",[335,683,664],{"class":629},[335,685,686],{"class":667},"args",[335,688,642],{"class":629},[335,690,513],{"class":629},[335,692,693],{"class":629}," [",[335,695,642],{"class":629},[335,697,698],{"class":345},"admin",[335,700,642],{"class":629},[335,702,681],{"class":629},[335,704,664],{"class":629},[335,706,707],{"class":345},"mcp",[335,709,642],{"class":629},[335,711,712],{"class":629},"]",[335,714,715],{"class":629}," }\n",[335,717,719],{"class":337,"line":718},4,[335,720,721],{"class":629},"  }\n",[335,723,725],{"class":337,"line":724},5,[335,726,727],{"class":629},"}\n",[276,729,730,731,452,733,736],{},"The CLI loads a new server only once you approve it. Until then,\n",[280,732,597],{},[280,734,735],{},"kraft: not loaded (needs approval)",". Approve it with:",[326,738,740],{"className":328,"code":739,"language":330,"meta":331,"style":331},"agent mcp enable kraft\n",[280,741,742],{"__ignoreMap":331},[335,743,744,746,748,751],{"class":337,"line":338},[335,745,317],{"class":341},[335,747,490],{"class":345},[335,749,750],{"class":345}," enable",[335,752,753],{"class":345}," kraft\n",[276,755,756],{},"The Cursor editor reads the same file.",[319,758,760,787],{"label":759},"OpenCode",[326,761,763],{"className":328,"code":762,"language":330,"meta":331,"style":331},"opencode mcp add --global kraft -- kraft admin mcp\n",[280,764,765],{"__ignoreMap":331},[335,766,767,770,772,774,777,779,781,783,785],{"class":337,"line":338},[335,768,769],{"class":341},"opencode",[335,771,490],{"class":345},[335,773,352],{"class":345},[335,775,776],{"class":345}," --global",[335,778,495],{"class":345},[335,780,498],{"class":345},[335,782,495],{"class":345},[335,784,503],{"class":345},[335,786,506],{"class":345},[276,788,789,792,793,796,797,452,800,803],{},[280,790,791],{},"--global"," writes your user config. Without it, the server goes into\n",[280,794,795],{},"opencode.json"," in the current directory, for that project only.\n",[280,798,799],{},"opencode mcp list",[280,801,802],{},"kraft connected"," once OpenCode can start it.",[319,805,807,831,857,860,880],{"label":806},"Amp",[326,808,810],{"className":328,"code":809,"language":330,"meta":331,"style":331},"amp mcp add kraft -- kraft admin mcp\n",[280,811,812],{"__ignoreMap":331},[335,813,814,817,819,821,823,825,827,829],{"class":337,"line":338},[335,815,816],{"class":341},"amp",[335,818,490],{"class":345},[335,820,352],{"class":345},[335,822,495],{"class":345},[335,824,498],{"class":345},[335,826,495],{"class":345},[335,828,503],{"class":345},[335,830,506],{"class":345},[276,832,833,834,837,838,841,842,845,846,849,850,853,854,546],{},"This writes ",[280,835,836],{},"amp.mcpServers"," in ",[280,839,840],{},"~\u002F.config\u002Famp\u002Fsettings.json",". With\n",[280,843,844],{},"--workspace"," it writes the repo's ",[280,847,848],{},".amp\u002Fsettings.json"," instead, and Amp runs a\nworkspace server only after you approve it: ",[280,851,852],{},"amp mcp approve kraft",".\n",[280,855,856],{},"amp mcp list",[276,858,859],{},"Amp has no plugin route that carries an MCP server, but it installs the Kraft\nskills straight from the repo:",[326,861,863],{"className":328,"code":862,"language":330,"meta":331,"style":331},"amp skill add itsOmidKarami\u002Fkraft\u002Fplugins\u002Fkraft\u002Fskills --global\n",[280,864,865],{"__ignoreMap":331},[335,866,867,869,872,874,877],{"class":337,"line":338},[335,868,816],{"class":341},[335,870,871],{"class":345}," skill",[335,873,352],{"class":345},[335,875,876],{"class":345}," itsOmidKarami\u002Fkraft\u002Fplugins\u002Fkraft\u002Fskills",[335,878,879],{"class":345}," --global\n",[276,881,882,884,885,888,889,892,893,305],{},[280,883,791],{}," copies them into ",[280,886,887],{},"~\u002F.config\u002Fagents\u002Fskills\u002F",". ",[280,890,891],{},"amp skill list"," shows\nthem. To update, run the same command with ",[280,894,895],{},"--overwrite",[319,897,899,906,986,1013,1015,1036],{"label":898},"Antigravity",[276,900,901,902,905],{},"Antigravity's CLI (",[280,903,904],{},"agy",") imports a Claude Code plugin from a local directory,\nso clone the repo and import the plugin from it:",[326,907,909],{"className":328,"code":908,"language":330,"meta":331,"style":331},"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,910,911,929,954,972],{"__ignoreMap":331},[335,912,913,917,920,923,926],{"class":337,"line":338},[335,914,916],{"class":915},"sTEyZ","clone",[335,918,919],{"class":629},"=$(",[335,921,922],{"class":341},"mktemp",[335,924,925],{"class":345}," -d",[335,927,928],{"class":629},")\n",[335,930,931,934,937,940,943,946,948,951],{"class":337,"line":358},[335,932,933],{"class":341},"git",[335,935,936],{"class":345}," clone",[335,938,939],{"class":345}," --depth",[335,941,942],{"class":667}," 1",[335,944,945],{"class":345}," https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft.git",[335,947,664],{"class":629},[335,949,950],{"class":915},"$clone",[335,952,953],{"class":629},"\"\n",[335,955,956,958,960,963,965,967,970],{"class":337,"line":533},[335,957,904],{"class":341},[335,959,346],{"class":345},[335,961,962],{"class":345}," import",[335,964,664],{"class":629},[335,966,950],{"class":915},[335,968,969],{"class":345},"\u002Fplugins\u002Fkraft",[335,971,953],{"class":629},[335,973,974,977,980,982,984],{"class":337,"line":718},[335,975,976],{"class":341},"rm",[335,978,979],{"class":345}," -rf",[335,981,664],{"class":629},[335,983,950],{"class":915},[335,985,953],{"class":629},[276,987,988,989,992,993,452,996,998,999,1002,1003,1005,1006,888,1009,1012],{},"The import copies the plugin into your profile (",[280,990,991],{},"~\u002F.gemini\u002Fconfig\u002Fplugins\u002F","),\nso the clone is not needed afterwards. It registers Kraft's MCP server and adds the Kraft skills;\n",[280,994,995],{},"agy plugin list",[280,997,293],{}," with ",[280,1000,1001],{},"skills"," and ",[280,1004,639],{},". To update,\nclone again and run the import with ",[280,1007,1008],{},"--force",[280,1010,1011],{},"agy plugin uninstall kraft","\nremoves it.",[276,1014,478],{},[326,1016,1018],{"className":328,"code":1017,"language":330,"meta":331,"style":331},"agy mcp add kraft kraft admin mcp\n",[280,1019,1020],{"__ignoreMap":331},[335,1021,1022,1024,1026,1028,1030,1032,1034],{"class":337,"line":338},[335,1023,904],{"class":341},[335,1025,490],{"class":345},[335,1027,352],{"class":345},[335,1029,495],{"class":345},[335,1031,495],{"class":345},[335,1033,503],{"class":345},[335,1035,506],{"class":345},[276,1037,1038,546],{},[280,1039,1040],{},"agy mcp list",[319,1042,1044,1047,1075],{"label":1043},"Gemini CLI",[276,1045,1046],{},"Since 2026-06-18, Gemini CLI works only with an API key or Gemini Code Assist.\nWith an individual Google account (free, Google AI Pro or Ultra), use\nAntigravity instead.",[326,1048,1050],{"className":328,"code":1049,"language":330,"meta":331,"style":331},"gemini mcp add --scope user kraft kraft admin mcp\n",[280,1051,1052],{"__ignoreMap":331},[335,1053,1054,1057,1059,1061,1064,1067,1069,1071,1073],{"class":337,"line":338},[335,1055,1056],{"class":341},"gemini",[335,1058,490],{"class":345},[335,1060,352],{"class":345},[335,1062,1063],{"class":345}," --scope",[335,1065,1066],{"class":345}," user",[335,1068,495],{"class":345},[335,1070,495],{"class":345},[335,1072,503],{"class":345},[335,1074,506],{"class":345},[276,1076,1077,1080,1081,1084,1085,1088,1089,546],{},[280,1078,1079],{},"--scope user"," writes ",[280,1082,1083],{},"~\u002F.gemini\u002Fsettings.json",". Without it, Gemini CLI writes\nthe project's ",[280,1086,1087],{},".gemini\u002Fsettings.json",", and connects a project's servers only in\na folder you have trusted. ",[280,1090,1091],{},"gemini mcp list",[276,1093,1094,1095,1098,1099,305],{},"Kraft's skills reach Claude Code, Codex, Cursor and Antigravity through the\nplugin, and Amp through ",[280,1096,1097],{},"amp skill add",". OpenCode and Gemini CLI get the MCP\nserver alone: ask for what you want in plain words (\"what is waiting on me in\nKraft?\") and the agent calls the ",[303,1100,236],{"href":1101},"#mcp-tools",[307,1103,411],{"id":1104},"set-up-without-the-plugin",[276,1106,1107,1108,1110],{},"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,1109,293],{}," MCP\nserver, Kraft refuses to launch a Claude worker.",[276,1112,1113],{},"For Claude Code, run one of:",[326,1115,1117],{"className":328,"code":1116,"language":330,"meta":331,"style":331},"kraft admin init          # for every repo you open\nkraft admin init --repo   # for this repo only\n",[280,1118,1119,1132],{"__ignoreMap":331},[335,1120,1121,1123,1125,1128],{"class":337,"line":338},[335,1122,293],{"class":341},[335,1124,503],{"class":345},[335,1126,1127],{"class":345}," init",[335,1129,1131],{"class":1130},"sHwdD","          # for every repo you open\n",[335,1133,1134,1136,1138,1140,1143],{"class":337,"line":358},[335,1135,293],{"class":341},[335,1137,503],{"class":345},[335,1139,1127],{"class":345},[335,1141,1142],{"class":345}," --repo",[335,1144,1145],{"class":1130},"   # for this repo only\n",[276,1147,1148,1149,1152,1153,1156,1157,1159,1160,1163,1164,1167,1168,1170,1171,1173],{},"The first registers Kraft with Claude Code for your user\n(",[280,1150,1151],{},"claude mcp add --scope user kraft -- kraft admin mcp",") and writes the skills\nto ",[280,1154,1155],{},"~\u002F.claude\u002Fskills\u002Fkraft\u002F",". It needs the ",[280,1158,342],{}," command; without it, it\nprints that command for you to run. The second writes a ",[280,1161,1162],{},".mcp.json"," and\n",[280,1165,1166],{},".claude\u002Fskills\u002Fkraft\u002F"," into the current repo, where other tools can read them\ntoo. Commit the ",[280,1169,1162],{},": 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,1172,384],{}," commands. To remove them, delete the skills directory.",[276,1175,1176,1178,1179,1182,1183,1185],{},[280,1177,389],{}," registers Kraft with Claude Code only. For another agent, use\nits tab in ",[303,1180,310],{"href":1181},"#register-kraft-with-your-agent",".\nAn agent not listed there needs an MCP server that runs the command\n",[280,1184,282],{}," over stdio.",[276,1187,1188,1189,1192,1193,1196],{},"To check a Claude Code setup, the plugin included, run ",[280,1190,1191],{},"kraft admin doctor",".\nIts ",[280,1194,1195],{},"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,1198,1200],{"id":1199},"run-workers-on-your-agent","Run workers on your agent",[276,1202,1203,1204,1207,1208,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,1205,1206],{"href":96},"Switch a task to another harness"," moves tasks to\nanother. Kraft calls that CLI a ",[303,1209,1210],{"href":207},"harness",[276,1212,1213,1214,837,1217,1222],{},"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,1215,1216],{},"env_passthrough",[303,1218,1219],{"href":147},[280,1220,1221],{},"repos.yaml"," names it.\nWhat each harness needs:",[315,1224,1225,1264,1297,1330,1359,1383,1415],{"sync":317},[319,1226,1227],{"label":321},[1228,1229,1230,1246],"ul",{},[1231,1232,1233,1236,1237,1239,1240,1242,1243,1245],"li",{},[287,1234,1235],{},"Registration."," Required. An unsandboxed Claude worker asks Kraft's\npermission gate through the ",[280,1238,293],{}," MCP server, and Kraft refuses to launch\none when nothing registers it. The plugin, ",[280,1241,389],{},", or a committed\n",[280,1244,1162],{}," each count.",[1231,1247,1248,1251,1252,1254,1255,1163,1258,1261,1262,305],{},[287,1249,1250],{},"Login."," Your normal ",[280,1253,342],{}," login works. ",[280,1256,1257],{},"ANTHROPIC_API_KEY",[280,1259,1260],{},"CLAUDE_CODE_OAUTH_TOKEN"," reach the worker without ",[280,1263,1216],{},[319,1265,1266],{"label":414},[1228,1267,1268,1273],{},[1231,1269,1270,1272],{},[287,1271,1235],{}," 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.",[1231,1274,1275,1277,1278,1281,1282,1285,1286,1288,1289,1292,1293,1296],{},[287,1276,1250],{}," Sign in with ",[280,1279,1280],{},"codex login","; the login under your home directory\nreaches the worker. With an API key, name ",[280,1283,1284],{},"CODEX_API_KEY"," in\n",[280,1287,1216],{},", not ",[280,1290,1291],{},"OPENAI_API_KEY",", which ",[280,1294,1295],{},"codex exec"," does not send.",[319,1298,1299],{"label":549},[1228,1300,1301,1306],{},[1231,1302,1303,1305],{},[287,1304,1235],{}," None. When a task's policy needs Kraft's permission hook,\nKraft installs it in the worktree.",[1231,1307,1308,1310,1311,1314,1315,1319,1320,837,1323,1325,1326,305],{},[287,1309,1250],{}," ",[280,1312,1313],{},"agent login"," keeps the login in the OS keychain, which a worker\nreaches unless it is ",[303,1316,1318],{"href":1317},"\u002Freference\u002Fconfiguration\u002Frepos#sandboxed-workers","sandboxed",".\nWith an API key, name ",[280,1321,1322],{},"CURSOR_API_KEY",[280,1324,1216],{},". See\n",[303,1327,1329],{"href":1328},"\u002Fguides\u002Fadding-a-harness#set-up-harness-credentials","Set up harness credentials",[319,1331,1332],{"label":759},[1228,1333,1334,1339,1348],{},[1231,1335,1336,1338],{},[287,1337,1235],{}," None. When a task's policy sets tool rules, Kraft writes\nthem into that launch's own OpenCode config.",[1231,1340,1341,1344,1345,305],{},[287,1342,1343],{},"Version."," OpenCode 2.0.0 or newer. Kraft refuses to launch an older one,\nincluding npm's 1.x ",[280,1346,1347],{},"opencode-ai",[1231,1349,1350,1352,1353,1356,1357,305],{},[287,1351,1250],{}," Log in to your provider with ",[280,1354,1355],{},"opencode auth",". A provider key read\nfrom the environment needs its variable in ",[280,1358,1216],{},[319,1360,1361],{"label":806},[1228,1362,1363,1368],{},[1231,1364,1365,1367],{},[287,1366,1235],{}," None. When a task's policy sets tool rules, Kraft writes\nthem into a settings file of that launch's own.",[1231,1369,1370,1310,1372,1375,1376,837,1379,1325,1381,305],{},[287,1371,1250],{},[280,1373,1374],{},"amp login"," works on the machine where you ran it. Otherwise name\n",[280,1377,1378],{},"AMP_API_KEY",[280,1380,1216],{},[303,1382,1329],{"href":1328},[319,1384,1385],{"label":1043},[1228,1386,1387,1404],{},[1231,1388,1389,1391,1392,1395,1396,1399,1400,1403],{},[287,1390,1235],{}," None. Gemini CLI takes no tool policy: Kraft refuses a\ntask on it whose policy sets ",[280,1393,1394],{},"deny_tools"," or ",[280,1397,1398],{},"allowed_tools",". It runs in its\n",[280,1401,1402],{},"yolo"," approval mode unless the task sets another.",[1231,1405,1406,1408,1409,1285,1412,1414],{},[287,1407,1250],{}," A Gemini API key or Gemini Code Assist: name ",[280,1410,1411],{},"GEMINI_API_KEY",[280,1413,1216],{},". Gemini CLI stopped serving free, Google AI Pro and Ultra\naccounts on 2026-06-18; with one of those, use the Antigravity tab.",[319,1416,1417],{"label":898},[1228,1418,1419,1439,1453],{},[1231,1420,1421,1423,1424,1426,1427,1395,1429,1431,1432,1435,1436,1438],{},[287,1422,1235],{}," None. Antigravity CLI (",[280,1425,904],{},") takes no tool policy: Kraft\nrefuses a task on it whose policy sets ",[280,1428,1394],{},[280,1430,1398],{},". Every\nlaunch passes ",[280,1433,1434],{},"--dangerously-skip-permissions",", since headless ",[280,1437,904],{},"\notherwise denies every file write and shell command.",[1231,1440,1441,1443,1444,1446,1447,1449,1450,305],{},[287,1442,1250],{}," Run ",[280,1445,904],{}," once in a terminal and sign in. A worker uses that\ncached sign-in, which a ",[303,1448,1318],{"href":1317},"\nworker cannot reach. See\n",[303,1451,1329],{"href":1452},"\u002Fguides\u002Fadding-a-harness#antigravity",[1231,1454,1455,1458,1459,998,1462,1465,1466,1469],{},[287,1456,1457],{},"Model."," Name a base model and an effort, such as ",[280,1460,1461],{},"model: gemini-3.8-flash",[280,1463,1464],{},"effort: low",", so the dollar caps can price the\nsession. ",[280,1467,1468],{},"agy models"," lists the models your account has.",[276,1471,1472,1473,1476,1477,305],{},"What each harness can and cannot do is in the\n",[303,1474,1475],{"href":207},"harness table",". To add an agent CLI Kraft does not ship,\nsee ",[303,1478,71],{"href":72},[307,1480,1482],{"id":1481},"the-skills","The skills",[276,1484,1485,1486,1488,1489,305],{},"Claude Code runs these as slash commands. In Codex they have the same names\nwithout the slash (",[280,1487,462],{},"), picked with ",[280,1490,470],{},[1492,1493,1494,1507],"table",{},[1495,1496,1497],"thead",{},[1498,1499,1500,1504],"tr",{},[1501,1502,1503],"th",{},"Skill",[1501,1505,1506],{},"Use it to",[1508,1509,1510,1520,1529,1539,1549,1559,1569,1579,1589,1599,1609],"tbody",{},[1498,1511,1512,1517],{},[1513,1514,1515],"td",{},[280,1516,374],{},[1513,1518,1519],{},"Connect the repo you are in and check its setup and test commands.",[1498,1521,1522,1526],{},[1513,1523,1524],{},[280,1525,393],{},[1513,1527,1528],{},"See what is running, blocked, or waiting on a person, or search specs and plans.",[1498,1530,1531,1536],{},[1513,1532,1533],{},[280,1534,1535],{},"\u002Fkraft:prepare",[1513,1537,1538],{},"Write a spec (and a plan, if you ask), then decide whether the work runs in this session or in Kraft.",[1498,1540,1541,1546],{},[1513,1542,1543],{},[280,1544,1545],{},"\u002Fkraft:handoff",[1513,1547,1548],{},"File work with Kraft, with any agreed spec and plan attached.",[1498,1550,1551,1556],{},[1513,1552,1553],{},[280,1554,1555],{},"\u002Fkraft:status",[1513,1557,1558],{},"Report where a work item has got to, or watch it until it ends.",[1498,1560,1561,1566],{},[1513,1562,1563],{},[280,1564,1565],{},"\u002Fkraft:gates",[1513,1567,1568],{},"Approve or reject the gate a work item is waiting on, leave review threads and submit a review, or pause and resume it.",[1498,1570,1571,1576],{},[1513,1572,1573],{},[280,1574,1575],{},"\u002Fkraft:review",[1513,1577,1578],{},"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.",[1498,1580,1581,1586],{},[1513,1582,1583],{},[280,1584,1585],{},"\u002Fkraft:steer",[1513,1587,1588],{},"Redirect a work item that is heading the wrong way.",[1498,1590,1591,1596],{},[1513,1592,1593],{},[280,1594,1595],{},"\u002Fkraft:triage",[1513,1597,1598],{},"Find out why a work item stopped, and retry it, raise a cap, or hand it to you.",[1498,1600,1601,1606],{},[1513,1602,1603],{},[280,1604,1605],{},"\u002Fkraft:check",[1513,1607,1608],{},"Report where a repo's Kraft config has drifted from this Kraft version.",[1498,1610,1611,1616],{},[1513,1612,1613],{},[280,1614,1615],{},"\u002Fkraft:doctor",[1513,1617,1618],{},"Diagnose an unhealthy Kraft server and fix what it can.",[307,1620,1622],{"id":1621},"what-an-agent-cannot-do","What an agent cannot do",[276,1624,1625,1628,1629,1633,1634,1636],{},[287,1626,1627],{},"An agent cannot file work and start it in one step."," Everything an agent\ncreates lands paused, and the board shows it as ",[1630,1631,1632],"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,1635,1565],{},").",[276,1638,1639,1642],{},[287,1640,1641],{},"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,1644,236],{"id":1645},"mcp-tools",[276,1647,1648,1649,1651,1652,1002,1655,1658,1659,1662,1663,1002,1666,1669,1670,1672,1673,1675],{},"An agent without the skills calls the MCP tools ",[280,1650,282],{}," serves:\n",[280,1653,1654],{},"list_work_items",[280,1656,1657],{},"get_work_item"," to read the board, ",[280,1660,1661],{},"create_work_item","\nto file work, ",[280,1664,1665],{},"approve_gate",[280,1667,1668],{},"reject_gate"," to decide a gate, and so on.\n",[303,1671,236],{"href":237}," lists every tool, its parameters, and the\n",[280,1674,293],{}," command that does the same, so a hook or an agent without MCP gets the\nsame surface from the command line.",[307,1677,1679],{"id":1678},"without-the-kraft-server","Without the Kraft server",[276,1681,1682,1684],{},[303,1683,63],{"href":64}," runs a chain inside a single agent session\nwith no server and no MCP server.",[1686,1687,1688],"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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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":1690},[1691,1692,1693,1694,1695,1696,1697],{"id":309,"depth":358,"text":310},{"id":1104,"depth":358,"text":411},{"id":1199,"depth":358,"text":1200},{"id":1481,"depth":358,"text":1482},{"id":1621,"depth":358,"text":1622},{"id":1645,"depth":358,"text":236},{"id":1678,"depth":358,"text":1679},"Register Kraft with Claude Code, Codex, Cursor, OpenCode, Amp, Antigravity or Gemini CLI, drive it from that agent, and run workers on it.","md",null,{},true,{"title":59,"description":1698},"tpZOnMGxYmaWsCbv-PkGENVzOi4DpKFKlLI4SoYfIVk",[1706,1708],{"title":10,"path":53,"stem":57,"description":1707,"children":-1},"Task-focused how-tos for driving, extending, and reaching Kraft.",{"title":63,"path":64,"stem":65,"description":1709,"children":-1},"The Kraft Lite plugin, which runs a chain inside one agent session with no service, and its slash commands.",1790824506733]