[{"data":1,"prerenderedAt":1537},["ShallowReactive",2],{"navigation_docs":3,"-reference-harnesses-fallback-and-escalation":520,"-reference-harnesses-fallback-and-escalation-surround":1532},[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":428,"body":522,"description":1525,"extension":1526,"links":1527,"meta":1528,"navigation":1529,"path":429,"seo":1530,"stem":430,"__hash__":1531},"docs\u002F5.reference\u002F05.harnesses\u002F5.fallback-and-escalation.md",{"type":523,"value":524,"toc":1509},"minimark",[525,545,550,562,567,574,638,642,671,683,889,995,999,1002,1085,1089,1109,1113,1116,1129,1132,1143,1146,1150,1157,1228,1235,1239,1292,1295,1319,1323,1326,1381,1392,1396,1412,1464,1472,1481,1485,1505],[526,527,528,529,534,535,539,540,544],"p",{},"A task can list other ",[530,531,533],"a",{"href":532},"\u002Fconcepts\u002Fvocabulary#harness","harnesses"," or models to try when its first choice is rate-limited or unavailable. An ",[530,536,538],{"href":537},"\u002Fconcepts\u002Fvocabulary#escalation-turn","escalation turn"," runs on the harness that ",[541,542,543],"code",{},"escalation_harness"," names.",[546,547,549],"h2",{"id":548},"fallback","Fallback",[526,551,552,553,556,557,561],{},"A ",[541,554,555],{},"fallback:"," list lets a task that must not wait out a rate limit move to another launch. It is opt-in: see ",[530,558,560],{"href":559},"#opt-in-and-limits","Opt-in and limits",".",[563,564,566],"h3",{"id":565},"which-harnesses-can-fall-back","Which harnesses can fall back",[526,568,569,570,573],{},"Only a harness that declares ",[541,571,572],{},"rate_limit_signal"," can trigger a switch on a rate limit. Any harness can be a fallback target.",[575,576,577,593],"table",{},[578,579,580],"thead",{},[581,582,583,587,590],"tr",{},[584,585,586],"th",{},"Harness",[584,588,589],{},"Triggers a switch on a rate limit",[584,591,592],{},"Can be a target",[594,595,596,619],"tbody",{},[581,597,598,614,617],{},[599,600,601,604,605,604,608,604,611],"td",{},[541,602,603],{},"claude",", ",[541,606,607],{},"codex",[541,609,610],{},"opencode",[541,612,613],{},"antigravity",[599,615,616],{},"yes",[599,618,616],{},[581,620,621,632,635],{},[599,622,623,604,626,604,629],{},[541,624,625],{},"gemini",[541,627,628],{},"amp",[541,630,631],{},"cursor",[599,633,634],{},"no: a rate limit fails the launch as it does without a list",[599,636,637],{},"yes, and Kraft skips it when it is unavailable",[563,639,641],{"id":640},"entry-keys","Entry keys",[526,643,552,644,646,647,650,651,655,656,658,659,662,663,666,667,670],{},[541,645,555],{}," list is ordered. Each entry may name a ",[541,648,649],{},"harness:"," (a ",[530,652,654],{"href":653},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," id from ",[541,657,326],{},") plus one route, the same either-or a task obeys: an agent ",[541,660,661],{},"profile:",", or a ",[541,664,665],{},"model:"," and ",[541,668,669],{},"effort:"," (either or both). An entry keeps whatever it omits from the task's own launch.",[526,672,673,674,678,679,682],{},"The list lives on an ",[530,675,677],{"href":676},"\u002Fconcepts\u002Fvocabulary#agent-profile","agent profile",", as the tier's default. A task may set its own, which replaces the agent profile's whole. ",[541,680,681],{},"fallback: []"," means none, even under an agent profile that has one. For example:",[684,685,691],"pre",{"className":686,"code":687,"filename":688,"language":689,"meta":690,"style":690},"language-yaml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","profiles:\n  deep:\n    providers:\n      claude: { model: opus, effort: high }\n      codex: { model: gpt-5.6-sol, effort: high }\n    fallback:\n      - { harness: codex }            # same tier, other harness\n      - { profile: strong }           # other tier, same harness\n  strong:\n    providers:\n      claude: { model: sonnet, effort: high }\n      codex: { model: gpt-5.6-terra, effort: high }\n","config\u002Fharnesses.yaml","yaml","",[541,692,693,706,714,722,754,779,787,807,826,834,841,865],{"__ignoreMap":690},[694,695,698,702],"span",{"class":696,"line":697},"line",1,[694,699,701],{"class":700},"sb7M8","profiles",[694,703,705],{"class":704},"s7iLA",":\n",[694,707,709,712],{"class":696,"line":708},2,[694,710,711],{"class":700},"  deep",[694,713,705],{"class":704},[694,715,717,720],{"class":696,"line":716},3,[694,718,719],{"class":700},"    providers",[694,721,705],{"class":704},[694,723,725,728,731,734,737,741,743,746,748,751],{"class":696,"line":724},4,[694,726,727],{"class":700},"      claude",[694,729,730],{"class":704},": { ",[694,732,733],{"class":700},"model",[694,735,736],{"class":704},": ",[694,738,740],{"class":739},"semJd","opus",[694,742,604],{"class":704},[694,744,745],{"class":700},"effort",[694,747,736],{"class":704},[694,749,750],{"class":739},"high",[694,752,753],{"class":704}," }\n",[694,755,757,760,762,764,766,769,771,773,775,777],{"class":696,"line":756},5,[694,758,759],{"class":700},"      codex",[694,761,730],{"class":704},[694,763,733],{"class":700},[694,765,736],{"class":704},[694,767,768],{"class":739},"gpt-5.6-sol",[694,770,604],{"class":704},[694,772,745],{"class":700},[694,774,736],{"class":704},[694,776,750],{"class":739},[694,778,753],{"class":704},[694,780,782,785],{"class":696,"line":781},6,[694,783,784],{"class":700},"    fallback",[694,786,705],{"class":704},[694,788,790,793,796,798,800,803],{"class":696,"line":789},7,[694,791,792],{"class":704},"      - { ",[694,794,795],{"class":700},"harness",[694,797,736],{"class":704},[694,799,607],{"class":739},[694,801,802],{"class":704}," }            ",[694,804,806],{"class":805},"sq92B","# same tier, other harness\n",[694,808,810,812,815,817,820,823],{"class":696,"line":809},8,[694,811,792],{"class":704},[694,813,814],{"class":700},"profile",[694,816,736],{"class":704},[694,818,819],{"class":739},"strong",[694,821,822],{"class":704}," }           ",[694,824,825],{"class":805},"# other tier, same harness\n",[694,827,829,832],{"class":696,"line":828},9,[694,830,831],{"class":700},"  strong",[694,833,705],{"class":704},[694,835,837,839],{"class":696,"line":836},10,[694,838,719],{"class":700},[694,840,705],{"class":704},[694,842,844,846,848,850,852,855,857,859,861,863],{"class":696,"line":843},11,[694,845,727],{"class":700},[694,847,730],{"class":704},[694,849,733],{"class":700},[694,851,736],{"class":704},[694,853,854],{"class":739},"sonnet",[694,856,604],{"class":704},[694,858,745],{"class":700},[694,860,736],{"class":704},[694,862,750],{"class":739},[694,864,753],{"class":704},[694,866,868,870,872,874,876,879,881,883,885,887],{"class":696,"line":867},12,[694,869,759],{"class":700},[694,871,730],{"class":704},[694,873,733],{"class":700},[694,875,736],{"class":704},[694,877,878],{"class":739},"gpt-5.6-terra",[694,880,604],{"class":704},[694,882,745],{"class":700},[694,884,736],{"class":704},[694,886,750],{"class":739},[694,888,753],{"class":704},[684,890,893],{"className":686,"code":891,"filename":892,"language":689,"meta":690,"style":690},"tasks:\n  legacy_task:\n    kind: agent\n    harness: claude\n    model: opus\n    effort: high\n    fallback:\n      - { model: sonnet }                          # claude, sonnet, high\n      - { harness: codex, model: gpt-5.6-terra }   # codex, gpt-5.6-terra, high\n","config\u002Flibrary.yaml",[541,894,895,902,909,919,929,939,949,955,971],{"__ignoreMap":690},[694,896,897,900],{"class":696,"line":697},[694,898,899],{"class":700},"tasks",[694,901,705],{"class":704},[694,903,904,907],{"class":696,"line":708},[694,905,906],{"class":700},"  legacy_task",[694,908,705],{"class":704},[694,910,911,914,916],{"class":696,"line":716},[694,912,913],{"class":700},"    kind",[694,915,736],{"class":704},[694,917,918],{"class":739},"agent\n",[694,920,921,924,926],{"class":696,"line":724},[694,922,923],{"class":700},"    harness",[694,925,736],{"class":704},[694,927,928],{"class":739},"claude\n",[694,930,931,934,936],{"class":696,"line":756},[694,932,933],{"class":700},"    model",[694,935,736],{"class":704},[694,937,938],{"class":739},"opus\n",[694,940,941,944,946],{"class":696,"line":781},[694,942,943],{"class":700},"    effort",[694,945,736],{"class":704},[694,947,948],{"class":739},"high\n",[694,950,951,953],{"class":696,"line":789},[694,952,784],{"class":700},[694,954,705],{"class":704},[694,956,957,959,961,963,965,968],{"class":696,"line":809},[694,958,792],{"class":704},[694,960,733],{"class":700},[694,962,736],{"class":704},[694,964,854],{"class":739},[694,966,967],{"class":704}," }                          ",[694,969,970],{"class":805},"# claude, sonnet, high\n",[694,972,973,975,977,979,981,983,985,987,989,992],{"class":696,"line":828},[694,974,792],{"class":704},[694,976,795],{"class":700},[694,978,736],{"class":704},[694,980,607],{"class":739},[694,982,604],{"class":704},[694,984,733],{"class":700},[694,986,736],{"class":704},[694,988,878],{"class":739},[694,990,991],{"class":704}," }   ",[694,993,994],{"class":805},"# codex, gpt-5.6-terra, high\n",[563,996,998],{"id":997},"how-an-entry-resolves","How an entry resolves",[526,1000,1001],{},"Each entry resolves against the launch it replaces:",[575,1003,1004,1030],{},[578,1005,1006],{},[581,1007,1008,1011,1020],{},[584,1009,1010],{},"Entry",[584,1012,1013,1014,1016,1017],{},"on ",[541,1015,603],{}," + ",[541,1018,1019],{},"profile: deep",[584,1021,1013,1022,1016,1024,604,1027],{},[541,1023,603],{},[541,1025,1026],{},"model: opus",[541,1028,1029],{},"effort: high",[594,1031,1032,1053,1068],{},[581,1033,1034,1039,1045],{},[599,1035,1036],{},[541,1037,1038],{},"{ harness: codex }",[599,1040,1041,1042,1044],{},"codex + deep: ",[541,1043,768],{},", high",[599,1046,1047,1048,1050,1051],{},"codex + ",[541,1049,740],{},": refused, codex takes no ",[541,1052,740],{},[581,1054,1055,1060,1065],{},[599,1056,1057],{},[541,1058,1059],{},"{ profile: strong }",[599,1061,1062,1063,1044],{},"claude + strong: ",[541,1064,854],{},[599,1066,1067],{},"claude + strong",[581,1069,1070,1075,1081],{},[599,1071,1072],{},[541,1073,1074],{},"{ model: sonnet }",[599,1076,1077,1078,1080],{},"claude + ",[541,1079,854],{},", no effort",[599,1082,1077,1083,1044],{},[541,1084,854],{},[563,1086,1088],{"id":1087},"which-lists-apply","Which lists apply",[1090,1091,1092,1096,1099],"ul",{},[1093,1094,1095],"li",{},"Lists do not chain: Kraft does not follow the list of an agent profile that an entry names.",[1093,1097,1098],{},"An agent profile's list is read at each launch, so an edit applies to the next launch.",[1093,1100,1101,1102,1105,1106,1108],{},"With ",[541,1103,1104],{},"extends",", a child task's ",[541,1107,555],{}," replaces its parent's.",[563,1110,1112],{"id":1111},"validation","Validation",[526,1114,1115],{},"Every entry of every list a chain's task uses must pair with its harness, the same check a task's own route gets. Kraft runs it in:",[1090,1117,1118,1121,1124],{},[1093,1119,1120],{},"Settings › Harnesses, which shows each agent profile's list with its problems per entry;",[1093,1122,1123],{},"the guard on a harness save;",[1093,1125,1126,561],{},[541,1127,1128],{},"kraft admin doctor",[526,1130,1131],{},"A problem names the task, the list's source and the entry's index:",[684,1133,1138],{"className":1134,"code":1136,"language":1137,"meta":690},[1135],"language-text","chain 'default' task 'implementation.main.implement': fallback entry 0 (profile 'deep''s list): ...\n","text",[541,1139,1140],{"__ignoreMap":690},[694,1141,1136],{"className":1142},[696],[526,1144,1145],{},"A disabled harness is not a pairing problem, since the launch skips it.",[563,1147,1149],{"id":1148},"when-kraft-moves-on","When Kraft moves on",[526,1151,1152,1153,1156],{},"The ",[819,1154,1155],{},"candidates"," are the task's own launch, then each entry in order. Kraft moves to the next candidate, in the same dispatch, when:",[1090,1158,1159,1181,1213],{},[1093,1160,1161,1162,1165,1166,1168,1169,1173,1174,604,1177,1180],{},"a launch ends ",[819,1163,1164],{},"rate-limited"," (a harness that declares ",[541,1167,572],{}," reported a rejected request). The next launch is a fresh session in the same ",[530,1170,1172],{"href":1171},"\u002Fconcepts\u002Fvocabulary#worktree","worktree",", with the task's instruction and a note that the earlier attempt may have left partial work (",[541,1175,1176],{},"git status",[541,1178,1179],{},"git diff",");",[1093,1182,1183,1184,1187,1188],{},"a candidate is ",[819,1185,1186],{},"unavailable"," before anything launches. Kraft checks this again at every launch, so fixing it takes effect at once. A candidate is unavailable when:\n",[1090,1189,1190,1193,1201],{},[1093,1191,1192],{},"its harness profile is missing, disabled or sets a default Kraft cannot apply;",[1093,1194,1195,1196,1200],{},"its agent profile is missing or has no model for its ",[530,1197,1199],{"href":1198},"\u002Fconcepts\u002Fvocabulary#provider","provider",";",[1093,1202,1203,1204,1207,1208,1212],{},"its executable is not on ",[541,1205,1206],{},"PATH",". A ",[530,1209,1211],{"href":1210},"\u002Fconcepts\u002Fvocabulary#sandbox","sandbox"," skips this check, because the executable lives in the container;",[1093,1214,1183,1215,1218,1219,1222,1223,1227],{},[819,1216,1217],{},"known to be limited",": Kraft remembers, from the event log, which harness and model a ",[541,1220,1221],{},"rate_limit_hit"," limited, on any ",[530,1224,1226],{"href":1225},"\u002Fconcepts\u002Fvocabulary#work-item","work item",", and skips that pair until its reset. One account-wide limit therefore costs one quickly-refused launch per model before each is remembered.",[526,1229,1230,1231,1234],{},"When no candidate is left and one was limited, the item parks as ",[541,1232,1233],{},"rate_limited"," until the earliest reset among them. Its relaunch starts from the top of the list, so the first choice is used again as soon as it is back. When every candidate is unavailable, the task stops and waits for you, with a reason naming each one and why.",[563,1236,1238],{"id":1237},"what-carries-over","What carries over",[1090,1240,1241,1262,1269,1276,1283],{},[1093,1242,1243,1244,1247,1248,666,1250,1252,1253,1257,1258,1261],{},"The work item's ",[541,1245,1246],{},"set-overrides"," values and a node's ",[541,1249,733],{},[541,1251,745],{}," override pick the task's own launch only, and so does a ",[530,1254,1256],{"href":1255},"\u002Fconcepts\u002Fvocabulary#fix-loop","fix loop","'s escalation model. A fallback runs exactly as its entry says. A node's ",[541,1259,1260],{},"extra_prompt"," is part of the instruction and does reach it.",[1093,1263,1264,1265,1268],{},"Switching spends none of ",[541,1266,1267],{},"rate_limit_retries",", which still counts parks.",[1093,1270,1271,1272,1275],{},"The spend caps in ",[541,1273,1274],{},"budget:"," are checked before every launch, fallbacks included. A task's time cap covers all of its attempts together.",[1093,1277,1278,1279,1282],{},"Every entry's harness must be in the task's ",[541,1280,1281],{},"allowed_harnesses",". Kraft checks a task's own list when the chain materializes. An agent profile's list is read at each launch, so Kraft checks it at the launch, which skips a refused entry as unavailable.",[1093,1284,1285,604,1288,1291],{},[541,1286,1287],{},"deny_tools",[541,1289,1290],{},"allowed_tools"," and the item's sandbox apply to a fallback as to the task's own launch. A sandboxed fallback onto Cursor or Codex with a tool policy therefore stops as a configuration error, rather than skipping to the next entry.",[563,1293,560],{"id":1294},"opt-in-and-limits",[1090,1296,1297,1303,1306],{},[1093,1298,1299,1300,1302],{},"A task with no list (none of its own, none on its agent profile, or ",[541,1301,681],{},") launches, parks and stops exactly as it would without one, and never consults the record of limited models.",[1093,1304,1305],{},"No shipped task or agent profile declares a list.",[1093,1307,1308,1309,1312,1313,1315,1316,1318],{},"A gate's ",[541,1310,1311],{},"auto_review"," task cannot declare a ",[541,1314,555],{}," list of its own. Kraft refuses it at its own launch, naming the gate and the agent profile, when its ",[541,1317,661],{}," carries one: a gate review launches once and never walks either list.",[563,1320,1322],{"id":1321},"what-is-logged","What is logged",[526,1324,1325],{},"Every skip or switch is logged:",[1090,1327,1328,1372,1375,1378],{},[1093,1329,1330,1331,1334,1335,1338,1339,604,1342,1345,1346,1349,1350,1345,1353,604,1355,1358,1359,1361,1362,1365,1366,666,1369,1200],{},"one ",[541,1332,1333],{},"launch_fallback"," event (",[541,1336,1337],{},"kraft view events --type launch_fallback","), with ",[541,1340,1341],{},"from",[541,1343,1344],{},"to"," (",[541,1347,1348],{},"null"," when nothing was left), ",[541,1351,1352],{},"reason",[541,1354,1221],{},[541,1356,1357],{},"known_limited"," or ",[541,1360,1186],{},", with a ",[541,1363,1364],{},"detail","), ",[541,1367,1368],{},"resets_at_iso",[541,1370,1371],{},"override_not_carried",[1093,1373,1374],{},"one sentence on the item's timeline, such as \"Ran on claude \u002F sonnet instead of claude \u002F opus: claude \u002F opus is rate-limited until 15:40.\";",[1093,1376,1377],{},"one INFO line in the server log;",[1093,1379,1380],{},"a \"fallback\" marker on the board card while the item's latest launch is a fallback's, with the same sentence as its tooltip.",[526,1382,1383,1384,1387,1388,1391],{},"Session rows record the model that actually ran, so each session's cost is priced on that model, and the ",[530,1385,264],{"href":1386},"\u002Freference\u002Fweb-ui\u002Fanalytics#by-node"," ",[819,1389,1390],{},"By node"," cost reflects it.",[546,1393,1395],{"id":1394},"escalation-turns","Escalation turns",[526,1397,1398,1399,1401,1402,1404,1405,1407,1408,1411],{},"An escalation turn runs on the harness profile in ",[541,1400,326],{}," that the policy key ",[541,1403,543],{}," names: ",[541,1406,603],{}," unless you set it, or ",[541,1409,1410],{},"item",", which follows the harness the item's own latest agent task ran on.",[575,1413,1414,1424],{},[578,1415,1416],{},[581,1417,1418,1421],{},[584,1419,1420],{},"Where to set it",[584,1422,1423],{},"How",[594,1425,1426,1441,1454],{},[581,1427,1428,1432],{},[599,1429,1430],{},[541,1431,318],{},[599,1433,1434,1437,1438],{},[541,1435,1436],{},"escalation_harness:"," under ",[541,1439,1440],{},"defaults:",[581,1442,1443,1446],{},[599,1444,1445],{},"A repository, chain or node",[599,1447,1448,1450,1451],{},[541,1449,1436],{}," in its ",[541,1452,1453],{},"policy:",[581,1455,1456,1459],{},[599,1457,1458],{},"One item",[599,1460,1461],{},[541,1462,1463],{},"kraft item set-policy --policy escalation_harness=codex",[526,1465,1466,1467,561],{},"Kraft reads the thread id the next turn resumes with that harness's own log reader, and a resumed turn records only what it added to the thread. See ",[530,1468,1470],{"href":1469},"\u002Freference\u002Fconfiguration\u002Fpolicy#defaults-and-maxima",[541,1471,543],{},[526,1473,1474,1475,1477,1478,1480],{},"A gate's automated review is not an escalation turn: its ",[541,1476,1311],{}," task names its own ",[541,1479,649],{}," in the chain.",[546,1482,1484],{"id":1483},"related","Related",[1090,1486,1487,1492,1497],{},[1093,1488,1489,1491],{},[530,1490,420],{"href":421},": the tiers a fallback entry may name.",[1093,1493,1494,1496],{},[530,1495,432],{"href":433},": how the spend caps count a fallback's session.",[1093,1498,1499,1501,1502,1504],{},[530,1500,318],{"href":319},": the ",[541,1503,543],{}," key and the other policy fields.",[1506,1507,1508],"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 .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}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);}",{"title":690,"searchDepth":708,"depth":708,"links":1510},[1511,1523,1524],{"id":548,"depth":708,"text":549,"children":1512},[1513,1514,1515,1516,1517,1518,1519,1520,1522],{"id":565,"depth":716,"text":566},{"id":640,"depth":716,"text":641},{"id":997,"depth":716,"text":998},{"id":1087,"depth":716,"text":1088},{"id":1111,"depth":716,"text":1112},{"id":1148,"depth":716,"text":1149},{"id":1237,"depth":716,"text":1238},{"id":1294,"depth":716,"text":1521},"Opt-​in and limits",{"id":1321,"depth":716,"text":1322},{"id":1394,"depth":708,"text":1395},{"id":1483,"depth":708,"text":1484},"Where a launch goes next when a harness is limited or unavailable, and which harness runs an escalation turn.","md",null,{},true,{"title":428,"description":1525},"CRNFDl53WzdvdKPf7jMaj1RLT7WpQnkbypm94RPnwWI",[1533,1535],{"title":424,"path":425,"stem":426,"description":1534,"children":-1},"The YAML file that describes one harness: the capabilities it declares, argv fragments, constraints, and allowlists.",{"title":432,"path":433,"stem":434,"description":1536,"children":-1},"Which harnesses report no dollar cost, how Kraft estimates what their sessions cost, and which caps still bound a session it cannot price.",1791801177051]