[{"data":1,"prerenderedAt":2095},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-policy":504,"-reference-configuration-policy-surround":2090},[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":310,"body":506,"description":2084,"extension":2085,"links":2086,"meta":2087,"navigation":603,"path":311,"seo":2088,"stem":312,"__hash__":2089},"docs\u002F5.reference\u002F03.configuration\u002F03.policy.md",{"type":507,"value":508,"toc":2071},"minimark",[509,526,537,542,737,757,762,1158,1164,1168,1178,1225,1260,1263,1328,1335,1338,1413,1445,1448,1479,1623,1643,1647,1660,1901,1924,1927,1957,1963,2023,2044,2048,2067],[510,511,512,515,516,521,522,525],"p",{},[513,514,310],"code",{}," sets caps, budget, concurrency, archiving, and defaults for every ",[517,518,520],"a",{"href":519},"\u002Fconcepts\u002Fvocabulary#work-item","work item",". It lives at ",[513,523,524],{},"$KRAFT_HOME\u002Fconfig\u002Fpolicy.yaml",".",[510,527,528,531,532,536],{},[513,529,530],{},"kraft admin reload"," rereads this file with the same validation as startup. If the file does not validate, Kraft keeps the running ",[517,533,535],{"href":534},"\u002Fconcepts\u002Fvocabulary#policy","policy"," and reload exits 1 naming why. New loop caps apply to loops that start after the reload.",[510,538,539,540,525],{},"For how caps, maxima and layers combine, see ",[517,541,40],{"href":41},[543,544,550],"pre",{"className":545,"code":546,"filename":547,"language":548,"meta":549,"style":549},"language-yaml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","loops: {}\ndefault: { attempts: 3, wall_clock_s: 3600 }\n\nfindings:\n  loop_severities: [critical, important]\n\nmax_concurrent: 3\n\nbudget:\n  work_item_usd: 10\n  daily_usd: 50\n\nrate_limit_retries: 5\nforge_cli_timeout_s: 120\n\narchive:\n  after_days: 30\n","config\u002Fpolicy.yaml","yaml","",[513,551,552,565,598,605,614,635,640,651,656,664,675,686,691,702,713,718,726],{"__ignoreMap":549},[553,554,557,561],"span",{"class":555,"line":556},"line",1,[553,558,560],{"class":559},"sb7M8","loops",[553,562,564],{"class":563},"s7iLA",": {}\n",[553,566,568,571,574,577,580,584,587,590,592,595],{"class":555,"line":567},2,[553,569,570],{"class":559},"default",[553,572,573],{"class":563},": { ",[553,575,576],{"class":559},"attempts",[553,578,579],{"class":563},": ",[553,581,583],{"class":582},"ssYy9","3",[553,585,586],{"class":563},", ",[553,588,589],{"class":559},"wall_clock_s",[553,591,579],{"class":563},[553,593,594],{"class":582},"3600",[553,596,597],{"class":563}," }\n",[553,599,601],{"class":555,"line":600},3,[553,602,604],{"emptyLinePlaceholder":603},true,"\n",[553,606,608,611],{"class":555,"line":607},4,[553,609,610],{"class":559},"findings",[553,612,613],{"class":563},":\n",[553,615,617,620,623,627,629,632],{"class":555,"line":616},5,[553,618,619],{"class":559},"  loop_severities",[553,621,622],{"class":563},": [",[553,624,626],{"class":625},"semJd","critical",[553,628,586],{"class":563},[553,630,631],{"class":625},"important",[553,633,634],{"class":563},"]\n",[553,636,638],{"class":555,"line":637},6,[553,639,604],{"emptyLinePlaceholder":603},[553,641,643,646,648],{"class":555,"line":642},7,[553,644,645],{"class":559},"max_concurrent",[553,647,579],{"class":563},[553,649,650],{"class":582},"3\n",[553,652,654],{"class":555,"line":653},8,[553,655,604],{"emptyLinePlaceholder":603},[553,657,659,662],{"class":555,"line":658},9,[553,660,661],{"class":559},"budget",[553,663,613],{"class":563},[553,665,667,670,672],{"class":555,"line":666},10,[553,668,669],{"class":559},"  work_item_usd",[553,671,579],{"class":563},[553,673,674],{"class":582},"10\n",[553,676,678,681,683],{"class":555,"line":677},11,[553,679,680],{"class":559},"  daily_usd",[553,682,579],{"class":563},[553,684,685],{"class":582},"50\n",[553,687,689],{"class":555,"line":688},12,[553,690,604],{"emptyLinePlaceholder":603},[553,692,694,697,699],{"class":555,"line":693},13,[553,695,696],{"class":559},"rate_limit_retries",[553,698,579],{"class":563},[553,700,701],{"class":582},"5\n",[553,703,705,708,710],{"class":555,"line":704},14,[553,706,707],{"class":559},"forge_cli_timeout_s",[553,709,579],{"class":563},[553,711,712],{"class":582},"120\n",[553,714,716],{"class":555,"line":715},15,[553,717,604],{"emptyLinePlaceholder":603},[553,719,721,724],{"class":555,"line":720},16,[553,722,723],{"class":559},"archive",[553,725,613],{"class":563},[553,727,729,732,734],{"class":555,"line":728},17,[553,730,731],{"class":559},"  after_days",[553,733,579],{"class":563},[553,735,736],{"class":582},"30\n",[510,738,739,740,743,744,747,748,525],{},"The shipped file also holds ",[513,741,742],{},"defaults:"," and ",[513,745,746],{},"maxima:"," as comments; see ",[517,749,751,743,754],{"href":750},"#defaults-and-maxima",[513,752,753],{},"defaults",[513,755,756],{},"maxima",[758,759,761],"h2",{"id":760},"top-level-keys","Top-level keys",[763,764,765,784],"table",{},[766,767,768],"thead",{},[769,770,771,775,778,781],"tr",{},[772,773,774],"th",{},"Field",[772,776,777],{},"Type",[772,779,780],{},"Default",[772,782,783],{},"Meaning",[785,786,787,813,850,866,898,914,931,948,980,1000,1018,1039,1058,1074,1094,1115,1138],"tbody",{},[769,788,789,795,798,801],{},[790,791,792],"td",{},[513,793,794],{},"loops.\u003Cname>",[790,796,797],{},"mapping",[790,799,800],{},"none",[790,802,803,804,743,806,808,809,525],{},"Sets ",[513,805,576],{},[513,807,589],{}," for one named loop. See ",[517,810,812],{"href":811},"#loop-keys","Loop keys",[769,814,815,819,821,827],{},[790,816,817],{},[513,818,570],{},[790,820,797],{},[790,822,823,824],{},"required; shipped ",[513,825,826],{},"{attempts: 3, wall_clock_s: 3600}",[790,828,829,830,743,832,834,835,839,840,842,843,846,847,849],{},"The ",[513,831,576],{},[513,833,589],{}," ceiling for every ",[517,836,838],{"href":837},"\u002Fconcepts\u002Fvocabulary#fix-loop","fix loop"," not named in ",[513,841,560],{},"; a ",[513,844,845],{},"max_attempts"," on the loop itself wins. Without it ",[513,848,310],{}," does not load, and Kraft refuses new work.",[769,851,852,856,859,863],{},[790,853,854],{},[513,855,645],{},[790,857,858],{},"integer",[790,860,861],{},[513,862,583],{},[790,864,865],{},"How many work items may be active at once across all repos, however they were started.",[769,867,868,873,876,881],{},[790,869,870],{},[513,871,872],{},"auto_escalate_stuck",[790,874,875],{},"boolean",[790,877,878],{},[513,879,880],{},"true",[790,882,883,884,888,889,893,894,897],{},"Whether a ",[517,885,887],{"href":886},"\u002Fconcepts\u002Fvocabulary#stuck","stuck"," stop auto-dispatches an ",[517,890,892],{"href":891},"\u002Fconcepts\u002Fvocabulary#escalation-turn","escalation turn"," on a node that declares no ",[513,895,896],{},"escalation"," of its own.",[769,899,900,905,907,911],{},[790,901,902],{},[513,903,904],{},"auto_escalate_stuck_cap",[790,906,858],{},[790,908,909],{},[513,910,583],{},[790,912,913],{},"How many times one stuck run is auto-escalated before it is left for you.",[769,915,916,921,923,928],{},[790,917,918],{},[513,919,920],{},"auto_escalate_delay_s",[790,922,858],{},[790,924,925],{},[513,926,927],{},"0",[790,929,930],{},"Seconds to wait after the triggering event before an auto-escalation fires, so a person about to look is not preempted.",[769,932,933,938,940,945],{},[790,934,935],{},[513,936,937],{},"auto_review_attempts",[790,939,858],{},[790,941,942],{},[513,943,944],{},"1",[790,946,947],{},"How many automated-review attempts one pending gate may spend before it is left for you.",[769,949,950,954,957,962],{},[790,951,952],{},[513,953,707],{},[790,955,956],{},"number",[790,958,959],{},[513,960,961],{},"120",[790,963,964,965,969,970,586,973,586,976,979],{},"Seconds one ",[517,966,968],{"href":967},"\u002Fconcepts\u002Fvocabulary#forge","forge"," CLI call (",[513,971,972],{},"gh",[513,974,975],{},"glab",[513,977,978],{},"git",") may run before Kraft kills it and reports a forge error. Read at startup.",[769,981,982,987,989,994],{},[790,983,984],{},[513,985,986],{},"forge_poll_s",[790,988,858],{},[790,990,991],{},[513,992,993],{},"300",[790,995,996,997,525],{},"Seconds between the MR-closed poller's ticks, which ask the forge about every item parked at a merge-request node. Minimum ",[513,998,999],{},"30",[769,1001,1002,1007,1010,1015],{},[790,1003,1004],{},[513,1005,1006],{},"findings.loop_severities",[790,1008,1009],{},"list",[790,1011,1012],{},[513,1013,1014],{},"[critical, important]",[790,1016,1017],{},"Which review-finding severities burn a fix cycle; lower ones are recorded and shown at the human-review gate.",[769,1019,1020,1025,1027,1036],{},[790,1021,1022],{},[513,1023,1024],{},"budget.work_item_usd",[790,1026,956],{},[790,1028,1029,1032,1033],{},[513,1030,1031],{},"null"," (off); shipped ",[513,1034,1035],{},"10",[790,1037,1038],{},"Dollar cap per work item across all its loops. Remove the key to turn it off.",[769,1040,1041,1046,1048,1055],{},[790,1042,1043],{},[513,1044,1045],{},"budget.daily_usd",[790,1047,956],{},[790,1049,1050,1032,1052],{},[513,1051,1031],{},[513,1053,1054],{},"50",[790,1056,1057],{},"Dollar cap for every work item on this instance since local midnight. Remove the key to turn it off.",[769,1059,1060,1064,1066,1071],{},[790,1061,1062],{},[513,1063,696],{},[790,1065,858],{},[790,1067,1068],{},[513,1069,1070],{},"5",[790,1072,1073],{},"How many times Kraft relaunches a work item after a rejected API rate limit before stopping and waiting for you.",[769,1075,1076,1081,1083,1091],{},[790,1077,1078],{},[513,1079,1080],{},"archive.after_days",[790,1082,858],{},[790,1084,1085,1086,1088,1089],{},"unset (off); ",[513,1087,927],{}," is also off; shipped ",[513,1090,999],{},[790,1092,1093],{},"Completed and abandoned items older than this auto-archive. The board's Done header shows the number, and no auto-archive note when the key is absent.",[769,1095,1096,1101,1103,1105],{},[790,1097,1098],{},[513,1099,1100],{},"triggers",[790,1102,1009],{},[790,1104,800],{},[790,1106,1107,1108,1110,1111,525],{},"Moved to ",[513,1109,326],{},"; see ",[517,1112,1114],{"href":1113},"#retired-and-moved-keys","Retired and moved keys",[769,1116,1117,1121,1123,1126],{},[790,1118,1119],{},[513,1120,753],{},[790,1122,797],{},[790,1124,1125],{},"unset",[790,1127,1128,1129,1131,1132,525],{},"Starting points that any scope may move within ",[513,1130,756],{},". See ",[517,1133,1134,743,1136],{"href":750},[513,1135,753],{},[513,1137,756],{},[769,1139,1140,1144,1146,1149],{},[790,1141,1142],{},[513,1143,756],{},[790,1145,797],{},[790,1147,1148],{},"unset (no bound)",[790,1150,1151,1152,525],{},"The ceiling on policy overrides. See ",[517,1153,1154,743,1156],{"href":750},[513,1155,753],{},[513,1157,756],{},[510,1159,1160,1161,525],{},"A budget cap refuses to start the next agent task and cannot interrupt one that is running. See ",[517,1162,40],{"href":1163},"\u002Fconcepts\u002Fcaps-and-budgets#token-and-dollar-budgets",[1165,1166,812],"h3",{"id":1167},"loop-keys",[510,1169,1170,1172,1173,743,1175,1177],{},[513,1171,560],{}," maps a loop key to its own ",[513,1174,576],{},[513,1176,589],{},". A key that names no live loop is silently unused, so spell it exactly:",[763,1179,1180,1190],{},[766,1181,1182],{},[769,1183,1184,1187],{},[772,1185,1186],{},"Key",[772,1188,1189],{},"Names",[785,1191,1192,1205,1215],{},[769,1193,1194,1199],{},[790,1195,1196],{},[513,1197,1198],{},"\u003Cnode id>.fix_loop",[790,1200,1201,1202,525],{},"The fix loop of that exec node; see ",[517,1203,1204],{"href":387},"Fix loop",[769,1206,1207,1212],{},[790,1208,1209],{},[513,1210,1211],{},"\u003Cnode id>.on_base_changed",[790,1213,1214],{},"The restarts of that node when a rebase moves the base.",[769,1216,1217,1222],{},[790,1218,1219],{},[513,1220,1221],{},"\u003Cgate id>_reject_loop",[790,1223,1224],{},"The rejections of that gate.",[543,1226,1228],{"className":545,"code":1227,"filename":547,"language":548,"meta":549,"style":549},"loops:\n  verification.fix_loop: { attempts: 5, wall_clock_s: 7200 }\n",[513,1229,1230,1236],{"__ignoreMap":549},[553,1231,1232,1234],{"class":555,"line":556},[553,1233,560],{"class":559},[553,1235,613],{"class":563},[553,1237,1238,1241,1243,1245,1247,1249,1251,1253,1255,1258],{"class":555,"line":567},[553,1239,1240],{"class":559},"  verification.fix_loop",[553,1242,573],{"class":563},[553,1244,576],{"class":559},[553,1246,579],{"class":563},[553,1248,1070],{"class":582},[553,1250,586],{"class":563},[553,1252,589],{"class":559},[553,1254,579],{"class":563},[553,1256,1257],{"class":582},"7200",[553,1259,597],{"class":563},[1165,1261,1114],{"id":1262},"retired-and-moved-keys",[763,1264,1265,1277],{},[766,1266,1267],{},[769,1268,1269,1271,1274],{},[772,1270,1186],{},[772,1272,1273],{},"Replaced by",[772,1275,1276],{},"When a file still has it",[785,1278,1279,1304],{},[769,1280,1281,1285,1295],{},[790,1282,1283],{},[513,1284,1100],{},[790,1286,1287,1290,1291,1110,1293],{},[513,1288,1289],{},"schedules:"," in ",[513,1292,326],{},[517,1294,424],{"href":425},[790,1296,1297,1298,1301,1302,525],{},"Read, so an upgraded file keeps firing; ",[513,1299,1300],{},"kraft admin doctor"," names the move. New ones go in ",[513,1303,326],{},[769,1305,1306,1311,1322],{},[790,1307,1308],{},[513,1309,1310],{},"wait_timeout_minutes",[790,1312,1313,1316,1317,1290,1320],{},[513,1314,1315],{},"total_time_cap_minutes",", or ",[513,1318,1319],{},"maxima.tasks.total_time_cap_minutes",[513,1321,310],{},[790,1323,1324,1325,1327],{},"Read, with a warning in the log. In ",[513,1326,753],{}," it does not load. A save of a chain that sets it, or of a work item's override, is refused with the name to use.",[758,1329,1331,743,1333],{"id":1330},"defaults-and-maxima",[513,1332,753],{},[513,1334,756],{},[510,1336,1337],{},"Kraft ships these commented out, because an uncommented value is a real ceiling. This example is illustrative. Uncomment and edit it to use it:",[543,1339,1341],{"className":545,"code":1340,"filename":547,"language":548,"meta":549,"style":549},"# defaults:\n#   timeout_minutes: 60\n#   max_attempts: 3\n#   allowed_harnesses: [codex, claude]\n#   escalation_harness: claude\n#   work_item: { time_cap_minutes: 480, total_time_cap_minutes: 2880, budget_usd: 20 }\n#   nodes:     { time_cap_minutes: 180 }\n#   steps:     { time_cap_minutes: 120 }\n#   tasks:     { time_cap_minutes: 90 }\n# maxima:\n#   timeout_minutes: 180\n#   allowed_harnesses: [codex, claude]\n#   work_item: { time_cap_minutes: 1440, token_budget: 2000000, budget_usd: 25 }\n#   tasks:     { time_cap_minutes: 240, total_time_cap_minutes: 10080 }\n",[513,1342,1343,1349,1354,1359,1364,1369,1374,1379,1384,1389,1394,1399,1403,1408],{"__ignoreMap":549},[553,1344,1345],{"class":555,"line":556},[553,1346,1348],{"class":1347},"sq92B","# defaults:\n",[553,1350,1351],{"class":555,"line":567},[553,1352,1353],{"class":1347},"#   timeout_minutes: 60\n",[553,1355,1356],{"class":555,"line":600},[553,1357,1358],{"class":1347},"#   max_attempts: 3\n",[553,1360,1361],{"class":555,"line":607},[553,1362,1363],{"class":1347},"#   allowed_harnesses: [codex, claude]\n",[553,1365,1366],{"class":555,"line":616},[553,1367,1368],{"class":1347},"#   escalation_harness: claude\n",[553,1370,1371],{"class":555,"line":637},[553,1372,1373],{"class":1347},"#   work_item: { time_cap_minutes: 480, total_time_cap_minutes: 2880, budget_usd: 20 }\n",[553,1375,1376],{"class":555,"line":642},[553,1377,1378],{"class":1347},"#   nodes:     { time_cap_minutes: 180 }\n",[553,1380,1381],{"class":555,"line":653},[553,1382,1383],{"class":1347},"#   steps:     { time_cap_minutes: 120 }\n",[553,1385,1386],{"class":555,"line":658},[553,1387,1388],{"class":1347},"#   tasks:     { time_cap_minutes: 90 }\n",[553,1390,1391],{"class":555,"line":666},[553,1392,1393],{"class":1347},"# maxima:\n",[553,1395,1396],{"class":555,"line":677},[553,1397,1398],{"class":1347},"#   timeout_minutes: 180\n",[553,1400,1401],{"class":555,"line":688},[553,1402,1363],{"class":1347},[553,1404,1405],{"class":555,"line":693},[553,1406,1407],{"class":1347},"#   work_item: { time_cap_minutes: 1440, token_budget: 2000000, budget_usd: 25 }\n",[553,1409,1410],{"class":555,"line":704},[553,1411,1412],{"class":1347},"#   tasks:     { time_cap_minutes: 240, total_time_cap_minutes: 10080 }\n",[510,1414,1415,1417,1418,586,1421,586,1423,586,1426,586,1429,1432,1433,1417,1435,586,1438,586,1440,586,1442,1444],{},[513,1416,753],{}," takes ",[513,1419,1420],{},"timeout_minutes",[513,1422,845],{},[513,1424,1425],{},"allowed_harnesses",[513,1427,1428],{},"escalation_harness",[513,1430,1431],{},"escalation_grants"," and the per-level caps. ",[513,1434,756],{},[513,1436,1437],{},"allowed_tools",[513,1439,1425],{},[513,1441,1420],{},[513,1443,845],{}," and the per-level caps.",[510,1446,1447],{},"Two rules hold for both sections:",[1449,1450,1451,1472],"ul",{},[1452,1453,1454,1455,1458,1459,1458,1462,1458,1465,1468,1469,1471],"li",{},"A narrower level's cap may not exceed a broader one's (",[513,1456,1457],{},"tasks"," \u003C= ",[513,1460,1461],{},"steps",[513,1463,1464],{},"nodes",[513,1466,1467],{},"work_item","), and a ",[513,1470,753],{}," entry may not exceed its level's maximum. Kraft refuses either when it reads the file, naming both.",[1452,1473,1474,1475,1478],{},"A cap written flat (",[513,1476,1477],{},"defaults: time_cap_minutes: 30",") is refused, with a message naming the level form to use.",[763,1480,1481,1493],{},[766,1482,1483],{},[769,1484,1485,1487,1489,1491],{},[772,1486,774],{},[772,1488,777],{},[772,1490,780],{},[772,1492,783],{},[785,1494,1495,1515,1548,1577,1609],{},[769,1496,1497,1505,1508,1510],{},[790,1498,1499,586,1501,586,1503],{},[513,1500,1420],{},[513,1502,845],{},[513,1504,1425],{},[790,1506,1507],{},"integer, integer, list",[790,1509,1125],{},[790,1511,1512,1513,525],{},"Operational starting points that any layer may move in either direction, bounded only by ",[513,1514,756],{},[769,1516,1517,1521,1524,1529],{},[790,1518,1519],{},[513,1520,1428],{},[790,1522,1523],{},"string",[790,1525,1526],{},[513,1527,1528],{},"claude",[790,1530,829,1531,1290,1535,1537,1538,1541,1542,1544,1545,1547],{},[517,1532,1534],{"href":1533},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile",[513,1536,318],{}," that an escalation turn runs on, or ",[513,1539,1540],{},"item",". In ",[513,1543,753],{}," only: a ",[513,1546,756],{}," that names it does not load, and Kraft refuses new work.",[769,1549,1550,1554,1556,1561],{},[790,1551,1552],{},[513,1553,1431],{},[790,1555,1009],{},[790,1557,1558],{},[513,1559,1560],{},"[git-commit, git-rebase, git-push]",[790,1562,829,1563,1567,1568,1571,1572,1574,1575,525],{},[517,1564,1566],{"href":1565},"\u002Fconcepts\u002Fvocabulary#grant","grants"," every escalation turn holds; ",[513,1569,1570],{},"[]"," is none. In ",[513,1573,753],{}," only, like ",[513,1576,1428],{},[769,1578,1579,1589,1591,1594],{},[790,1580,1581,586,1583,586,1585,586,1587],{},[513,1582,1467],{},[513,1584,1464],{},[513,1586,1461],{},[513,1588,1457],{},[790,1590,797],{},[790,1592,1593],{},"unset (unbounded)",[790,1595,1596,1597,586,1600,586,1602,743,1605,1608],{},"Per-level values for ",[513,1598,1599],{},"time_cap_minutes",[513,1601,1315],{},[513,1603,1604],{},"token_budget",[513,1606,1607],{},"budget_usd","; a gate is a node.",[769,1610,1611,1616,1618,1620],{},[790,1612,1613],{},[513,1614,1615],{},"maxima.allowed_tools",[790,1617,1009],{},[790,1619,1148],{},[790,1621,1622],{},"A safety field that starts at its maximum and can only be narrowed.",[1624,1625,1626,1627,1629,1630,1634,1635,1637,1638,1642],"warning",{},"Do not set ",[513,1628,1615],{}," unless every ",[517,1631,1633],{"href":1632},"\u002Fconcepts\u002Fvocabulary#harness","harness"," you use can run under it. A safety field set only in ",[513,1636,756],{}," binds every task. See ",[517,1639,1641],{"href":1640},"#tool-lists","Tool lists"," for the harnesses that refuse a list.",[758,1644,1646],{"id":1645},"policy-fields","Policy fields",[510,1648,1649,1650,1653,1654,1656,1657,1659],{},"These keys go in a ",[513,1651,1652],{},"policy:"," block on a repo (",[513,1655,292],{},"), a chain, a node, a step, a task, or a work item's override. Kraft applies the layers from the broadest to the narrowest. The \"Rule down the layers\" column says how a layer may change what it inherits: the safety fields only narrow, and the operational ones move either way within ",[513,1658,756],{},". Kraft refuses a layer that breaks its row's rule, and names the scope.",[763,1661,1662,1675],{},[766,1663,1664],{},[769,1665,1666,1668,1670,1673],{},[772,1667,774],{},[772,1669,777],{},[772,1671,1672],{},"Rule down the layers",[772,1674,783],{},[785,1676,1677,1700,1717,1744,1778,1795,1815,1836,1853,1871,1886],{},[769,1678,1679,1683,1685,1688],{},[790,1680,1681],{},[513,1682,1437],{},[790,1684,1009],{},[790,1686,1687],{},"Only narrows.",[790,1689,1690,1691,1694,1695,1697,1698,525],{},"Tool names the agent may use; the ",[517,1692,1693],{"href":421},"permission gate"," answers from it. Unset allows every tool, and ",[513,1696,1570],{}," allows none. See ",[517,1699,1641],{"href":1640},[769,1701,1702,1707,1709,1712],{},[790,1703,1704],{},[513,1705,1706],{},"deny_tools",[790,1708,1009],{},[790,1710,1711],{},"Only accumulates.",[790,1713,1714,1715,525],{},"Tool names the permission gate denies, on top of ",[513,1716,1437],{},[769,1718,1719,1723,1725,1728],{},[790,1720,1721],{},[513,1722,1566],{},[790,1724,1009],{},[790,1726,1727],{},"Only accumulates; an item override can drop one, never add one.",[790,1729,1730,1731,586,1734,586,1737,1131,1740,525],{},"Named git operations a task is guaranteed: ",[513,1732,1733],{},"git-commit",[513,1735,1736],{},"git-rebase",[513,1738,1739],{},"git-push",[517,1741,1743],{"href":1742},"\u002Freference\u002Fpermissions#grants","Grants",[769,1745,1746,1751,1753,1760],{},[790,1747,1748],{},[513,1749,1750],{},"sandbox",[790,1752,797],{},[790,1754,1755,1756,1759],{},"Set once, never changed or removed, its ",[513,1757,1758],{},"resources"," included.",[790,1761,1762,1763,1766,1767,1770,1771,1775,1776,525],{},"Runs every process of the whole work item in ",[513,1764,1765],{},"docker run",", within its ",[517,1768,1769],{"href":345},"resource limits",". Two scopes with different ",[517,1772,1774],{"href":1773},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxes"," are refused. See ",[517,1777,338],{"href":339},[769,1779,1780,1784,1786,1792],{},[790,1781,1782],{},[513,1783,1604],{},[790,1785,858],{},[790,1787,1788,1789,1791],{},"Within its level's ",[513,1790,756],{},"; a child's never above its parent's.",[790,1793,1794],{},"Tokens (input plus output) the scope's launches may spend before the next launch is refused.",[769,1796,1797,1801,1803,1808],{},[790,1798,1799],{},[513,1800,1607],{},[790,1802,956],{},[790,1804,1805,1806,525],{},"As ",[513,1807,1604],{},[790,1809,1810,1811,743,1813,525],{},"The same cap in dollars, under ",[513,1812,1024],{},[513,1814,1045],{},[769,1816,1817,1821,1823,1828],{},[790,1818,1819],{},[513,1820,1425],{},[790,1822,1009],{},[790,1824,1825,1826,525],{},"Within ",[513,1827,756],{},[790,1829,1830,1831,1835],{},"Harness profiles an agent task may select; Kraft refuses others at ",[517,1832,1834],{"href":1833},"\u002Fconcepts\u002Fvocabulary#intake","intake"," and again at launch.",[769,1837,1838,1842,1844,1847],{},[790,1839,1840],{},[513,1841,1428],{},[790,1843,1523],{},[790,1845,1846],{},"Any value, execution node or broader.",[790,1848,1849,1850,1852],{},"The harness profile an escalation turn runs on; a name ",[513,1851,318],{}," does not define is refused.",[769,1854,1855,1861,1863,1868],{},[790,1856,1857,586,1859],{},[513,1858,845],{},[513,1860,1420],{},[790,1862,858],{},[790,1864,1825,1865,1867],{},[513,1866,756],{},"; execution node or broader.",[790,1869,1870],{},"Bound the node's fix loop; a step, task or gate refuses them.",[769,1872,1873,1877,1879,1883],{},[790,1874,1875],{},[513,1876,1599],{},[790,1878,858],{},[790,1880,1805,1881,525],{},[513,1882,1604],{},[790,1884,1885],{},"Running time of the scope; a launch past it is refused and a running process is killed at it.",[769,1887,1888,1892,1894,1898],{},[790,1889,1890],{},[513,1891,1315],{},[790,1893,858],{},[790,1895,1805,1896,525],{},[513,1897,1599],{},[790,1899,1900],{},"Wall-clock time of the scope, including waits and gates, less only a manual pause. For a wait it is the wait's timeout.",[510,1902,1903,1904,1906,1907,1910,1911,1914,1915,1917,1918,1110,1920,525],{},"A launch into a ",[513,1905,1750],{}," with neither ",[513,1908,1909],{},"network:"," nor ",[513,1912,1913],{},"unrestricted_network: true"," is refused. Which tool policies a ",[513,1916,1750],{}," refuses depends on its ",[513,1919,1909],{},[517,1921,1923],{"href":1922},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks#permission-checks-under-network","Tool policy",[1165,1925,1641],{"id":1926},"tool-lists",[510,1928,1929,743,1931,1933,1934,586,1937,1940,1941,1944,1945,1948,1949,1952,1953,1956],{},[513,1930,1437],{},[513,1932,1706],{}," hold tool names, never permission rules. Use a bare tool (",[513,1935,1936],{},"Bash",[513,1938,1939],{},"Read",") or one exact MCP tool (",[513,1942,1943],{},"mcp__kraft__report_progress","). Kraft refuses a scoped rule (",[513,1946,1947],{},"Bash(git *)","), a glob (",[513,1950,1951],{},"mcp__github__*",") or a whole server (",[513,1954,1955],{},"mcp__github",") wherever the list is read, and the message names the field and the name to write instead.",[510,1958,1959,1960,1962],{},"What a harness does under an ",[513,1961,1437],{}," list:",[763,1964,1965,1975],{},[766,1966,1967],{},[769,1968,1969,1972],{},[772,1970,1971],{},"Harness",[772,1973,1974],{},"Under a list",[785,1976,1977,1990,2008],{},[769,1978,1979,1987],{},[790,1980,1981,586,1984],{},[513,1982,1983],{},"gemini",[513,1985,1986],{},"antigravity",[790,1988,1989],{},"Refuses to launch, because it has no tool-list capability.",[769,1991,1992,1997],{},[790,1993,1994],{},[513,1995,1996],{},"codex",[790,1998,1999,2000,2003,2004,2007],{},"Enforces the list through Kraft's ",[517,2001,2002],{"href":421},"permission hook",", but its web tools never reach the hook, so a list that leaves out ",[513,2005,2006],{},"WebSearch"," is refused.",[769,2009,2010,2015],{},[790,2011,2012],{},[513,2013,2014],{},"cursor",[790,2016,2017,2018,743,2021,2007],{},"Enforces the list through the hook, but its web tools never reach it, so a list that leaves out ",[513,2019,2020],{},"WebFetch",[513,2022,2006],{},[510,2024,2025,2026,2028,2029,586,2032,586,2035,2038,2039,2043],{},"Allowing ",[513,2027,1936],{}," allows its read-only use without a gate ask. Claude runs a read-only shell command (",[513,2030,2031],{},"cat",[513,2033,2034],{},"ls",[513,2036,2037],{},"git status",") itself, so it can read any file the ",[517,2040,2042],{"href":2041},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," holds, gitignored ones included.",[758,2045,2047],{"id":2046},"related","Related",[1449,2049,2050,2055,2060],{},[1452,2051,2052,2054],{},[517,2053,40],{"href":41},": how caps, maxima and layers combine.",[1452,2056,2057,2059],{},[517,2058,420],{"href":421},": how tool lists and grants are enforced.",[1452,2061,2062,2064,2065,525],{},[517,2063,376],{"href":377},": where a chain, node, step or task sets its own ",[513,2066,1652],{},[2068,2069,2070],"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 .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}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 .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}",{"title":549,"searchDepth":567,"depth":567,"links":2072},[2073,2078,2080,2083],{"id":760,"depth":567,"text":2074,"children":2075},"Top-​level keys",[2076,2077],{"id":1167,"depth":600,"text":812},{"id":1262,"depth":600,"text":1114},{"id":1330,"depth":567,"text":2079},"defaults and maxima",{"id":1645,"depth":567,"text":1646,"children":2081},[2082],{"id":1926,"depth":600,"text":1641},{"id":2046,"depth":567,"text":2047},"Every field in policy.yaml: caps, budget, concurrency, archiving, defaults and maxima, and the policy fields a layer may set.","md",null,{},{"title":310,"description":2084},"w4rvPLAwP-epL-NQa_L2tpUf_FfwY7v2fsPRk4xWkvc",[2091,2093],{"title":306,"path":307,"stem":308,"description":2092,"children":-1},"Declare a root repository with member submodules in repos.yaml, and what it means for sandboxing and publication.",{"title":314,"path":315,"stem":316,"description":2094,"children":-1},"The sections of library.yaml, the keys a library task takes for each kind, and how chains\u002F*.yaml files compose them into chain templates.",1791801255998]