[{"data":1,"prerenderedAt":1878},["ShallowReactive",2],{"navigation_docs":3,"-reference-harnesses":520,"-reference-harnesses-surround":1873},[4,28,51,191,222,485],{"title":5,"path":6,"stem":7,"children":8},"Get started","\u002Fget-started","1.get-started",[9,12,16,20,24],{"title":10,"path":6,"stem":11},"Overview","1.get-started\u002Findex",{"title":13,"path":14,"stem":15},"Why Kraft","\u002Fget-started\u002Fwhy-kraft","1.get-started\u002F0.why-kraft",{"title":17,"path":18,"stem":19},"Install","\u002Fget-started\u002Finstall","1.get-started\u002F1.install",{"title":21,"path":22,"stem":23},"Your first work item","\u002Fget-started\u002Ffirst-work-item","1.get-started\u002F2.first-work-item",{"title":25,"path":26,"stem":27},"FAQ","\u002Fget-started\u002Ffaq","1.get-started\u002F3.faq",{"title":29,"path":30,"stem":31,"children":32},"Concepts","\u002Fconcepts","2.concepts",[33,35,39,43,47],{"title":10,"path":30,"stem":34},"2.concepts\u002Findex",{"title":36,"path":37,"stem":38},"How a work item runs","\u002Fconcepts\u002Fhow-a-work-item-runs","2.concepts\u002F1.how-a-work-item-runs",{"title":40,"path":41,"stem":42},"Caps and budgets","\u002Fconcepts\u002Fcaps-and-budgets","2.concepts\u002F2.caps-and-budgets",{"title":44,"path":45,"stem":46},"Why a permission gate","\u002Fconcepts\u002Fpermission-gate","2.concepts\u002F3.permission-gate",{"title":48,"path":49,"stem":50},"Vocabulary","\u002Fconcepts\u002Fvocabulary","2.concepts\u002F4.vocabulary",{"title":52,"path":53,"stem":54,"children":55},"Guides","\u002Fguides","3.guides",[56,58,96,117,138,187],{"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,113],{"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},"Share chains with add-ons","\u002Fguides\u002Fcustomize\u002Fshare-chains-with-addons","3.guides\u002F2.customize\u002F4.share-chains-with-addons",{"title":118,"path":119,"stem":120,"children":121,"page":95},"Agents and harnesses","\u002Fguides\u002Fharnesses","3.guides\u002F3.harnesses",[122,126,130,134],{"title":123,"path":124,"stem":125},"Switch a task to another harness","\u002Fguides\u002Fharnesses\u002Fswitch-harness","3.guides\u002F3.harnesses\u002F1.switch-harness",{"title":127,"path":128,"stem":129},"Add or override a harness","\u002Fguides\u002Fharnesses\u002Fadding-a-harness","3.guides\u002F3.harnesses\u002F2.adding-a-harness",{"title":131,"path":132,"stem":133},"Build a worker Kit","\u002Fguides\u002Fharnesses\u002Fworker-kit","3.guides\u002F3.harnesses\u002F3.worker-kit",{"title":135,"path":136,"stem":137},"Give a worker its login","\u002Fguides\u002Fharnesses\u002Fgive-a-worker-its-login","3.guides\u002F3.harnesses\u002F4.give-a-worker-its-login",{"title":139,"path":140,"stem":141,"children":142,"page":95},"Run the server","\u002Fguides\u002Frun","3.guides\u002F4.run",[143,147,151,155,159,163,167,171,175,179,183],{"title":144,"path":145,"stem":146},"Remote access","\u002Fguides\u002Frun\u002Fremote-access","3.guides\u002F4.run\u002F01.remote-access",{"title":148,"path":149,"stem":150},"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":152,"path":153,"stem":154},"Restart Kraft without ending running agents","\u002Fguides\u002Frun\u002Frestart-kraft","3.guides\u002F4.run\u002F03.restart-kraft",{"title":156,"path":157,"stem":158},"Back up and restore the database","\u002Fguides\u002Frun\u002Fback-up-and-restore","3.guides\u002F4.run\u002F04.back-up-and-restore",{"title":160,"path":161,"stem":162},"Logs and disk space","\u002Fguides\u002Frun\u002Flogs-and-disk-space","3.guides\u002F4.run\u002F05.logs-and-disk-space",{"title":164,"path":165,"stem":166},"Run Kraft as a service","\u002Fguides\u002Frun\u002Frun-as-a-service","3.guides\u002F4.run\u002F06.run-as-a-service",{"title":168,"path":169,"stem":170},"Upgrade Kraft","\u002Fguides\u002Frun\u002Fupgrade-kraft","3.guides\u002F4.run\u002F07.upgrade-kraft",{"title":172,"path":173,"stem":174},"Upgrade your configuration","\u002Fguides\u002Frun\u002Fupgrade-your-configuration","3.guides\u002F4.run\u002F08.upgrade-your-configuration",{"title":176,"path":177,"stem":178},"Upgrade from 1.4","\u002Fguides\u002Frun\u002Fupgrade-from-1-4","3.guides\u002F4.run\u002F09.upgrade-from-1-4",{"title":180,"path":181,"stem":182},"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":184,"path":185,"stem":186},"Roll back to 1.4","\u002Fguides\u002Frun\u002Froll-back","3.guides\u002F4.run\u002F11.roll-back",{"title":188,"path":189,"stem":190},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F5.kraft-lite",{"title":192,"path":193,"stem":194,"children":195},"Troubleshooting","\u002Ftroubleshooting","4.troubleshooting",[196,198,202,206,210,214,218],{"title":10,"path":193,"stem":197},"4.troubleshooting\u002Findex",{"title":199,"path":200,"stem":201},"Why did my item stop?","\u002Ftroubleshooting\u002Fwhy-did-my-item-stop","4.troubleshooting\u002F1.why-did-my-item-stop",{"title":203,"path":204,"stem":205},"Stop reasons in detail","\u002Ftroubleshooting\u002Fstop-reasons-in-detail","4.troubleshooting\u002F2.stop-reasons-in-detail",{"title":207,"path":208,"stem":209},"Starting and reaching Kraft","\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft","4.troubleshooting\u002F3.starting-and-reaching-kraft",{"title":211,"path":212,"stem":213},"Doctor failures","\u002Ftroubleshooting\u002Fdoctor-failures","4.troubleshooting\u002F4.doctor-failures",{"title":215,"path":216,"stem":217},"Sandbox and Kit stops","\u002Ftroubleshooting\u002Fsandbox-and-kit-stops","4.troubleshooting\u002F5.sandbox-and-kit-stops",{"title":219,"path":220,"stem":221},"Add-on problems","\u002Ftroubleshooting\u002Faddon-problems","4.troubleshooting\u002F6.addon-problems",{"title":223,"path":224,"stem":225,"children":226},"Reference","\u002Freference","5.reference",[227,229,267,289,293,391,409,435,439,443,477,481],{"title":10,"path":224,"stem":228},"5.reference\u002Findex",{"title":230,"path":231,"stem":232,"children":233},"Web UI","\u002Freference\u002Fweb-ui","5.reference\u002F00.web-ui\u002Findex",[234,235,239,243,247,251,255,259,263],{"title":10,"path":231,"stem":232},{"title":236,"path":237,"stem":238},"Sidebar, search, and keyboard","\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard","5.reference\u002F00.web-ui\u002F0.sidebar-search-and-keyboard",{"title":240,"path":241,"stem":242},"The board","\u002Freference\u002Fweb-ui\u002Fboard","5.reference\u002F00.web-ui\u002F1.board",{"title":244,"path":245,"stem":246},"An item's page","\u002Freference\u002Fweb-ui\u002Fitem-page","5.reference\u002F00.web-ui\u002F2.item-page",{"title":248,"path":249,"stem":250},"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":252,"path":253,"stem":254},"Config before an item starts","\u002Freference\u002Fweb-ui\u002Fconfig-before-start","5.reference\u002F00.web-ui\u002F4.config-before-start",{"title":256,"path":257,"stem":258},"The review page","\u002Freference\u002Fweb-ui\u002Freview-page","5.reference\u002F00.web-ui\u002F5.review-page",{"title":260,"path":261,"stem":262},"Templates and Settings","\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings","5.reference\u002F00.web-ui\u002F6.templates-and-settings",{"title":264,"path":265,"stem":266},"Analytics","\u002Freference\u002Fweb-ui\u002Fanalytics","5.reference\u002F00.web-ui\u002F7.analytics",{"title":268,"path":269,"stem":270,"children":271},"CLI","\u002Freference\u002Fcli","5.reference\u002F01.cli\u002Findex",[272,273,277,281,285],{"title":10,"path":269,"stem":270},{"title":274,"path":275,"stem":276},"Item verbs","\u002Freference\u002Fcli\u002Fitem","5.reference\u002F01.cli\u002F2.item",{"title":278,"path":279,"stem":280},"View verbs","\u002Freference\u002Fcli\u002Fview","5.reference\u002F01.cli\u002F3.view",{"title":282,"path":283,"stem":284},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","5.reference\u002F01.cli\u002F4.repo",{"title":286,"path":287,"stem":288},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","5.reference\u002F01.cli\u002F5.admin",{"title":290,"path":291,"stem":292},"Work item statuses","\u002Freference\u002Fstatuses","5.reference\u002F02.statuses",{"title":294,"path":295,"stem":296,"children":297},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F03.configuration\u002Findex",[298,299,317,321,325,329,333,337,341,345,379,383,387],{"title":10,"path":295,"stem":296},{"title":300,"path":301,"stem":302,"children":303},"repos.yaml","\u002Freference\u002Fconfiguration\u002Frepos","5.reference\u002F03.configuration\u002F02.repos\u002Findex",[304,305,309,313],{"title":10,"path":301,"stem":302},{"title":306,"path":307,"stem":308},"How connect proposes commands","\u002Freference\u002Fconfiguration\u002Frepos\u002Fconnect-proposals","5.reference\u002F03.configuration\u002F02.repos\u002F1.connect-proposals",{"title":310,"path":311,"stem":312},"detectors.yaml","\u002Freference\u002Fconfiguration\u002Frepos\u002Fdetectors","5.reference\u002F03.configuration\u002F02.repos\u002F2.detectors",{"title":314,"path":315,"stem":316},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces",{"title":318,"path":319,"stem":320},"policy.yaml","\u002Freference\u002Fconfiguration\u002Fpolicy","5.reference\u002F03.configuration\u002F03.policy",{"title":322,"path":323,"stem":324},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","5.reference\u002F03.configuration\u002F04.library-and-chains",{"title":326,"path":327,"stem":328},"harnesses.yaml","\u002Freference\u002Fconfiguration\u002Fharnesses-file","5.reference\u002F03.configuration\u002F05.harnesses-file",{"title":330,"path":331,"stem":332},"access.yaml","\u002Freference\u002Fconfiguration\u002Faccess","5.reference\u002F03.configuration\u002F06.access",{"title":334,"path":335,"stem":336},"intake.yaml","\u002Freference\u002Fconfiguration\u002Fintake","5.reference\u002F03.configuration\u002F07.intake",{"title":338,"path":339,"stem":340},"notify.yaml","\u002Freference\u002Fconfiguration\u002Fnotify","5.reference\u002F03.configuration\u002F08.notify",{"title":342,"path":343,"stem":344},"theme.yaml","\u002Freference\u002Fconfiguration\u002Ftheme","5.reference\u002F03.configuration\u002F09.theme",{"title":346,"path":347,"stem":348,"children":349},"Sandboxed workers","\u002Freference\u002Fconfiguration\u002Fsandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002Findex",[350,351,355,359,363,367,371,375],{"title":10,"path":347,"stem":348},{"title":352,"path":353,"stem":354},"Resource limits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits","5.reference\u002F03.configuration\u002F10.sandbox\u002F1.resource-limits",{"title":356,"path":357,"stem":358},"Callbacks from a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks","5.reference\u002F03.configuration\u002F10.sandbox\u002F2.callbacks",{"title":360,"path":361,"stem":362},"Network policy","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy","5.reference\u002F03.configuration\u002F10.sandbox\u002F3.network-policy",{"title":364,"path":365,"stem":366},"Credentials","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials","5.reference\u002F03.configuration\u002F10.sandbox\u002F4.credentials",{"title":368,"path":369,"stem":370},"Kits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fkits","5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits",{"title":372,"path":373,"stem":374},"sandbox.yaml","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml","5.reference\u002F03.configuration\u002F10.sandbox\u002F6.sandbox-yaml",{"title":376,"path":377,"stem":378},"Git in a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002F7.git-in-a-sandbox",{"title":380,"path":381,"stem":382},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","5.reference\u002F03.configuration\u002F11.environment-variables",{"title":384,"path":385,"stem":386},"Add-ons and collections","\u002Freference\u002Fconfiguration\u002Faddons","5.reference\u002F03.configuration\u002F12.addons",{"title":388,"path":389,"stem":390},"Repo libraries","\u002Freference\u002Fconfiguration\u002Frepo-libraries","5.reference\u002F03.configuration\u002F13.repo-libraries",{"title":392,"path":393,"stem":394,"children":395},"Chain file keys","\u002Freference\u002Fchain-nodes","5.reference\u002F04.chain-nodes\u002Findex",[396,397,401,405],{"title":10,"path":393,"stem":394},{"title":398,"path":399,"stem":400},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","5.reference\u002F04.chain-nodes\u002F2.subprocess-tasks",{"title":402,"path":403,"stem":404},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","5.reference\u002F04.chain-nodes\u002F3.fix-loop",{"title":406,"path":407,"stem":408},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","5.reference\u002F04.chain-nodes\u002F4.result-file",{"title":410,"path":411,"stem":412,"children":413},"Agent harnesses","\u002Freference\u002Fharnesses","5.reference\u002F05.harnesses\u002Findex",[414,415,419,423,427,431],{"title":10,"path":411,"stem":412},{"title":416,"path":417,"stem":418},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","5.reference\u002F05.harnesses\u002F2.unattended-runs",{"title":420,"path":421,"stem":422},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","5.reference\u002F05.harnesses\u002F3.agent-profiles",{"title":424,"path":425,"stem":426},"Harness definition files","\u002Freference\u002Fharnesses\u002Fharness-files","5.reference\u002F05.harnesses\u002F4.harness-files",{"title":428,"path":429,"stem":430},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","5.reference\u002F05.harnesses\u002F5.fallback-and-escalation",{"title":432,"path":433,"stem":434},"Cost reporting","\u002Freference\u002Fharnesses\u002Fcost-reporting","5.reference\u002F05.harnesses\u002F6.cost-reporting",{"title":436,"path":437,"stem":438},"Permission gate","\u002Freference\u002Fpermissions","5.reference\u002F06.permissions",{"title":440,"path":441,"stem":442},"Inbound triggers","\u002Freference\u002Ftriggers","5.reference\u002F07.triggers",{"title":444,"path":445,"stem":446,"children":447},"HTTP API","\u002Freference\u002Fhttp-api","5.reference\u002F08.http-api\u002Findex",[448,449,453,457,461,465,469,473],{"title":10,"path":445,"stem":446},{"title":450,"path":451,"stem":452},"Filing, reading and changing work items","\u002Freference\u002Fhttp-api\u002Fwork-items","5.reference\u002F08.http-api\u002F2.work-items",{"title":454,"path":455,"stem":456},"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":458,"path":459,"stem":460},"The work item object","\u002Freference\u002Fhttp-api\u002Fwork-item-object","5.reference\u002F08.http-api\u002F4.work-item-object",{"title":462,"path":463,"stem":464},"Budget, events, diff and documents","\u002Freference\u002Fhttp-api\u002Fbudget-and-events","5.reference\u002F08.http-api\u002F5.budget-and-events",{"title":466,"path":467,"stem":468},"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":470,"path":471,"stem":472},"Drafts","\u002Freference\u002Fhttp-api\u002Fdrafts","5.reference\u002F08.http-api\u002F7.drafts",{"title":474,"path":475,"stem":476},"Ops for each draft area","\u002Freference\u002Fhttp-api\u002Fdraft-ops","5.reference\u002F08.http-api\u002F8.draft-ops",{"title":478,"path":479,"stem":480},"MCP tools","\u002Freference\u002Fmcp-tools","5.reference\u002F09.mcp-tools",{"title":482,"path":483,"stem":484},"Events","\u002Freference\u002Fevents","5.reference\u002F10.events",{"title":486,"path":487,"stem":488,"children":489},"Security and project","\u002Fproject","6.project",[490,492,496,500,504,508,512,516],{"title":10,"path":487,"stem":491},"6.project\u002Findex",{"title":493,"path":494,"stem":495},"Security","\u002Fproject\u002Fsecurity","6.project\u002F1.security",{"title":497,"path":498,"stem":499},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","6.project\u002F2.data-and-privacy",{"title":501,"path":502,"stem":503},"What's new in 2.0","\u002Fproject\u002Fwhats-new","6.project\u002F3.whats-new",{"title":505,"path":506,"stem":507},"Status and support","\u002Fproject\u002Fstatus-and-support","6.project\u002F4.status-and-support",{"title":509,"path":510,"stem":511},"Architecture","\u002Fproject\u002Farchitecture","6.project\u002F5.architecture",{"title":513,"path":514,"stem":515},"Source map","\u002Fproject\u002Fsource-map","6.project\u002F6.source-map",{"title":517,"path":518,"stem":519},"Contributing","\u002Fproject\u002Fcontributing","6.project\u002F7.contributing",{"id":521,"title":410,"body":522,"description":1866,"extension":1867,"links":1868,"meta":1869,"navigation":1870,"path":411,"seo":1871,"stem":412,"__hash__":1872},"docs\u002F5.reference\u002F05.harnesses\u002Findex.md",{"type":523,"value":524,"toc":1853},"minimark",[525,534,539,566,631,641,715,748,752,755,929,932,1043,1072,1076,1079,1085,1097,1102,1175,1179,1341,1345,1487,1491,1616,1619,1686,1690,1815,1819,1849],[526,527,528,529,533],"p",{},"A ",[530,531,532],"strong",{},"harness"," is one agent runtime, described as data: a fact about a CLI, not code. This page compares the seven Kraft ships.",[535,536,538],"h2",{"id":537},"how-a-task-picks-a-harness","How a task picks a harness",[526,540,541,542,546,547,554,555,561,562,565],{},"An ",[543,544,545],"code",{},"agent"," task in ",[548,549,551],"a",{"href":550},"\u002Freference\u002Fconfiguration\u002Flibrary-and-chains#libraryyaml-reusable-components",[543,552,553],{},"library.yaml"," names a ",[530,556,557],{},[548,558,560],{"href":559},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," in its ",[543,563,564],{},"harness:"," field:",[567,568,574],"pre",{"className":569,"code":570,"filename":571,"language":572,"meta":573,"style":573},"language-yaml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","spec_author: { kind: agent, harness: claude, prompt: \"...\", produces: spec }\n","config\u002Flibrary.yaml","yaml","",[543,575,576],{"__ignoreMap":573},[577,578,581,585,589,592,595,598,601,603,605,608,610,613,615,618,620,623,625,628],"span",{"class":579,"line":580},"line",1,[577,582,584],{"class":583},"sb7M8","spec_author",[577,586,588],{"class":587},"s7iLA",": { ",[577,590,591],{"class":583},"kind",[577,593,594],{"class":587},": ",[577,596,545],{"class":597},"semJd",[577,599,600],{"class":587},", ",[577,602,532],{"class":583},[577,604,594],{"class":587},[577,606,607],{"class":597},"claude",[577,609,600],{"class":587},[577,611,612],{"class":583},"prompt",[577,614,594],{"class":587},[577,616,617],{"class":597},"\"...\"",[577,619,600],{"class":587},[577,621,622],{"class":583},"produces",[577,624,594],{"class":587},[577,626,627],{"class":597},"spec",[577,629,630],{"class":587}," }\n",[526,632,633,634,636,637,640],{},"That name is a key in ",[543,635,326],{},". The entry's ",[543,638,639],{},"provider"," says which of the harnesses below the harness profile runs:",[567,642,645],{"className":569,"code":643,"filename":644,"language":572,"meta":573,"style":573},"harnesses:\n  claude:\n    provider: claude\n    enabled: true\n    executable: claude\n    defaults:\n      model: sonnet\n","config\u002Fharnesses.yaml",[543,646,647,655,663,674,686,696,704],{"__ignoreMap":573},[577,648,649,652],{"class":579,"line":580},[577,650,651],{"class":583},"harnesses",[577,653,654],{"class":587},":\n",[577,656,658,661],{"class":579,"line":657},2,[577,659,660],{"class":583},"  claude",[577,662,654],{"class":587},[577,664,666,669,671],{"class":579,"line":665},3,[577,667,668],{"class":583},"    provider",[577,670,594],{"class":587},[577,672,673],{"class":597},"claude\n",[577,675,677,680,682],{"class":579,"line":676},4,[577,678,679],{"class":583},"    enabled",[577,681,594],{"class":587},[577,683,685],{"class":684},"ssYy9","true\n",[577,687,689,692,694],{"class":579,"line":688},5,[577,690,691],{"class":583},"    executable",[577,693,594],{"class":587},[577,695,673],{"class":597},[577,697,699,702],{"class":579,"line":698},6,[577,700,701],{"class":583},"    defaults",[577,703,654],{"class":587},[577,705,707,710,712],{"class":579,"line":706},7,[577,708,709],{"class":583},"      model",[577,711,594],{"class":587},[577,713,714],{"class":597},"sonnet\n",[526,716,717,718,720,721,724,725,727,728,600,731,600,734,600,737,720,740,743,744,747],{},"Kraft ships two harness profiles, ",[543,719,607],{}," and ",[543,722,723],{},"codex",", and every agent task it ships names ",[543,726,607],{},". The other five harnesses, ",[543,729,730],{},"cursor",[543,732,733],{},"opencode",[543,735,736],{},"antigravity",[543,738,739],{},"gemini",[543,741,742],{},"amp",", are ready to use but need a harness profile of your own. ",[548,745,123],{"href":746},"\u002Fguides\u002Fharnesses\u002Fswitch-harness#_1-add-the-harness-profile"," adds one and moves a task onto it.",[535,749,751],{"id":750},"compare-the-harnesses","Compare the harnesses",[526,753,754],{},"In the Resume and Fallback columns, a tick means the harness declares the capability and a dash means it does not.",[756,757,758,786],"table",{},[759,760,761],"thead",{},[762,763,764,768,771,774,777,780,783],"tr",{},[765,766,767],"th",{},"Harness",[765,769,770],{},"Model, effort",[765,772,773],{},"Tool lists",[765,775,776],{},"Cost",[765,778,779],{},"Context",[765,781,782],{},"Resume",[765,784,785],{},"Fallback",[787,788,789,813,832,853,872,891,910],"tbody",{},[762,790,791,796,799,802,805,808,811],{},[792,793,794],"td",{},[543,795,607],{},[792,797,798],{},"both",[792,800,801],{},"Gate",[792,803,804],{},"Yes",[792,806,807],{},"System prompt",[792,809,810],{},"✓",[792,812,810],{},[762,814,815,819,821,823,826,828,830],{},[792,816,817],{},[543,818,723],{},[792,820,798],{},[792,822,801],{},[792,824,825],{},"Tokens",[792,827,807],{},[792,829,810],{},[792,831,810],{},[762,833,834,838,841,843,845,848,850],{},[792,835,836],{},[543,837,730],{},[792,839,840],{},"model",[792,842,801],{},[792,844,825],{},[792,846,847],{},"Prompt",[792,849,810],{},[792,851,852],{},"–",[762,854,855,859,861,864,866,868,870],{},[792,856,857],{},[543,858,733],{},[792,860,840],{},[792,862,863],{},"Rules",[792,865,804],{},[792,867,847],{},[792,869,810],{},[792,871,810],{},[762,873,874,878,880,883,885,887,889],{},[792,875,876],{},[543,877,736],{},[792,879,798],{},[792,881,882],{},"Refused",[792,884,825],{},[792,886,847],{},[792,888,810],{},[792,890,810],{},[762,892,893,897,899,901,904,906,908],{},[792,894,895],{},[543,896,739],{},[792,898,840],{},[792,900,882],{},[792,902,903],{},"Agent-written",[792,905,847],{},[792,907,852],{},[792,909,852],{},[762,911,912,916,919,921,923,925,927],{},[792,913,914],{},[543,915,742],{},[792,917,918],{},"effort",[792,920,863],{},[792,922,825],{},[792,924,847],{},[792,926,810],{},[792,928,852],{},[526,930,931],{},"What the columns mean:",[933,934,935,965,997,1012,1023,1032],"ul",{},[936,937,938,940,941,720,943,945,946,948,949,951,952,954,955,600,957,720,959,961,962,964],"li",{},[530,939,770],{},": which of ",[543,942,840],{},[543,944,918],{}," the harness takes. ",[543,947,742],{}," takes no ",[543,950,840],{},", because Amp picks it, and its ",[543,953,918],{}," is Amp's mode. ",[543,956,730],{},[543,958,733],{},[543,960,739],{}," take no ",[543,963,918],{},".",[936,966,967,969,970,720,973,976,977,981,982,984,985,988,989,991,992,994,995,964],{},[530,968,773],{},": how Kraft enforces ",[543,971,972],{},"deny_tools",[543,974,975],{},"allowed_tools"," on an unattended ",[548,978,980],{"href":979},"\u002Fconcepts\u002Fvocabulary#worker","worker",". ",[530,983,801],{},": the ",[548,986,987],{"href":437},"permission gate"," answers each call. ",[530,990,863],{},": the CLI enforces rules Kraft wrote for the launch. ",[530,993,882],{},": a task with a tool list does not launch. See ",[548,996,416],{"href":417},[936,998,999,594,1001,1003,1004,1006,1007,1009,1010,964],{},[530,1000,776],{},[530,1002,804],{}," means the harness reports a dollar cost. ",[530,1005,825],{}," means it reports tokens only, and Kraft estimates the cost. ",[530,1008,903],{}," means the agent writes its own counts into the result file. See ",[548,1011,432],{"href":433},[936,1013,1014,1016,1017,1019,1020,1022],{},[530,1015,779],{},": how Kraft passes its context to the agent. ",[530,1018,807],{}," is out of band. ",[530,1021,847],{}," is in band, folded into the task's prompt.",[936,1024,1025,1027,1028,1031],{},[530,1026,782],{},": the harness declares ",[543,1029,1030],{},"resume",", so Kraft can continue an earlier session by id.",[936,1033,1034,1036,1037,964],{},[530,1035,785],{},": a rate limit on this harness can trigger a switch to the next entry of a ",[548,1038,1039,1042],{"href":429},[543,1040,1041],{},"fallback:"," list",[526,1044,1045,1046,1048,1049,600,1052,600,1055,720,1058,1061,1062,1048,1064,1067,1068,1071],{},"Only ",[543,1047,607],{}," declares ",[543,1050,1051],{},"restrict_tools",[543,1053,1054],{},"approval_channel",[543,1056,1057],{},"autocompact",[543,1059,1060],{},"mcp_config",", and only ",[543,1063,723],{},[543,1065,1066],{},"writable_dirs",". A task or harness profile that sets an option whose capability its harness lacks is rejected at load. ",[548,1069,424],{"href":1070},"\u002Freference\u002Fharnesses\u002Fharness-files#capabilities"," lists every capability.",[535,1073,1075],{"id":1074},"the-harnesses-in-detail","The harnesses in detail",[526,1077,1078],{},"Each table starts with the command Kraft runs and the variable that carries an API key to a worker, then lists what the comparison leaves out for that harness.",[526,1080,1081,1082,1084],{},"A worker can use the CLI's own stored login instead where it has one; ",[548,1083,135],{"href":136}," has each login.",[526,1086,1087,1089,1090,1092,1093,1096],{},[543,1088,607],{}," has no table: it runs ",[543,1091,607],{},", takes its API key in ",[543,1094,1095],{},"ANTHROPIC_API_KEY",", and the columns above say the rest.",[1098,1099,1101],"h3",{"id":1100},"codex-details","Codex details",[756,1103,1104,1114],{},[759,1105,1106],{},[762,1107,1108,1111],{},[765,1109,1110],{},"Topic",[765,1112,1113],{},"What to know",[787,1115,1116,1126,1136,1148,1163],{},[762,1117,1118,1121],{},[792,1119,1120],{},"Command",[792,1122,1123,964],{},[543,1124,1125],{},"codex exec",[762,1127,1128,1131],{},[792,1129,1130],{},"API key",[792,1132,1133,964],{},[543,1134,1135],{},"CODEX_API_KEY",[762,1137,1138,1141],{},[792,1139,1140],{},"Config keys",[792,1142,1143,1144,1147],{},"Its context, effort, permission mode and writable-roots options are ",[543,1145,1146],{},"-c"," config keys.",[762,1149,1150,1152],{},[792,1151,773],{},[792,1153,1154,1155,1158,1159,964],{},"Enforced through a ",[543,1156,1157],{},"PreToolUse"," hook. See ",[548,1160,1162],{"href":1161},"\u002Freference\u002Fpermissions#codex","Codex",[762,1164,1165,1168],{},[792,1166,1167],{},"Read from its log",[792,1169,1170,1171,1174],{},"Tokens, the thread id and a usage-limit stop, off its ",[543,1172,1173],{},"--json"," log. The log gives no reset time for a limit.",[1098,1176,1178],{"id":1177},"cursor-details","Cursor details",[756,1180,1181,1189],{},[759,1182,1183],{},[762,1184,1185,1187],{},[765,1186,1110],{},[765,1188,1113],{},[787,1190,1191,1216,1225,1239,1253,1271,1291,1307,1324],{},[762,1192,1193,1195],{},[792,1194,1120],{},[792,1196,1197,981,1200,1203,1204,1207,1208,1212,1213,964],{},[543,1198,1199],{},"agent -p --trust",[543,1201,1202],{},"-p"," is print mode, and ",[543,1205,1206],{},"--trust"," skips the workspace-trust prompt that every new ",[548,1209,1211],{"href":1210},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," would raise. The prompt follows ",[543,1214,1215],{},"--",[762,1217,1218,1220],{},[792,1219,1130],{},[792,1221,1222,964],{},[543,1223,1224],{},"CURSOR_API_KEY",[762,1226,1227,1230],{},[792,1228,1229],{},"Effort",[792,1231,1232,1233,1235,1236,964],{},"No ",[543,1234,918],{},". A model id can carry one, such as ",[543,1237,1238],{},"'name[effort=high]'",[762,1240,1241,1243],{},[792,1242,773],{},[792,1244,528,1245,1248,1249,964],{},[543,1246,1247],{},"preToolUse"," hook Kraft installs in the worktree. See ",[548,1250,1252],{"href":1251},"\u002Freference\u002Fpermissions#cursor","Cursor",[762,1254,1255,1257],{},[792,1256,1167],{},[792,1258,1259,1260,1262,1263,1266,1267,1270],{},"Tokens and the chat id ",[543,1261,1030],{}," takes, off its ",[543,1264,1265],{},"stream-json"," log. Tokens come off the closing ",[543,1268,1269],{},"result"," line, one per run: uncached input, output, and cache reads and writes.",[762,1272,1273,1276],{},[792,1274,1275],{},"Config directory",[792,1277,1278,1279,1282,1283,1286,1287,1290],{},"Every launch sets ",[543,1280,1281],{},"CURSOR_CONFIG_DIR"," to ",[543,1284,1285],{},"$KRAFT_HOME\u002Frun\u002Fharness-config\u002Fcursor\u002F",", a directory Kraft owns. Your own ",[543,1288,1289],{},"~\u002F.cursor"," is never read or changed.",[762,1292,1293,1296],{},[792,1294,1295],{},"Commit attribution",[792,1297,1298,1299,1302,1303,1306],{},"Before each launch Kraft writes ",[543,1300,1301],{},"cli-config.json"," there with commit attribution off, because with it on Cursor adds a ",[543,1304,1305],{},"Co-authored-by: Cursor"," trailer to every commit and the classifier refused those commits. The file adds no permission rule.",[762,1308,1309,1312],{},[792,1310,1311],{},"Shared directory",[792,1313,1314,1315,1318,1319,1323],{},"All launches share the directory, not one per launch, because ",[543,1316,1317],{},"--resume"," has to find the chat an earlier launch wrote. A ",[548,1320,1322],{"href":1321},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxed"," item gets one of its own, inside its sandbox home.",[762,1325,1326,1329],{},[792,1327,1328],{},"Sign-in",[792,1330,1331,1332,1334,1335,1337,1338,964],{},"The login lives in the OS keychain, not the config directory. A ",[548,1333,1322],{"href":347}," worker has no keychain, so it needs ",[543,1336,1224],{},", named in the repo's ",[543,1339,1340],{},"env_passthrough",[1098,1342,1344],{"id":1343},"opencode-details","OpenCode details",[756,1346,1347,1355],{},[759,1348,1349],{},[762,1350,1351,1353],{},[765,1352,1110],{},[765,1354,1113],{},[787,1356,1357,1369,1376,1394,1410,1424,1438,1453,1464,1476],{},[762,1358,1359,1361],{},[792,1360,1120],{},[792,1362,1363,1366,1367,964],{},[543,1364,1365],{},"opencode run",". The prompt follows ",[543,1368,1215],{},[762,1370,1371,1373],{},[792,1372,1130],{},[792,1374,1375],{},"The provider's own key.",[762,1377,1378,1381],{},[792,1379,1380],{},"Needs",[792,1382,1383,1384,1387,1388,964],{},"OpenCode 2.0.0 or newer, not npm's 1.x ",[543,1385,1386],{},"opencode-ai",". Kraft refuses an older one at launch. See ",[548,1389,1391],{"href":1390},"\u002Freference\u002Fharnesses\u002Fharness-files#min_version",[543,1392,1393],{},"min_version",[762,1395,1396,1399],{},[792,1397,1398],{},"Launch",[792,1400,1401,1402,1405,1406,1409],{},"Every launch passes ",[543,1403,1404],{},"--auto",", since ",[543,1407,1408],{},"run"," otherwise rejects every permission request.",[762,1411,1412,1415],{},[792,1413,1414],{},"Model",[792,1416,1417,1419,1420,1423],{},[543,1418,840],{}," is ",[543,1421,1422],{},"provider\u002Fmodel"," for any provider OpenCode knows.",[762,1425,1426,1428],{},[792,1427,1229],{},[792,1429,1430,1431,1433,1434,1437],{},"There is no ",[543,1432,918],{},". Name a variant in the model id (",[543,1435,1436],{},"openai\u002Fgpt-5.5#high",").",[762,1439,1440,1442],{},[792,1441,773],{},[792,1443,1444,1445,1448,1449,964],{},"Written into the launch's own OpenCode config, with ",[543,1446,1447],{},"--standalone",", when the task's policy sets either. See ",[548,1450,1452],{"href":1451},"\u002Freference\u002Fpermissions#opencode-and-amp-rules-written-at-launch","OpenCode and Amp",[762,1454,1455,1457],{},[792,1456,1167],{},[792,1458,1459,1460,1463],{},"Tokens, cost, the session id and a rate-limit stop, off its ",[543,1461,1462],{},"--format json"," log.",[762,1465,1466,1469],{},[792,1467,1468],{},"The last step's usage",[792,1470,1471,1472,1475],{},"That log leaves out the last step's usage, so Kraft reads the session's totals from ",[543,1473,1474],{},"opencode session export \u003Csession id>"," when the run ends. It falls back to the log's steps if that fails.",[762,1477,1478,1481],{},[792,1479,1480],{},"Sub-agents",[792,1482,528,1483,1486],{},[543,1484,1485],{},"task"," sub-agent's tokens are not in the log.",[1098,1488,1490],{"id":1489},"antigravity-details","Antigravity details",[756,1492,1493,1501],{},[759,1494,1495],{},[762,1496,1497,1499],{},[765,1498,1110],{},[765,1500,1113],{},[787,1502,1503,1514,1530,1545,1559,1574,1592,1604],{},[762,1504,1505,1507],{},[792,1506,1120],{},[792,1508,1509,1366,1512,964],{},[543,1510,1511],{},"agy",[543,1513,1202],{},[762,1515,1516,1518],{},[792,1517,1130],{},[792,1519,1520,1521,1523,1524,1527,1528,964],{},"None: sign-in with ",[543,1522,1511],{},". A ",[543,1525,1526],{},"GEMINI_API_KEY"," route exists and is untested: see ",[548,1529,135],{"href":136},[762,1531,1532,1535],{},[792,1533,1534],{},"Accounts",[792,1536,1537,1538,1540,1541,964],{},"Google's Antigravity CLI, for an individual Google account. ",[543,1539,739],{}," serves a Gemini API key or Gemini Code Assist: see ",[548,1542,1544],{"href":1543},"#gemini-details","Gemini details",[762,1546,1547,1550],{},[792,1548,1549],{},"Control",[792,1551,1552,1553,1555,1556,964],{},"Kraft has no per-action control over an ",[543,1554,1511],{}," worker. See ",[548,1557,416],{"href":1558},"\u002Freference\u002Fharnesses\u002Funattended-runs#notes-by-harness",[762,1560,1561,1563],{},[792,1562,1229],{},[792,1564,1565,1419,1567,1570,1571,1573],{},[543,1566,918],{},[543,1568,1569],{},"--effort low|medium|high|max",", checked by ",[543,1572,1511],{}," against the model.",[762,1575,1576,1578],{},[792,1577,1414],{},[792,1579,1580,1581,1584,1585,1587,1588,1591],{},"Name the base model (",[543,1582,1583],{},"gemini-3.8-flash",") and set ",[543,1586,918],{},", not a slug with the effort in it (",[543,1589,1590],{},"gemini-3.8-flash-low","), or Kraft cannot price the session.",[762,1593,1594,1596],{},[792,1595,1167],{},[792,1597,1598,1599,1601,1602,1463],{},"Tokens, the conversation id ",[543,1600,1030],{}," takes and a quota stop, off its ",[543,1603,1265],{},[762,1605,1606,1608],{},[792,1607,1380],{},[792,1609,1610,1611,1613,1614,964],{},"A prior interactive sign-in (",[543,1612,1511],{}," once) on the machine, or a Gemini API key. See ",[548,1615,135],{"href":136},[1098,1617,1544],{"id":1618},"gemini-details",[756,1620,1621,1629],{},[759,1622,1623],{},[762,1624,1625,1627],{},[765,1626,1110],{},[765,1628,1113],{},[787,1630,1631,1650,1658,1670],{},[762,1632,1633,1635],{},[792,1634,1120],{},[792,1636,1637,1366,1640,1642,1643,1646,1647,1649],{},[543,1638,1639],{},"gemini --skip-trust",[543,1641,1202],{},", and ",[543,1644,1645],{},"--skip-trust"," trusts the worktree for the session, since a headless ",[543,1648,739],{}," outside a trusted folder refuses to start.",[762,1651,1652,1654],{},[792,1653,1130],{},[792,1655,1656,964],{},[543,1657,1526],{},[762,1659,1660,1662],{},[792,1661,1534],{},[792,1663,1664,1665,1667,1668,964],{},"Gemini CLI stopped serving free, Google AI Pro and Ultra accounts on 2026-06-18. ",[543,1666,739],{}," works with a Gemini API key or Gemini Code Assist. For Gemini models on an individual Google account, use ",[543,1669,736],{},[762,1671,1672,1674],{},[792,1673,782],{},[792,1675,1232,1676,1678,1679,1681,1682,1685],{},[543,1677,1030],{}," at all. Gemini's ",[543,1680,1317],{}," takes an index or ",[543,1683,1684],{},"\"latest\"",", not a session id, so the capability is not declared.",[1098,1687,1689],{"id":1688},"amp-details","Amp details",[756,1691,1692,1700],{},[759,1693,1694],{},[762,1695,1696,1698],{},[765,1697,1110],{},[765,1699,1113],{},[787,1701,1702,1714,1723,1755,1768,1779,1795,1806],{},[762,1703,1704,1706],{},[792,1705,1120],{},[792,1707,1708,1366,1711,964],{},[543,1709,1710],{},"amp --no-archive-after-execute",[543,1712,1713],{},"-x",[762,1715,1716,1718],{},[792,1717,1130],{},[792,1719,1720,964],{},[543,1721,1722],{},"AMP_API_KEY",[762,1724,1725,1728],{},[792,1726,1727],{},"Model and effort",[792,1729,1232,1730,1732,1733,1735,1736,1739,1740,1744,1745,1747,1748,1750,1751,1754],{},[543,1731,840],{},": Amp picks it. ",[543,1734,918],{}," is Amp's mode (",[543,1737,1738],{},"-m low|medium|high|ultra","). An ",[548,1741,1743],{"href":1742},"\u002Fconcepts\u002Fvocabulary#agent-profile","agent profile"," cannot select ",[543,1746,742],{},", because an agent profile needs a model for the provider. A task on ",[543,1749,742],{}," sets ",[543,1752,1753],{},"effort:"," itself.",[762,1756,1757,1759],{},[792,1758,773],{},[792,1760,1761,1762,1765,1766,964],{},"A settings file of the launch's own (",[543,1763,1764],{},"--settings-file","), when the task's policy sets either. See ",[548,1767,1452],{"href":1451},[762,1769,1770,1772],{},[792,1771,1398],{},[792,1773,1774,1775,1778],{},"Both command lines pass ",[543,1776,1777],{},"--no-archive-after-execute",", because an archived thread cannot be resumed.",[762,1780,1781,1783],{},[792,1782,1167],{},[792,1784,1785,1786,1262,1788,1791,1792,964],{},"Tokens and the thread id ",[543,1787,1030],{},[543,1789,1790],{},"--stream-json"," log. The token counts are the thread's own, message by message, and match ",[543,1793,1794],{},"amp threads export",[762,1796,1797,1799],{},[792,1798,776],{},[792,1800,1801,1802,1805],{},"Amp's bill (",[543,1803,1804],{},"amp threads usage",") can count a few requests that are not in the thread. It is the only place Amp reports cost, so Kraft records none.",[762,1807,1808,1810],{},[792,1809,1380],{},[792,1811,1812,1813,964],{},"Credentials a headless process can use. See ",[548,1814,135],{"href":136},[535,1816,1818],{"id":1817},"in-this-section","In this section",[933,1820,1821,1826,1834,1839,1844],{},[936,1822,1823,1825],{},[548,1824,416],{"href":417},": the mode each CLI runs in when nobody can answer a prompt.",[936,1827,1828,1830,1831,964],{},[548,1829,420],{"href":421},": named model tiers a task selects with ",[543,1832,1833],{},"profile:",[936,1835,1836,1838],{},[548,1837,424],{"href":425},": the YAML file that describes one harness, and every capability it can declare.",[936,1840,1841,1843],{},[548,1842,428],{"href":429},": where a launch goes next, and which harness runs an escalation turn.",[936,1845,1846,1848],{},[548,1847,432],{"href":433},": how Kraft estimates the cost of a harness that reports tokens but no dollar figure.",[1850,1851,1852],"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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}",{"title":573,"searchDepth":657,"depth":657,"links":1854},[1855,1856,1857,1865],{"id":537,"depth":657,"text":538},{"id":750,"depth":657,"text":751},{"id":1074,"depth":657,"text":1075,"children":1858},[1859,1860,1861,1862,1863,1864],{"id":1100,"depth":665,"text":1101},{"id":1177,"depth":665,"text":1178},{"id":1343,"depth":665,"text":1344},{"id":1489,"depth":665,"text":1490},{"id":1618,"depth":665,"text":1544},{"id":1688,"depth":665,"text":1689},{"id":1817,"depth":657,"text":1818},"Which agent CLIs Kraft runs, what each supports, and how a task picks one.","md",null,{},{"title":10},{"title":410,"description":1866},"okW4ourwUlR227ATspksOnG3NAkfVeH8FobPAwsY2l0",[1874,1876],{"title":406,"path":407,"stem":408,"description":1875,"children":-1},"The JSON file a task writes at $KRAFT_RESULT_PATH, and every field Kraft reads from it.",{"title":416,"path":417,"stem":418,"description":1877,"children":-1},"The permission mode each harness runs in when no one can answer a prompt, and where its tool calls go.",1791801176353]