[{"data":1,"prerenderedAt":1417},["ShallowReactive",2],{"navigation_docs":3,"-concepts-caps-and-budgets":520,"-concepts-caps-and-budgets-surround":1412},[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":40,"body":522,"description":1405,"extension":1406,"links":1407,"meta":1408,"navigation":1409,"path":41,"seo":1410,"stem":42,"__hash__":1411},"docs\u002F2.concepts\u002F2.caps-and-budgets.md",{"type":523,"value":524,"toc":1387},"minimark",[525,541,546,549,787,790,796,800,803,811,844,849,855,884,908,911,919,928,942,946,959,969,972,989,1002,1006,1014,1055,1063,1075,1078,1109,1112,1115,1127,1131,1134,1146,1158,1164,1174,1181,1187,1191,1194,1201,1204,1224,1235,1240,1244,1250,1274,1284,1288,1297,1303,1316,1320,1328,1341,1361,1365],[526,527,528,529,534,535,537,538,540],"p",{},"Kraft stops a ",[530,531,533],"a",{"href":532},"\u002Fconcepts\u002Fvocabulary#work-item","work item"," that runs too long or spends too much, and it hands\nthe item to you instead of failing it. This page explains how those bounds\nfit together and why they work the way they do. For every key and its\ndefault, see ",[530,536,318],{"href":319},". To raise a cap\nthat stopped an item, see\n",[530,539,80],{"href":81},".",[542,543,545],"h2",{"id":544},"the-default-caps","The default caps",[526,547,548],{},"These are the limits a fresh install runs under.",[550,551,552,568],"table",{},[553,554,555],"thead",{},[556,557,558,562,565],"tr",{},[559,560,561],"th",{},"Bound",[559,563,564],{},"Shipped value",[559,566,567],{},"Where it is set",[569,570,571,600,617,635,652,669,692,710,723,736,747,773],"tbody",{},[556,572,573,577,594],{},[574,575,576],"td",{},"Fix-loop attempts",[574,578,579,583,584,587,588,583,591],{},[580,581,582],"code",{},"2"," for ",[580,585,586],{},"verification",", ",[580,589,590],{},"3",[580,592,593],{},"merge_request_feedback",[574,595,596,599],{},[580,597,598],{},"max_attempts"," on the loop, in the chain",[556,601,602,605,609],{},[574,603,604],{},"Fix-loop attempts, for a loop that sets none",[574,606,607],{},[580,608,590],{},[574,610,611,614,615],{},[580,612,613],{},"default: attempts"," in ",[580,616,318],{},[556,618,619,622,628],{},[574,620,621],{},"Fix-loop wall clock",[574,623,624,627],{},[580,625,626],{},"3600"," seconds",[574,629,630,614,633],{},[580,631,632],{},"default: wall_clock_s",[580,634,318],{},[556,636,637,640,645],{},[574,638,639],{},"Work item dollar cap",[574,641,642],{},[580,643,644],{},"10",[574,646,647,614,650],{},[580,648,649],{},"budget.work_item_usd",[580,651,318],{},[556,653,654,657,662],{},[574,655,656],{},"Daily dollar cap",[574,658,659],{},[580,660,661],{},"50",[574,663,664,614,667],{},[580,665,666],{},"budget.daily_usd",[580,668,318],{},[556,670,671,677,683],{},[574,672,673,676],{},[580,674,675],{},"implementer"," task running time",[574,678,679,682],{},[580,680,681],{},"120"," minutes",[574,684,685,688,689],{},[580,686,687],{},"time_cap_minutes"," on the task, in ",[580,690,691],{},"library.yaml",[556,693,694,697,702],{},[574,695,696],{},"Wait for CI",[574,698,699,682],{},[580,700,701],{},"90",[574,703,704,707,708],{},[580,705,706],{},"total_time_cap_minutes"," on the wait task, in ",[580,709,691],{},[556,711,712,715,720],{},[574,713,714],{},"Wait for the automated review",[574,716,717,682],{},[580,718,719],{},"30",[574,721,722],{},"the same key",[556,724,725,728,734],{},[574,726,727],{},"Wait for an external approval",[574,729,730,733],{},[580,731,732],{},"10080"," minutes (7 days)",[574,735,722],{},[556,737,738,741,745],{},[574,739,740],{},"Wait for the post-merge pipeline",[574,742,743,682],{},[580,744,701],{},[574,746,722],{},[556,748,749,763,766],{},[574,750,751,752,587,754,587,756,587,759,762],{},"Cap per level of scope (",[580,753,687],{},[580,755,706],{},[580,757,758],{},"token_budget",[580,760,761],{},"budget_usd",")",[574,764,765],{},"none",[574,767,768,614,771],{},[580,769,770],{},"defaults:",[580,772,318],{},[556,774,775,778,780],{},[574,776,777],{},"Maximum per level of scope",[574,779,765],{},[574,781,782,614,785],{},[580,783,784],{},"maxima:",[580,786,318],{},[526,788,789],{},"Whichever bound runs out first stops the item, and the stop names its scope.",[526,791,792,793,795],{},"The shipped ",[580,794,318],{}," has example per-level defaults, commented out. If you\nuncomment them, the work item runs under 480 minutes, each node under 180, each\nstep under 120, and each task under 90, all at once.",[542,797,799],{"id":798},"two-kinds-of-bound","Two kinds of bound",[526,801,802],{},"Kraft bounds work in two ways.",[526,804,805],{},[806,807],"img",{"alt":808,"src":809,"width":810},"Scopes nest from a day to a task. A day holds every work item and has a daily dollar cap. A work item holds nodes, a gate included. A node holds steps and runs a fix loop, which has attempts and a wall clock. A step holds tasks. Work items, nodes, steps and tasks carry time, total time, token and dollar caps. The first to run out stops the item for you.","\u002Fdiagrams\u002Fportrait\u002Fcaps-scopes.svg",328,[526,812,813,817,818,822,823,825,826,829,830,833,834,614,837,839,840,843],{},[814,815,816],"strong",{},"Loops"," bound repetition. A ",[530,819,821],{"href":820},"\u002Fconcepts\u002Fvocabulary#fix-loop","fix loop"," retries a node until it passes. Its\nattempt limit is ",[580,824,598],{}," in the chain (",[580,827,828],{},"attempts"," under ",[580,831,832],{},"loops:"," and\n",[580,835,836],{},"default:",[580,838,318],{},"). Its wall clock is ",[580,841,842],{},"wall_clock_s"," there.",[526,845,846,847,540],{},"An external wait (a pipeline, an automated review, an approval, a merge\nlanding) is not a loop. Its timeout is its own task's ",[580,848,706],{},[526,850,851,854],{},[814,852,853],{},"Caps"," bound a scope's resources: time, tokens, and dollars. A scope is one\nof four, each inside the one before:",[856,857,858,862,870,877],"ul",{},[859,860,861],"li",{},"the whole work item;",[859,863,864,865,869],{},"one ",[530,866,868],{"href":867},"\u002Fconcepts\u002Fvocabulary#node","node",", a stage of the item's chain;",[859,871,864,872,876],{},[530,873,875],{"href":874},"\u002Fconcepts\u002Fvocabulary#step","step",", a group of tasks inside a node that run\nin parallel (a node's steps run in order);",[859,878,864,879,883],{},[530,880,882],{"href":881},"\u002Fconcepts\u002Fvocabulary#task","task",", a single unit of work, such as one\nagent run or one command.",[526,885,886,887,890,891,895,896,900,901,905,906,540],{},"Only a person resets a loop's count. A retry from the board or from\n",[580,888,889],{},"kraft item retry"," starts the fix loops of the retried\n",[530,892,894],{"href":893},"\u002Fconcepts\u002Fvocabulary#span","span"," afresh. A retry that a ",[530,897,899],{"href":898},"\u002Fconcepts\u002Fvocabulary#worker","worker",", an MCP\nassistant, an escalation turn, or a rate-limit relaunch asks for keeps\ncounting. An ",[530,902,904],{"href":903},"\u002Fconcepts\u002Fvocabulary#escalation-turn","escalation turn"," is the\nagent Kraft starts to help when an item stops and waits for you. See\n",[530,907,428],{"href":429},[526,909,910],{},"A gate rejection is the one exception, and only for fix loops. The nodes it\nre-runs measure new work, so their fix loops start afresh whoever rejected.\nEach rejection still counts against the gate's own reject loop, which only a\nperson resets.",[912,913,915,916,918],"h3",{"id":914},"why-loops-ships-empty","Why ",[580,917,832],{}," ships empty",[526,920,921,922,924,925,927],{},"A ",[580,923,832],{}," key that names no live loop does nothing and warns nobody. A stale\ncap would look live and bind nothing, so the shipped ",[580,926,318],{}," names none.",[526,929,930,931,933,934,936,937,939,940,540],{},"The ",[580,932,836],{}," entry covers every fix loop. A loop's own ",[580,935,598],{}," in the\nchain wins over ",[580,938,836],{},". The shipped fix loops therefore take their attempts\nfrom the chain and only their wall clock from ",[580,941,836],{},[542,943,945],{"id":944},"caps-are-set-per-level","Caps are set per level",[526,947,948,949,587,951,953,954,587,956,958],{},"You set the four caps (",[580,950,687],{},[580,952,706],{},",\n",[580,955,758],{},[580,957,761],{},") per level of scope: the work item, its nodes\n(a gate is a node), its steps, and its tasks.",[526,960,961,962,964,965,968],{},"A level's default binds every scope of that kind that nothing set a value for.\nOut of the box no level default is set. Only the caps the shipped tasks set on\nthemselves in ",[580,963,691],{}," apply, alongside the ",[580,966,967],{},"budget:"," dollar caps.",[526,970,971],{},"A value set in the chain (on the chain, a node, a step, or a task) or by the\nitem's own override replaces the defaults for that scope and for every scope\nunder it that sets none. A node set to 240 minutes runs its steps and tasks\nunder 240 too.",[526,973,974,975,978,979,978,982,978,985,988],{},"A default is not a ceiling. Any scope may set more, up to its level's\nmaximum. A narrower level's cap may not exceed a broader one's\n(",[580,976,977],{},"tasks"," \u003C= ",[580,980,981],{},"steps",[580,983,984],{},"nodes",[580,986,987],{},"work_item","), so a task cap of 20 minutes\ninside a step capped at 10 is refused when the chain loads.",[526,990,991,992,995,996,998,999,1001],{},"A cap in a repository's ",[580,993,994],{},"policy:"," (in ",[580,997,300],{},") or in the chain's own\n",[580,1000,994],{}," is a cap on the work item as a whole.",[542,1003,1005],{"id":1004},"how-a-policy-resolves","How a policy resolves",[526,1007,1008,1009,1013],{},"A work item freezes its ",[530,1010,1012],{"href":1011},"\u002Fconcepts\u002Fvocabulary#policy","policy"," when you file it. Kraft layers it from the\nbroadest source to the narrowest:",[1015,1016,1017,1028,1035,1040,1045],"ol",{},[859,1018,1019,1022,1023,614,1026,540],{},[580,1020,1021],{},"defaults"," and ",[580,1024,1025],{},"maxima",[580,1027,318],{},[859,1029,1030,1031,614,1033,540],{},"The repository's ",[580,1032,994],{},[580,1034,300],{},[859,1036,1037,1038,540],{},"The chain's ",[580,1039,994],{},[859,1041,1042,1043,540],{},"Each node's, step's, and task's own ",[580,1044,994],{},[859,1046,1047,1048,1051,1052,540],{},"Your item's own override, from ",[580,1049,1050],{},"kraft item create --policy"," or\n",[580,1053,1054],{},"kraft item set-policy",[526,1056,1057,1058,1062],{},"At ",[530,1059,1061],{"href":1060},"\u002Fconcepts\u002Fvocabulary#intake","intake",", Kraft refuses a layer that relaxes\nwhat it inherits, and names the scope. A bad policy therefore fails when you\nfile the item, not hours into a run.",[526,1064,1065,1066,1068,1069,1072,1073,540],{},"Your override comes last, so its operational values win over the template's.\nA ",[580,1067,598],{}," or ",[580,1070,1071],{},"timeout_minutes"," on an execution node wins over its fix\nloop's own ",[580,1074,598],{},[526,1076,1077],{},"An override's safety values only ever tighten:",[856,1079,1080,1087,1097,1103],{},[859,1081,1082,1083,1086],{},"An ",[580,1084,1085],{},"allowed_tools"," list intersects with what the scope already allows.",[859,1088,921,1089,1092,1093,1096],{},[580,1090,1091],{},"grants"," list keeps only the ",[530,1094,1091],{"href":1095},"\u002Fconcepts\u002Fvocabulary#grant"," the scope already holds.",[859,1098,1099,1102],{},[580,1100,1101],{},"deny_tools"," adds to the list.",[859,1104,921,1105,1108],{},[580,1106,1107],{},"sandbox"," must match any already set.",[526,1110,1111],{},"The chain narrowing the same field first never causes a refusal.",[526,1113,1114],{},"Your override is the one layer that can change after filing. On a running or\nwaiting item, a change takes effect from the next node entered and the next\ncheck of a wait.",[526,1116,1117,1118,1122,1123,1126],{},"A recovery plan inherits the task, step, or node that declares it. A fix loop,\nits ",[530,1119,1121],{"href":1120},"\u002Fconcepts\u002Fvocabulary#judge","judge",", a node's escalation task, and its conflict handler inherit their\nnode. A gate's ",[580,1124,1125],{},"auto_review"," inherits its gate.",[542,1128,1130],{"id":1129},"time-caps","Time caps",[526,1132,1133],{},"There are two clocks.",[856,1135,1136,1141],{},[859,1137,1138,1140],{},[580,1139,687],{}," counts running time. Paused time, external waits, gates,\nand rate-limited time do not count.",[859,1142,1143,1145],{},[580,1144,706],{}," counts wall-clock time, including waits, gates, and\nrate limits, less only a manual pause. For a task other than a wait, it is\nthe task's running time. For a wait, it is the wait's timeout.",[526,1147,1148,1149,1152,1153,1157],{},"Every clock counts from the scope's start in the current run. A person's\n",[580,1150,1151],{},"retry"," starts them all afresh. A rate-limit relaunch or a ",[530,1154,1156],{"href":1155},"\u002Fconcepts\u002Fvocabulary#stuck","stuck"," escalation's\nown retry does not.",[526,1159,1160,1161,1163],{},"A node's clock is its own, independent of its fix loop's ",[580,1162,1071],{},",\nwhich bounds only the fix cycles. A node's cap covers everything that runs as\nthat node: its tasks, recovery, fix loop, a gate's automated review, and the\nautomatic stuck-escalation turn. Your own escalation chat is not the node\nrunning, so it is not capped.",[526,1165,1166,1167,1170,1171,1173],{},"Hitting a cap stops the item and waits for you, with the reason \"",[580,1168,1169],{},"\u003Cscope>"," hit\nits time cap of N minutes\". The reason reads \"total time cap\" for\n",[580,1172,706],{},", and the scope reads \"the work item\" for the work item\nitself.",[526,1175,1176,1177,1180],{},"A time cap is never treated as a code failure. It spends no recovery or\nfix-loop attempt, and no stuck escalation answers it. A gate's own ",[580,1178,1179],{},"timeout","\nstops the item the same way, naming the gate, and the gate stays open for you\nto approve or reject.",[526,1182,1183,1184,1186],{},"A work item's ",[580,1185,706],{}," counts its gates and external waits, so\na cap of two days stops an item still waiting on a week-long approval. Size it\nfor the longest wait your chain allows.",[542,1188,1190],{"id":1189},"token-and-dollar-budgets","Token and dollar budgets",[526,1192,1193],{},"A token or dollar cap refuses to start the next agent launch once its scope, or\nany scope around it, has reached its cap. Kraft checks before each launch, gate\nreviewers and escalation turns included. It cannot interrupt a running agent,\nso overshoot is bounded by one launch's cost.",[526,1195,1196,1197,1200],{},"While an agent is still running, its spend counts too. Kraft prices the\nagent's known tokens against a shipped rate table and shows the result as an\nestimate (",[580,1198,1199],{},"~$4.20 (est.)",") until the session exits and the agent's own\nreported figure replaces it. A long session's spend can therefore trip a\ndollar cap before the session finishes, not only after.",[526,1202,1203],{},"Three things follow.",[856,1205,1206,1218,1221],{},[859,1207,1208,1209,1213,1214,540],{},"A finished launch whose ",[530,1210,1212],{"href":1211},"\u002Fconcepts\u002Fvocabulary#harness","harness"," reported no cost counts at an estimate\nfrom the same rate table. If Kraft cannot price it, the caps differ: see\n",[530,1215,1217],{"href":1216},"\u002Freference\u002Fharnesses\u002Fcost-reporting#harnesses-that-report-no-cost","Harnesses that report no cost",[859,1219,1220],{},"Launches that start together in one scope, such as a parallel step's tasks,\neach pass the check before any of them has spent. A shared scope's cap can be\novershot by up to their combined cost.",[859,1222,1223],{},"A launch that resumes an earlier agent session counts only what it added.",[526,1225,1226,1022,1228,614,1230,1232,1233,540],{},[580,1227,649],{},[580,1229,666],{},[580,1231,318],{}," stay the outer\nceilings, above any per-scope ",[580,1234,761],{},[526,1236,1237,1238,540],{},"For which harnesses report no cost and how Kraft estimates what they spent, see\n",[530,1239,432],{"href":433},[542,1241,1243],{"id":1242},"why-a-raise-is-bounded","Why a raise is bounded",[526,1245,1246,1247,1249],{},"You can raise the cap that stopped an item for that one item, and retry it. The\nraise is bounded so that an item cannot pass the ",[580,1248,1025],{}," you set for every item.",[856,1251,1252,1258,1261,1267],{},[859,1253,1254,1255,540],{},"An item's own cap may exceed the chain's, but only up to ",[580,1256,1257],{},"maxima.work_item",[859,1259,1260],{},"A cap on a node, step, or task may pass its level's default, up to its\nlevel's maximum, and never what an enclosing scope allows.",[859,1262,1263,1264,1266],{},"A limit set outside the item, such as ",[580,1265,666],{},", is not the item's\nto raise.",[859,1268,1269,1270,1273],{},"On spend a harness never reported, no higher number helps, because Kraft\nstill cannot show the scope is under the new cap. Only lifting the dollar cap\nwith ",[580,1271,1272],{},"--usd none"," passes it.",[526,1275,1276,1277,1279,1280,540],{},"The steps are in\n",[530,1278,80],{"href":81},", and the\ncommand's refusals are in ",[530,1281,1283],{"href":1282},"\u002Freference\u002Fcli\u002Fitem#raise-a-cap-that-stopped-an-item","Raise a cap that stopped an item",[542,1285,1287],{"id":1286},"the-shipped-implementer-cap","The shipped implementer cap",[526,1289,930,1290,1292,1293,1296],{},[580,1291,675],{}," task, which both shipped chains run, sets\n",[580,1294,1295],{},"time_cap_minutes: 120",". Successful implementer runs finish well inside that\ntime, so the cap binds only a run that has already gone wrong, for example a\nworker stuck waiting on a test run it backgrounded.",[526,1298,1299,1300,540],{},"A turn that ends with a background job still running fails the task: see\n",[530,1301,406],{"href":1302},"\u002Freference\u002Fchain-nodes\u002Fresult-file#who-must-write-it",[526,1304,1305,1306,1308,1309,1311,1312,1315],{},"A long plan can need more than 120 minutes. Raise the item's own cap, or set a\nlarger one on the task in ",[580,1307,691],{},". The task sets 120 minutes, above the\ncommented example's ",[580,1310,977],{}," default of 90, which a scope may do. A\n",[580,1313,1314],{},"maxima.tasks.time_cap_minutes"," (or a broader level's) below 120 makes Kraft\nrefuse both shipped chains at intake, so lower the task's cap to fit.",[542,1317,1319],{"id":1318},"why-maxima-start-unset","Why maxima start unset",[526,1321,1322,1323,1022,1325,1327],{},"A fresh install ships with ",[580,1324,770],{},[580,1326,784],{}," commented out. An\nuncommented value is a real ceiling, and Kraft must not silently cap someone\nwho never chose a number.",[526,1329,1330,1331,1333,1334,1336,1337,1340],{},"A safety field listed only in ",[580,1332,1025],{},", such as ",[580,1335,1085],{},", starts at its\nmaximum and can only be narrowed. That is why the reference example sets no\n",[580,1338,1339],{},"maxima.allowed_tools",": a list there binds every agent task on every harness.",[526,1342,1343,1344,1347,1348,1350,1351,1353,1354,833,1357,1360],{},"Not every harness can enforce a tool list. On ",[580,1345,1346],{},"claude",", the harness every\nshipped task uses, a list removes every built-in tool it does not name. Other\nharnesses enforce it differently or refuse to launch under one. See\n",[530,1349,436],{"href":437}," for each harness, and\n",[530,1352,318],{"href":319}," for the web tools ",[580,1355,1356],{},"codex",[580,1358,1359],{},"cursor"," need in the list.",[542,1362,1364],{"id":1363},"related","Related",[856,1366,1367,1372,1382],{},[859,1368,1369,1371],{},[530,1370,318],{"href":319},": every key and its default.",[859,1373,1374,1376,1377,1022,1379,1381],{},[530,1375,436],{"href":437},": how ",[580,1378,1085],{},[580,1380,1101],{}," are enforced.",[859,1383,1384,1386],{},[530,1385,48],{"href":49},": what chain, node, step, and task mean.",{"title":1388,"searchDepth":1389,"depth":1389,"links":1390},"",2,[1391,1392,1397,1398,1399,1400,1401,1402,1403,1404],{"id":544,"depth":1389,"text":545},{"id":798,"depth":1389,"text":799,"children":1393},[1394],{"id":914,"depth":1395,"text":1396},3,"Why loops: ships empty",{"id":944,"depth":1389,"text":945},{"id":1004,"depth":1389,"text":1005},{"id":1129,"depth":1389,"text":1130},{"id":1189,"depth":1389,"text":1190},{"id":1242,"depth":1389,"text":1243},{"id":1286,"depth":1389,"text":1287},{"id":1318,"depth":1389,"text":1319},{"id":1363,"depth":1389,"text":1364},"How Kraft bounds time, tokens, and dollars, why a raise is bounded, and how a policy resolves from policy.yaml down to a single task.","md",null,{},true,{"title":40,"description":1405},"eJ3P3DA5oXsd2Q2Dg4-MYt8PihKaHwjgdUyGSpuxwhQ",[1413,1415],{"title":36,"path":37,"stem":38,"description":1414,"children":-1},"A work item's path from filing to archive, what happens inside a node, and where a steer, a fix loop and an escalation fit.",{"title":44,"path":45,"stem":46,"description":1416,"children":-1},"Why Kraft answers a worker's permission prompts itself, and how each harness lets it.",1791801166724]