[{"data":1,"prerenderedAt":1465},["ShallowReactive",2],{"navigation_docs":3,"-guides-harnesses-switch-harness":504,"-guides-harnesses-switch-harness-surround":1460},[4,28,51,187,214,469],{"title":5,"path":6,"stem":7,"children":8,"page":-1},"Get started","\u002Fget-started","1.get-started",[9,12,16,20,24],{"title":10,"path":6,"stem":11},"Overview","1.get-started\u002Findex",{"title":13,"path":14,"stem":15},"Why Kraft","\u002Fget-started\u002Fwhy-kraft","1.get-started\u002F0.why-kraft",{"title":17,"path":18,"stem":19},"Install","\u002Fget-started\u002Finstall","1.get-started\u002F1.install",{"title":21,"path":22,"stem":23},"Your first work item","\u002Fget-started\u002Ffirst-work-item","1.get-started\u002F2.first-work-item",{"title":25,"path":26,"stem":27},"FAQ","\u002Fget-started\u002Ffaq","1.get-started\u002F3.faq",{"title":29,"path":30,"stem":31,"children":32,"page":-1},"Concepts","\u002Fconcepts","2.concepts",[33,35,39,43,47],{"title":10,"path":30,"stem":34},"2.concepts\u002Findex",{"title":36,"path":37,"stem":38},"How a work item runs","\u002Fconcepts\u002Fhow-a-work-item-runs","2.concepts\u002F1.how-a-work-item-runs",{"title":40,"path":41,"stem":42},"Caps and budgets","\u002Fconcepts\u002Fcaps-and-budgets","2.concepts\u002F2.caps-and-budgets",{"title":44,"path":45,"stem":46},"Why a permission gate","\u002Fconcepts\u002Fpermission-gate","2.concepts\u002F3.permission-gate",{"title":48,"path":49,"stem":50},"Vocabulary","\u002Fconcepts\u002Fvocabulary","2.concepts\u002F4.vocabulary",{"title":52,"path":53,"stem":54,"children":55,"page":-1},"Guides","\u002Fguides","3.guides",[56,58,96,113,134,183],{"title":10,"path":53,"stem":57},"3.guides\u002Findex",{"title":59,"path":60,"stem":61,"children":62,"page":95},"Day to day","\u002Fguides\u002Fday-to-day","3.guides\u002F1.day-to-day",[63,67,71,75,79,83,87,91],{"title":64,"path":65,"stem":66},"The setup wizard on first start","\u002Fguides\u002Fday-to-day\u002Ffirst-run","3.guides\u002F1.day-to-day\u002F2.first-run",{"title":68,"path":69,"stem":70},"File a work item","\u002Fguides\u002Fday-to-day\u002Ffile-a-work-item","3.guides\u002F1.day-to-day\u002F3.file-a-work-item",{"title":72,"path":73,"stem":74},"Use Kraft from your agent","\u002Fguides\u002Fday-to-day\u002Fagent-integration","3.guides\u002F1.day-to-day\u002F4.agent-integration",{"title":76,"path":77,"stem":78},"Reviewing a change","\u002Fguides\u002Fday-to-day\u002Freview-a-change","3.guides\u002F1.day-to-day\u002F5.review-a-change",{"title":80,"path":81,"stem":82},"Raise a cap on a stopped item","\u002Fguides\u002Fday-to-day\u002Fraise-a-cap","3.guides\u002F1.day-to-day\u002F6.raise-a-cap",{"title":84,"path":85,"stem":86},"Kraft for VS Code","\u002Fguides\u002Fday-to-day\u002Fvscode","3.guides\u002F1.day-to-day\u002F7.vscode",{"title":88,"path":89,"stem":90},"Kraft on a phone","\u002Fguides\u002Fday-to-day\u002Fkraft-on-a-phone","3.guides\u002F1.day-to-day\u002F8.kraft-on-a-phone",{"title":92,"path":93,"stem":94},"Get notified when an item needs you","\u002Fguides\u002Fday-to-day\u002Fnotifications","3.guides\u002F1.day-to-day\u002F9.notifications",false,{"title":97,"path":98,"stem":99,"children":100,"page":95},"Customize and automate","\u002Fguides\u002Fcustomize","3.guides\u002F2.customize",[101,105,109],{"title":102,"path":103,"stem":104},"Write your own chain","\u002Fguides\u002Fcustomize\u002Fwrite-your-own-chain","3.guides\u002F2.customize\u002F1.write-your-own-chain",{"title":106,"path":107,"stem":108},"Add a security review or a gate reviewer","\u002Fguides\u002Fcustomize\u002Fadd-review-agents","3.guides\u002F2.customize\u002F2.add-review-agents",{"title":110,"path":111,"stem":112},"Schedule or webhook work","\u002Fguides\u002Fcustomize\u002Fschedule-and-webhook-work","3.guides\u002F2.customize\u002F3.schedule-and-webhook-work",{"title":114,"path":115,"stem":116,"children":117,"page":95},"Agents and harnesses","\u002Fguides\u002Fharnesses","3.guides\u002F3.harnesses",[118,122,126,130],{"title":119,"path":120,"stem":121},"Switch a task to another harness","\u002Fguides\u002Fharnesses\u002Fswitch-harness","3.guides\u002F3.harnesses\u002F1.switch-harness",{"title":123,"path":124,"stem":125},"Add or override a harness","\u002Fguides\u002Fharnesses\u002Fadding-a-harness","3.guides\u002F3.harnesses\u002F2.adding-a-harness",{"title":127,"path":128,"stem":129},"Build a worker Kit","\u002Fguides\u002Fharnesses\u002Fworker-kit","3.guides\u002F3.harnesses\u002F3.worker-kit",{"title":131,"path":132,"stem":133},"Give a worker its login","\u002Fguides\u002Fharnesses\u002Fgive-a-worker-its-login","3.guides\u002F3.harnesses\u002F4.give-a-worker-its-login",{"title":135,"path":136,"stem":137,"children":138,"page":95},"Run the server","\u002Fguides\u002Frun","3.guides\u002F4.run",[139,143,147,151,155,159,163,167,171,175,179],{"title":140,"path":141,"stem":142},"Remote access","\u002Fguides\u002Frun\u002Fremote-access","3.guides\u002F4.run\u002F01.remote-access",{"title":144,"path":145,"stem":146},"Put a proxy in front of Kraft","\u002Fguides\u002Frun\u002Fput-a-proxy-in-front-of-kraft","3.guides\u002F4.run\u002F02.put-a-proxy-in-front-of-kraft",{"title":148,"path":149,"stem":150},"Restart Kraft without ending running agents","\u002Fguides\u002Frun\u002Frestart-kraft","3.guides\u002F4.run\u002F03.restart-kraft",{"title":152,"path":153,"stem":154},"Back up and restore the database","\u002Fguides\u002Frun\u002Fback-up-and-restore","3.guides\u002F4.run\u002F04.back-up-and-restore",{"title":156,"path":157,"stem":158},"Logs and disk space","\u002Fguides\u002Frun\u002Flogs-and-disk-space","3.guides\u002F4.run\u002F05.logs-and-disk-space",{"title":160,"path":161,"stem":162},"Run Kraft as a service","\u002Fguides\u002Frun\u002Frun-as-a-service","3.guides\u002F4.run\u002F06.run-as-a-service",{"title":164,"path":165,"stem":166},"Upgrade Kraft","\u002Fguides\u002Frun\u002Fupgrade-kraft","3.guides\u002F4.run\u002F07.upgrade-kraft",{"title":168,"path":169,"stem":170},"Upgrade your configuration","\u002Fguides\u002Frun\u002Fupgrade-your-configuration","3.guides\u002F4.run\u002F08.upgrade-your-configuration",{"title":172,"path":173,"stem":174},"Upgrade from 1.4","\u002Fguides\u002Frun\u002Fupgrade-from-1-4","3.guides\u002F4.run\u002F09.upgrade-from-1-4",{"title":176,"path":177,"stem":178},"Upgrade from 0.x or a release candidate","\u002Fguides\u002Frun\u002Fupgrade-from-0-x-or-a-release-candidate","3.guides\u002F4.run\u002F10.upgrade-from-0-x-or-a-release-candidate",{"title":180,"path":181,"stem":182},"Roll back to 1.4","\u002Fguides\u002Frun\u002Froll-back","3.guides\u002F4.run\u002F11.roll-back",{"title":184,"path":185,"stem":186},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F5.kraft-lite",{"title":188,"path":189,"stem":190,"children":191,"page":-1},"Troubleshooting","\u002Ftroubleshooting","4.troubleshooting",[192,194,198,202,206,210],{"title":10,"path":189,"stem":193},"4.troubleshooting\u002Findex",{"title":195,"path":196,"stem":197},"Why did my item stop?","\u002Ftroubleshooting\u002Fwhy-did-my-item-stop","4.troubleshooting\u002F1.why-did-my-item-stop",{"title":199,"path":200,"stem":201},"Stop reasons in detail","\u002Ftroubleshooting\u002Fstop-reasons-in-detail","4.troubleshooting\u002F2.stop-reasons-in-detail",{"title":203,"path":204,"stem":205},"Starting and reaching Kraft","\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft","4.troubleshooting\u002F3.starting-and-reaching-kraft",{"title":207,"path":208,"stem":209},"Doctor failures","\u002Ftroubleshooting\u002Fdoctor-failures","4.troubleshooting\u002F4.doctor-failures",{"title":211,"path":212,"stem":213},"Sandbox and Kit stops","\u002Ftroubleshooting\u002Fsandbox-and-kit-stops","4.troubleshooting\u002F5.sandbox-and-kit-stops",{"title":215,"path":216,"stem":217,"children":218,"page":-1},"Reference","\u002Freference","5.reference",[219,221,259,281,285,375,393,419,423,427,461,465],{"title":10,"path":216,"stem":220},"5.reference\u002Findex",{"title":222,"path":223,"stem":224,"children":225,"page":-1},"Web UI","\u002Freference\u002Fweb-ui","5.reference\u002F00.web-ui\u002Findex",[226,227,231,235,239,243,247,251,255],{"title":10,"path":223,"stem":224},{"title":228,"path":229,"stem":230},"Sidebar, search, and keyboard","\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard","5.reference\u002F00.web-ui\u002F0.sidebar-search-and-keyboard",{"title":232,"path":233,"stem":234},"The board","\u002Freference\u002Fweb-ui\u002Fboard","5.reference\u002F00.web-ui\u002F1.board",{"title":236,"path":237,"stem":238},"An item's page","\u002Freference\u002Fweb-ui\u002Fitem-page","5.reference\u002F00.web-ui\u002F2.item-page",{"title":240,"path":241,"stem":242},"Fix loops and test scopes","\u002Freference\u002Fweb-ui\u002Ffix-loops-and-test-scopes","5.reference\u002F00.web-ui\u002F3.fix-loops-and-test-scopes",{"title":244,"path":245,"stem":246},"Config before an item starts","\u002Freference\u002Fweb-ui\u002Fconfig-before-start","5.reference\u002F00.web-ui\u002F4.config-before-start",{"title":248,"path":249,"stem":250},"The review page","\u002Freference\u002Fweb-ui\u002Freview-page","5.reference\u002F00.web-ui\u002F5.review-page",{"title":252,"path":253,"stem":254},"Templates and Settings","\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings","5.reference\u002F00.web-ui\u002F6.templates-and-settings",{"title":256,"path":257,"stem":258},"Analytics","\u002Freference\u002Fweb-ui\u002Fanalytics","5.reference\u002F00.web-ui\u002F7.analytics",{"title":260,"path":261,"stem":262,"children":263,"page":-1},"CLI","\u002Freference\u002Fcli","5.reference\u002F01.cli\u002Findex",[264,265,269,273,277],{"title":10,"path":261,"stem":262},{"title":266,"path":267,"stem":268},"Item verbs","\u002Freference\u002Fcli\u002Fitem","5.reference\u002F01.cli\u002F2.item",{"title":270,"path":271,"stem":272},"View verbs","\u002Freference\u002Fcli\u002Fview","5.reference\u002F01.cli\u002F3.view",{"title":274,"path":275,"stem":276},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","5.reference\u002F01.cli\u002F4.repo",{"title":278,"path":279,"stem":280},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","5.reference\u002F01.cli\u002F5.admin",{"title":282,"path":283,"stem":284},"Work item statuses","\u002Freference\u002Fstatuses","5.reference\u002F02.statuses",{"title":286,"path":287,"stem":288,"children":289,"page":-1},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F03.configuration\u002Findex",[290,291,309,313,317,321,325,329,333,337,371],{"title":10,"path":287,"stem":288},{"title":292,"path":293,"stem":294,"children":295,"page":-1},"repos.yaml","\u002Freference\u002Fconfiguration\u002Frepos","5.reference\u002F03.configuration\u002F02.repos\u002Findex",[296,297,301,305],{"title":10,"path":293,"stem":294},{"title":298,"path":299,"stem":300},"How connect proposes commands","\u002Freference\u002Fconfiguration\u002Frepos\u002Fconnect-proposals","5.reference\u002F03.configuration\u002F02.repos\u002F1.connect-proposals",{"title":302,"path":303,"stem":304},"detectors.yaml","\u002Freference\u002Fconfiguration\u002Frepos\u002Fdetectors","5.reference\u002F03.configuration\u002F02.repos\u002F2.detectors",{"title":306,"path":307,"stem":308},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces",{"title":310,"path":311,"stem":312},"policy.yaml","\u002Freference\u002Fconfiguration\u002Fpolicy","5.reference\u002F03.configuration\u002F03.policy",{"title":314,"path":315,"stem":316},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","5.reference\u002F03.configuration\u002F04.library-and-chains",{"title":318,"path":319,"stem":320},"harnesses.yaml","\u002Freference\u002Fconfiguration\u002Fharnesses-file","5.reference\u002F03.configuration\u002F05.harnesses-file",{"title":322,"path":323,"stem":324},"access.yaml","\u002Freference\u002Fconfiguration\u002Faccess","5.reference\u002F03.configuration\u002F06.access",{"title":326,"path":327,"stem":328},"intake.yaml","\u002Freference\u002Fconfiguration\u002Fintake","5.reference\u002F03.configuration\u002F07.intake",{"title":330,"path":331,"stem":332},"notify.yaml","\u002Freference\u002Fconfiguration\u002Fnotify","5.reference\u002F03.configuration\u002F08.notify",{"title":334,"path":335,"stem":336},"theme.yaml","\u002Freference\u002Fconfiguration\u002Ftheme","5.reference\u002F03.configuration\u002F09.theme",{"title":338,"path":339,"stem":340,"children":341,"page":-1},"Sandboxed workers","\u002Freference\u002Fconfiguration\u002Fsandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002Findex",[342,343,347,351,355,359,363,367],{"title":10,"path":339,"stem":340},{"title":344,"path":345,"stem":346},"Resource limits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits","5.reference\u002F03.configuration\u002F10.sandbox\u002F1.resource-limits",{"title":348,"path":349,"stem":350},"Callbacks from a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks","5.reference\u002F03.configuration\u002F10.sandbox\u002F2.callbacks",{"title":352,"path":353,"stem":354},"Network policy","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy","5.reference\u002F03.configuration\u002F10.sandbox\u002F3.network-policy",{"title":356,"path":357,"stem":358},"Credentials","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials","5.reference\u002F03.configuration\u002F10.sandbox\u002F4.credentials",{"title":360,"path":361,"stem":362},"Kits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fkits","5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits",{"title":364,"path":365,"stem":366},"sandbox.yaml","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml","5.reference\u002F03.configuration\u002F10.sandbox\u002F6.sandbox-yaml",{"title":368,"path":369,"stem":370},"Git in a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002F7.git-in-a-sandbox",{"title":372,"path":373,"stem":374},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","5.reference\u002F03.configuration\u002F11.environment-variables",{"title":376,"path":377,"stem":378,"children":379,"page":-1},"Chain file keys","\u002Freference\u002Fchain-nodes","5.reference\u002F04.chain-nodes\u002Findex",[380,381,385,389],{"title":10,"path":377,"stem":378},{"title":382,"path":383,"stem":384},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","5.reference\u002F04.chain-nodes\u002F2.subprocess-tasks",{"title":386,"path":387,"stem":388},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","5.reference\u002F04.chain-nodes\u002F3.fix-loop",{"title":390,"path":391,"stem":392},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","5.reference\u002F04.chain-nodes\u002F4.result-file",{"title":394,"path":395,"stem":396,"children":397,"page":-1},"Agent harnesses","\u002Freference\u002Fharnesses","5.reference\u002F05.harnesses\u002Findex",[398,399,403,407,411,415],{"title":10,"path":395,"stem":396},{"title":400,"path":401,"stem":402},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","5.reference\u002F05.harnesses\u002F2.unattended-runs",{"title":404,"path":405,"stem":406},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","5.reference\u002F05.harnesses\u002F3.agent-profiles",{"title":408,"path":409,"stem":410},"Harness definition files","\u002Freference\u002Fharnesses\u002Fharness-files","5.reference\u002F05.harnesses\u002F4.harness-files",{"title":412,"path":413,"stem":414},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","5.reference\u002F05.harnesses\u002F5.fallback-and-escalation",{"title":416,"path":417,"stem":418},"Cost reporting","\u002Freference\u002Fharnesses\u002Fcost-reporting","5.reference\u002F05.harnesses\u002F6.cost-reporting",{"title":420,"path":421,"stem":422},"Permission gate","\u002Freference\u002Fpermissions","5.reference\u002F06.permissions",{"title":424,"path":425,"stem":426},"Inbound triggers","\u002Freference\u002Ftriggers","5.reference\u002F07.triggers",{"title":428,"path":429,"stem":430,"children":431,"page":-1},"HTTP API","\u002Freference\u002Fhttp-api","5.reference\u002F08.http-api\u002Findex",[432,433,437,441,445,449,453,457],{"title":10,"path":429,"stem":430},{"title":434,"path":435,"stem":436},"Filing, reading and changing work items","\u002Freference\u002Fhttp-api\u002Fwork-items","5.reference\u002F08.http-api\u002F2.work-items",{"title":438,"path":439,"stem":440},"Gates, run control, ending and retry","\u002Freference\u002Fhttp-api\u002Fgates-run-control-and-ending","5.reference\u002F08.http-api\u002F3.gates-run-control-and-ending",{"title":442,"path":443,"stem":444},"The work item object","\u002Freference\u002Fhttp-api\u002Fwork-item-object","5.reference\u002F08.http-api\u002F4.work-item-object",{"title":446,"path":447,"stem":448},"Budget, events, diff and documents","\u002Freference\u002Fhttp-api\u002Fbudget-and-events","5.reference\u002F08.http-api\u002F5.budget-and-events",{"title":450,"path":451,"stem":452},"Repos, chains, harnesses and the server","\u002Freference\u002Fhttp-api\u002Frepos-chains-harnesses-and-server","5.reference\u002F08.http-api\u002F6.repos-chains-harnesses-and-server",{"title":454,"path":455,"stem":456},"Drafts","\u002Freference\u002Fhttp-api\u002Fdrafts","5.reference\u002F08.http-api\u002F7.drafts",{"title":458,"path":459,"stem":460},"Ops for each draft area","\u002Freference\u002Fhttp-api\u002Fdraft-ops","5.reference\u002F08.http-api\u002F8.draft-ops",{"title":462,"path":463,"stem":464},"MCP tools","\u002Freference\u002Fmcp-tools","5.reference\u002F09.mcp-tools",{"title":466,"path":467,"stem":468},"Events","\u002Freference\u002Fevents","5.reference\u002F10.events",{"title":470,"path":471,"stem":472,"children":473,"page":-1},"Security and project","\u002Fproject","6.project",[474,476,480,484,488,492,496,500],{"title":10,"path":471,"stem":475},"6.project\u002Findex",{"title":477,"path":478,"stem":479},"Security","\u002Fproject\u002Fsecurity","6.project\u002F1.security",{"title":481,"path":482,"stem":483},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","6.project\u002F2.data-and-privacy",{"title":485,"path":486,"stem":487},"What's new in 2.0","\u002Fproject\u002Fwhats-new","6.project\u002F3.whats-new",{"title":489,"path":490,"stem":491},"Status and support","\u002Fproject\u002Fstatus-and-support","6.project\u002F4.status-and-support",{"title":493,"path":494,"stem":495},"Architecture","\u002Fproject\u002Farchitecture","6.project\u002F5.architecture",{"title":497,"path":498,"stem":499},"Source map","\u002Fproject\u002Fsource-map","6.project\u002F6.source-map",{"title":501,"path":502,"stem":503},"Contributing","\u002Fproject\u002Fcontributing","6.project\u002F7.contributing",{"id":505,"title":119,"body":506,"description":1453,"extension":1454,"links":1455,"meta":1456,"navigation":1457,"path":120,"seo":1458,"stem":121,"__hash__":1459},"docs\u002F3.guides\u002F3.harnesses\u002F1.switch-harness.md",{"type":507,"value":508,"toc":1439},"minimark",[509,518,526,531,569,573,596,681,708,712,734,750,764,867,888,894,898,901,932,935,1062,1077,1081,1107,1110,1121,1125,1164,1232,1244,1248,1253,1280,1289,1299,1303,1313,1358,1369,1373,1388,1414,1418,1435],[510,511,512,513,517],"p",{},"Every agent task Kraft ships runs on Claude Code. Move tasks to another agent CLI, which Kraft calls a ",[514,515,516],"a",{"href":395},"harness",", and end with a chain that runs on it. The examples use Codex. The steps are the same for the other shipped harnesses.",[510,519,520,521,525],{},"The harness is a property of the task in your templates. There is no per-item harness switch: ",[522,523,524],"code",{},"kraft item set-overrides"," changes the model and effort only. To run one item on another harness, give it a chain that sets the harness, as in step 3.",[527,528,530],"h2",{"id":529},"before-you-start","Before you start",[532,533,534,545,553],"ul",{},[535,536,537,538,541,542,544],"li",{},"The CLI is installed, on the ",[522,539,540],{},"PATH"," of the shell that starts Kraft, and logged in. ",[514,543,131],{"href":132}," has each harness's login.",[535,546,547,548,552],{},"You have read the harness's row in the ",[514,549,551],{"href":550},"\u002Freference\u002Fharnesses#compare-the-harnesses","comparison table",". It shows what that CLI cannot do, and whether it reports a dollar cost.",[535,554,555,556,559,560,563,564,568],{},"For Gemini models on an individual Google account, use ",[522,557,558],{},"antigravity",", not ",[522,561,562],{},"gemini",": see ",[514,565,567],{"href":566},"\u002Freference\u002Fharnesses#gemini-details","Gemini details",".",[527,570,572],{"id":571},"_1-add-the-harness-profile","1. Add the harness profile",[510,574,575,576,583,584,587,588,591,592,595],{},"A task names a ",[577,578,579],"strong",{},[514,580,582],{"href":581},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," from ",[522,585,586],{},"$KRAFT_HOME\u002Fconfig\u002Fharnesses.yaml",", not a CLI. The shipped file has two harness profiles, ",[522,589,590],{},"claude"," and ",[522,593,594],{},"codex",":",[597,598,604],"pre",{"className":599,"code":600,"filename":601,"language":602,"meta":603,"style":603},"language-yaml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","harnesses:\n  codex:\n    provider: codex\n    enabled: true\n    executable: codex\n    defaults:\n      effort: medium\n","config\u002Fharnesses.yaml","yaml","",[522,605,606,619,627,640,652,662,670],{"__ignoreMap":603},[607,608,611,615],"span",{"class":609,"line":610},"line",1,[607,612,614],{"class":613},"sb7M8","harnesses",[607,616,618],{"class":617},"s7iLA",":\n",[607,620,622,625],{"class":609,"line":621},2,[607,623,624],{"class":613},"  codex",[607,626,618],{"class":617},[607,628,630,633,636],{"class":609,"line":629},3,[607,631,632],{"class":613},"    provider",[607,634,635],{"class":617},": ",[607,637,639],{"class":638},"semJd","codex\n",[607,641,643,646,648],{"class":609,"line":642},4,[607,644,645],{"class":613},"    enabled",[607,647,635],{"class":617},[607,649,651],{"class":650},"ssYy9","true\n",[607,653,655,658,660],{"class":609,"line":654},5,[607,656,657],{"class":613},"    executable",[607,659,635],{"class":617},[607,661,639],{"class":638},[607,663,665,668],{"class":609,"line":664},6,[607,666,667],{"class":613},"    defaults",[607,669,618],{"class":617},[607,671,673,676,678],{"class":609,"line":672},7,[607,674,675],{"class":613},"      effort",[607,677,635],{"class":617},[607,679,680],{"class":638},"medium\n",[510,682,683,684,687,688,691,692,691,695,691,697,699,700,703,704,568],{},"For another shipped harness, add a harness profile the same way, with ",[522,685,686],{},"provider"," set to its id (",[522,689,690],{},"cursor",", ",[522,693,694],{},"opencode",[522,696,562],{},[522,698,558],{}," or ",[522,701,702],{},"amp","). See ",[514,705,706],{"href":319},[522,707,318],{},[527,709,711],{"id":710},"_2-give-each-agent-profile-a-model-for-the-new-provider","2. Give each agent profile a model for the new provider",[510,713,714,715,718,719,722,723,726,727,733],{},"A task with ",[522,716,717],{},"profile: strong"," gets its model from the ",[522,720,721],{},"profiles:"," section of the same file, keyed by ",[514,724,686],{"href":725},"\u002Fconcepts\u002Fvocabulary#provider",". These are ",[577,728,729],{},[514,730,732],{"href":731},"\u002Fconcepts\u002Fvocabulary#agent-profile","agent profiles",", the model tiers.",[510,735,736,737,591,739,742,743,746,747,749],{},"The shipped ",[522,738,577],{},[522,740,741],{},"deep"," agent profiles name a Codex model. ",[522,744,745],{},"fast"," does not, so a ",[522,748,745],{}," task on Codex cannot start. No shipped agent profile names a model for the other harnesses.",[510,751,752,753,756,757,759,760,763],{},"Add the provider to each agent profile a moved task uses before you move it. The shipped ",[522,754,755],{},"implementer"," uses ",[522,758,577],{},", so moving it to Antigravity needs one more line in the shipped ",[522,761,762],{},"providers:"," block:",[597,765,767],{"className":599,"code":766,"filename":601,"language":602,"meta":603,"style":603},"profiles:\n  strong:\n    providers:\n      claude: { model: sonnet, effort: high }\n      codex: { model: gpt-5.6-terra, effort: high }\n      antigravity: { model: gemini-3.8-flash, effort: high }\n",[522,768,769,776,783,790,819,843],{"__ignoreMap":603},[607,770,771,774],{"class":609,"line":610},[607,772,773],{"class":613},"profiles",[607,775,618],{"class":617},[607,777,778,781],{"class":609,"line":621},[607,779,780],{"class":613},"  strong",[607,782,618],{"class":617},[607,784,785,788],{"class":609,"line":629},[607,786,787],{"class":613},"    providers",[607,789,618],{"class":617},[607,791,792,795,798,801,803,806,808,811,813,816],{"class":609,"line":642},[607,793,794],{"class":613},"      claude",[607,796,797],{"class":617},": { ",[607,799,800],{"class":613},"model",[607,802,635],{"class":617},[607,804,805],{"class":638},"sonnet",[607,807,691],{"class":617},[607,809,810],{"class":613},"effort",[607,812,635],{"class":617},[607,814,815],{"class":638},"high",[607,817,818],{"class":617}," }\n",[607,820,821,824,826,828,830,833,835,837,839,841],{"class":609,"line":654},[607,822,823],{"class":613},"      codex",[607,825,797],{"class":617},[607,827,800],{"class":613},[607,829,635],{"class":617},[607,831,832],{"class":638},"gpt-5.6-terra",[607,834,691],{"class":617},[607,836,810],{"class":613},[607,838,635],{"class":617},[607,840,815],{"class":638},[607,842,818],{"class":617},[607,844,845,848,850,852,854,857,859,861,863,865],{"class":609,"line":664},[607,846,847],{"class":613},"      antigravity",[607,849,797],{"class":617},[607,851,800],{"class":613},[607,853,635],{"class":617},[607,855,856],{"class":638},"gemini-3.8-flash",[607,858,691],{"class":617},[607,860,810],{"class":613},[607,862,635],{"class":617},[607,864,815],{"class":638},[607,866,818],{"class":617},[510,868,869,870,872,873,699,876,879,880,882,883,885,886,568],{},"Keep the ",[522,871,762],{}," shape. A ",[522,874,875],{},"model:",[522,877,878],{},"effort:"," beside ",[522,881,762],{}," is refused, and an unreadable ",[522,884,318],{}," stops every agent task. See ",[514,887,404],{"href":405},[510,889,890,891,893],{},"Amp takes no model, so a task on Amp sets ",[522,892,878],{}," itself instead of an agent profile.",[527,895,897],{"id":896},"_3-pick-which-tasks-move","3. Pick which tasks move",[510,899,900],{},"List the tasks each harness profile runs:",[597,902,906],{"className":903,"code":904,"language":905,"meta":603,"style":603},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","kraft admin harnesses\nkraft admin harnesses claude\n","bash",[522,907,908,920],{"__ignoreMap":603},[607,909,910,914,917],{"class":609,"line":610},[607,911,913],{"class":912},"szw1H","kraft",[607,915,916],{"class":638}," admin",[607,918,919],{"class":638}," harnesses\n",[607,921,922,924,926,929],{"class":609,"line":621},[607,923,913],{"class":912},[607,925,916],{"class":638},[607,927,928],{"class":638}," harnesses",[607,930,931],{"class":638}," claude\n",[510,933,934],{},"Then choose how far the change reaches:",[532,936,937,955,1049],{},[535,938,939,942,943,946,947,950,951,954],{},[577,940,941],{},"Every chain."," Change ",[522,944,945],{},"harness: claude"," to ",[522,948,949],{},"harness: codex"," on the tasks you want to move in ",[522,952,953],{},"library.yaml",". Every chain that extends them follows.",[535,956,957,960,961,964,965],{},[577,958,959],{},"One chain."," Leave the library alone and override the task in the chain file. A key set next to ",[522,962,963],{},"extends"," wins over the library's:",[597,966,969],{"className":599,"code":967,"filename":968,"language":602,"meta":603,"style":603},"id: codex-impl\nnodes:\n  - id: implementation\n    kind: exec\n    tasks:\n      - id: implement\n        extends: implementer\n        harness: codex\n","config\u002Fchains\u002Fcodex-impl.yaml",[522,970,971,981,988,1000,1010,1017,1029,1039],{"__ignoreMap":603},[607,972,973,976,978],{"class":609,"line":610},[607,974,975],{"class":613},"id",[607,977,635],{"class":617},[607,979,980],{"class":638},"codex-impl\n",[607,982,983,986],{"class":609,"line":621},[607,984,985],{"class":613},"nodes",[607,987,618],{"class":617},[607,989,990,993,995,997],{"class":609,"line":629},[607,991,992],{"class":617},"  - ",[607,994,975],{"class":613},[607,996,635],{"class":617},[607,998,999],{"class":638},"implementation\n",[607,1001,1002,1005,1007],{"class":609,"line":642},[607,1003,1004],{"class":613},"    kind",[607,1006,635],{"class":617},[607,1008,1009],{"class":638},"exec\n",[607,1011,1012,1015],{"class":609,"line":654},[607,1013,1014],{"class":613},"    tasks",[607,1016,618],{"class":617},[607,1018,1019,1022,1024,1026],{"class":609,"line":664},[607,1020,1021],{"class":617},"      - ",[607,1023,975],{"class":613},[607,1025,635],{"class":617},[607,1027,1028],{"class":638},"implement\n",[607,1030,1031,1034,1036],{"class":609,"line":672},[607,1032,1033],{"class":613},"        extends",[607,1035,635],{"class":617},[607,1037,1038],{"class":638},"implementer\n",[607,1040,1042,1045,1047],{"class":609,"line":1041},8,[607,1043,1044],{"class":613},"        harness",[607,1046,635],{"class":617},[607,1048,639],{"class":638},[535,1050,1051,1054,1055,1058,1059,568],{},[577,1052,1053],{},"One item."," File it on a chain like that one, with ",[522,1056,1057],{},"kraft item create \"title\" --chain codex-impl",". To switch an item that has not started, run ",[522,1060,1061],{},"kraft item set-chain ID --chain codex-impl",[510,1063,1064,1065,1068,1069,1072,1073,1076],{},"Kraft's own ",[522,1066,1067],{},"kraft:"," skills, such as ",[522,1070,1071],{},"kraft:code-review",", are sent to the agent in its instructions, so they work on any harness. A skill from another plugin (",[522,1074,1075],{},"plugin:skill",") needs that plugin installed for the new CLI. If it cannot load, the task stops and asks for it.",[527,1078,1080],{"id":1079},"_4-load-it","4. Load it",[597,1082,1084],{"className":903,"code":1083,"language":905,"meta":603,"style":603},"kraft admin templates lint\nkraft admin reload\n",[522,1085,1086,1098],{"__ignoreMap":603},[607,1087,1088,1090,1092,1095],{"class":609,"line":610},[607,1089,913],{"class":912},[607,1091,916],{"class":638},[607,1093,1094],{"class":638}," templates",[607,1096,1097],{"class":638}," lint\n",[607,1099,1100,1102,1104],{"class":609,"line":621},[607,1101,913],{"class":912},[607,1103,916],{"class":638},[607,1105,1106],{"class":638}," reload\n",[510,1108,1109],{},"If an agent profile has no model for the new provider, lint reports it. Go back to step 2:",[597,1111,1116],{"className":1112,"code":1114,"language":1115,"meta":603},[1113],"language-text","chains\u002Fcodex-fast.yaml:1:1: chain 'codex-fast' task 'implementation.main.implement': profile 'fast' has no model for provider 'codex' (harness 'codex')\n","text",[522,1117,1118],{"__ignoreMap":603},[607,1119,1114],{"className":1120},[609],[527,1122,1124],{"id":1123},"check-it-worked","Check it worked",[597,1126,1128],{"className":903,"code":1127,"language":905,"meta":603,"style":603},"kraft admin harnesses\nkraft admin templates show codex-impl --resolved\nkraft admin doctor\n",[522,1129,1130,1138,1155],{"__ignoreMap":603},[607,1131,1132,1134,1136],{"class":609,"line":610},[607,1133,913],{"class":912},[607,1135,916],{"class":638},[607,1137,919],{"class":638},[607,1139,1140,1142,1144,1146,1149,1152],{"class":609,"line":621},[607,1141,913],{"class":912},[607,1143,916],{"class":638},[607,1145,1094],{"class":638},[607,1147,1148],{"class":638}," show",[607,1150,1151],{"class":638}," codex-impl",[607,1153,1154],{"class":650}," --resolved\n",[607,1156,1157,1159,1161],{"class":609,"line":629},[607,1158,913],{"class":912},[607,1160,916],{"class":638},[607,1162,1163],{"class":638}," doctor\n",[532,1165,1166,1210,1219],{},[535,1167,1168,1171,1172,1175,1176],{},[522,1169,1170],{},"kraft admin harnesses"," lists the moved library tasks under the new harness profile, and in its CHAINS column every chain that selects it, a chain-level override included. For the one-chain example above, ",[522,1173,1174],{},"kraft admin harnesses codex"," prints:",[597,1177,1180],{"className":1178,"code":1179,"language":1115,"meta":603},[1113],"id          codex\nprovider    codex\nenabled     yes\nexecutable  codex\ndefaults    effort=medium\nused by     no library task\nchains      codex-impl\n",[522,1181,1182,1186,1190,1194,1198,1202,1206],{"__ignoreMap":603},[607,1183,1185],{"className":1184},[609],"id          codex\n",[607,1187,1189],{"className":1188},[609],"provider    codex\n",[607,1191,1193],{"className":1192},[609],"enabled     yes\n",[607,1195,1197],{"className":1196},[609],"executable  codex\n",[607,1199,1201],{"className":1200},[609],"defaults    effort=medium\n",[607,1203,1205],{"className":1204},[609],"used by     no library task\n",[607,1207,1209],{"className":1208},[609],"chains      codex-impl\n",[535,1211,1212,1215,1216,1218],{},[522,1213,1214],{},"show --resolved"," prints ",[522,1217,949],{}," on each task you moved.",[535,1220,1221,1224,1225,1228,1229,1231],{},[522,1222,1223],{},"kraft admin doctor"," has an ",[522,1226,1227],{},"agent: codex"," row once a chain selects the harness profile. It fails when the executable is not on ",[522,1230,540],{},", naming the chains that cannot run without it.",[510,1233,1234,1235,1238,1239,1243],{},"File a small item on the chain. ",[522,1236,1237],{},"kraft view show ID"," shows its token count, and no dollar figure when the harness reports none, once a session has run. ",[514,1240,1242],{"href":1241},"\u002Freference\u002Fharnesses\u002Fcost-reporting#harnesses-that-report-no-cost","Harnesses that report no cost"," says how the caps then count it.",[527,1245,1247],{"id":1246},"if-the-item-stops","If the item stops",[1249,1250,1252],"h3",{"id":1251},"the-harness-is-not-allowed","The harness is not allowed",[510,1254,1255,1256,1259,1260,1262,1263,699,1266,1269,1270,1273,1274,1276,1277,1279],{},"If ",[522,1257,1258],{},"allowed_harnesses"," is set, it must include the new harness profile. It can appear in ",[522,1261,310],{}," under ",[522,1264,1265],{},"defaults:",[522,1267,1268],{},"maxima:",", in a repo's ",[522,1271,1272],{},"policy:"," in ",[522,1275,292],{},", or in a chain, node or task ",[522,1278,1272],{},". Otherwise Kraft refuses the item when you file it:",[597,1281,1284],{"className":1282,"code":1283,"language":1115,"meta":603},[1113],"kraft: 422: policy.allowed_harnesses: implementation.main.implement: harness 'codex' is not in its allowed_harnesses ['claude']\n",[522,1285,1286],{"__ignoreMap":603},[607,1287,1283],{"className":1288},[609],[510,1290,1291,1292,1296,1297,568],{},"Add the harness profile to the list. Skip this if nothing in your ",[514,1293,1295],{"href":1294},"\u002Fconcepts\u002Fvocabulary#policy","policy"," sets ",[522,1298,1258],{},[1249,1300,1302],{"id":1301},"a-tool-list-blocks-the-launch","A tool list blocks the launch",[510,1304,1305,1306,699,1309,1312],{},"An ",[522,1307,1308],{},"allowed_tools",[522,1310,1311],{},"deny_tools"," list in the task's policy can stop the new harness from launching:",[532,1314,1315,1328,1344],{},[535,1316,1317,1318,699,1320,1322,1323,699,1325,1327],{},"Kraft refuses to launch a ",[522,1319,562],{},[522,1321,558],{}," task under any ",[522,1324,1308],{},[522,1326,1311],{}," list, because those CLIs cannot restrict tools.",[535,1329,1330,1331,1333,1334,1336,1337,1340,1341,1343],{},"Kraft refuses a ",[522,1332,594],{}," task whose ",[522,1335,1308],{}," leaves out ",[522,1338,1339],{},"WebSearch",", or whose ",[522,1342,1311],{}," names it: the permission hook never sees Codex's web search.",[535,1345,1330,1346,1333,1348,1336,1350,699,1353,1340,1355,1357],{},[522,1347,690],{},[522,1349,1308],{},[522,1351,1352],{},"WebFetch",[522,1354,1339],{},[522,1356,1311],{}," names either, for the same reason.",[510,1359,1360,1361,1365,1366,568],{},"The refusal happens at launch. The item stops and waits for you, and the stop reason names the harness and the missing tools. Add the tools to the list, or keep that task on Claude. See ",[514,1362,1364],{"href":1363},"\u002Freference\u002Fconfiguration\u002Fpolicy#policy-fields","Policy fields"," and, for each harness's refusals, the ",[514,1367,420],{"href":1368},"\u002Freference\u002Fpermissions#cursor",[527,1370,1372],{"id":1371},"move-escalation-turns-too","Move escalation turns too",[510,1374,1305,1375,1379,1380,1382,1383,1273,1386,595],{},[514,1376,1378],{"href":1377},"\u002Fconcepts\u002Fvocabulary#escalation-turn","escalation turn"," runs on ",[522,1381,590],{}," unless policy says otherwise. To move it too, set ",[522,1384,1385],{},"escalation_harness",[522,1387,310],{},[597,1389,1392],{"className":599,"code":1390,"filename":1391,"language":602,"meta":603,"style":603},"defaults:\n  escalation_harness: codex   # or `item`: the harness the item's last agent task ran on\n","config\u002Fpolicy.yaml",[522,1393,1394,1401],{"__ignoreMap":603},[607,1395,1396,1399],{"class":609,"line":610},[607,1397,1398],{"class":613},"defaults",[607,1400,618],{"class":617},[607,1402,1403,1406,1408,1410],{"class":609,"line":621},[607,1404,1405],{"class":613},"  escalation_harness",[607,1407,635],{"class":617},[607,1409,594],{"class":638},[607,1411,1413],{"class":1412},"sq92B","   # or `item`: the harness the item's last agent task ran on\n",[527,1415,1417],{"id":1416},"next-steps","Next steps",[532,1419,1420,1425,1430],{},[535,1421,1422,1424],{},[514,1423,404],{"href":405},": the model tiers a moved task selects.",[535,1426,1427,1429],{},[514,1428,412],{"href":413},": where a launch goes next, and which harness runs an escalation turn.",[535,1431,1432,1434],{},[514,1433,123],{"href":124},": add an agent CLI Kraft does not ship.",[1436,1437,1438],"style",{},"html pre.shiki code .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}",{"title":603,"searchDepth":621,"depth":621,"links":1440},[1441,1442,1443,1444,1445,1446,1447,1451,1452],{"id":529,"depth":621,"text":530},{"id":571,"depth":621,"text":572},{"id":710,"depth":621,"text":711},{"id":896,"depth":621,"text":897},{"id":1079,"depth":621,"text":1080},{"id":1123,"depth":621,"text":1124},{"id":1246,"depth":621,"text":1247,"children":1448},[1449,1450],{"id":1251,"depth":629,"text":1252},{"id":1301,"depth":629,"text":1302},{"id":1371,"depth":621,"text":1372},{"id":1416,"depth":621,"text":1417},"Run some or all of a chain's agent tasks on Codex, Cursor, OpenCode, Gemini, Antigravity or Amp instead of Claude Code, and what changes when you do.","md",null,{},true,{"title":119,"description":1453},"yHfFDa1BxNTFYIlHp4Gxo5_gvmIUuDnBBVrBVj5DBQs",[1461,1463],{"title":110,"path":111,"stem":112,"description":1462,"children":-1},"File a paused work item on a cron schedule or from a webhook, then check that it arrived.",{"title":123,"path":124,"stem":125,"description":1464,"children":-1},"Add an agent CLI to Kraft with a YAML file, and override a shipped one.",1791801240113]