[{"data":1,"prerenderedAt":1046},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-sandbox-kits":520,"-reference-configuration-sandbox-kits-surround":1041},[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":368,"body":522,"description":1034,"extension":1035,"links":1036,"meta":1037,"navigation":1038,"path":369,"seo":1039,"stem":370,"__hash__":1040},"docs\u002F5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits.md",{"type":523,"value":524,"toc":1024},"minimark",[525,559,564,644,658,664,703,708,721,725,732,859,882,904,908,918,938,942,954,965,978,982,996,1000,1020],[526,527,528,529,533,534,539,540,543,544,543,547,550,551,554,555,558],"p",{},"A Kit is an image that carries a descriptor of what its workload may reach and hold. With ",[530,531,532],"code",{},"kind: kit",", Kraft runs the Kit as the whole ",[535,536,538],"a",{"href":537},"\u002Fconcepts\u002Fvocabulary#sandbox","sandbox",", in place of the ",[530,541,542],{},"image",", ",[530,545,546],{},"network",[530,548,549],{},"resources"," and ",[530,552,553],{},"credentials"," keys of ",[530,556,557],{},"kind: docker",". This page covers declaring one and what a launch does with it.",[560,561,563],"h2",{"id":562},"declaring-a-kit","Declaring a Kit",[565,566,572],"pre",{"className":567,"code":568,"filename":569,"language":570,"meta":571,"style":571},"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: kit\n      runtime: docker\n      kit: registry.example.com\u002Facme\u002Fkraft-worker-claude@sha256:\u003C64 hex>\n","config\u002Frepos.yaml","yaml","",[530,573,574,587,603,611,622,633],{"__ignoreMap":571},[575,576,579,583],"span",{"class":577,"line":578},"line",1,[575,580,582],{"class":581},"sb7M8","repos",[575,584,586],{"class":585},"s7iLA",":\n",[575,588,590,593,596,599],{"class":577,"line":589},2,[575,591,592],{"class":585},"  - ",[575,594,595],{"class":581},"path",[575,597,598],{"class":585},": ",[575,600,602],{"class":601},"semJd","\u002Fhome\u002Fyou\u002Fcode\u002Fmy-service\n",[575,604,606,609],{"class":577,"line":605},3,[575,607,608],{"class":581},"    sandbox",[575,610,586],{"class":585},[575,612,614,617,619],{"class":577,"line":613},4,[575,615,616],{"class":581},"      kind",[575,618,598],{"class":585},[575,620,621],{"class":601},"kit\n",[575,623,625,628,630],{"class":577,"line":624},5,[575,626,627],{"class":581},"      runtime",[575,629,598],{"class":585},[575,631,632],{"class":601},"docker\n",[575,634,636,639,641],{"class":577,"line":635},6,[575,637,638],{"class":581},"      kit",[575,640,598],{"class":585},[575,642,643],{"class":601},"registry.example.com\u002Facme\u002Fkraft-worker-claude@sha256:\u003C64 hex>\n",[526,645,646,647,653,654,657],{},"A ",[535,648,652],{"href":649,"rel":650},"https:\u002F\u002Fgithub.com\u002Fdocker\u002Fsandbox-kit-spec",[651],"nofollow","Docker Sandbox Kit"," is an image whose manifest carries the descriptor. Kraft reads Kits written to the spec's ",[530,655,656],{},"v3.0.0-m.7",".",[526,659,660,661,663],{},"Under ",[530,662,532],{}," the Kit is the whole sandbox:",[665,666,667,677,688,700],"ul",{},[668,669,670,550,673,676],"li",{},[530,671,672],{},"runtime",[530,674,675],{},"kit"," are required.",[668,678,679,543,681,543,683,550,685,687],{},[530,680,542],{},[530,682,546],{},[530,684,549],{},[530,686,553],{}," are refused.",[668,689,690,692,693,696,697,699],{},[530,691,675],{}," must be pinned by digest (",[530,694,695],{},"\u003Cname>[:\u003Ctag>]@sha256:\u003C64 hex>","). A tag alone is refused when ",[530,698,300],{}," loads.",[668,701,702],{},"Like any sandbox, a chain, node or task cannot change it, and a chain's or library's policy can set it too.",[704,705,707],"h3",{"id":706},"kits-you-build","Kits you build",[526,709,710,711,543,714,717,718,720],{},"Docker's published Kits (",[530,712,713],{},"docker\u002Fsbx-kit-shell",[530,715,716],{},"docker\u002Fsbx-kit-claude",") require capabilities Kraft does not enforce, so Kraft refuses them. Build a Kit for Kraft instead: ",[535,719,131],{"href":132}," gives one for Claude.",[704,722,724],{"id":723},"what-kraft-enforces","What Kraft enforces",[526,726,727,728,731],{},"Kraft runs exactly one Kit, a ",[530,729,730],{},"kind: workload",", and composes nothing:",[733,734,735,748],"table",{},[736,737,738],"thead",{},[739,740,741,745],"tr",{},[742,743,744],"th",{},"Capability",[742,746,747],{},"What Kraft does",[749,750,751,766,795,831,848],"tbody",{},[739,752,753,759],{},[754,755,756],"td",{},[530,757,758],{},"network-policy@1",[754,760,761,762,765],{},"Enforced, as the ",[535,763,764],{"href":361},"network policy",", phase for phase. Required: a Kit without one is refused.",[739,767,768,773],{},[754,769,770],{},[530,771,772],{},"credential@1",[754,774,775,776,779,780,783,784,787,788,791,792,657],{},"Enforced for a proxy-managed ",[530,777,778],{},"apiKey"," with a ",[530,781,782],{},"name"," and header ",[530,785,786],{},"inject"," rules, as a ",[535,789,790],{"href":365},"credential"," scoped to its ",[530,793,794],{},"phase",[739,796,797,802],{},[754,798,799],{},[530,800,801],{},"resources@1",[754,803,804,805,550,808,811,812,815,816,819,820,543,823,826,827,830],{},"Enforced: ",[530,806,807],{},"cpu",[530,809,810],{},"memory"," as the ",[535,813,814],{"href":353},"resource limits"," (",[530,817,818],{},"2gib"," is ",[530,821,822],{},"2g",[530,824,825],{},"cpu: 0"," is no limit). ",[530,828,829],{},"gpu"," is not.",[739,832,833,838],{},[754,834,835],{},[530,836,837],{},"agent-sessions@1",[754,839,840,841,845,846,657],{},"Accepted and not applied: the ",[535,842,844],{"href":843},"\u002Fconcepts\u002Fvocabulary#harness","harness"," file builds the command, as for ",[530,847,557],{},[739,849,850,853],{},[754,851,852],{},"Any other type, or a form above Kraft does not enforce",[754,854,855,856,657],{},"Refused when required, naming it. Skipped when ",[530,857,858],{},"optional",[526,860,861,862,864,865,867,868,870,871,874,875,878,879,881],{},"For ",[530,863,772],{},", the value is the server's variable that ",[535,866,372],{"href":373},"'s ",[530,869,553],{}," binds to its ",[530,872,873],{},"service",". An ",[530,876,877],{},"oauth"," beside the ",[530,880,778],{}," is recorded as ignored.",[526,883,646,884,887,888,891,892,895,896,899,900,903],{},[530,885,886],{},"kind: mixin",", a ",[530,889,890],{},"requires",", a capability group, a ",[530,893,894],{},"${{ }}"," reference in a capability, an ",[530,897,898],{},"args"," entry exported to ",[530,901,902],{},"env",", and a descriptor over 512 KiB are refused too.",[560,905,907],{"id":906},"what-a-launch-runs","What a launch runs",[526,909,910,911,913,914,917],{},"The Kit, lowered to the ",[530,912,557],{}," sandbox it describes: the Kit's image by digest, its network lists, its credentials and its limits, and nothing else. The harness's ",[530,915,916],{},"network.requires"," hosts are not added, so a host the Kit leaves out is refused and recorded like any other.",[526,919,920,921,924,925,928,929,933,934,937],{},"The image's ",[530,922,923],{},"Entrypoint"," is kept and the harness's command replaces its ",[530,926,927],{},"Cmd",", so a Kit whose entrypoint is the agent CLI itself does not work. The ",[535,930,932],{"href":931},"\u002Fconcepts\u002Fvocabulary#worker-session","worker session"," records ",[530,935,936],{},"docker"," as its backend.",[560,939,941],{"id":940},"when-it-is-read","When it is read",[526,943,944,945,949,950,953],{},"Kraft reads the descriptor with your runtime's own CLI and registry login, before an item's ",[535,946,948],{"href":947},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," is made, and caches it under ",[530,951,952],{},"$KRAFT_HOME\u002Frun\u002Fkit\u002F"," by its digest.",[665,955,956,962],{},[668,957,958,959,657],{},"Docker reads it with ",[530,960,961],{},"docker manifest inspect",[668,963,964],{},"Podman reads only an index that way, so it pulls a single-manifest Kit and reads its image.",[526,966,967,968,971,972,977],{},"A Kit that cannot be fetched or is refused stops the item and waits for you, naming the Kit and why: see ",[535,969,192],{"href":970},"\u002Ftroubleshooting\u002Fsandbox-and-kit-stops#a-kit-is-refused",". Each task dispatched under it records a ",[535,973,974],{"href":483},[530,975,976],{},"sandbox_kit_resolved"," event once per Kit, with what was skipped or ignored.",[560,979,981],{"id":980},"doctor","Doctor",[526,983,984,987,988,991,992,995],{},[530,985,986],{},"kraft admin doctor"," fetches and lowers each Kit repository's Kit, fails its sandbox row when it cannot, and runs the sandbox, egress, proxy and credentials rows on what it lowers to. It warns about each harness host the Kit does not allow (",[530,989,990],{},"kit hosts",") and each credential service with no binding (",[530,993,994],{},"kit credentials",").",[560,997,999],{"id":998},"related","Related",[665,1001,1002,1007,1015],{},[668,1003,1004,1006],{},[535,1005,131],{"href":132},": a Kit for Claude, step by step.",[668,1008,1009,1011,1012,1014],{},[535,1010,346],{"href":347},": the ",[530,1013,538],{}," keys, and what reaches the container.",[668,1016,1017,1019],{},[535,1018,372],{"href":373},": where a Kit's credentials are bound.",[1021,1022,1023],"style",{},"html pre.shiki code .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":571,"searchDepth":589,"depth":589,"links":1025},[1026,1030,1031,1032,1033],{"id":562,"depth":589,"text":563,"children":1027},[1028,1029],{"id":706,"depth":605,"text":707},{"id":723,"depth":605,"text":724},{"id":906,"depth":589,"text":907},{"id":940,"depth":589,"text":941},{"id":980,"depth":589,"text":981},{"id":998,"depth":589,"text":999},"How to declare a Kit as a repository's sandbox, and what Kraft enforces, reads and refuses.","md",null,{},true,{"title":368,"description":1034},"O7Ddwpbv-0ieYnMfOBe2Yf5bnDkTIEVerJ7DyAZVTUs",[1042,1044],{"title":364,"path":365,"stem":366,"description":1043,"children":-1},"How a sandbox's credentials keep a secret out of the container while Kraft's proxy adds it to requests, and what that cannot do.",{"title":372,"path":373,"stem":374,"description":1045,"children":-1},"Every field in sandbox.yaml: which container CLI runs sandboxed tasks, how they get past SELinux, and which extra CA they trust.",1791801180914]