[{"data":1,"prerenderedAt":1752},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-environment-variables":520,"-reference-configuration-environment-variables-surround":1747},[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":380,"body":522,"description":1740,"extension":1741,"links":1742,"meta":1743,"navigation":1744,"path":381,"seo":1745,"stem":382,"__hash__":1746},"docs\u002F5.reference\u002F03.configuration\u002F11.environment-variables.md",{"type":523,"value":524,"toc":1722},"minimark",[525,549,554,594,904,910,919,923,931,945,949,1059,1065,1079,1083,1086,1240,1244,1247,1377,1383,1387,1401,1420,1424,1427,1488,1491,1685,1694,1698],[526,527,528,529,534,535,534,539,543,544,548],"p",{},"Kraft reads and sets environment variables in four groups: ",[530,531,533],"a",{"href":532},"#variables-you-set","variables you set",", ",[530,536,538],{"href":537},"#passed-to-workers","variables Kraft passes to workers",[530,540,542],{"href":541},"#set-by-kraft-for-itself","variables Kraft sets for itself",", and ",[530,545,547],{"href":546},"#other-variables","other variables"," it reads.",[550,551,553],"h2",{"id":552},"variables-you-set","Variables you set",[526,555,556,557,561,562,565,566,534,569,534,572,575,576,579,580,534,583,534,586,589,590,593],{},"Set these in the shell that starts ",[558,559,560],"code",{},"kraft",", or in the service unit. ",[558,563,564],{},"kraft admin install-service"," copies ",[558,567,568],{},"KRAFT_HOME",[558,570,571],{},"KRAFT_RUN_DIR",[558,573,574],{},"KRAFT_CONFIG_DIR"," (and a ",[558,577,578],{},"KRAFT_TEMPLATES_DIR"," the shell still has), ",[558,581,582],{},"KRAFT_SKILLS_DIR",[558,584,585],{},"KRAFT_HOST",[558,587,588],{},"KRAFT_PORT"," and ",[558,591,592],{},"PATH"," into the unit it writes.",[595,596,597,613],"table",{},[598,599,600],"thead",{},[601,602,603,607,610],"tr",{},[604,605,606],"th",{},"Variable",[604,608,609],{},"Default",[604,611,612],{},"What it does",[614,615,616,639,658,682,702,716,742,765,789,837,856,872,888],"tbody",{},[601,617,618,623,628],{},[619,620,621],"td",{},[558,622,568],{},[619,624,625],{},[558,626,627],{},"~\u002F.kraft",[619,629,630,631,634,635,638],{},"The directory Kraft keeps everything in. ",[558,632,633],{},"just dev"," points it at ",[558,636,637],{},".dev\u002F"," so a dev instance cannot touch the real one.",[601,640,641,645,650],{},[619,642,643],{},[558,644,571],{},[619,646,647],{},[558,648,649],{},"$KRAFT_HOME\u002Frun",[619,651,652,653,657],{},"Databases, logs, ",[530,654,656],{"href":655},"\u002Fconcepts\u002Fvocabulary#worktree","worktrees",", the pidfile and the MCP token.",[601,659,660,664,669],{},[619,661,662],{},[558,663,574],{},[619,665,666],{},[558,667,668],{},"$KRAFT_HOME\u002Fconfig",[619,670,671,672,534,674,534,676,678,679,681],{},"The config directory: ",[558,673,318],{},[558,675,300],{},[558,677,330],{},", chains and the rest. See ",[530,680,294],{"href":295},".",[601,683,684,688,691],{},[619,685,686],{},[558,687,578],{},[619,689,690],{},"unset",[619,692,693,694,696,697,699,700,681],{},"The 1.x name of ",[558,695,574],{},". Kraft reads it when ",[558,698,574],{}," is unset, and sets it nowhere. Use ",[558,701,574],{},[601,703,704,708,713],{},[619,705,706],{},[558,707,582],{},[619,709,710],{},[558,711,712],{},"$KRAFT_HOME\u002Fskills",[619,714,715],{},"Where a skill file overrides the shipped one of the same name. Usually absent.",[601,717,718,722,730],{},[619,719,720],{},[558,721,585],{},[619,723,724,727,728],{},[558,725,726],{},"bind"," in ",[558,729,330],{},[619,731,732,733,735,736,589,739,741],{},"The address the server binds and the CLI connects to. ",[530,734,330],{"href":331}," says which of this, ",[558,737,738],{},"--host",[558,740,726],{}," wins.",[601,743,744,748,755],{},[619,745,746],{},[558,747,588],{},[619,749,750,727,753],{},[558,751,752],{},"port",[558,754,330],{},[619,756,757,758,735,760,589,763,741],{},"The port the server binds and the CLI connects to. ",[530,759,330],{"href":331},[558,761,762],{},"--port",[558,764,752],{},[601,766,767,772,774],{},[619,768,769],{},[558,770,771],{},"KRAFT_NO_UPDATE_CHECK",[619,773,690],{},[619,775,776,777,780,781,784,785,681],{},"Any value turns off the release check in ",[558,778,779],{},"kraft admin start",", in ",[558,782,783],{},"kraft admin doctor"," and in the web UI. See ",[530,786,788],{"href":787},"#kraft_no_update_check","below",[601,790,791,796,806],{},[619,792,793],{},[558,794,795],{},"KRAFT_EDITOR",[619,797,798,799,534,802,805],{},"the OS opener (",[558,800,801],{},"open",[558,803,804],{},"xdg-open",")",[619,807,808,809,812,813,534,815,534,818,821,822,825,826,830,831,727,834,836],{},"The editor ",[558,810,811],{},"kraft view doc --open"," and the board use when none is named: ",[558,814,558],{},[558,816,817],{},"cursor",[558,819,820],{},"zed"," or ",[558,823,824],{},"obsidian",". The board's ",[827,828,829],"strong",{},"Default editor"," (",[558,832,833],{},"editor",[558,835,342],{},") wins over it.",[601,838,839,844,853],{},[619,840,841],{},[558,842,843],{},"KRAFT_EMBED_CACHE",[619,845,846,849,850],{},[558,847,848],{},"$XDG_CACHE_HOME\u002Fkraft\u002Ffastembed",", else ",[558,851,852],{},"~\u002F.cache\u002Fkraft\u002Ffastembed",[619,854,855],{},"Where semantic search keeps its model weights.",[601,857,858,863,865],{},[619,859,860],{},[558,861,862],{},"KRAFT_BD_CWD",[619,864,690],{},[619,866,867,868,871],{},"The directory ",[558,869,870],{},"bd"," runs in for bead operations and bead search, instead of each repo.",[601,873,874,879,882],{},[619,875,876],{},[558,877,878],{},"KRAFT_FRONTEND_DIST",[619,880,881],{},"the web UI Kraft ships",[619,883,884,885,887],{},"The built web UI to serve. ",[558,886,633],{}," points it at Vite's output.",[601,889,890,895,897],{},[619,891,892],{},[558,893,894],{},"KRAFT_INDEX_REPOS",[619,896,690],{},[619,898,899,900,903],{},"More repo paths for the search index to scan, besides the connected ones, separated by ",[558,901,902],{},":",". The end-to-end tests use it.",[905,906,908],"h3",{"id":907},"kraft_no_update_check",[558,909,771],{},[526,911,912,913,821,916,681],{},"With it set, the web UI no longer checks on every page load. It shows only the result of a check you ran yourself: the About page's ",[827,914,915],{},"Check now",[558,917,918],{},"kraft admin update",[550,920,922],{"id":921},"passed-to-workers","Passed to workers",[526,924,925,926,930],{},"A ",[530,927,929],{"href":928},"\u002Fconcepts\u002Fvocabulary#worker","worker","'s environment is built from an allowlist, not inherited from the shell that started the server. The variables below are the allowlist and the ones Kraft adds at launch. Any other variable the server has is not passed on, unless the repo adds it.",[526,932,933,934,936,937,941,942,944],{},"A worker's own ",[558,935,560],{}," command and MCP client read the variables below. A ",[530,938,940],{"href":939},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxed"," worker gets only what ",[530,943,346],{"href":347}," lists.",[905,946,948],{"id":947},"set-by-kraft-for-each-session","Set by Kraft for each session",[595,950,951,962],{},[598,952,953],{},[601,954,955,957,960],{},[604,956,606],{},[604,958,959],{},"Set to",[604,961,612],{},[614,963,964,987,1000,1018,1032],{},[601,965,966,971,979],{},[619,967,968],{},[558,969,970],{},"KRAFT_WORK_ITEM_ID",[619,972,973,974,978],{},"The ",[530,975,977],{"href":976},"\u002Fconcepts\u002Fvocabulary#work-item","work item","'s id",[619,980,981,982,681],{},"Marks the session as a Kraft worker. The CLI and MCP server use it as the default work item. See ",[530,983,985],{"href":984},"#kraft_work_item_id",[558,986,970],{},[601,988,989,994,997],{},[619,990,991],{},[558,992,993],{},"KRAFT_SESSION_ID",[619,995,996],{},"The session's id",[619,998,999],{},"Sent with each API call, so a route can tell the calling session apart.",[601,1001,1002,1007,1013],{},[619,1003,1004],{},[558,1005,1006],{},"KRAFT_RESULT_PATH",[619,1008,1009,1010],{},"A file under ",[558,1011,1012],{},"run\u002F",[619,1014,1015,1016,681],{},"Where the agent writes its result: status, concerns, a question, usage. Subprocess tasks get it too. See ",[530,1017,406],{"href":407},[601,1019,1020,1025,1029],{},[619,1021,1022],{},[558,1023,1024],{},"KRAFT_REVIEW_PACKAGE",[619,1026,1009,1027],{},[558,1028,1012],{},[619,1030,1031],{},"For a review task: the commit list, files changed and diff to review.",[601,1033,1034,1039,1044],{},[619,1035,1036],{},[558,1037,1038],{},"KRAFT_PERMISSION_FAIL_CLOSED",[619,1040,1041],{},[558,1042,1043],{},"1",[619,1045,1046,1047,1051,1052,1055,1056,681],{},"Set when a hooked ",[530,1048,1050],{"href":1049},"\u002Fconcepts\u002Fvocabulary#harness","harness"," (Cursor, Codex) runs under an ",[558,1053,1054],{},"allowed_tools"," list. The hook then denies a call when it cannot reach Kraft. See ",[530,1057,436],{"href":1058},"\u002Freference\u002Fpermissions#cursor",[1060,1061,1063],"h4",{"id":1062},"kraft_work_item_id",[558,1064,970],{},[526,1066,1067,1068,1070,1071,1073,1074,1078],{},"The CLI and MCP server refuse a worker's decisions about its own item (see ",[530,1069,478],{"href":479},"). ",[558,1072,970],{}," is not set for an ",[530,1075,1077],{"href":1076},"\u002Fconcepts\u002Fvocabulary#escalation-turn","escalation turn",", which runs as a person's session.",[905,1080,1082],{"id":1081},"copied-from-the-servers-environment","Copied from the server's environment",[526,1084,1085],{},"Kraft copies each of these into a worker's environment when the server has it, and leaves it unset when the server does not.",[595,1087,1088,1098],{},[598,1089,1090],{},[601,1091,1092,1095],{},[604,1093,1094],{},"Group",[604,1096,1097],{},"Variables",[614,1099,1100,1139,1159,1184,1209,1223],{},[601,1101,1102,1105],{},[619,1103,1104],{},"Running a process",[619,1106,1107,534,1109,534,1112,534,1115,534,1118,534,1121,534,1124,534,1127,534,1130,534,1133,534,1136],{},[558,1108,592],{},[558,1110,1111],{},"HOME",[558,1113,1114],{},"USER",[558,1116,1117],{},"LOGNAME",[558,1119,1120],{},"SHELL",[558,1122,1123],{},"LANG",[558,1125,1126],{},"LC_ALL",[558,1128,1129],{},"TERM",[558,1131,1132],{},"TZ",[558,1134,1135],{},"TMPDIR",[558,1137,1138],{},"SSH_AUTH_SOCK",[601,1140,1141,1144],{},[619,1142,1143],{},"Proxy",[619,1145,1146,534,1149,534,1152,534,1155,1158],{},[558,1147,1148],{},"HTTP_PROXY",[558,1150,1151],{},"HTTPS_PROXY",[558,1153,1154],{},"NO_PROXY",[558,1156,1157],{},"ALL_PROXY",", and the same four in lower case",[601,1160,1161,1164],{},[619,1162,1163],{},"CA certificates",[619,1165,1166,534,1169,534,1172,534,1175,534,1178,534,1181],{},[558,1167,1168],{},"SSL_CERT_FILE",[558,1170,1171],{},"SSL_CERT_DIR",[558,1173,1174],{},"REQUESTS_CA_BUNDLE",[558,1176,1177],{},"CURL_CA_BUNDLE",[558,1179,1180],{},"GIT_SSL_CAINFO",[558,1182,1183],{},"NODE_EXTRA_CA_CERTS",[601,1185,1186,1189],{},[619,1187,1188],{},"Locating this instance",[619,1190,1191,534,1193,534,1195,534,1197,534,1199,534,1201,534,1203,1205,1206,1208],{},[558,1192,568],{},[558,1194,571],{},[558,1196,574],{},[558,1198,578],{},[558,1200,582],{},[558,1202,585],{},[558,1204,588],{},", so the worker's ",[558,1207,560],{}," command reaches the instance that started it",[601,1210,1211,1214],{},[619,1212,1213],{},"Server pid and port",[619,1215,1216,589,1219,1222],{},[558,1217,1218],{},"KRAFT_DAEMON_PID",[558,1220,1221],{},"KRAFT_DAEMON_PORT",". The names say daemon; the process is the Kraft server. A worker uses them to tell the server apart from a stray process before it kills anything on a port.",[601,1224,1225,1228],{},[619,1226,1227],{},"Claude Code's credentials",[619,1229,1230,534,1233,1236,1237,681],{},[558,1231,1232],{},"ANTHROPIC_API_KEY",[558,1234,1235],{},"CLAUDE_CODE_OAUTH_TOKEN",". See ",[530,1238,1239],{"href":546},"Other variables",[905,1241,1243],{"id":1242},"set-at-launch","Set at launch",[526,1245,1246],{},"Kraft adds these to the launch that needs them.",[595,1248,1249,1260],{},[598,1250,1251],{},[601,1252,1253,1255,1258],{},[604,1254,606],{},[604,1256,1257],{},"Set when",[604,1259,612],{},[614,1261,1262,1295,1310,1332,1352],{},[601,1263,1264,1278,1281],{},[619,1265,1266,534,1269,534,1272,534,1275],{},[558,1267,1268],{},"GIT_AUTHOR_NAME",[558,1270,1271],{},"GIT_AUTHOR_EMAIL",[558,1273,1274],{},"GIT_COMMITTER_NAME",[558,1276,1277],{},"GIT_COMMITTER_EMAIL",[619,1279,1280],{},"Every launch",[619,1282,1283,1284,589,1287,1290,1291,1294],{},"The identity a worker commits under: the server's own values where it has them, else ",[558,1285,1286],{},"user.name",[558,1288,1289],{},"user.email"," from the repo's git config. A repo's ",[558,1292,1293],{},"env"," outranks it in a sandbox.",[601,1296,1297,1302,1307],{},[619,1298,1299],{},[558,1300,1301],{},"CURSOR_CONFIG_DIR",[619,1303,925,1304,1306],{},[558,1305,817],{}," harness launch",[619,1308,1309],{},"A config directory Kraft owns for the run, so your own Cursor config is not read or touched.",[601,1311,1312,1317,1324],{},[619,1313,1314],{},[558,1315,1316],{},"OPENCODE_CONFIG_CONTENT",[619,1318,1319,1320,1323],{},"An ",[558,1321,1322],{},"opencode"," launch whose policy has tool rules",[619,1325,1326,1327,589,1329,681],{},"The permission block that enforces ",[558,1328,1054],{},[558,1330,1331],{},"deny_tools",[601,1333,1334,1339,1342],{},[619,1335,1336],{},[558,1337,1338],{},"PYTHONDONTWRITEBYTECODE",[619,1340,1341],{},"A subprocess or test command",[619,1343,1344,1346,1347,1351],{},[558,1345,1043],{},", so a ",[530,1348,1350],{"href":1349},"\u002Fconcepts\u002Fvocabulary#fix-loop","fix loop","'s re-run tests never import stale bytecode.",[601,1353,1354,1366,1372],{},[619,1355,1356,534,1358,534,1360,1362,1363],{},[558,1357,1148],{},[558,1359,1151],{},[558,1361,1154],{},", their lower-case forms and ",[558,1364,1365],{},"NODE_USE_ENV_PROXY",[619,1367,1368,1369],{},"A sandboxed launch under ",[558,1370,1371],{},"network:",[619,1373,1374,1375,681],{},"Point the worker at Kraft's proxy and nowhere else. See ",[530,1376,360],{"href":361},[526,1378,1379,1380,1382],{},"A sandboxed container may carry more than this list; ",[530,1381,346],{"href":347}," says what reaches it.",[905,1384,1386],{"id":1385},"added-by-the-repo","Added by the repo",[526,1388,1389,1390,589,1392,1395,1396,681],{},"A repo's ",[558,1391,1293],{},[558,1393,1394],{},"env_passthrough"," add to this list; how to set them is in the ",[530,1397,1398,1400],{"href":301},[558,1399,1293],{}," field of repos.yaml",[526,1402,1403,1404,1407,1408,1410,1411,1413,1414,1417,1418,681],{},"Any other ",[558,1405,1406],{},"KRAFT_*"," variable the server has stays behind: set it in ",[558,1409,1293],{},", or name it in ",[558,1412,1394],{},". So does another agent's API key, such as ",[558,1415,1416],{},"CODEX_API_KEY",", unless you name it in ",[558,1419,1394],{},[550,1421,1423],{"id":1422},"set-by-kraft-for-itself","Set by Kraft for itself",[526,1425,1426],{},"You do not set these.",[595,1428,1429,1437],{},[598,1430,1431],{},[601,1432,1433,1435],{},[604,1434,606],{},[604,1436,612],{},[614,1438,1439,1457,1475],{},[601,1440,1441,1446],{},[619,1442,1443],{},[558,1444,1445],{},"KRAFT_CLIENT",[619,1447,1448,1449,1452,1453,1456],{},"Set to ",[558,1450,1451],{},"mcp"," by ",[558,1454,1455],{},"kraft admin mcp",", so the API can tell an agent's call from a person's.",[601,1458,1459,1464],{},[619,1460,1461],{},[558,1462,1463],{},"KRAFT_DETACHED",[619,1465,1466,1467,1470,1471,1474],{},"Set on the child of ",[558,1468,1469],{},"kraft admin start --detach",", so ",[558,1472,1473],{},"kraft admin restart"," starts it the same way.",[601,1476,1477,1482],{},[619,1478,1479],{},[558,1480,1481],{},"KRAFT_LOG_REDIRECTED",[619,1483,1484,1485,681],{},"Set on the same child, whose output already goes to ",[558,1486,1487],{},"run\u002Flogs\u002Fserver.log",[550,1489,1239],{"id":1490},"other-variables",[595,1492,1493,1504],{},[598,1494,1495],{},[601,1496,1497,1499,1502],{},[604,1498,606],{},[604,1500,1501],{},"Read by",[604,1503,612],{},[614,1505,1506,1537,1560,1582,1600,1613,1628,1641,1658,1673],{},[601,1507,1508,1512,1515],{},[619,1509,1510],{},[558,1511,592],{},[619,1513,1514],{},"the server",[619,1516,1517,1518,1521,1522,534,1525,534,1528,589,1531,1533,1534,1536],{},"Where Kraft finds ",[558,1519,1520],{},"claude",", the other agent CLIs, ",[558,1523,1524],{},"git",[558,1526,1527],{},"gh",[558,1529,1530],{},"glab",[558,1532,870],{},". Under a service, this is the unit's ",[558,1535,592],{},", not your shell's.",[601,1538,1539,1545,1548],{},[619,1540,1541,534,1543],{},[558,1542,1232],{},[558,1544,1235],{},[619,1546,1547],{},"workers",[619,1549,1550,1551,1554,1555,1559],{},"Claude Code's credentials. Passed to every worker, sandboxed or not, unless the repo's sandbox ",[558,1552,1553],{},"credentials"," lists the name: then a sandboxed worker gets a ",[530,1556,1558],{"href":1557},"\u002Fconcepts\u002Fvocabulary#sentinel","sentinel"," and the egress proxy adds the real value.",[601,1561,1562,1573,1575],{},[619,1563,1564,534,1566,534,1569,1572],{},[558,1565,1416],{},[558,1567,1568],{},"GEMINI_API_KEY",[558,1570,1571],{},"CURSOR_API_KEY",", and other agents' keys",[619,1574,1547],{},[619,1576,1577,1578,681],{},"Not passed by default. Name one in the repo's ",[530,1579,1580],{"href":301},[558,1581,1394],{},[601,1583,1584,1589,1594],{},[619,1585,1586],{},[558,1587,1588],{},"CODEX_HOME",[619,1590,1591],{},[558,1592,1593],{},"kraft admin permission-hook codex",[619,1595,1596,1597,681],{},"Codex's config directory. Default ",[558,1598,1599],{},"~\u002F.codex",[601,1601,1602,1607,1610],{},[619,1603,1604],{},[558,1605,1606],{},"NO_COLOR",[619,1608,1609],{},"the CLI",[619,1611,1612],{},"Turns off colored output.",[601,1614,1615,1620,1622],{},[619,1616,1617],{},[558,1618,1619],{},"PAGER",[619,1621,1609],{},[619,1623,1624,1625,681],{},"The pager for long output. Default ",[558,1626,1627],{},"less -R",[601,1629,1630,1634,1638],{},[619,1631,1632],{},[558,1633,1120],{},[619,1635,1636],{},[558,1637,783],{},[619,1639,1640],{},"Which shell's completion line to suggest.",[601,1642,1643,1648,1652],{},[619,1644,1645],{},[558,1646,1647],{},"XDG_CONFIG_HOME",[619,1649,1650],{},[558,1651,564],{},[619,1653,1654,1655,681],{},"Where the systemd user unit goes. Default ",[558,1656,1657],{},"~\u002F.config",[601,1659,1660,1665,1668],{},[619,1661,1662],{},[558,1663,1664],{},"XDG_CACHE_HOME",[619,1666,1667],{},"semantic search",[619,1669,1670,1671,681],{},"The base of the default ",[558,1672,843],{},[601,1674,1675,1679,1682],{},[619,1676,1677],{},[558,1678,1168],{},[619,1680,1681],{},"the sandbox",[619,1683,1684],{},"An extra CA bundle a sandboxed worker trusts, for a TLS-intercepting proxy.",[526,1686,1687,1688,821,1691,681],{},"Kraft does not read ",[558,1689,1690],{},"EDITOR",[558,1692,1693],{},"VISUAL",[550,1695,1697],{"id":1696},"related","Related",[1699,1700,1701,1712,1717],"ul",{},[1702,1703,1704,1706,1707,589,1709,1711],"li",{},[530,1705,300],{"href":301},": the ",[558,1708,1293],{},[558,1710,1394],{}," fields a repo uses to add to a worker's environment.",[1702,1713,1714,1716],{},[530,1715,346],{"href":347},": what reaches a sandboxed worker instead.",[1702,1718,1719,1721],{},[530,1720,164],{"href":165},": the variables a service unit copies.",{"title":1723,"searchDepth":1724,"depth":1724,"links":1725},"",2,[1726,1731,1737,1738,1739],{"id":552,"depth":1724,"text":553,"children":1727},[1728],{"id":907,"depth":1729,"text":1730},3,"KRAFT_​NO_​UPDATE_​CHECK",{"id":921,"depth":1724,"text":922,"children":1732},[1733,1734,1735,1736],{"id":947,"depth":1729,"text":948},{"id":1081,"depth":1729,"text":1082},{"id":1242,"depth":1729,"text":1243},{"id":1385,"depth":1729,"text":1386},{"id":1422,"depth":1724,"text":1423},{"id":1490,"depth":1724,"text":1239},{"id":1696,"depth":1724,"text":1697},"Every KRAFT_* variable Kraft reads or sets, the other variables it reads, and the variables a worker's environment gets.","md",null,{},true,{"title":380,"description":1740},"CqKxCIcJOHGow54A0lAHE5Pfoz4ubh6x2oeIUAF4M4Y",[1748,1750],{"title":376,"path":377,"stem":378,"description":1749,"children":-1},"How a sandboxed worker's repository refs, workspace members and worktree are handled, and what Kraft's own git does and does not do there.",{"title":384,"path":385,"stem":386,"description":1751,"children":-1},"The files of a Kraft add-on and its collection, addons.yaml and addons.lock, the naming rules, what an add-on may set, and when an add-on loads, updates and is restored.",1791801175168]