[{"data":1,"prerenderedAt":1862},["ShallowReactive",2],{"navigation_docs":3,"-reference-harnesses":504,"-reference-harnesses-surround":1857},[4,28,51,187,214,469],{"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,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},"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},"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},"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},"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},"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},"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},"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},"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},"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},"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},"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":394,"body":506,"description":1850,"extension":1851,"links":1852,"meta":1853,"navigation":1854,"path":395,"seo":1855,"stem":396,"__hash__":1856},"docs\u002F5.reference\u002F05.harnesses\u002Findex.md",{"type":507,"value":508,"toc":1837},"minimark",[509,518,523,550,615,625,699,732,736,739,913,916,1027,1056,1060,1063,1069,1081,1086,1159,1163,1325,1329,1471,1475,1600,1603,1670,1674,1799,1803,1833],[510,511,512,513,517],"p",{},"A ",[514,515,516],"strong",{},"harness"," is one agent runtime, described as data: a fact about a CLI, not code. This page compares the seven Kraft ships.",[519,520,522],"h2",{"id":521},"how-a-task-picks-a-harness","How a task picks a harness",[510,524,525,526,530,531,538,539,545,546,549],{},"An ",[527,528,529],"code",{},"agent"," task in ",[532,533,535],"a",{"href":534},"\u002Freference\u002Fconfiguration\u002Flibrary-and-chains#libraryyaml-reusable-components",[527,536,537],{},"library.yaml"," names a ",[514,540,541],{},[532,542,544],{"href":543},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," in its ",[527,547,548],{},"harness:"," field:",[551,552,558],"pre",{"className":553,"code":554,"filename":555,"language":556,"meta":557,"style":557},"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","",[527,559,560],{"__ignoreMap":557},[561,562,565,569,573,576,579,582,585,587,589,592,594,597,599,602,604,607,609,612],"span",{"class":563,"line":564},"line",1,[561,566,568],{"class":567},"sb7M8","spec_author",[561,570,572],{"class":571},"s7iLA",": { ",[561,574,575],{"class":567},"kind",[561,577,578],{"class":571},": ",[561,580,529],{"class":581},"semJd",[561,583,584],{"class":571},", ",[561,586,516],{"class":567},[561,588,578],{"class":571},[561,590,591],{"class":581},"claude",[561,593,584],{"class":571},[561,595,596],{"class":567},"prompt",[561,598,578],{"class":571},[561,600,601],{"class":581},"\"...\"",[561,603,584],{"class":571},[561,605,606],{"class":567},"produces",[561,608,578],{"class":571},[561,610,611],{"class":581},"spec",[561,613,614],{"class":571}," }\n",[510,616,617,618,620,621,624],{},"That name is a key in ",[527,619,318],{},". The entry's ",[527,622,623],{},"provider"," says which of the harnesses below the harness profile runs:",[551,626,629],{"className":553,"code":627,"filename":628,"language":556,"meta":557,"style":557},"harnesses:\n  claude:\n    provider: claude\n    enabled: true\n    executable: claude\n    defaults:\n      model: sonnet\n","config\u002Fharnesses.yaml",[527,630,631,639,647,658,670,680,688],{"__ignoreMap":557},[561,632,633,636],{"class":563,"line":564},[561,634,635],{"class":567},"harnesses",[561,637,638],{"class":571},":\n",[561,640,642,645],{"class":563,"line":641},2,[561,643,644],{"class":567},"  claude",[561,646,638],{"class":571},[561,648,650,653,655],{"class":563,"line":649},3,[561,651,652],{"class":567},"    provider",[561,654,578],{"class":571},[561,656,657],{"class":581},"claude\n",[561,659,661,664,666],{"class":563,"line":660},4,[561,662,663],{"class":567},"    enabled",[561,665,578],{"class":571},[561,667,669],{"class":668},"ssYy9","true\n",[561,671,673,676,678],{"class":563,"line":672},5,[561,674,675],{"class":567},"    executable",[561,677,578],{"class":571},[561,679,657],{"class":581},[561,681,683,686],{"class":563,"line":682},6,[561,684,685],{"class":567},"    defaults",[561,687,638],{"class":571},[561,689,691,694,696],{"class":563,"line":690},7,[561,692,693],{"class":567},"      model",[561,695,578],{"class":571},[561,697,698],{"class":581},"sonnet\n",[510,700,701,702,704,705,708,709,711,712,584,715,584,718,584,721,704,724,727,728,731],{},"Kraft ships two harness profiles, ",[527,703,591],{}," and ",[527,706,707],{},"codex",", and every agent task it ships names ",[527,710,591],{},". The other five harnesses, ",[527,713,714],{},"cursor",[527,716,717],{},"opencode",[527,719,720],{},"antigravity",[527,722,723],{},"gemini",[527,725,726],{},"amp",", are ready to use but need a harness profile of your own. ",[532,729,119],{"href":730},"\u002Fguides\u002Fharnesses\u002Fswitch-harness#_1-add-the-harness-profile"," adds one and moves a task onto it.",[519,733,735],{"id":734},"compare-the-harnesses","Compare the harnesses",[510,737,738],{},"In the Resume and Fallback columns, a tick means the harness declares the capability and a dash means it does not.",[740,741,742,770],"table",{},[743,744,745],"thead",{},[746,747,748,752,755,758,761,764,767],"tr",{},[749,750,751],"th",{},"Harness",[749,753,754],{},"Model, effort",[749,756,757],{},"Tool lists",[749,759,760],{},"Cost",[749,762,763],{},"Context",[749,765,766],{},"Resume",[749,768,769],{},"Fallback",[771,772,773,797,816,837,856,875,894],"tbody",{},[746,774,775,780,783,786,789,792,795],{},[776,777,778],"td",{},[527,779,591],{},[776,781,782],{},"both",[776,784,785],{},"Gate",[776,787,788],{},"Yes",[776,790,791],{},"System prompt",[776,793,794],{},"✓",[776,796,794],{},[746,798,799,803,805,807,810,812,814],{},[776,800,801],{},[527,802,707],{},[776,804,782],{},[776,806,785],{},[776,808,809],{},"Tokens",[776,811,791],{},[776,813,794],{},[776,815,794],{},[746,817,818,822,825,827,829,832,834],{},[776,819,820],{},[527,821,714],{},[776,823,824],{},"model",[776,826,785],{},[776,828,809],{},[776,830,831],{},"Prompt",[776,833,794],{},[776,835,836],{},"–",[746,838,839,843,845,848,850,852,854],{},[776,840,841],{},[527,842,717],{},[776,844,824],{},[776,846,847],{},"Rules",[776,849,788],{},[776,851,831],{},[776,853,794],{},[776,855,794],{},[746,857,858,862,864,867,869,871,873],{},[776,859,860],{},[527,861,720],{},[776,863,782],{},[776,865,866],{},"Refused",[776,868,809],{},[776,870,831],{},[776,872,794],{},[776,874,794],{},[746,876,877,881,883,885,888,890,892],{},[776,878,879],{},[527,880,723],{},[776,882,824],{},[776,884,866],{},[776,886,887],{},"Agent-written",[776,889,831],{},[776,891,836],{},[776,893,836],{},[746,895,896,900,903,905,907,909,911],{},[776,897,898],{},[527,899,726],{},[776,901,902],{},"effort",[776,904,847],{},[776,906,809],{},[776,908,831],{},[776,910,794],{},[776,912,836],{},[510,914,915],{},"What the columns mean:",[917,918,919,949,981,996,1007,1016],"ul",{},[920,921,922,924,925,704,927,929,930,932,933,935,936,938,939,584,941,704,943,945,946,948],"li",{},[514,923,754],{},": which of ",[527,926,824],{},[527,928,902],{}," the harness takes. ",[527,931,726],{}," takes no ",[527,934,824],{},", because Amp picks it, and its ",[527,937,902],{}," is Amp's mode. ",[527,940,714],{},[527,942,717],{},[527,944,723],{}," take no ",[527,947,902],{},".",[920,950,951,953,954,704,957,960,961,965,966,968,969,972,973,975,976,978,979,948],{},[514,952,757],{},": how Kraft enforces ",[527,955,956],{},"deny_tools",[527,958,959],{},"allowed_tools"," on an unattended ",[532,962,964],{"href":963},"\u002Fconcepts\u002Fvocabulary#worker","worker",". ",[514,967,785],{},": the ",[532,970,971],{"href":421},"permission gate"," answers each call. ",[514,974,847],{},": the CLI enforces rules Kraft wrote for the launch. ",[514,977,866],{},": a task with a tool list does not launch. See ",[532,980,400],{"href":401},[920,982,983,578,985,987,988,990,991,993,994,948],{},[514,984,760],{},[514,986,788],{}," means the harness reports a dollar cost. ",[514,989,809],{}," means it reports tokens only, and Kraft estimates the cost. ",[514,992,887],{}," means the agent writes its own counts into the result file. See ",[532,995,416],{"href":417},[920,997,998,1000,1001,1003,1004,1006],{},[514,999,763],{},": how Kraft passes its context to the agent. ",[514,1002,791],{}," is out of band. ",[514,1005,831],{}," is in band, folded into the task's prompt.",[920,1008,1009,1011,1012,1015],{},[514,1010,766],{},": the harness declares ",[527,1013,1014],{},"resume",", so Kraft can continue an earlier session by id.",[920,1017,1018,1020,1021,948],{},[514,1019,769],{},": a rate limit on this harness can trigger a switch to the next entry of a ",[532,1022,1023,1026],{"href":413},[527,1024,1025],{},"fallback:"," list",[510,1028,1029,1030,1032,1033,584,1036,584,1039,704,1042,1045,1046,1032,1048,1051,1052,1055],{},"Only ",[527,1031,591],{}," declares ",[527,1034,1035],{},"restrict_tools",[527,1037,1038],{},"approval_channel",[527,1040,1041],{},"autocompact",[527,1043,1044],{},"mcp_config",", and only ",[527,1047,707],{},[527,1049,1050],{},"writable_dirs",". A task or harness profile that sets an option whose capability its harness lacks is rejected at load. ",[532,1053,408],{"href":1054},"\u002Freference\u002Fharnesses\u002Fharness-files#capabilities"," lists every capability.",[519,1057,1059],{"id":1058},"the-harnesses-in-detail","The harnesses in detail",[510,1061,1062],{},"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.",[510,1064,1065,1066,1068],{},"A worker can use the CLI's own stored login instead where it has one; ",[532,1067,131],{"href":132}," has each login.",[510,1070,1071,1073,1074,1076,1077,1080],{},[527,1072,591],{}," has no table: it runs ",[527,1075,591],{},", takes its API key in ",[527,1078,1079],{},"ANTHROPIC_API_KEY",", and the columns above say the rest.",[1082,1083,1085],"h3",{"id":1084},"codex-details","Codex details",[740,1087,1088,1098],{},[743,1089,1090],{},[746,1091,1092,1095],{},[749,1093,1094],{},"Topic",[749,1096,1097],{},"What to know",[771,1099,1100,1110,1120,1132,1147],{},[746,1101,1102,1105],{},[776,1103,1104],{},"Command",[776,1106,1107,948],{},[527,1108,1109],{},"codex exec",[746,1111,1112,1115],{},[776,1113,1114],{},"API key",[776,1116,1117,948],{},[527,1118,1119],{},"CODEX_API_KEY",[746,1121,1122,1125],{},[776,1123,1124],{},"Config keys",[776,1126,1127,1128,1131],{},"Its context, effort, permission mode and writable-roots options are ",[527,1129,1130],{},"-c"," config keys.",[746,1133,1134,1136],{},[776,1135,757],{},[776,1137,1138,1139,1142,1143,948],{},"Enforced through a ",[527,1140,1141],{},"PreToolUse"," hook. See ",[532,1144,1146],{"href":1145},"\u002Freference\u002Fpermissions#codex","Codex",[746,1148,1149,1152],{},[776,1150,1151],{},"Read from its log",[776,1153,1154,1155,1158],{},"Tokens, the thread id and a usage-limit stop, off its ",[527,1156,1157],{},"--json"," log. The log gives no reset time for a limit.",[1082,1160,1162],{"id":1161},"cursor-details","Cursor details",[740,1164,1165,1173],{},[743,1166,1167],{},[746,1168,1169,1171],{},[749,1170,1094],{},[749,1172,1097],{},[771,1174,1175,1200,1209,1223,1237,1255,1275,1291,1308],{},[746,1176,1177,1179],{},[776,1178,1104],{},[776,1180,1181,965,1184,1187,1188,1191,1192,1196,1197,948],{},[527,1182,1183],{},"agent -p --trust",[527,1185,1186],{},"-p"," is print mode, and ",[527,1189,1190],{},"--trust"," skips the workspace-trust prompt that every new ",[532,1193,1195],{"href":1194},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," would raise. The prompt follows ",[527,1198,1199],{},"--",[746,1201,1202,1204],{},[776,1203,1114],{},[776,1205,1206,948],{},[527,1207,1208],{},"CURSOR_API_KEY",[746,1210,1211,1214],{},[776,1212,1213],{},"Effort",[776,1215,1216,1217,1219,1220,948],{},"No ",[527,1218,902],{},". A model id can carry one, such as ",[527,1221,1222],{},"'name[effort=high]'",[746,1224,1225,1227],{},[776,1226,757],{},[776,1228,512,1229,1232,1233,948],{},[527,1230,1231],{},"preToolUse"," hook Kraft installs in the worktree. See ",[532,1234,1236],{"href":1235},"\u002Freference\u002Fpermissions#cursor","Cursor",[746,1238,1239,1241],{},[776,1240,1151],{},[776,1242,1243,1244,1246,1247,1250,1251,1254],{},"Tokens and the chat id ",[527,1245,1014],{}," takes, off its ",[527,1248,1249],{},"stream-json"," log. Tokens come off the closing ",[527,1252,1253],{},"result"," line, one per run: uncached input, output, and cache reads and writes.",[746,1256,1257,1260],{},[776,1258,1259],{},"Config directory",[776,1261,1262,1263,1266,1267,1270,1271,1274],{},"Every launch sets ",[527,1264,1265],{},"CURSOR_CONFIG_DIR"," to ",[527,1268,1269],{},"$KRAFT_HOME\u002Frun\u002Fharness-config\u002Fcursor\u002F",", a directory Kraft owns. Your own ",[527,1272,1273],{},"~\u002F.cursor"," is never read or changed.",[746,1276,1277,1280],{},[776,1278,1279],{},"Commit attribution",[776,1281,1282,1283,1286,1287,1290],{},"Before each launch Kraft writes ",[527,1284,1285],{},"cli-config.json"," there with commit attribution off, because with it on Cursor adds a ",[527,1288,1289],{},"Co-authored-by: Cursor"," trailer to every commit and the classifier refused those commits. The file adds no permission rule.",[746,1292,1293,1296],{},[776,1294,1295],{},"Shared directory",[776,1297,1298,1299,1302,1303,1307],{},"All launches share the directory, not one per launch, because ",[527,1300,1301],{},"--resume"," has to find the chat an earlier launch wrote. A ",[532,1304,1306],{"href":1305},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxed"," item gets one of its own, inside its sandbox home.",[746,1309,1310,1313],{},[776,1311,1312],{},"Sign-in",[776,1314,1315,1316,1318,1319,1321,1322,948],{},"The login lives in the OS keychain, not the config directory. A ",[532,1317,1306],{"href":339}," worker has no keychain, so it needs ",[527,1320,1208],{},", named in the repo's ",[527,1323,1324],{},"env_passthrough",[1082,1326,1328],{"id":1327},"opencode-details","OpenCode details",[740,1330,1331,1339],{},[743,1332,1333],{},[746,1334,1335,1337],{},[749,1336,1094],{},[749,1338,1097],{},[771,1340,1341,1353,1360,1378,1394,1408,1422,1437,1448,1460],{},[746,1342,1343,1345],{},[776,1344,1104],{},[776,1346,1347,1350,1351,948],{},[527,1348,1349],{},"opencode run",". The prompt follows ",[527,1352,1199],{},[746,1354,1355,1357],{},[776,1356,1114],{},[776,1358,1359],{},"The provider's own key.",[746,1361,1362,1365],{},[776,1363,1364],{},"Needs",[776,1366,1367,1368,1371,1372,948],{},"OpenCode 2.0.0 or newer, not npm's 1.x ",[527,1369,1370],{},"opencode-ai",". Kraft refuses an older one at launch. See ",[532,1373,1375],{"href":1374},"\u002Freference\u002Fharnesses\u002Fharness-files#min_version",[527,1376,1377],{},"min_version",[746,1379,1380,1383],{},[776,1381,1382],{},"Launch",[776,1384,1385,1386,1389,1390,1393],{},"Every launch passes ",[527,1387,1388],{},"--auto",", since ",[527,1391,1392],{},"run"," otherwise rejects every permission request.",[746,1395,1396,1399],{},[776,1397,1398],{},"Model",[776,1400,1401,1403,1404,1407],{},[527,1402,824],{}," is ",[527,1405,1406],{},"provider\u002Fmodel"," for any provider OpenCode knows.",[746,1409,1410,1412],{},[776,1411,1213],{},[776,1413,1414,1415,1417,1418,1421],{},"There is no ",[527,1416,902],{},". Name a variant in the model id (",[527,1419,1420],{},"openai\u002Fgpt-5.5#high",").",[746,1423,1424,1426],{},[776,1425,757],{},[776,1427,1428,1429,1432,1433,948],{},"Written into the launch's own OpenCode config, with ",[527,1430,1431],{},"--standalone",", when the task's policy sets either. See ",[532,1434,1436],{"href":1435},"\u002Freference\u002Fpermissions#opencode-and-amp-rules-written-at-launch","OpenCode and Amp",[746,1438,1439,1441],{},[776,1440,1151],{},[776,1442,1443,1444,1447],{},"Tokens, cost, the session id and a rate-limit stop, off its ",[527,1445,1446],{},"--format json"," log.",[746,1449,1450,1453],{},[776,1451,1452],{},"The last step's usage",[776,1454,1455,1456,1459],{},"That log leaves out the last step's usage, so Kraft reads the session's totals from ",[527,1457,1458],{},"opencode session export \u003Csession id>"," when the run ends. It falls back to the log's steps if that fails.",[746,1461,1462,1465],{},[776,1463,1464],{},"Sub-agents",[776,1466,512,1467,1470],{},[527,1468,1469],{},"task"," sub-agent's tokens are not in the log.",[1082,1472,1474],{"id":1473},"antigravity-details","Antigravity details",[740,1476,1477,1485],{},[743,1478,1479],{},[746,1480,1481,1483],{},[749,1482,1094],{},[749,1484,1097],{},[771,1486,1487,1498,1514,1529,1543,1558,1576,1588],{},[746,1488,1489,1491],{},[776,1490,1104],{},[776,1492,1493,1350,1496,948],{},[527,1494,1495],{},"agy",[527,1497,1186],{},[746,1499,1500,1502],{},[776,1501,1114],{},[776,1503,1504,1505,1507,1508,1511,1512,948],{},"None: sign-in with ",[527,1506,1495],{},". A ",[527,1509,1510],{},"GEMINI_API_KEY"," route exists and is untested: see ",[532,1513,131],{"href":132},[746,1515,1516,1519],{},[776,1517,1518],{},"Accounts",[776,1520,1521,1522,1524,1525,948],{},"Google's Antigravity CLI, for an individual Google account. ",[527,1523,723],{}," serves a Gemini API key or Gemini Code Assist: see ",[532,1526,1528],{"href":1527},"#gemini-details","Gemini details",[746,1530,1531,1534],{},[776,1532,1533],{},"Control",[776,1535,1536,1537,1539,1540,948],{},"Kraft has no per-action control over an ",[527,1538,1495],{}," worker. See ",[532,1541,400],{"href":1542},"\u002Freference\u002Fharnesses\u002Funattended-runs#notes-by-harness",[746,1544,1545,1547],{},[776,1546,1213],{},[776,1548,1549,1403,1551,1554,1555,1557],{},[527,1550,902],{},[527,1552,1553],{},"--effort low|medium|high|max",", checked by ",[527,1556,1495],{}," against the model.",[746,1559,1560,1562],{},[776,1561,1398],{},[776,1563,1564,1565,1568,1569,1571,1572,1575],{},"Name the base model (",[527,1566,1567],{},"gemini-3.8-flash",") and set ",[527,1570,902],{},", not a slug with the effort in it (",[527,1573,1574],{},"gemini-3.8-flash-low","), or Kraft cannot price the session.",[746,1577,1578,1580],{},[776,1579,1151],{},[776,1581,1582,1583,1585,1586,1447],{},"Tokens, the conversation id ",[527,1584,1014],{}," takes and a quota stop, off its ",[527,1587,1249],{},[746,1589,1590,1592],{},[776,1591,1364],{},[776,1593,1594,1595,1597,1598,948],{},"A prior interactive sign-in (",[527,1596,1495],{}," once) on the machine, or a Gemini API key. See ",[532,1599,131],{"href":132},[1082,1601,1528],{"id":1602},"gemini-details",[740,1604,1605,1613],{},[743,1606,1607],{},[746,1608,1609,1611],{},[749,1610,1094],{},[749,1612,1097],{},[771,1614,1615,1634,1642,1654],{},[746,1616,1617,1619],{},[776,1618,1104],{},[776,1620,1621,1350,1624,1626,1627,1630,1631,1633],{},[527,1622,1623],{},"gemini --skip-trust",[527,1625,1186],{},", and ",[527,1628,1629],{},"--skip-trust"," trusts the worktree for the session, since a headless ",[527,1632,723],{}," outside a trusted folder refuses to start.",[746,1635,1636,1638],{},[776,1637,1114],{},[776,1639,1640,948],{},[527,1641,1510],{},[746,1643,1644,1646],{},[776,1645,1518],{},[776,1647,1648,1649,1651,1652,948],{},"Gemini CLI stopped serving free, Google AI Pro and Ultra accounts on 2026-06-18. ",[527,1650,723],{}," works with a Gemini API key or Gemini Code Assist. For Gemini models on an individual Google account, use ",[527,1653,720],{},[746,1655,1656,1658],{},[776,1657,766],{},[776,1659,1216,1660,1662,1663,1665,1666,1669],{},[527,1661,1014],{}," at all. Gemini's ",[527,1664,1301],{}," takes an index or ",[527,1667,1668],{},"\"latest\"",", not a session id, so the capability is not declared.",[1082,1671,1673],{"id":1672},"amp-details","Amp details",[740,1675,1676,1684],{},[743,1677,1678],{},[746,1679,1680,1682],{},[749,1681,1094],{},[749,1683,1097],{},[771,1685,1686,1698,1707,1739,1752,1763,1779,1790],{},[746,1687,1688,1690],{},[776,1689,1104],{},[776,1691,1692,1350,1695,948],{},[527,1693,1694],{},"amp --no-archive-after-execute",[527,1696,1697],{},"-x",[746,1699,1700,1702],{},[776,1701,1114],{},[776,1703,1704,948],{},[527,1705,1706],{},"AMP_API_KEY",[746,1708,1709,1712],{},[776,1710,1711],{},"Model and effort",[776,1713,1216,1714,1716,1717,1719,1720,1723,1724,1728,1729,1731,1732,1734,1735,1738],{},[527,1715,824],{},": Amp picks it. ",[527,1718,902],{}," is Amp's mode (",[527,1721,1722],{},"-m low|medium|high|ultra","). An ",[532,1725,1727],{"href":1726},"\u002Fconcepts\u002Fvocabulary#agent-profile","agent profile"," cannot select ",[527,1730,726],{},", because an agent profile needs a model for the provider. A task on ",[527,1733,726],{}," sets ",[527,1736,1737],{},"effort:"," itself.",[746,1740,1741,1743],{},[776,1742,757],{},[776,1744,1745,1746,1749,1750,948],{},"A settings file of the launch's own (",[527,1747,1748],{},"--settings-file","), when the task's policy sets either. See ",[532,1751,1436],{"href":1435},[746,1753,1754,1756],{},[776,1755,1382],{},[776,1757,1758,1759,1762],{},"Both command lines pass ",[527,1760,1761],{},"--no-archive-after-execute",", because an archived thread cannot be resumed.",[746,1764,1765,1767],{},[776,1766,1151],{},[776,1768,1769,1770,1246,1772,1775,1776,948],{},"Tokens and the thread id ",[527,1771,1014],{},[527,1773,1774],{},"--stream-json"," log. The token counts are the thread's own, message by message, and match ",[527,1777,1778],{},"amp threads export",[746,1780,1781,1783],{},[776,1782,760],{},[776,1784,1785,1786,1789],{},"Amp's bill (",[527,1787,1788],{},"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.",[746,1791,1792,1794],{},[776,1793,1364],{},[776,1795,1796,1797,948],{},"Credentials a headless process can use. See ",[532,1798,131],{"href":132},[519,1800,1802],{"id":1801},"in-this-section","In this section",[917,1804,1805,1810,1818,1823,1828],{},[920,1806,1807,1809],{},[532,1808,400],{"href":401},": the mode each CLI runs in when nobody can answer a prompt.",[920,1811,1812,1814,1815,948],{},[532,1813,404],{"href":405},": named model tiers a task selects with ",[527,1816,1817],{},"profile:",[920,1819,1820,1822],{},[532,1821,408],{"href":409},": the YAML file that describes one harness, and every capability it can declare.",[920,1824,1825,1827],{},[532,1826,412],{"href":413},": where a launch goes next, and which harness runs an escalation turn.",[920,1829,1830,1832],{},[532,1831,416],{"href":417},": how Kraft estimates the cost of a harness that reports tokens but no dollar figure.",[1834,1835,1836],"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":557,"searchDepth":641,"depth":641,"links":1838},[1839,1840,1841,1849],{"id":521,"depth":641,"text":522},{"id":734,"depth":641,"text":735},{"id":1058,"depth":641,"text":1059,"children":1842},[1843,1844,1845,1846,1847,1848],{"id":1084,"depth":649,"text":1085},{"id":1161,"depth":649,"text":1162},{"id":1327,"depth":649,"text":1328},{"id":1473,"depth":649,"text":1474},{"id":1602,"depth":649,"text":1528},{"id":1672,"depth":649,"text":1673},{"id":1801,"depth":641,"text":1802},"Which agent CLIs Kraft runs, what each supports, and how a task picks one.","md",null,{},{"title":10},{"title":394,"description":1850},"okW4ourwUlR227ATspksOnG3NAkfVeH8FobPAwsY2l0",[1858,1860],{"title":390,"path":391,"stem":392,"description":1859,"children":-1},"The JSON file a task writes at $KRAFT_RESULT_PATH, and every field Kraft reads from it.",{"title":400,"path":401,"stem":402,"description":1861,"children":-1},"The permission mode each harness runs in when no one can answer a prompt, and where its tool calls go.",1791801258240]