[{"data":1,"prerenderedAt":2145},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-repos":520,"-reference-configuration-repos-surround":2140},[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":300,"body":522,"description":2133,"extension":2134,"links":2135,"meta":2136,"navigation":2137,"path":301,"seo":2138,"stem":302,"__hash__":2139},"docs\u002F5.reference\u002F03.configuration\u002F02.repos\u002Findex.md",{"type":523,"value":524,"toc":2102},"minimark",[525,553,796,801,833,842,871,875,886,891,1140,1144,1318,1322,1385,1389,1499,1503,1593,1597,1601,1640,1644,1655,1672,1679,1683,1702,1706,1733,1738,1742,1767,1771,1775,1789,1798,1802,1809,1813,1831,1844,1848,1851,1896,1901,1916,1919,1935,1959,1969,1973,2001,2004,2012,2032,2039,2042,2046,2072,2076,2098],[526,527,528,531,532,535,536,539,540,542,543,545,546,548,549,552],"p",{},[529,530,300],"code",{}," lists the repositories you connected and how Kraft works in each. Four groups of pages go deeper: ",[533,534,306],"a",{"href":307}," for how ",[529,537,538],{},"kraft repo connect"," fills the entry in, ",[533,541,310],{"href":311}," for teaching it your own conventions, ",[533,544,314],{"href":315}," for a root repository with members, and ",[533,547,346],{"href":347}," for the ",[529,550,551],{},"sandbox"," field.",[554,555,561],"pre",{"className":556,"code":557,"filename":558,"language":559,"meta":560,"style":560},"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    name: my-service\n    forge: github\n    default_chain: default\n    enabled: true\n    setup_command: \"uv sync\"\n    test_command: null\n    intent_dir: null\n    env: {}\n    env_passthrough: []\n    local_files: []\n    models: {}\n    deny_tools: []\n    steering: []\n    sandbox: null\n    policy:\n      allowed_tools: [Read, Edit, Bash]\n    automated_review:\n      bot: coderabbitai     # exactly one of bot or check\n    ci_checks: true\n","config\u002Frepos.yaml","yaml","",[529,562,563,576,592,603,614,625,637,648,659,669,678,687,695,703,711,719,729,737,763,771,786],{"__ignoreMap":560},[564,565,568,572],"span",{"class":566,"line":567},"line",1,[564,569,571],{"class":570},"sb7M8","repos",[564,573,575],{"class":574},"s7iLA",":\n",[564,577,579,582,585,588],{"class":566,"line":578},2,[564,580,581],{"class":574},"  - ",[564,583,584],{"class":570},"path",[564,586,587],{"class":574},": ",[564,589,591],{"class":590},"semJd","\u002Fhome\u002Fyou\u002Fcode\u002Fmy-service\n",[564,593,595,598,600],{"class":566,"line":594},3,[564,596,597],{"class":570},"    name",[564,599,587],{"class":574},[564,601,602],{"class":590},"my-service\n",[564,604,606,609,611],{"class":566,"line":605},4,[564,607,608],{"class":570},"    forge",[564,610,587],{"class":574},[564,612,613],{"class":590},"github\n",[564,615,617,620,622],{"class":566,"line":616},5,[564,618,619],{"class":570},"    default_chain",[564,621,587],{"class":574},[564,623,624],{"class":590},"default\n",[564,626,628,631,633],{"class":566,"line":627},6,[564,629,630],{"class":570},"    enabled",[564,632,587],{"class":574},[564,634,636],{"class":635},"ssYy9","true\n",[564,638,640,643,645],{"class":566,"line":639},7,[564,641,642],{"class":570},"    setup_command",[564,644,587],{"class":574},[564,646,647],{"class":590},"\"uv sync\"\n",[564,649,651,654,656],{"class":566,"line":650},8,[564,652,653],{"class":570},"    test_command",[564,655,587],{"class":574},[564,657,658],{"class":635},"null\n",[564,660,662,665,667],{"class":566,"line":661},9,[564,663,664],{"class":570},"    intent_dir",[564,666,587],{"class":574},[564,668,658],{"class":635},[564,670,672,675],{"class":566,"line":671},10,[564,673,674],{"class":570},"    env",[564,676,677],{"class":574},": {}\n",[564,679,681,684],{"class":566,"line":680},11,[564,682,683],{"class":570},"    env_passthrough",[564,685,686],{"class":574},": []\n",[564,688,690,693],{"class":566,"line":689},12,[564,691,692],{"class":570},"    local_files",[564,694,686],{"class":574},[564,696,698,701],{"class":566,"line":697},13,[564,699,700],{"class":570},"    models",[564,702,677],{"class":574},[564,704,706,709],{"class":566,"line":705},14,[564,707,708],{"class":570},"    deny_tools",[564,710,686],{"class":574},[564,712,714,717],{"class":566,"line":713},15,[564,715,716],{"class":570},"    steering",[564,718,686],{"class":574},[564,720,722,725,727],{"class":566,"line":721},16,[564,723,724],{"class":570},"    sandbox",[564,726,587],{"class":574},[564,728,658],{"class":635},[564,730,732,735],{"class":566,"line":731},17,[564,733,734],{"class":570},"    policy",[564,736,575],{"class":574},[564,738,740,743,746,749,752,755,757,760],{"class":566,"line":739},18,[564,741,742],{"class":570},"      allowed_tools",[564,744,745],{"class":574},": [",[564,747,748],{"class":590},"Read",[564,750,751],{"class":574},", ",[564,753,754],{"class":590},"Edit",[564,756,751],{"class":574},[564,758,759],{"class":590},"Bash",[564,761,762],{"class":574},"]\n",[564,764,766,769],{"class":566,"line":765},19,[564,767,768],{"class":570},"    automated_review",[564,770,575],{"class":574},[564,772,774,777,779,782],{"class":566,"line":773},20,[564,775,776],{"class":570},"      bot",[564,778,587],{"class":574},[564,780,781],{"class":590},"coderabbitai",[564,783,785],{"class":784},"sq92B","     # exactly one of bot or check\n",[564,787,789,792,794],{"class":566,"line":788},21,[564,790,791],{"class":570},"    ci_checks",[564,793,587],{"class":574},[564,795,636],{"class":635},[797,798,800],"h2",{"id":799},"where-a-repos-value-comes-from","Where a repo's value comes from",[526,802,803,804,807,808,812,813,751,816,819,820,823,824,826,827,829,830,832],{},"A repo that sets no ",[529,805,806],{},"steering:"," gets the ",[533,809,811],{"href":810},"\u002Fconcepts\u002Fvocabulary#steering-profile","steering profiles"," its default chain's tasks select, from the library. A repo that sets none of ",[529,814,815],{},"deny_tools",[529,817,818],{},"models"," or a ",[529,821,822],{},"policy:"," key gets the instance's. ",[529,825,815],{}," and ",[529,828,822],{}," come from ",[529,831,318],{},", and a repo's own list only adds to it.",[526,834,835,836,838,839,841],{},"A repo's ",[529,837,822],{}," may tighten the instance's safety layer but not relax it. A draft of ",[529,840,300],{},", the Settings edit buffer, shows a relaxing value as a problem naming the repo and the field before it is published, the same refusal a run gives.",[526,843,844,845,751,848,851,852,855,856,859,860,862,863,870],{},"Each field's source (",[529,846,847],{},"repo",[529,849,850],{},"library"," or ",[529,853,854],{},"default",") comes with the value in the ",[529,857,858],{},"resolved"," view of the ",[529,861,571],{}," draft; see ",[533,864,866,867,869],{"href":865},"\u002Freference\u002Fhttp-api\u002Fdraft-ops#the-resolved-answer-for-repos","The ",[529,868,858],{}," answer for repos",".",[797,872,874],{"id":873},"fields","Fields",[526,876,877,878,881,882,885],{},"No key on an entry passes silently. A key within two edits of a field below (",[529,879,880],{},"automated_reviews:",") is refused when the file loads, naming the field it meant. Any other key the tables do not list is kept, logged as a warning, and fails ",[529,883,884],{},"kraft admin doctor"," until it is removed.",[887,888,890],"h3",{"id":889},"identity","Identity",[892,893,894,913],"table",{},[895,896,897],"thead",{},[898,899,900,904,907,910],"tr",{},[901,902,903],"th",{},"Field",[901,905,906],{},"Type",[901,908,909],{},"Default",[901,911,912],{},"Meaning",[914,915,916,935,952,972,999,1018,1058,1077,1109],"tbody",{},[898,917,918,923,926,932],{},[919,920,921],"td",{},[529,922,584],{},[919,924,925],{},"string",[919,927,928],{},[929,930,931],"em",{},"(required)",[919,933,934],{},"Absolute path to the repo.",[898,936,937,942,944,949],{},[919,938,939],{},[529,940,941],{},"name",[919,943,925],{},[919,945,946],{},[529,947,948],{},"null",[919,950,951],{},"Display name, set at connect time and not otherwise validated. Unset, the path is shown.",[898,953,954,959,965,969],{},[919,955,956],{},[529,957,958],{},"id",[919,960,961,962],{},"string, ",[529,963,964],{},"[a-z][a-z0-9_-]*",[919,966,967],{},[529,968,948],{},[919,970,971],{},"The repository id a workspace names this entry by, unique. Only a workspace's root and members need one; connecting a repo with submodules writes it for them.",[898,973,974,979,982,987],{},[919,975,976],{},[529,977,978],{},"enabled",[919,980,981],{},"boolean",[919,983,984],{},[529,985,986],{},"true",[919,988,989,990,993,994,870],{},"Set ",[529,991,992],{},"false"," to keep auto-intake off this repo without disconnecting it. See ",[533,995,997],{"href":996},"#enabled",[529,998,978],{},[898,1000,1001,1006,1008,1012],{},[919,1002,1003],{},[529,1004,1005],{},"managed",[919,1007,981],{},[919,1009,1010],{},[529,1011,986],{},[919,1013,1014,1015,870],{},"Keeps a repo you connected out of Settings › Repos' \"Detected · not connected\" section. Auto-connected submodules are written with ",[529,1016,1017],{},"managed: false",[898,1019,1020,1025,1027,1031],{},[919,1021,1022],{},[529,1023,1024],{},"forge",[919,1026,925],{},[919,1028,1029],{},[529,1030,948],{},[919,1032,1033,851,1036,1039,1040,1043,1044,1046,1047,751,1050,1053,1054,1057],{},[529,1034,1035],{},"github",[529,1037,1038],{},"gitlab",": which forge adapter ",[529,1041,1042],{},"backend: auto"," resolves to for this repo. ",[529,1045,538],{}," sets it from the host of the repo's remote: ",[529,1048,1049],{},"github.com",[529,1051,1052],{},"gitlab.com",", or a self-hosted host that names one (",[529,1055,1056],{},"gitlab.example.com",").",[898,1059,1060,1065,1067,1071],{},[919,1061,1062],{},[529,1063,1064],{},"project",[919,1066,925],{},[919,1068,1069],{},[529,1070,948],{},[919,1072,1073,1074,870],{},"The GitLab project path, when ",[529,1075,1076],{},"forge: gitlab",[898,1078,1079,1084,1086,1090],{},[919,1080,1081],{},[529,1082,1083],{},"default_chain",[919,1085,925],{},[919,1087,1088],{},[529,1089,948],{},[919,1091,1092,1093,1097,1098,1100,1101,1103,1104,870],{},"The chain a ",[533,1094,1096],{"href":1095},"\u002Fconcepts\u002Fvocabulary#work-item","work item"," on this repo runs when none is named. Unset, it is the repo library's ",[529,1099,854],{}," chain when one is loaded, else ",[529,1102,854],{},". See ",[533,1105,1107],{"href":1106},"#default_chain",[529,1108,1083],{},[898,1110,1111,1115,1123,1128],{},[919,1112,1113],{},[529,1114,818],{},[919,1116,1117,1118,1122],{},"mapping of ",[533,1119,1121],{"href":1120},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," id to string",[919,1124,1125],{},[529,1126,1127],{},"{}",[919,1129,1130,1131,1134,1135,870],{},"The model an agent task runs with on this repo, per harness profile id (",[529,1132,1133],{},"claude: opus","). See ",[533,1136,1138],{"href":1137},"#models",[529,1139,818],{},[887,1141,1143],{"id":1142},"test-and-setup","Test and setup",[892,1145,1146,1158],{},[895,1147,1148],{},[898,1149,1150,1152,1154,1156],{},[901,1151,903],{},[901,1153,906],{},[901,1155,909],{},[901,1157,912],{},[914,1159,1160,1186,1207,1240,1265,1285],{},[898,1161,1162,1167,1169,1173],{},[919,1163,1164],{},[529,1165,1166],{},"setup_command",[919,1168,925],{},[919,1170,1171],{},[529,1172,948],{},[919,1174,1175,1176,1180,1181,870],{},"Runs in every new ",[533,1177,1179],{"href":1178},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," before any node starts. Unset, the file still loads, but the repo's next work item stops before its first task. See ",[533,1182,1184],{"href":1183},"#setup_command",[529,1185,1166],{},[898,1187,1188,1193,1195,1199],{},[919,1189,1190],{},[529,1191,1192],{},"test_command",[919,1194,925],{},[919,1196,1197],{},[529,1198,948],{},[919,1200,1201,1202,870],{},"The command CI actually runs for this repo: what the changed-test-scope verification runs, as one scope over every path. See ",[533,1203,1205],{"href":1204},"#test_command",[529,1206,1192],{},[898,1208,1209,1214,1220,1224],{},[919,1210,1211],{},[529,1212,1213],{},"test_scopes",[919,1215,1216,1217],{},"list of ",[529,1218,1219],{},"{paths, command}",[919,1221,1222],{},[529,1223,948],{},[919,1225,1226,1227,1230,1231,1234,1235,870],{},"A monorepo's per-directory test commands. Each ",[529,1228,1229],{},"paths"," is a non-empty list and each ",[529,1232,1233],{},"command"," a non-empty string. See ",[533,1236,1238],{"href":1237},"#test_scopes",[529,1239,1213],{},[898,1241,1242,1247,1250,1254],{},[919,1243,1244],{},[529,1245,1246],{},"areas",[919,1248,1249],{},"mapping of id to area",[919,1251,1252],{},[529,1253,1127],{},[919,1255,1256,1257,1103,1260,870],{},"Path-scoped contexts inside this repo: ",[529,1258,1259],{},"{paths: [...], setup: \"...\", verification: {test_scopes: [...]}}",[533,1261,1263],{"href":1262},"#areas",[529,1264,1246],{},[898,1266,1267,1272,1275,1279],{},[919,1268,1269],{},[529,1270,1271],{},"intent_dir",[919,1273,1274],{},"string, a relative path",[919,1276,1277],{},[529,1278,948],{},[919,1280,1281,1282,1284],{},"Where the repo's intent tree lives, relative to its root. When set, every agent in the repo is told to follow it. Kraft does not run the tree's check: add it to the repo's ",[529,1283,1213],{}," yourself.",[898,1286,1287,1292,1295,1300],{},[919,1288,1289],{},[529,1290,1291],{},"local_files",[919,1293,1294],{},"list of strings",[919,1296,1297],{},[529,1298,1299],{},"[]",[919,1301,1302,1303,1306,1307,1310,1311,1314,1315,1057],{},"Files to copy into every new worktree, for ones ",[529,1304,1305],{},"git worktree add"," cannot carry: relative paths, no globs or directories, covered by the worktree's ",[529,1308,1309],{},".gitignore",". Anything else is refused, and named in the ",[529,1312,1313],{},"worktree_prepared"," event (",[529,1316,1317],{},"kraft view events",[887,1319,1321],{"id":1320},"environment","Environment",[892,1323,1324,1336],{},[895,1325,1326],{},[898,1327,1328,1330,1332,1334],{},[901,1329,903],{},[901,1331,906],{},[901,1333,909],{},[901,1335,912],{},[914,1337,1338,1365],{},[898,1339,1340,1345,1348,1352],{},[919,1341,1342],{},[529,1343,1344],{},"env",[919,1346,1347],{},"mapping of string to string",[919,1349,1350],{},[529,1351,1127],{},[919,1353,1354,1355,1359,1360,870],{},"Literal environment variables every ",[533,1356,1358],{"href":1357},"\u002Fconcepts\u002Fvocabulary#worker","worker"," for this repo gets. See ",[533,1361,1363],{"href":1362},"#env",[529,1364,1344],{},[898,1366,1367,1372,1374,1378],{},[919,1368,1369],{},[529,1370,1371],{},"env_passthrough",[919,1373,1294],{},[919,1375,1376],{},[529,1377,1299],{},[919,1379,1380,1381,870],{},"Names of variables to carry over from the server's own environment, for what the worker allowlist does not cover. See ",[533,1382,1383],{"href":1362},[529,1384,1344],{},[887,1386,1388],{"id":1387},"policy-and-sandbox","Policy and sandbox",[892,1390,1391,1403],{},[895,1392,1393],{},[898,1394,1395,1397,1399,1401],{},[901,1396,903],{},[901,1398,906],{},[901,1400,909],{},[901,1402,912],{},[914,1404,1405,1433,1452,1476],{},[898,1406,1407,1412,1415,1419],{},[919,1408,1409],{},[529,1410,1411],{},"policy",[919,1413,1414],{},"mapping",[919,1416,1417],{},[529,1418,948],{},[919,1420,1421,1422,1424,1425,1427,1428,870],{},"The repository policy layer, applied after ",[529,1423,318],{}," and before the chain, and only ever tightening what ",[529,1426,318],{}," allows. See ",[533,1429,1431],{"href":1430},"#policy",[529,1432,1411],{},[898,1434,1435,1439,1441,1445],{},[919,1436,1437],{},[529,1438,815],{},[919,1440,1294],{},[919,1442,1443],{},[529,1444,1299],{},[919,1446,1447,1448,870],{},"Tool names withheld from every agent task on this repo. Part of the repository policy layer, frozen into each work item when it is filed. See ",[533,1449,1450],{"href":1430},[529,1451,1411],{},[898,1453,1454,1459,1461,1465],{},[919,1455,1456],{},[529,1457,1458],{},"steering",[919,1460,1294],{},[919,1462,1463],{},[529,1464,1299],{},[919,1466,1467,1468,1471,1472,870],{},"Names of ",[529,1469,1470],{},"library.yaml"," steering profiles given to every agent launch on this repo, before the task's own steering. Frozen into each work item when it is filed. See ",[533,1473,1475],{"href":1474},"#repository-steering","Repository steering",[898,1477,1478,1482,1487,1491],{},[919,1479,1480],{},[529,1481,551],{},[919,1483,1484,1485],{},"mapping, or ",[529,1486,992],{},[919,1488,1489],{},[529,1490,948],{},[919,1492,1493,1494,870],{},"Runs this repo's task processes in a container. See ",[533,1495,1497],{"href":1496},"#sandbox",[529,1498,551],{},[887,1500,1502],{"id":1501},"review-and-ci","Review and CI",[892,1504,1505,1517],{},[895,1506,1507],{},[898,1508,1509,1511,1513,1515],{},[901,1510,903],{},[901,1512,906],{},[901,1514,909],{},[901,1516,912],{},[914,1518,1519,1549,1572],{},[898,1520,1521,1526,1528,1532],{},[919,1522,1523],{},[529,1524,1525],{},"automated_review",[919,1527,1414],{},[919,1529,1530],{},[529,1531,948],{},[919,1533,1534,1535,1538,1539,851,1542,1103,1545,870],{},"The one automated reviewer a chain's ",[529,1536,1537],{},"mr.automated_review"," task waits for: ",[529,1540,1541],{},"bot: \u003Clogin>",[529,1543,1544],{},"check: \u003Cname>",[533,1546,1548],{"href":1547},"#automated-review","Automated review",[898,1550,1551,1556,1558,1562],{},[919,1552,1553],{},[529,1554,1555],{},"ci_checks",[919,1557,981],{},[919,1559,1560],{},[529,1561,986],{},[919,1563,989,1564,1566,1567,870],{},[529,1565,992],{}," on a repo with no CI, so both CI waits pass at once instead of waiting on checks that never come. See ",[533,1568,1570],{"href":1569},"#ci_checks",[529,1571,1555],{},[898,1573,1574,1579,1581,1585],{},[919,1575,1576],{},[529,1577,1578],{},"library_auto_update",[919,1580,981],{},[919,1582,1583],{},[529,1584,992],{},[919,1586,1587,1588,1592],{},"Take text-only changes to this repo's accepted ",[533,1589,1591],{"href":1590},"\u002Freference\u002Fconfiguration\u002Frepo-libraries#automatic-updates","repo library"," without a person.",[797,1594,1596],{"id":1595},"field-details","Field details",[887,1598,1599],{"id":978},[529,1600,978],{},[1602,1603,1604,1608,1625,1628],"ul",{},[1605,1606,1607],"li",{},"It governs auto-intake only: you can still file and run items on a disabled repo (from the CLI or an agent; the web composer lists only enabled repos), and running items keep going.",[1605,1609,1610,1612,1613,1616,1617,1620,1621,851,1623,870],{},[529,1611,538],{}," saves a repo it found no test command for with ",[529,1614,1615],{},"enabled: false","; an item on it runs its agent tasks, then stops at ",[529,1618,1619],{},"verification"," until it has a ",[529,1622,1192],{},[529,1624,1213],{},[1605,1626,1627],{},"An absent key counts as enabled.",[1605,1629,1630,1631,1633,1634,1637,1638,870],{},"Kraft refuses an edit that would leave an enabled repo with neither a ",[529,1632,1192],{}," (",[529,1635,1636],{},"\"\""," counts) nor ",[529,1639,1213],{},[887,1641,1642],{"id":1083},[529,1643,1083],{},[526,1645,1646,1647,1650,1651,1654],{},"An item that names no chain gets it however it is filed: ",[529,1648,1649],{},"kraft item create",", the MCP tool, the board, the API, ",[529,1652,1653],{},"POST \u002Fapi\u002Ftriggers"," or auto-intake.",[526,1656,1657,1658,1660,1661,1664,1665,1668,1669,1671],{},"Unset or ",[529,1659,854],{},", it gives way to the chain ",[529,1662,1663],{},"\u003Cid>:default"," of the repo's ",[533,1666,1591],{"href":1667},"\u002Freference\u002Fconfiguration\u002Frepo-libraries#the-default-chain",", when the library is accepted and has one. Name another chain here to keep the instance's own. Accepting a repo library writes an ",[529,1670,958],{}," on the entry when it has none.",[526,1673,1674,1675,1678],{},"Before 2.0, this key was ",[529,1676,1677],{},"default_chain_template",". It is still read, and saved under the new name.",[887,1680,1681],{"id":818},[529,1682,818],{},[526,1684,1685,1686,1689,1690,1693,1694,1697,1698,1701],{},"It applies above the harness profile's own ",[529,1687,1688],{},"defaults:",", below a task's ",[529,1691,1692],{},"model:"," or agent ",[529,1695,1696],{},"profile:"," and the work item's override. It is keyed by harness profile because one model name means nothing to another provider. The retired ",[529,1699,1700],{},"default_model"," key is dropped with a warning.",[887,1703,1704],{"id":1166},[529,1705,1166],{},[1602,1707,1708,1718,1721],{},[1605,1709,1710,1712,1713,1717],{},[529,1711,1636],{}," means \"deliberately nothing\", which is the ",[1714,1715,1716],"strong",{},"No setup needed"," checkbox in Settings › Repos.",[1605,1719,1720],{},"An absent value stops the repo's next work item rather than guessing.",[1605,1722,1723,1724,1728,1729,1732],{},"On a ",[533,1725,1727],{"href":1726},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxed"," item it runs as ",[529,1730,1731],{},"sh -c"," inside the sandbox, never on the host. Without docker the item stops.",[526,1734,1735,1737],{},[533,1736,306],{"href":307}," says how connect proposes it.",[887,1739,1740],{"id":1192},[529,1741,1192],{},[1602,1743,1744,1747,1755,1761],{},[1605,1745,1746],{},"It runs from the worktree root without a shell.",[1605,1748,1749,1751,1752,1717],{},[529,1750,1636],{}," declares a repo with no tests (docs, infrastructure): verification passes and its session says so. It is the ",[1714,1753,1754],{},"No tests",[1605,1756,1757,1758,1760],{},"A repo with neither this nor ",[529,1759,1213],{}," stops that verification for you rather than inventing a command.",[1605,1762,1763,1764,1766],{},"Verification ignores it while ",[529,1765,1213],{}," is set: the scopes are what runs. For a repo with more than one project, connect saves the first scope's command here, beside the scopes, so it does not cover every path.",[526,1768,1769,1737],{},[533,1770,306],{"href":307},[887,1772,1773],{"id":1213},[529,1774,1213],{},[526,1776,1777,1778,1781,1782,1785,1786,870],{},"Every command runs from the repository root, without a shell, so one for a project in a subdirectory names that directory itself: ",[529,1779,1780],{},"sh -c 'cd frontend && npm test'"," (what connect proposes) or ",[529,1783,1784],{},"npm --prefix frontend test",", not ",[529,1787,1788],{},"npm test",[526,1790,1791,1792,1794,1795,1797],{},"Kraft does not synthesize ",[529,1793,1213],{}," from ",[529,1796,1192],{},": the two stay independently editable.",[887,1799,1800],{"id":1246},[529,1801,1246],{},[526,1803,1804,1805,1808],{},"An area's test scopes join the repo's and are selected by changed paths the same way. Its ",[529,1806,1807],{},"setup"," runs once before the first of its scopes runs. Areas are never forge targets.",[887,1810,1811],{"id":1344},[529,1812,1344],{},[526,1814,1815,1817,1818,1820,1821,1825,1826,1830],{},[529,1816,1344],{}," sets literal variables every worker for this repo gets, on top of the worker's allowlist. ",[529,1819,1371],{}," names variables the server already has that the allowlist leaves out. Both are layered on the allowlist, which is not the server's whole environment: ",[533,1822,1824],{"href":1823},"\u002Freference\u002Fconfiguration\u002Fenvironment-variables#passed-to-workers","Passed to workers"," lists it, and ",[533,1827,1829],{"href":1828},"\u002Freference\u002Fconfiguration\u002Fenvironment-variables#added-by-the-repo","Added by the repo"," says what stays behind unless you name it here.",[526,1832,1833,1834,1836,1837,1839,1840,1843],{},"A sandboxed worker gets none of the allowlist, only what ",[533,1835,346],{"href":347}," lists, which covers the server's proxy, an extra CA, and each ",[529,1838,1371],{}," name, forwarded by name so its value never appears on the ",[529,1841,1842],{},"docker"," command line.",[887,1845,1846],{"id":1411},[529,1847,1411],{},[526,1849,1850],{},"It takes any of:",[1602,1852,1853,1877],{},[1605,1854,1855,751,1858,751,1860,751,1863,751,1865,751,1868,751,1871,826,1874],{},[529,1856,1857],{},"allowed_tools",[529,1859,815],{},[529,1861,1862],{},"grants",[529,1864,551],{},[529,1866,1867],{},"allowed_harnesses",[529,1869,1870],{},"escalation_harness",[529,1872,1873],{},"timeout_minutes",[529,1875,1876],{},"max_attempts",[1605,1878,1879,1880,751,1883,751,1886,751,1889,1892,1893],{},"the four caps (",[529,1881,1882],{},"time_cap_minutes",[529,1884,1885],{},"total_time_cap_minutes",[529,1887,1888],{},"token_budget",[529,1890,1891],{},"budget_usd","), each the work item's own, within ",[529,1894,1895],{},"maxima.work_item",[526,1897,1898,1900],{},[529,1899,815],{}," is frozen into each work item when it is filed, and a later addition still applies to running items.",[526,1902,1903,1904,1906,1907,1911,1912,870],{},"It binds every work item filed in this repo, whatever its chain. A value ",[529,1905,318],{}," refuses makes ",[533,1908,1910],{"href":1909},"\u002Fconcepts\u002Fvocabulary#intake","intake"," refuse the item. See ",[533,1913,1915],{"href":1914},"\u002Freference\u002Fconfiguration\u002Fpolicy#policy-fields","Policy fields",[887,1917,1475],{"id":1918},"repository-steering",[526,1920,1921,1924,1925,1927,1928,1930,1931,1934],{},[529,1922,1923],{},"steering: [name, ...]"," names steering profiles in ",[529,1926,1470],{},", the same ones a task's ",[529,1929,806],{}," selects (see the ",[533,1932,1933],{"href":323},"library reference","). There is no other steering store.",[1602,1936,1937,1944,1951,1954],{},[1605,1938,1939,1940,1943],{},"When a work item is filed, Kraft resolves each name to its steering profile's ",[529,1941,1942],{},"instructions"," and freezes the text into the item. Editing a steering profile reaches items filed afterwards and never one already filed.",[1605,1945,1946,1947,1950],{},"Every launch gets the repository's steering profiles first, then the task's, in the agent's system prompt under a ",[529,1948,1949],{},"## Project standards"," heading, 8 KB at most together.",[1605,1952,1953],{},"A name the library does not define is refused when the repository is saved (Settings › Repos) and when an item is filed. A library save that removes a steering profile a repository still names is refused too.",[1605,1955,1956,1957,870],{},"You write steering profiles in Templates › Library, which edits ",[529,1958,1470],{},[526,1960,1961,1962,751,1965,1968],{},"This is not a place for target-repo files: Kraft never reads ",[529,1963,1964],{},"CLAUDE.md",[529,1966,1967],{},"AGENTS.md",", or anything else from inside the repo being worked on as a source of process context.",[887,1970,1971],{"id":551},[529,1972,551],{},[526,1974,1975,1977,1978,1981,1982,1985,1986,1989,1990,1993,1994,1997,1998,870],{},[529,1976,551],{}," is part of the repository policy layer. ",[533,1979,346],{"href":1980},"\u002Freference\u002Fconfiguration\u002Fsandbox#the-sandbox-key"," lists its keys, which go with ",[529,1983,1984],{},"kind: docker"," and which with ",[529,1987,1988],{},"kind: kit",", and says why no chain, node or task can change it. A sandbox needs a ",[529,1991,1992],{},"network:"," policy or ",[529,1995,1996],{},"unrestricted_network: true",": a launch into one with neither is refused. See ",[533,1999,360],{"href":2000},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy#without-a-network-policy",[887,2002,1548],{"id":2003},"automated-review",[526,2005,2006,2008,2009,2011],{},[529,2007,1525],{}," names exactly one reviewer, one of two ways. It is the reviewer a chain's ",[529,2010,1537],{}," task waits for.",[1602,2013,2014,2027],{},[1605,2015,2016,2018,2019],{},[529,2017,1541],{}," settles when that forge login has reviewed the merge request's current head.\n",[1602,2020,2021,2024],{},[1605,2022,2023],{},"On GitHub, changes requested or any inline comment is actionable (one finding per comment), and anything else is clean. A dismissed review does not count.",[1605,2025,2026],{},"On GitLab, the bot's unresolved discussions are actionable and its approval is clean. A GitLab approval is not tied to a commit, so a bot's approval of an earlier head still reads as clean, unless the project resets approvals on push.",[1605,2028,2029,2031],{},[529,2030,1544],{}," settles when that check run or commit status on the head completes. Success is clean. Failure is actionable, with its output as the finding.",[526,2033,2034,2035,2038],{},"Unset, the repository expects no automated review: the task settles clean at once and records ",[529,2036,2037],{},"automated_review_not_configured",". A reviewer that errors stops the item for you rather than spending a repair.",[526,2040,2041],{},"Kraft reads only the first page of 100 of each list it asks for: the pull request's reviews, a review's comments, and a GitLab merge request's discussions and commit statuses. A bot with no match on that first page reads as not having reviewed yet.",[887,2043,2044],{"id":1555},[529,2045,1555],{},[526,2047,2048,2049,2052,2053,2056,2057,2060,2061,2063,2064,2066,2067,851,2069,870],{},"The two waits are a chain's ",[529,2050,2051],{},"mr.ci"," task before the merge and its ",[529,2054,2055],{},"mr.post_merge_ci"," task after it. Each records ",[529,2058,2059],{},"ci_not_configured"," when it passes at once because ",[529,2062,1555],{}," is ",[529,2065,992],{},". It does not touch ",[529,2068,1537],{},[529,2070,2071],{},"mr.external_approval",[797,2073,2075],{"id":2074},"in-this-section","In this section",[1602,2077,2078,2086,2093],{},[1605,2079,2080,2082,2083,2085],{},[533,2081,306],{"href":307},": how ",[529,2084,538],{}," proposes setup and test commands, and what to do when it finds none.",[1605,2087,2088,587,2090,2092],{},[533,2089,310],{"href":311},[529,2091,310],{},", where you teach connect your own conventions, and the toolchains Kraft ships.",[1605,2094,2095,2097],{},[533,2096,314],{"href":315},": a root repository with other repositories mounted as submodules.",[2099,2100,2101],"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 pre.shiki code .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}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":560,"searchDepth":578,"depth":578,"links":2103},[2104,2105,2112,2132],{"id":799,"depth":578,"text":800},{"id":873,"depth":578,"text":874,"children":2106},[2107,2108,2109,2110,2111],{"id":889,"depth":594,"text":890},{"id":1142,"depth":594,"text":1143},{"id":1320,"depth":594,"text":1321},{"id":1387,"depth":594,"text":1388},{"id":1501,"depth":594,"text":1502},{"id":1595,"depth":578,"text":1596,"children":2113},[2114,2115,2117,2118,2120,2122,2124,2125,2126,2127,2128,2129,2130],{"id":978,"depth":594,"text":978},{"id":1083,"depth":594,"text":2116},"default_​chain",{"id":818,"depth":594,"text":818},{"id":1166,"depth":594,"text":2119},"setup_​command",{"id":1192,"depth":594,"text":2121},"test_​command",{"id":1213,"depth":594,"text":2123},"test_​scopes",{"id":1246,"depth":594,"text":1246},{"id":1344,"depth":594,"text":1344},{"id":1411,"depth":594,"text":1411},{"id":1918,"depth":594,"text":1475},{"id":551,"depth":594,"text":551},{"id":2003,"depth":594,"text":1548},{"id":1555,"depth":594,"text":2131},"ci_​checks",{"id":2074,"depth":578,"text":2075},"Every field in repos.yaml, where a repo's value comes from, and the pages for how connect proposes commands, detectors, workspaces and sandboxes.","md",null,{},{"title":10},{"title":300,"description":2133},"1n_85OGrOJOyiI5q1d92hndtWbCypY8fdu97VVWbEX8",[2141,2143],{"title":10,"path":295,"stem":296,"description":2142,"children":-1},"Which file in Kraft's config directory controls what, and how Kraft creates, edits, validates and rereads the directory.",{"title":306,"path":307,"stem":308,"description":2144,"children":-1},"What kraft repo connect reads in a repo, where each proposed setup and test command comes from, and what it does when it finds none.",1791801179104]