[{"data":1,"prerenderedAt":1405},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-sandbox":520,"-reference-configuration-sandbox-surround":1400},[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":346,"body":522,"description":1393,"extension":1394,"links":1395,"meta":1396,"navigation":1397,"path":347,"seo":1398,"stem":348,"__hash__":1399},"docs\u002F5.reference\u002F03.configuration\u002F10.sandbox\u002Findex.md",{"type":523,"value":524,"toc":1382},"minimark",[525,543,699,707,720,955,969,973,988,993,1132,1135,1185,1188,1191,1211,1214,1245,1248,1275,1281,1287,1304,1307,1311,1337,1341,1378],[526,527,528,529,537,538,542],"p",{},"A repository's ",[530,531,533],"a",{"href":532},"\u002Freference\u002Fconfiguration\u002Frepos#sandbox",[534,535,536],"code",{},"sandbox"," setting runs its ",[530,539,541],{"href":540},"\u002Fconcepts\u002Fvocabulary#worker","workers"," in a container. This page lists the keys of that setting and what reaches the container from the host. The other pages in this section cover each part in turn.",[544,545,551],"pre",{"className":546,"code":547,"filename":548,"language":549,"meta":550,"style":550},"language-yaml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","repos:\n  - path: \u002Fhome\u002Fyou\u002Fcode\u002Fmy-service\n    sandbox:\n      kind: docker\n      image: ghcr.io\u002Facme\u002Fagent@sha256:...\n      resources: {cpu: 2, memory: 4g, pids: 512}\n      network:\n        install: {allow: [registry.npmjs.org]}\n        runtime: {allow: [api.github.com]}\n","config\u002Frepos.yaml","yaml","",[534,552,553,566,582,590,601,612,654,662,682],{"__ignoreMap":550},[554,555,558,562],"span",{"class":556,"line":557},"line",1,[554,559,561],{"class":560},"sb7M8","repos",[554,563,565],{"class":564},"s7iLA",":\n",[554,567,569,572,575,578],{"class":556,"line":568},2,[554,570,571],{"class":564},"  - ",[554,573,574],{"class":560},"path",[554,576,577],{"class":564},": ",[554,579,581],{"class":580},"semJd","\u002Fhome\u002Fyou\u002Fcode\u002Fmy-service\n",[554,583,585,588],{"class":556,"line":584},3,[554,586,587],{"class":560},"    sandbox",[554,589,565],{"class":564},[554,591,593,596,598],{"class":556,"line":592},4,[554,594,595],{"class":560},"      kind",[554,597,577],{"class":564},[554,599,600],{"class":580},"docker\n",[554,602,604,607,609],{"class":556,"line":603},5,[554,605,606],{"class":560},"      image",[554,608,577],{"class":564},[554,610,611],{"class":580},"ghcr.io\u002Facme\u002Fagent@sha256:...\n",[554,613,615,618,621,624,626,630,633,636,638,641,643,646,648,651],{"class":556,"line":614},6,[554,616,617],{"class":560},"      resources",[554,619,620],{"class":564},": {",[554,622,623],{"class":560},"cpu",[554,625,577],{"class":564},[554,627,629],{"class":628},"ssYy9","2",[554,631,632],{"class":564},", ",[554,634,635],{"class":560},"memory",[554,637,577],{"class":564},[554,639,640],{"class":580},"4g",[554,642,632],{"class":564},[554,644,645],{"class":560},"pids",[554,647,577],{"class":564},[554,649,650],{"class":628},"512",[554,652,653],{"class":564},"}\n",[554,655,657,660],{"class":556,"line":656},7,[554,658,659],{"class":560},"      network",[554,661,565],{"class":564},[554,663,665,668,670,673,676,679],{"class":556,"line":664},8,[554,666,667],{"class":560},"        install",[554,669,620],{"class":564},[554,671,672],{"class":560},"allow",[554,674,675],{"class":564},": [",[554,677,678],{"class":580},"registry.npmjs.org",[554,680,681],{"class":564},"]}\n",[554,683,685,688,690,692,694,697],{"class":556,"line":684},9,[554,686,687],{"class":560},"        runtime",[554,689,620],{"class":564},[554,691,672],{"class":560},[554,693,675],{"class":564},[554,695,696],{"class":580},"api.github.com",[554,698,681],{"class":564},[700,701,703,704,706],"h2",{"id":702},"the-sandbox-key","The ",[534,705,536],{}," key",[526,708,709,710,713,714,716,717,719],{},"The keys depend on ",[534,711,712],{},"kind",". A key a ",[534,715,712],{}," refuses stops ",[534,718,300],{}," from loading, naming the entry.",[721,722,723,742],"table",{},[724,725,726],"thead",{},[727,728,729,733,736,739],"tr",{},[730,731,732],"th",{},"Key",[730,734,735],{},"Type",[730,737,738],{},"Applies to",[730,740,741],{},"Meaning",[743,744,745,780,805,825,849,871,895,931],"tbody",{},[727,746,747,752,761,764],{},[748,749,750],"td",{},[534,751,712],{},[748,753,754,757,758],{},[534,755,756],{},"docker"," or ",[534,759,760],{},"kit",[748,762,763],{},"Both, required.",[748,765,766,768,769,772,773,775,776,779],{},[534,767,756],{}," runs ",[534,770,771],{},"image"," under the keys below. ",[534,774,760],{}," runs a ",[530,777,778],{"href":369},"Kit"," as the whole sandbox.",[727,781,782,786,789,797],{},[748,783,784],{},[534,785,771],{},[748,787,788],{},"string",[748,790,791,793,794,796],{},[534,792,756],{},", required. ",[534,795,760],{}," refuses it.",[748,798,799,800,804],{},"The image the worker runs in. See ",[530,801,803],{"href":802},"#the-image","The image",".",[727,806,807,812,816,822],{},[748,808,809],{},[534,810,811],{},"runtime",[748,813,814],{},[534,815,756],{},[748,817,818,793,820,796],{},[534,819,760],{},[534,821,756],{},[748,823,824],{},"The runtime that runs the Kit.",[727,826,827,831,834,840],{},[748,828,829],{},[534,830,760],{},[748,832,833],{},"string, pinned by digest",[748,835,836,793,838,796],{},[534,837,760],{},[534,839,756],{},[748,841,842,843,846,847,804],{},"The Kit image, ",[534,844,845],{},"\u003Cname>[:\u003Ctag>]@sha256:\u003C64 hex>",". See ",[530,848,368],{"href":369},[727,850,851,856,859,866],{},[748,852,853],{},[534,854,855],{},"resources",[748,857,858],{},"mapping",[748,860,861,863,864,796],{},[534,862,756],{},", optional. ",[534,865,760],{},[748,867,868,869,804],{},"CPU, memory and process limits. See ",[530,870,352],{"href":353},[727,872,873,878,880,886],{},[748,874,875],{},[534,876,877],{},"network",[748,879,858],{},[748,881,882,863,884,796],{},[534,883,756],{},[534,885,760],{},[748,887,888,889,892,893,804],{},"The hosts a task may reach. Set it or ",[534,890,891],{},"unrestricted_network",": a launch into a sandbox with neither is refused. See ",[530,894,360],{"href":361},[727,896,897,901,904,919],{},[748,898,899],{},[534,900,891],{},[748,902,903],{},"boolean",[748,905,906,908,909,912,913,915,916,918],{},[534,907,756],{},", optional, default ",[534,910,911],{},"false",". ",[534,914,760],{}," refuses it, and so does ",[534,917,877],{}," beside it.",[748,920,921,924,925,927,928,804],{},[534,922,923],{},"true"," lets a launch run with no ",[534,926,877],{},": the worker's network is not restricted and gates are not enforced. See ",[530,929,360],{"href":930},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy#without-a-network-policy",[727,932,933,938,941,950],{},[748,934,935],{},[534,936,937],{},"credentials",[748,939,940],{},"list of mappings",[748,942,943,945,946,912,948,796],{},[534,944,756],{},", optional, and it needs ",[534,947,877],{},[534,949,760],{},[748,951,952,953,804],{},"Secrets the container never holds. See ",[530,954,364],{"href":365},[526,956,957,958,960,961,964,965,968],{},"Set the key in ",[534,959,300],{}," or in ",[534,962,963],{},"policy.sandbox",", not both. It is part of the repository policy layer: once it is set, no chain, node or task can turn it off or change it, limits and network policy included, and ",[534,966,967],{},"sandbox: false"," on a repo cannot turn off one a layer set.",[700,970,972],{"id":971},"what-reaches-the-container","What reaches the container",[526,974,975,976,979,980,983,984,987],{},"A sandboxed task runs ",[534,977,978],{},"docker run --init"," (or ",[534,981,982],{},"podman run",") with every capability dropped, within its ",[530,985,986],{"href":353},"resource limits",". It runs as a user that leaves what it writes yours, on rootless Docker and Podman too.",[526,989,990,992],{},[530,991,372],{"href":373}," says which CLI runs it, and what happens on an SELinux-enforcing host. Only what is listed here reaches the container:",[721,994,995,1005],{},[724,996,997],{},[727,998,999,1002],{},[730,1000,1001],{},"What",[730,1003,1004],{},"How it reaches the container",[743,1006,1007,1018,1033,1053,1064,1079,1109,1121],{},[727,1008,1009,1015],{},[748,1010,703,1011],{},[530,1012,1014],{"href":1013},"\u002Fconcepts\u002Fvocabulary#worktree","worktree",[748,1016,1017],{},"Mounted read-write at its real path.",[727,1019,1020,1023],{},[748,1021,1022],{},"The repository's refs",[748,1024,1025,1026,846,1029,804],{},"A private copy per worktree, under ",[534,1027,1028],{},"$KRAFT_HOME\u002Frun\u002Fsandbox-git\u002F",[530,1030,1032],{"href":1031},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox#repository-refs","Repository refs",[727,1034,1035,1038],{},[748,1036,1037],{},"Objects and LFS content",[748,1039,1040,1041,1044,1045,1048,1049,1052],{},"Your repository's ",[534,1042,1043],{},"objects\u002F"," and ",[534,1046,1047],{},"lfs\u002F",", read-write: they are data a commit writes. ",[534,1050,1051],{},"objects\u002Finfo"," (where alternates are named) and alternates themselves are read-only.",[727,1054,1055,1058],{},[748,1056,1057],{},"Workspace members",[748,1059,1060,1061,804],{},"Each member's own repository, the same way as the root's: a private copy of its refs, from which Kraft moves the item's branch in that repository, and its objects. See ",[530,1062,1057],{"href":1063},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox#workspace-members",[727,1065,1066,1072],{},[748,1067,1068,1071],{},[534,1069,1070],{},"HOME",", results, git identity",[748,1073,1074,1075,804],{},"See ",[530,1076,1078],{"href":1077},"#home-results-and-git-identity","Home, results and git identity",[727,1080,1081,1083],{},[748,1082,364],{},[748,1084,1085,632,1088,1091,1092,1044,1095,1098,1099,1101,1102,846,1105,804],{},[534,1086,1087],{},"CLAUDE_CODE_OAUTH_TOKEN",[534,1089,1090],{},"ANTHROPIC_API_KEY",", and every name in ",[534,1093,1094],{},"env_passthrough",[534,1096,1097],{},"env",", forwarded by name, so their values never appear on the ",[534,1100,756],{}," command line or in ",[534,1103,1104],{},"ps",[530,1106,1108],{"href":1107},"#forwarded-credentials","Forwarded credentials",[727,1110,1111,1114],{},[748,1112,1113],{},"Proxy and CA",[748,1115,1116,1117,1120],{},"The server's proxy variables and an extra CA. ",[530,1118,372],{"href":1119},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml#proxy"," says which, and how.",[727,1122,1123,1126],{},[748,1124,1125],{},"Tool policy",[748,1127,1128,1129,804],{},"Enforced inside the container or refused. See ",[530,1130,1125],{"href":1131},"#tool-policy",[700,1133,1078],{"id":1134},"home-results-and-git-identity",[1136,1137,1138,1151,1166],"ul",{},[1139,1140,1141,1146,1147,1150],"li",{},[1142,1143,1144,804],"strong",{},[534,1145,1070],{}," ",[534,1148,1149],{},"$KRAFT_HOME\u002Frun\u002Fsandbox-home\u002F\u003Cwork item>",", read-write and kept across sessions, so an agent CLI keeps its state and can resume a paused session. A CLI config directory Kraft owns (Cursor's) lives there too, one per item.",[1139,1152,1153,1156,1157,1160,1161,1165],{},[1142,1154,1155],{},"Results."," From ",[534,1158,1159],{},"$KRAFT_HOME\u002Frun\u002Fresults",", only this ",[530,1162,1164],{"href":1163},"\u002Fconcepts\u002Fvocabulary#work-item","work item","'s own files: its sessions' result files, review packages and long instructions, read-only, and the session's own result file, read-write. Nothing of another item's is mounted.",[1139,1167,1168,1146,1171,1044,1174,1177,1178,1044,1181,1184],{},[1142,1169,1170],{},"Git identity.",[534,1172,1173],{},"GIT_AUTHOR_*",[534,1175,1176],{},"GIT_COMMITTER_*"," from the server's environment, else your ",[534,1179,1180],{},"user.name",[534,1182,1183],{},"user.email"," for the repository. Repository hooks never run in the container, as they never run on a worker's commits outside one.",[526,1186,1187],{},"Abandoning or archiving an item removes its ref store and sandbox home.",[700,1189,1108],{"id":1190},"forwarded-credentials",[526,1192,1193,1194,1197,1198,1202,1203,1207,1208,1210],{},"The container's own environment still holds the values, so ",[534,1195,1196],{},"docker inspect"," shows them to anyone who can reach the container runtime. A name listed under ",[530,1199,1200],{"href":365},[534,1201,937],{}," is the exception: the container holds only its ",[530,1204,1206],{"href":1205},"\u002Fconcepts\u002Fvocabulary#sentinel","sentinel",", and ",[534,1209,1196],{}," shows that. Logins kept in your home directory or the OS keychain do not reach a sandbox.",[700,1212,1125],{"id":1213},"tool-policy",[1136,1215,1216,1219,1229],{},[1139,1217,1218],{},"Amp's and OpenCode's rules travel with the launch, and Amp's rules file is mounted read-only.",[1139,1220,1221,1222,1225,1226,804],{},"Which harness's tool policy is accepted or refused, with and without a ",[530,1223,1224],{"href":361},"network policy",", is told in ",[530,1227,356],{"href":1228},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks#permission-checks-under-network",[1139,1230,1231,1232,1235,1236,1240,1241,1244],{},"Codex runs with ",[534,1233,1234],{},"sandbox_mode=danger-full-access"," unless a task or ",[530,1237,1239],{"href":1238},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," sets a mode other than ",[534,1242,1243],{},"workspace-write",", because its own sandbox cannot start inside Docker.",[700,1246,803],{"id":1247},"the-image",[526,1249,1250,1251,1255,1256,1259,1260,632,1263,1266,1267,1270,1271,1274],{},"It must hold the agent CLI (and, for a fallback, every ",[530,1252,1254],{"href":1253},"\u002Fconcepts\u002Fvocabulary#harness","harness"," it may fall back to) on its ",[534,1257,1258],{},"PATH",", plus ",[534,1261,1262],{},"git",[534,1264,1265],{},"sh"," and CA certificates, and ",[534,1268,1269],{},"curl"," under a network policy (the ",[534,1272,1273],{},"kraft"," shim uses it).",[526,1276,1277,1278,1280],{},"Before a task's first launch in an image, Kraft asks the image, through its own entrypoint and with the repository's ",[534,1279,1097],{},", whether the command is there. An image that answers no stops the item as a configuration error before anything runs.",[526,1282,1283,1286],{},[534,1284,1285],{},"kraft admin doctor"," checks:",[1136,1288,1289,1292,1298,1301],{},[1139,1290,1291],{},"that the runtime answers",[1139,1293,1294,1295,1297],{},"that SELinux has an answer in ",[534,1296,372],{}," where it enforces",[1139,1299,1300],{},"that an extra CA can be read",[1139,1302,1303],{},"that the image is pulled",[526,1305,1306],{},"Pull it before filing work, or the first launch pulls it inside the task's time cap.",[700,1308,1310],{"id":1309},"limits","Limits",[1136,1312,1313,1323,1326,1334],{},[1139,1314,1315,1316,1319,1320,1322],{},"With ",[534,1317,1318],{},"unrestricted_network: true"," and no ",[530,1321,1224],{"href":361},", the container has the default bridge network: open egress, and on a cloud VM the metadata address is reachable.",[1139,1324,1325],{},"A worker can still delete objects from your repository, which breaks it loudly but cannot put content on another branch.",[1139,1327,1328,1329,1331,1332,804],{},"Without a network policy a worker has no channel to Kraft, and its network is not restricted, so Kraft refuses the launch unless ",[534,1330,1318],{}," is set: see ",[530,1333,356],{"href":357},[1139,1335,1336],{},"Only repositories keeping refs in git's default files storage are supported; a reftable repository stops the item.",[700,1338,1340],{"id":1339},"in-this-section","In this section",[1136,1342,1343,1348,1353,1358,1363,1368,1373],{},[1139,1344,1345,1347],{},[530,1346,352],{"href":353},": the CPU, memory and process limits of a container, and what happens when a memory limit kills a process.",[1139,1349,1350,1352],{},[530,1351,356],{"href":357},": how a sandboxed worker reaches Kraft, and what is refused without a network policy.",[1139,1354,1355,1357],{},[530,1356,360],{"href":361},": which hosts a sandboxed task may reach.",[1139,1359,1360,1362],{},[530,1361,364],{"href":365},": secrets the container never holds.",[1139,1364,1365,1367],{},[530,1366,368],{"href":369},": a sandbox that an image's own descriptor declares.",[1139,1369,1370,1372],{},[530,1371,372],{"href":373},": the host-wide file for the container CLI, SELinux, an extra CA and the proxy.",[1139,1374,1375,1377],{},[530,1376,376],{"href":377},": the copy of the repository's refs, a workspace's members, and what Kraft's own git does in the worktree.",[1379,1380,1381],"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 .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}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":550,"searchDepth":568,"depth":568,"links":1383},[1384,1386,1387,1388,1389,1390,1391,1392],{"id":702,"depth":568,"text":1385},"The sandbox key",{"id":971,"depth":568,"text":972},{"id":1134,"depth":568,"text":1078},{"id":1190,"depth":568,"text":1108},{"id":1213,"depth":568,"text":1125},{"id":1247,"depth":568,"text":803},{"id":1309,"depth":568,"text":1310},{"id":1339,"depth":568,"text":1340},"The sandbox key of repos.yaml, what reaches a sandboxed worker's container, and how its home, credentials, image and tool policy are handled.","md",null,{},{"title":10},{"title":346,"description":1393},"w8wuAhpmpOVg0ZqRA_J7tB63FZ0gSpkJ67Uu-qNbsHM",[1401,1403],{"title":342,"path":343,"stem":344,"description":1402,"children":-1},"Every field in theme.yaml: the interface's colors, density, diff and board settings, and how a legacy palette key is read.",{"title":352,"path":353,"stem":354,"description":1404,"children":-1},"The CPU, memory and process limits a sandbox sets on its container, when a limit cannot be enforced, and what Kraft does when a memory limit kills a process.",1791801180207]