[{"data":1,"prerenderedAt":2088},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-repos":504,"-reference-configuration-repos-surround":2083},[4,28,51,187,214,469],{"title":5,"path":6,"stem":7,"children":8},"Get started","\u002Fget-started","1.get-started",[9,12,16,20,24],{"title":10,"path":6,"stem":11},"Overview","1.get-started\u002Findex",{"title":13,"path":14,"stem":15},"Why Kraft","\u002Fget-started\u002Fwhy-kraft","1.get-started\u002F0.why-kraft",{"title":17,"path":18,"stem":19},"Install","\u002Fget-started\u002Finstall","1.get-started\u002F1.install",{"title":21,"path":22,"stem":23},"Your first work item","\u002Fget-started\u002Ffirst-work-item","1.get-started\u002F2.first-work-item",{"title":25,"path":26,"stem":27},"FAQ","\u002Fget-started\u002Ffaq","1.get-started\u002F3.faq",{"title":29,"path":30,"stem":31,"children":32},"Concepts","\u002Fconcepts","2.concepts",[33,35,39,43,47],{"title":10,"path":30,"stem":34},"2.concepts\u002Findex",{"title":36,"path":37,"stem":38},"How a work item runs","\u002Fconcepts\u002Fhow-a-work-item-runs","2.concepts\u002F1.how-a-work-item-runs",{"title":40,"path":41,"stem":42},"Caps and budgets","\u002Fconcepts\u002Fcaps-and-budgets","2.concepts\u002F2.caps-and-budgets",{"title":44,"path":45,"stem":46},"Why a permission gate","\u002Fconcepts\u002Fpermission-gate","2.concepts\u002F3.permission-gate",{"title":48,"path":49,"stem":50},"Vocabulary","\u002Fconcepts\u002Fvocabulary","2.concepts\u002F4.vocabulary",{"title":52,"path":53,"stem":54,"children":55},"Guides","\u002Fguides","3.guides",[56,58,96,113,134,183],{"title":10,"path":53,"stem":57},"3.guides\u002Findex",{"title":59,"path":60,"stem":61,"children":62,"page":95},"Day to day","\u002Fguides\u002Fday-to-day","3.guides\u002F1.day-to-day",[63,67,71,75,79,83,87,91],{"title":64,"path":65,"stem":66},"The setup wizard on first start","\u002Fguides\u002Fday-to-day\u002Ffirst-run","3.guides\u002F1.day-to-day\u002F2.first-run",{"title":68,"path":69,"stem":70},"File a work item","\u002Fguides\u002Fday-to-day\u002Ffile-a-work-item","3.guides\u002F1.day-to-day\u002F3.file-a-work-item",{"title":72,"path":73,"stem":74},"Use Kraft from your agent","\u002Fguides\u002Fday-to-day\u002Fagent-integration","3.guides\u002F1.day-to-day\u002F4.agent-integration",{"title":76,"path":77,"stem":78},"Reviewing a change","\u002Fguides\u002Fday-to-day\u002Freview-a-change","3.guides\u002F1.day-to-day\u002F5.review-a-change",{"title":80,"path":81,"stem":82},"Raise a cap on a stopped item","\u002Fguides\u002Fday-to-day\u002Fraise-a-cap","3.guides\u002F1.day-to-day\u002F6.raise-a-cap",{"title":84,"path":85,"stem":86},"Kraft for VS Code","\u002Fguides\u002Fday-to-day\u002Fvscode","3.guides\u002F1.day-to-day\u002F7.vscode",{"title":88,"path":89,"stem":90},"Kraft on a phone","\u002Fguides\u002Fday-to-day\u002Fkraft-on-a-phone","3.guides\u002F1.day-to-day\u002F8.kraft-on-a-phone",{"title":92,"path":93,"stem":94},"Get notified when an item needs you","\u002Fguides\u002Fday-to-day\u002Fnotifications","3.guides\u002F1.day-to-day\u002F9.notifications",false,{"title":97,"path":98,"stem":99,"children":100,"page":95},"Customize and automate","\u002Fguides\u002Fcustomize","3.guides\u002F2.customize",[101,105,109],{"title":102,"path":103,"stem":104},"Write your own chain","\u002Fguides\u002Fcustomize\u002Fwrite-your-own-chain","3.guides\u002F2.customize\u002F1.write-your-own-chain",{"title":106,"path":107,"stem":108},"Add a security review or a gate reviewer","\u002Fguides\u002Fcustomize\u002Fadd-review-agents","3.guides\u002F2.customize\u002F2.add-review-agents",{"title":110,"path":111,"stem":112},"Schedule or webhook work","\u002Fguides\u002Fcustomize\u002Fschedule-and-webhook-work","3.guides\u002F2.customize\u002F3.schedule-and-webhook-work",{"title":114,"path":115,"stem":116,"children":117,"page":95},"Agents and harnesses","\u002Fguides\u002Fharnesses","3.guides\u002F3.harnesses",[118,122,126,130],{"title":119,"path":120,"stem":121},"Switch a task to another harness","\u002Fguides\u002Fharnesses\u002Fswitch-harness","3.guides\u002F3.harnesses\u002F1.switch-harness",{"title":123,"path":124,"stem":125},"Add or override a harness","\u002Fguides\u002Fharnesses\u002Fadding-a-harness","3.guides\u002F3.harnesses\u002F2.adding-a-harness",{"title":127,"path":128,"stem":129},"Build a worker Kit","\u002Fguides\u002Fharnesses\u002Fworker-kit","3.guides\u002F3.harnesses\u002F3.worker-kit",{"title":131,"path":132,"stem":133},"Give a worker its login","\u002Fguides\u002Fharnesses\u002Fgive-a-worker-its-login","3.guides\u002F3.harnesses\u002F4.give-a-worker-its-login",{"title":135,"path":136,"stem":137,"children":138,"page":95},"Run the server","\u002Fguides\u002Frun","3.guides\u002F4.run",[139,143,147,151,155,159,163,167,171,175,179],{"title":140,"path":141,"stem":142},"Remote access","\u002Fguides\u002Frun\u002Fremote-access","3.guides\u002F4.run\u002F01.remote-access",{"title":144,"path":145,"stem":146},"Put a proxy in front of Kraft","\u002Fguides\u002Frun\u002Fput-a-proxy-in-front-of-kraft","3.guides\u002F4.run\u002F02.put-a-proxy-in-front-of-kraft",{"title":148,"path":149,"stem":150},"Restart Kraft without ending running agents","\u002Fguides\u002Frun\u002Frestart-kraft","3.guides\u002F4.run\u002F03.restart-kraft",{"title":152,"path":153,"stem":154},"Back up and restore the database","\u002Fguides\u002Frun\u002Fback-up-and-restore","3.guides\u002F4.run\u002F04.back-up-and-restore",{"title":156,"path":157,"stem":158},"Logs and disk space","\u002Fguides\u002Frun\u002Flogs-and-disk-space","3.guides\u002F4.run\u002F05.logs-and-disk-space",{"title":160,"path":161,"stem":162},"Run Kraft as a service","\u002Fguides\u002Frun\u002Frun-as-a-service","3.guides\u002F4.run\u002F06.run-as-a-service",{"title":164,"path":165,"stem":166},"Upgrade Kraft","\u002Fguides\u002Frun\u002Fupgrade-kraft","3.guides\u002F4.run\u002F07.upgrade-kraft",{"title":168,"path":169,"stem":170},"Upgrade your configuration","\u002Fguides\u002Frun\u002Fupgrade-your-configuration","3.guides\u002F4.run\u002F08.upgrade-your-configuration",{"title":172,"path":173,"stem":174},"Upgrade from 1.4","\u002Fguides\u002Frun\u002Fupgrade-from-1-4","3.guides\u002F4.run\u002F09.upgrade-from-1-4",{"title":176,"path":177,"stem":178},"Upgrade from 0.x or a release candidate","\u002Fguides\u002Frun\u002Fupgrade-from-0-x-or-a-release-candidate","3.guides\u002F4.run\u002F10.upgrade-from-0-x-or-a-release-candidate",{"title":180,"path":181,"stem":182},"Roll back to 1.4","\u002Fguides\u002Frun\u002Froll-back","3.guides\u002F4.run\u002F11.roll-back",{"title":184,"path":185,"stem":186},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F5.kraft-lite",{"title":188,"path":189,"stem":190,"children":191},"Troubleshooting","\u002Ftroubleshooting","4.troubleshooting",[192,194,198,202,206,210],{"title":10,"path":189,"stem":193},"4.troubleshooting\u002Findex",{"title":195,"path":196,"stem":197},"Why did my item stop?","\u002Ftroubleshooting\u002Fwhy-did-my-item-stop","4.troubleshooting\u002F1.why-did-my-item-stop",{"title":199,"path":200,"stem":201},"Stop reasons in detail","\u002Ftroubleshooting\u002Fstop-reasons-in-detail","4.troubleshooting\u002F2.stop-reasons-in-detail",{"title":203,"path":204,"stem":205},"Starting and reaching Kraft","\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft","4.troubleshooting\u002F3.starting-and-reaching-kraft",{"title":207,"path":208,"stem":209},"Doctor failures","\u002Ftroubleshooting\u002Fdoctor-failures","4.troubleshooting\u002F4.doctor-failures",{"title":211,"path":212,"stem":213},"Sandbox and Kit stops","\u002Ftroubleshooting\u002Fsandbox-and-kit-stops","4.troubleshooting\u002F5.sandbox-and-kit-stops",{"title":215,"path":216,"stem":217,"children":218},"Reference","\u002Freference","5.reference",[219,221,259,281,285,375,393,419,423,427,461,465],{"title":10,"path":216,"stem":220},"5.reference\u002Findex",{"title":222,"path":223,"stem":224,"children":225},"Web UI","\u002Freference\u002Fweb-ui","5.reference\u002F00.web-ui\u002Findex",[226,227,231,235,239,243,247,251,255],{"title":10,"path":223,"stem":224},{"title":228,"path":229,"stem":230},"Sidebar, search, and keyboard","\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard","5.reference\u002F00.web-ui\u002F0.sidebar-search-and-keyboard",{"title":232,"path":233,"stem":234},"The board","\u002Freference\u002Fweb-ui\u002Fboard","5.reference\u002F00.web-ui\u002F1.board",{"title":236,"path":237,"stem":238},"An item's page","\u002Freference\u002Fweb-ui\u002Fitem-page","5.reference\u002F00.web-ui\u002F2.item-page",{"title":240,"path":241,"stem":242},"Fix loops and test scopes","\u002Freference\u002Fweb-ui\u002Ffix-loops-and-test-scopes","5.reference\u002F00.web-ui\u002F3.fix-loops-and-test-scopes",{"title":244,"path":245,"stem":246},"Config before an item starts","\u002Freference\u002Fweb-ui\u002Fconfig-before-start","5.reference\u002F00.web-ui\u002F4.config-before-start",{"title":248,"path":249,"stem":250},"The review page","\u002Freference\u002Fweb-ui\u002Freview-page","5.reference\u002F00.web-ui\u002F5.review-page",{"title":252,"path":253,"stem":254},"Templates and Settings","\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings","5.reference\u002F00.web-ui\u002F6.templates-and-settings",{"title":256,"path":257,"stem":258},"Analytics","\u002Freference\u002Fweb-ui\u002Fanalytics","5.reference\u002F00.web-ui\u002F7.analytics",{"title":260,"path":261,"stem":262,"children":263},"CLI","\u002Freference\u002Fcli","5.reference\u002F01.cli\u002Findex",[264,265,269,273,277],{"title":10,"path":261,"stem":262},{"title":266,"path":267,"stem":268},"Item verbs","\u002Freference\u002Fcli\u002Fitem","5.reference\u002F01.cli\u002F2.item",{"title":270,"path":271,"stem":272},"View verbs","\u002Freference\u002Fcli\u002Fview","5.reference\u002F01.cli\u002F3.view",{"title":274,"path":275,"stem":276},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","5.reference\u002F01.cli\u002F4.repo",{"title":278,"path":279,"stem":280},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","5.reference\u002F01.cli\u002F5.admin",{"title":282,"path":283,"stem":284},"Work item statuses","\u002Freference\u002Fstatuses","5.reference\u002F02.statuses",{"title":286,"path":287,"stem":288,"children":289},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F03.configuration\u002Findex",[290,291,309,313,317,321,325,329,333,337,371],{"title":10,"path":287,"stem":288},{"title":292,"path":293,"stem":294,"children":295},"repos.yaml","\u002Freference\u002Fconfiguration\u002Frepos","5.reference\u002F03.configuration\u002F02.repos\u002Findex",[296,297,301,305],{"title":10,"path":293,"stem":294},{"title":298,"path":299,"stem":300},"How connect proposes commands","\u002Freference\u002Fconfiguration\u002Frepos\u002Fconnect-proposals","5.reference\u002F03.configuration\u002F02.repos\u002F1.connect-proposals",{"title":302,"path":303,"stem":304},"detectors.yaml","\u002Freference\u002Fconfiguration\u002Frepos\u002Fdetectors","5.reference\u002F03.configuration\u002F02.repos\u002F2.detectors",{"title":306,"path":307,"stem":308},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces",{"title":310,"path":311,"stem":312},"policy.yaml","\u002Freference\u002Fconfiguration\u002Fpolicy","5.reference\u002F03.configuration\u002F03.policy",{"title":314,"path":315,"stem":316},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","5.reference\u002F03.configuration\u002F04.library-and-chains",{"title":318,"path":319,"stem":320},"harnesses.yaml","\u002Freference\u002Fconfiguration\u002Fharnesses-file","5.reference\u002F03.configuration\u002F05.harnesses-file",{"title":322,"path":323,"stem":324},"access.yaml","\u002Freference\u002Fconfiguration\u002Faccess","5.reference\u002F03.configuration\u002F06.access",{"title":326,"path":327,"stem":328},"intake.yaml","\u002Freference\u002Fconfiguration\u002Fintake","5.reference\u002F03.configuration\u002F07.intake",{"title":330,"path":331,"stem":332},"notify.yaml","\u002Freference\u002Fconfiguration\u002Fnotify","5.reference\u002F03.configuration\u002F08.notify",{"title":334,"path":335,"stem":336},"theme.yaml","\u002Freference\u002Fconfiguration\u002Ftheme","5.reference\u002F03.configuration\u002F09.theme",{"title":338,"path":339,"stem":340,"children":341},"Sandboxed workers","\u002Freference\u002Fconfiguration\u002Fsandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002Findex",[342,343,347,351,355,359,363,367],{"title":10,"path":339,"stem":340},{"title":344,"path":345,"stem":346},"Resource limits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits","5.reference\u002F03.configuration\u002F10.sandbox\u002F1.resource-limits",{"title":348,"path":349,"stem":350},"Callbacks from a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks","5.reference\u002F03.configuration\u002F10.sandbox\u002F2.callbacks",{"title":352,"path":353,"stem":354},"Network policy","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy","5.reference\u002F03.configuration\u002F10.sandbox\u002F3.network-policy",{"title":356,"path":357,"stem":358},"Credentials","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials","5.reference\u002F03.configuration\u002F10.sandbox\u002F4.credentials",{"title":360,"path":361,"stem":362},"Kits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fkits","5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits",{"title":364,"path":365,"stem":366},"sandbox.yaml","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml","5.reference\u002F03.configuration\u002F10.sandbox\u002F6.sandbox-yaml",{"title":368,"path":369,"stem":370},"Git in a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002F7.git-in-a-sandbox",{"title":372,"path":373,"stem":374},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","5.reference\u002F03.configuration\u002F11.environment-variables",{"title":376,"path":377,"stem":378,"children":379},"Chain file keys","\u002Freference\u002Fchain-nodes","5.reference\u002F04.chain-nodes\u002Findex",[380,381,385,389],{"title":10,"path":377,"stem":378},{"title":382,"path":383,"stem":384},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","5.reference\u002F04.chain-nodes\u002F2.subprocess-tasks",{"title":386,"path":387,"stem":388},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","5.reference\u002F04.chain-nodes\u002F3.fix-loop",{"title":390,"path":391,"stem":392},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","5.reference\u002F04.chain-nodes\u002F4.result-file",{"title":394,"path":395,"stem":396,"children":397},"Agent harnesses","\u002Freference\u002Fharnesses","5.reference\u002F05.harnesses\u002Findex",[398,399,403,407,411,415],{"title":10,"path":395,"stem":396},{"title":400,"path":401,"stem":402},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","5.reference\u002F05.harnesses\u002F2.unattended-runs",{"title":404,"path":405,"stem":406},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","5.reference\u002F05.harnesses\u002F3.agent-profiles",{"title":408,"path":409,"stem":410},"Harness definition files","\u002Freference\u002Fharnesses\u002Fharness-files","5.reference\u002F05.harnesses\u002F4.harness-files",{"title":412,"path":413,"stem":414},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","5.reference\u002F05.harnesses\u002F5.fallback-and-escalation",{"title":416,"path":417,"stem":418},"Cost reporting","\u002Freference\u002Fharnesses\u002Fcost-reporting","5.reference\u002F05.harnesses\u002F6.cost-reporting",{"title":420,"path":421,"stem":422},"Permission gate","\u002Freference\u002Fpermissions","5.reference\u002F06.permissions",{"title":424,"path":425,"stem":426},"Inbound triggers","\u002Freference\u002Ftriggers","5.reference\u002F07.triggers",{"title":428,"path":429,"stem":430,"children":431},"HTTP API","\u002Freference\u002Fhttp-api","5.reference\u002F08.http-api\u002Findex",[432,433,437,441,445,449,453,457],{"title":10,"path":429,"stem":430},{"title":434,"path":435,"stem":436},"Filing, reading and changing work items","\u002Freference\u002Fhttp-api\u002Fwork-items","5.reference\u002F08.http-api\u002F2.work-items",{"title":438,"path":439,"stem":440},"Gates, run control, ending and retry","\u002Freference\u002Fhttp-api\u002Fgates-run-control-and-ending","5.reference\u002F08.http-api\u002F3.gates-run-control-and-ending",{"title":442,"path":443,"stem":444},"The work item object","\u002Freference\u002Fhttp-api\u002Fwork-item-object","5.reference\u002F08.http-api\u002F4.work-item-object",{"title":446,"path":447,"stem":448},"Budget, events, diff and documents","\u002Freference\u002Fhttp-api\u002Fbudget-and-events","5.reference\u002F08.http-api\u002F5.budget-and-events",{"title":450,"path":451,"stem":452},"Repos, chains, harnesses and the server","\u002Freference\u002Fhttp-api\u002Frepos-chains-harnesses-and-server","5.reference\u002F08.http-api\u002F6.repos-chains-harnesses-and-server",{"title":454,"path":455,"stem":456},"Drafts","\u002Freference\u002Fhttp-api\u002Fdrafts","5.reference\u002F08.http-api\u002F7.drafts",{"title":458,"path":459,"stem":460},"Ops for each draft area","\u002Freference\u002Fhttp-api\u002Fdraft-ops","5.reference\u002F08.http-api\u002F8.draft-ops",{"title":462,"path":463,"stem":464},"MCP tools","\u002Freference\u002Fmcp-tools","5.reference\u002F09.mcp-tools",{"title":466,"path":467,"stem":468},"Events","\u002Freference\u002Fevents","5.reference\u002F10.events",{"title":470,"path":471,"stem":472,"children":473},"Security and project","\u002Fproject","6.project",[474,476,480,484,488,492,496,500],{"title":10,"path":471,"stem":475},"6.project\u002Findex",{"title":477,"path":478,"stem":479},"Security","\u002Fproject\u002Fsecurity","6.project\u002F1.security",{"title":481,"path":482,"stem":483},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","6.project\u002F2.data-and-privacy",{"title":485,"path":486,"stem":487},"What's new in 2.0","\u002Fproject\u002Fwhats-new","6.project\u002F3.whats-new",{"title":489,"path":490,"stem":491},"Status and support","\u002Fproject\u002Fstatus-and-support","6.project\u002F4.status-and-support",{"title":493,"path":494,"stem":495},"Architecture","\u002Fproject\u002Farchitecture","6.project\u002F5.architecture",{"title":497,"path":498,"stem":499},"Source map","\u002Fproject\u002Fsource-map","6.project\u002F6.source-map",{"title":501,"path":502,"stem":503},"Contributing","\u002Fproject\u002Fcontributing","6.project\u002F7.contributing",{"id":505,"title":292,"body":506,"description":2076,"extension":2077,"links":2078,"meta":2079,"navigation":2080,"path":293,"seo":2081,"stem":294,"__hash__":2082},"docs\u002F5.reference\u002F03.configuration\u002F02.repos\u002Findex.md",{"type":507,"value":508,"toc":2045},"minimark",[509,537,780,785,817,826,855,859,870,875,1121,1125,1299,1303,1366,1370,1480,1484,1553,1557,1561,1600,1604,1615,1622,1626,1645,1649,1676,1681,1685,1710,1714,1718,1732,1741,1745,1752,1756,1774,1787,1791,1794,1839,1844,1859,1862,1878,1902,1912,1916,1944,1947,1955,1975,1982,1985,1989,2015,2019,2041],[510,511,512,515,516,519,520,523,524,526,527,529,530,532,533,536],"p",{},[513,514,292],"code",{}," lists the repositories you connected and how Kraft works in each. Four groups of pages go deeper: ",[517,518,298],"a",{"href":299}," for how ",[513,521,522],{},"kraft repo connect"," fills the entry in, ",[517,525,302],{"href":303}," for teaching it your own conventions, ",[517,528,306],{"href":307}," for a root repository with members, and ",[517,531,338],{"href":339}," for the ",[513,534,535],{},"sandbox"," field.",[538,539,545],"pre",{"className":540,"code":541,"filename":542,"language":543,"meta":544,"style":544},"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","",[513,546,547,560,576,587,598,609,621,632,643,653,662,671,679,687,695,703,713,721,747,755,770],{"__ignoreMap":544},[548,549,552,556],"span",{"class":550,"line":551},"line",1,[548,553,555],{"class":554},"sb7M8","repos",[548,557,559],{"class":558},"s7iLA",":\n",[548,561,563,566,569,572],{"class":550,"line":562},2,[548,564,565],{"class":558},"  - ",[548,567,568],{"class":554},"path",[548,570,571],{"class":558},": ",[548,573,575],{"class":574},"semJd","\u002Fhome\u002Fyou\u002Fcode\u002Fmy-service\n",[548,577,579,582,584],{"class":550,"line":578},3,[548,580,581],{"class":554},"    name",[548,583,571],{"class":558},[548,585,586],{"class":574},"my-service\n",[548,588,590,593,595],{"class":550,"line":589},4,[548,591,592],{"class":554},"    forge",[548,594,571],{"class":558},[548,596,597],{"class":574},"github\n",[548,599,601,604,606],{"class":550,"line":600},5,[548,602,603],{"class":554},"    default_chain",[548,605,571],{"class":558},[548,607,608],{"class":574},"default\n",[548,610,612,615,617],{"class":550,"line":611},6,[548,613,614],{"class":554},"    enabled",[548,616,571],{"class":558},[548,618,620],{"class":619},"ssYy9","true\n",[548,622,624,627,629],{"class":550,"line":623},7,[548,625,626],{"class":554},"    setup_command",[548,628,571],{"class":558},[548,630,631],{"class":574},"\"uv sync\"\n",[548,633,635,638,640],{"class":550,"line":634},8,[548,636,637],{"class":554},"    test_command",[548,639,571],{"class":558},[548,641,642],{"class":619},"null\n",[548,644,646,649,651],{"class":550,"line":645},9,[548,647,648],{"class":554},"    intent_dir",[548,650,571],{"class":558},[548,652,642],{"class":619},[548,654,656,659],{"class":550,"line":655},10,[548,657,658],{"class":554},"    env",[548,660,661],{"class":558},": {}\n",[548,663,665,668],{"class":550,"line":664},11,[548,666,667],{"class":554},"    env_passthrough",[548,669,670],{"class":558},": []\n",[548,672,674,677],{"class":550,"line":673},12,[548,675,676],{"class":554},"    local_files",[548,678,670],{"class":558},[548,680,682,685],{"class":550,"line":681},13,[548,683,684],{"class":554},"    models",[548,686,661],{"class":558},[548,688,690,693],{"class":550,"line":689},14,[548,691,692],{"class":554},"    deny_tools",[548,694,670],{"class":558},[548,696,698,701],{"class":550,"line":697},15,[548,699,700],{"class":554},"    steering",[548,702,670],{"class":558},[548,704,706,709,711],{"class":550,"line":705},16,[548,707,708],{"class":554},"    sandbox",[548,710,571],{"class":558},[548,712,642],{"class":619},[548,714,716,719],{"class":550,"line":715},17,[548,717,718],{"class":554},"    policy",[548,720,559],{"class":558},[548,722,724,727,730,733,736,739,741,744],{"class":550,"line":723},18,[548,725,726],{"class":554},"      allowed_tools",[548,728,729],{"class":558},": [",[548,731,732],{"class":574},"Read",[548,734,735],{"class":558},", ",[548,737,738],{"class":574},"Edit",[548,740,735],{"class":558},[548,742,743],{"class":574},"Bash",[548,745,746],{"class":558},"]\n",[548,748,750,753],{"class":550,"line":749},19,[548,751,752],{"class":554},"    automated_review",[548,754,559],{"class":558},[548,756,758,761,763,766],{"class":550,"line":757},20,[548,759,760],{"class":554},"      bot",[548,762,571],{"class":558},[548,764,765],{"class":574},"coderabbitai",[548,767,769],{"class":768},"sq92B","     # exactly one of bot or check\n",[548,771,773,776,778],{"class":550,"line":772},21,[548,774,775],{"class":554},"    ci_checks",[548,777,571],{"class":558},[548,779,620],{"class":619},[781,782,784],"h2",{"id":783},"where-a-repos-value-comes-from","Where a repo's value comes from",[510,786,787,788,791,792,796,797,735,800,803,804,807,808,810,811,813,814,816],{},"A repo that sets no ",[513,789,790],{},"steering:"," gets the ",[517,793,795],{"href":794},"\u002Fconcepts\u002Fvocabulary#steering-profile","steering profiles"," its default chain's tasks select, from the library. A repo that sets none of ",[513,798,799],{},"deny_tools",[513,801,802],{},"models"," or a ",[513,805,806],{},"policy:"," key gets the instance's. ",[513,809,799],{}," and ",[513,812,806],{}," come from ",[513,815,310],{},", and a repo's own list only adds to it.",[510,818,819,820,822,823,825],{},"A repo's ",[513,821,806],{}," may tighten the instance's safety layer but not relax it. A draft of ",[513,824,292],{},", 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.",[510,827,828,829,735,832,835,836,839,840,843,844,846,847,854],{},"Each field's source (",[513,830,831],{},"repo",[513,833,834],{},"library"," or ",[513,837,838],{},"default",") comes with the value in the ",[513,841,842],{},"resolved"," view of the ",[513,845,555],{}," draft; see ",[517,848,850,851,853],{"href":849},"\u002Freference\u002Fhttp-api\u002Fdraft-ops#the-resolved-answer-for-repos","The ",[513,852,842],{}," answer for repos",".",[781,856,858],{"id":857},"fields","Fields",[510,860,861,862,865,866,869],{},"No key on an entry passes silently. A key within two edits of a field below (",[513,863,864],{},"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 ",[513,867,868],{},"kraft admin doctor"," until it is removed.",[871,872,874],"h3",{"id":873},"identity","Identity",[876,877,878,897],"table",{},[879,880,881],"thead",{},[882,883,884,888,891,894],"tr",{},[885,886,887],"th",{},"Field",[885,889,890],{},"Type",[885,892,893],{},"Default",[885,895,896],{},"Meaning",[898,899,900,919,936,956,983,1002,1042,1061,1090],"tbody",{},[882,901,902,907,910,916],{},[903,904,905],"td",{},[513,906,568],{},[903,908,909],{},"string",[903,911,912],{},[913,914,915],"em",{},"(required)",[903,917,918],{},"Absolute path to the repo.",[882,920,921,926,928,933],{},[903,922,923],{},[513,924,925],{},"name",[903,927,909],{},[903,929,930],{},[513,931,932],{},"null",[903,934,935],{},"Display name, set at connect time and not otherwise validated. Unset, the path is shown.",[882,937,938,943,949,953],{},[903,939,940],{},[513,941,942],{},"id",[903,944,945,946],{},"string, ",[513,947,948],{},"[a-z][a-z0-9_-]*",[903,950,951],{},[513,952,932],{},[903,954,955],{},"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.",[882,957,958,963,966,971],{},[903,959,960],{},[513,961,962],{},"enabled",[903,964,965],{},"boolean",[903,967,968],{},[513,969,970],{},"true",[903,972,973,974,977,978,854],{},"Set ",[513,975,976],{},"false"," to keep auto-intake off this repo without disconnecting it. See ",[517,979,981],{"href":980},"#enabled",[513,982,962],{},[882,984,985,990,992,996],{},[903,986,987],{},[513,988,989],{},"managed",[903,991,965],{},[903,993,994],{},[513,995,970],{},[903,997,998,999,854],{},"Keeps a repo you connected out of Settings › Repos' \"Detected · not connected\" section. Auto-connected submodules are written with ",[513,1000,1001],{},"managed: false",[882,1003,1004,1009,1011,1015],{},[903,1005,1006],{},[513,1007,1008],{},"forge",[903,1010,909],{},[903,1012,1013],{},[513,1014,932],{},[903,1016,1017,835,1020,1023,1024,1027,1028,1030,1031,735,1034,1037,1038,1041],{},[513,1018,1019],{},"github",[513,1021,1022],{},"gitlab",": which forge adapter ",[513,1025,1026],{},"backend: auto"," resolves to for this repo. ",[513,1029,522],{}," sets it from the host of the repo's remote: ",[513,1032,1033],{},"github.com",[513,1035,1036],{},"gitlab.com",", or a self-hosted host that names one (",[513,1039,1040],{},"gitlab.example.com",").",[882,1043,1044,1049,1051,1055],{},[903,1045,1046],{},[513,1047,1048],{},"project",[903,1050,909],{},[903,1052,1053],{},[513,1054,932],{},[903,1056,1057,1058,854],{},"The GitLab project path, when ",[513,1059,1060],{},"forge: gitlab",[882,1062,1063,1068,1070,1074],{},[903,1064,1065],{},[513,1066,1067],{},"default_chain",[903,1069,909],{},[903,1071,1072],{},[513,1073,932],{},[903,1075,1076,1077,1081,1082,1084,1085,854],{},"The chain a ",[517,1078,1080],{"href":1079},"\u002Fconcepts\u002Fvocabulary#work-item","work item"," on this repo runs when none is named. Unset, it is ",[513,1083,838],{},". See ",[517,1086,1088],{"href":1087},"#default_chain",[513,1089,1067],{},[882,1091,1092,1096,1104,1109],{},[903,1093,1094],{},[513,1095,802],{},[903,1097,1098,1099,1103],{},"mapping of ",[517,1100,1102],{"href":1101},"\u002Fconcepts\u002Fvocabulary#harness-profile","harness profile"," id to string",[903,1105,1106],{},[513,1107,1108],{},"{}",[903,1110,1111,1112,1115,1116,854],{},"The model an agent task runs with on this repo, per harness profile id (",[513,1113,1114],{},"claude: opus","). See ",[517,1117,1119],{"href":1118},"#models",[513,1120,802],{},[871,1122,1124],{"id":1123},"test-and-setup","Test and setup",[876,1126,1127,1139],{},[879,1128,1129],{},[882,1130,1131,1133,1135,1137],{},[885,1132,887],{},[885,1134,890],{},[885,1136,893],{},[885,1138,896],{},[898,1140,1141,1167,1188,1221,1246,1266],{},[882,1142,1143,1148,1150,1154],{},[903,1144,1145],{},[513,1146,1147],{},"setup_command",[903,1149,909],{},[903,1151,1152],{},[513,1153,932],{},[903,1155,1156,1157,1161,1162,854],{},"Runs in every new ",[517,1158,1160],{"href":1159},"\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 ",[517,1163,1165],{"href":1164},"#setup_command",[513,1166,1147],{},[882,1168,1169,1174,1176,1180],{},[903,1170,1171],{},[513,1172,1173],{},"test_command",[903,1175,909],{},[903,1177,1178],{},[513,1179,932],{},[903,1181,1182,1183,854],{},"The command CI actually runs for this repo: what the changed-test-scope verification runs, as one scope over every path. See ",[517,1184,1186],{"href":1185},"#test_command",[513,1187,1173],{},[882,1189,1190,1195,1201,1205],{},[903,1191,1192],{},[513,1193,1194],{},"test_scopes",[903,1196,1197,1198],{},"list of ",[513,1199,1200],{},"{paths, command}",[903,1202,1203],{},[513,1204,932],{},[903,1206,1207,1208,1211,1212,1215,1216,854],{},"A monorepo's per-directory test commands. Each ",[513,1209,1210],{},"paths"," is a non-empty list and each ",[513,1213,1214],{},"command"," a non-empty string. See ",[517,1217,1219],{"href":1218},"#test_scopes",[513,1220,1194],{},[882,1222,1223,1228,1231,1235],{},[903,1224,1225],{},[513,1226,1227],{},"areas",[903,1229,1230],{},"mapping of id to area",[903,1232,1233],{},[513,1234,1108],{},[903,1236,1237,1238,1084,1241,854],{},"Path-scoped contexts inside this repo: ",[513,1239,1240],{},"{paths: [...], setup: \"...\", verification: {test_scopes: [...]}}",[517,1242,1244],{"href":1243},"#areas",[513,1245,1227],{},[882,1247,1248,1253,1256,1260],{},[903,1249,1250],{},[513,1251,1252],{},"intent_dir",[903,1254,1255],{},"string, a relative path",[903,1257,1258],{},[513,1259,932],{},[903,1261,1262,1263,1265],{},"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 ",[513,1264,1194],{}," yourself.",[882,1267,1268,1273,1276,1281],{},[903,1269,1270],{},[513,1271,1272],{},"local_files",[903,1274,1275],{},"list of strings",[903,1277,1278],{},[513,1279,1280],{},"[]",[903,1282,1283,1284,1287,1288,1291,1292,1295,1296,1041],{},"Files to copy into every new worktree, for ones ",[513,1285,1286],{},"git worktree add"," cannot carry: relative paths, no globs or directories, covered by the worktree's ",[513,1289,1290],{},".gitignore",". Anything else is refused, and named in the ",[513,1293,1294],{},"worktree_prepared"," event (",[513,1297,1298],{},"kraft view events",[871,1300,1302],{"id":1301},"environment","Environment",[876,1304,1305,1317],{},[879,1306,1307],{},[882,1308,1309,1311,1313,1315],{},[885,1310,887],{},[885,1312,890],{},[885,1314,893],{},[885,1316,896],{},[898,1318,1319,1346],{},[882,1320,1321,1326,1329,1333],{},[903,1322,1323],{},[513,1324,1325],{},"env",[903,1327,1328],{},"mapping of string to string",[903,1330,1331],{},[513,1332,1108],{},[903,1334,1335,1336,1340,1341,854],{},"Literal environment variables every ",[517,1337,1339],{"href":1338},"\u002Fconcepts\u002Fvocabulary#worker","worker"," for this repo gets. See ",[517,1342,1344],{"href":1343},"#env",[513,1345,1325],{},[882,1347,1348,1353,1355,1359],{},[903,1349,1350],{},[513,1351,1352],{},"env_passthrough",[903,1354,1275],{},[903,1356,1357],{},[513,1358,1280],{},[903,1360,1361,1362,854],{},"Names of variables to carry over from the server's own environment, for what the worker allowlist does not cover. See ",[517,1363,1364],{"href":1343},[513,1365,1325],{},[871,1367,1369],{"id":1368},"policy-and-sandbox","Policy and sandbox",[876,1371,1372,1384],{},[879,1373,1374],{},[882,1375,1376,1378,1380,1382],{},[885,1377,887],{},[885,1379,890],{},[885,1381,893],{},[885,1383,896],{},[898,1385,1386,1414,1433,1457],{},[882,1387,1388,1393,1396,1400],{},[903,1389,1390],{},[513,1391,1392],{},"policy",[903,1394,1395],{},"mapping",[903,1397,1398],{},[513,1399,932],{},[903,1401,1402,1403,1405,1406,1408,1409,854],{},"The repository policy layer, applied after ",[513,1404,310],{}," and before the chain, and only ever tightening what ",[513,1407,310],{}," allows. See ",[517,1410,1412],{"href":1411},"#policy",[513,1413,1392],{},[882,1415,1416,1420,1422,1426],{},[903,1417,1418],{},[513,1419,799],{},[903,1421,1275],{},[903,1423,1424],{},[513,1425,1280],{},[903,1427,1428,1429,854],{},"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 ",[517,1430,1431],{"href":1411},[513,1432,1392],{},[882,1434,1435,1440,1442,1446],{},[903,1436,1437],{},[513,1438,1439],{},"steering",[903,1441,1275],{},[903,1443,1444],{},[513,1445,1280],{},[903,1447,1448,1449,1452,1453,854],{},"Names of ",[513,1450,1451],{},"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 ",[517,1454,1456],{"href":1455},"#repository-steering","Repository steering",[882,1458,1459,1463,1468,1472],{},[903,1460,1461],{},[513,1462,535],{},[903,1464,1465,1466],{},"mapping, or ",[513,1467,976],{},[903,1469,1470],{},[513,1471,932],{},[903,1473,1474,1475,854],{},"Runs this repo's task processes in a container. See ",[517,1476,1478],{"href":1477},"#sandbox",[513,1479,535],{},[871,1481,1483],{"id":1482},"review-and-ci","Review and CI",[876,1485,1486,1498],{},[879,1487,1488],{},[882,1489,1490,1492,1494,1496],{},[885,1491,887],{},[885,1493,890],{},[885,1495,893],{},[885,1497,896],{},[898,1499,1500,1530],{},[882,1501,1502,1507,1509,1513],{},[903,1503,1504],{},[513,1505,1506],{},"automated_review",[903,1508,1395],{},[903,1510,1511],{},[513,1512,932],{},[903,1514,1515,1516,1519,1520,835,1523,1084,1526,854],{},"The one automated reviewer a chain's ",[513,1517,1518],{},"mr.automated_review"," task waits for: ",[513,1521,1522],{},"bot: \u003Clogin>",[513,1524,1525],{},"check: \u003Cname>",[517,1527,1529],{"href":1528},"#automated-review","Automated review",[882,1531,1532,1537,1539,1543],{},[903,1533,1534],{},[513,1535,1536],{},"ci_checks",[903,1538,965],{},[903,1540,1541],{},[513,1542,970],{},[903,1544,973,1545,1547,1548,854],{},[513,1546,976],{}," on a repo with no CI, so both CI waits pass at once instead of waiting on checks that never come. See ",[517,1549,1551],{"href":1550},"#ci_checks",[513,1552,1536],{},[781,1554,1556],{"id":1555},"field-details","Field details",[871,1558,1559],{"id":962},[513,1560,962],{},[1562,1563,1564,1568,1585,1588],"ul",{},[1565,1566,1567],"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.",[1565,1569,1570,1572,1573,1576,1577,1580,1581,835,1583,854],{},[513,1571,522],{}," saves a repo it found no test command for with ",[513,1574,1575],{},"enabled: false","; an item on it runs its agent tasks, then stops at ",[513,1578,1579],{},"verification"," until it has a ",[513,1582,1173],{},[513,1584,1194],{},[1565,1586,1587],{},"An absent key counts as enabled.",[1565,1589,1590,1591,1593,1594,1597,1598,854],{},"Kraft refuses an edit that would leave an enabled repo with neither a ",[513,1592,1173],{}," (",[513,1595,1596],{},"\"\""," counts) nor ",[513,1599,1194],{},[871,1601,1602],{"id":1067},[513,1603,1067],{},[510,1605,1606,1607,1610,1611,1614],{},"An item that names no chain gets it however it is filed: ",[513,1608,1609],{},"kraft item create",", the MCP tool, the board, the API, ",[513,1612,1613],{},"POST \u002Fapi\u002Ftriggers"," or auto-intake.",[510,1616,1617,1618,1621],{},"Before 2.0, this key was ",[513,1619,1620],{},"default_chain_template",". It is still read, and saved under the new name.",[871,1623,1624],{"id":802},[513,1625,802],{},[510,1627,1628,1629,1632,1633,1636,1637,1640,1641,1644],{},"It applies above the harness profile's own ",[513,1630,1631],{},"defaults:",", below a task's ",[513,1634,1635],{},"model:"," or agent ",[513,1638,1639],{},"profile:"," and the work item's override. It is keyed by harness profile because one model name means nothing to another provider. The retired ",[513,1642,1643],{},"default_model"," key is dropped with a warning.",[871,1646,1647],{"id":1147},[513,1648,1147],{},[1562,1650,1651,1661,1664],{},[1565,1652,1653,1655,1656,1660],{},[513,1654,1596],{}," means \"deliberately nothing\", which is the ",[1657,1658,1659],"strong",{},"No setup needed"," checkbox in Settings › Repos.",[1565,1662,1663],{},"An absent value stops the repo's next work item rather than guessing.",[1565,1665,1666,1667,1671,1672,1675],{},"On a ",[517,1668,1670],{"href":1669},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxed"," item it runs as ",[513,1673,1674],{},"sh -c"," inside the sandbox, never on the host. Without docker the item stops.",[510,1677,1678,1680],{},[517,1679,298],{"href":299}," says how connect proposes it.",[871,1682,1683],{"id":1173},[513,1684,1173],{},[1562,1686,1687,1690,1698,1704],{},[1565,1688,1689],{},"It runs from the worktree root without a shell.",[1565,1691,1692,1694,1695,1660],{},[513,1693,1596],{}," declares a repo with no tests (docs, infrastructure): verification passes and its session says so. It is the ",[1657,1696,1697],{},"No tests",[1565,1699,1700,1701,1703],{},"A repo with neither this nor ",[513,1702,1194],{}," stops that verification for you rather than inventing a command.",[1565,1705,1706,1707,1709],{},"Verification ignores it while ",[513,1708,1194],{}," 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.",[510,1711,1712,1680],{},[517,1713,298],{"href":299},[871,1715,1716],{"id":1194},[513,1717,1194],{},[510,1719,1720,1721,1724,1725,1728,1729,854],{},"Every command runs from the repository root, without a shell, so one for a project in a subdirectory names that directory itself: ",[513,1722,1723],{},"sh -c 'cd frontend && npm test'"," (what connect proposes) or ",[513,1726,1727],{},"npm --prefix frontend test",", not ",[513,1730,1731],{},"npm test",[510,1733,1734,1735,1737,1738,1740],{},"Kraft does not synthesize ",[513,1736,1194],{}," from ",[513,1739,1173],{},": the two stay independently editable.",[871,1742,1743],{"id":1227},[513,1744,1227],{},[510,1746,1747,1748,1751],{},"An area's test scopes join the repo's and are selected by changed paths the same way. Its ",[513,1749,1750],{},"setup"," runs once before the first of its scopes runs. Areas are never forge targets.",[871,1753,1754],{"id":1325},[513,1755,1325],{},[510,1757,1758,1760,1761,1763,1764,1768,1769,1773],{},[513,1759,1325],{}," sets literal variables every worker for this repo gets, on top of the worker's allowlist. ",[513,1762,1352],{}," 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: ",[517,1765,1767],{"href":1766},"\u002Freference\u002Fconfiguration\u002Fenvironment-variables#passed-to-workers","Passed to workers"," lists it, and ",[517,1770,1772],{"href":1771},"\u002Freference\u002Fconfiguration\u002Fenvironment-variables#added-by-the-repo","Added by the repo"," says what stays behind unless you name it here.",[510,1775,1776,1777,1779,1780,1782,1783,1786],{},"A sandboxed worker gets none of the allowlist, only what ",[517,1778,338],{"href":339}," lists, which covers the server's proxy, an extra CA, and each ",[513,1781,1352],{}," name, forwarded by name so its value never appears on the ",[513,1784,1785],{},"docker"," command line.",[871,1788,1789],{"id":1392},[513,1790,1392],{},[510,1792,1793],{},"It takes any of:",[1562,1795,1796,1820],{},[1565,1797,1798,735,1801,735,1803,735,1806,735,1808,735,1811,735,1814,810,1817],{},[513,1799,1800],{},"allowed_tools",[513,1802,799],{},[513,1804,1805],{},"grants",[513,1807,535],{},[513,1809,1810],{},"allowed_harnesses",[513,1812,1813],{},"escalation_harness",[513,1815,1816],{},"timeout_minutes",[513,1818,1819],{},"max_attempts",[1565,1821,1822,1823,735,1826,735,1829,735,1832,1835,1836],{},"the four caps (",[513,1824,1825],{},"time_cap_minutes",[513,1827,1828],{},"total_time_cap_minutes",[513,1830,1831],{},"token_budget",[513,1833,1834],{},"budget_usd","), each the work item's own, within ",[513,1837,1838],{},"maxima.work_item",[510,1840,1841,1843],{},[513,1842,799],{}," is frozen into each work item when it is filed, and a later addition still applies to running items.",[510,1845,1846,1847,1849,1850,1854,1855,854],{},"It binds every work item filed in this repo, whatever its chain. A value ",[513,1848,310],{}," refuses makes ",[517,1851,1853],{"href":1852},"\u002Fconcepts\u002Fvocabulary#intake","intake"," refuse the item. See ",[517,1856,1858],{"href":1857},"\u002Freference\u002Fconfiguration\u002Fpolicy#policy-fields","Policy fields",[871,1860,1456],{"id":1861},"repository-steering",[510,1863,1864,1867,1868,1870,1871,1873,1874,1877],{},[513,1865,1866],{},"steering: [name, ...]"," names steering profiles in ",[513,1869,1451],{},", the same ones a task's ",[513,1872,790],{}," selects (see the ",[517,1875,1876],{"href":315},"library reference","). There is no other steering store.",[1562,1879,1880,1887,1894,1897],{},[1565,1881,1882,1883,1886],{},"When a work item is filed, Kraft resolves each name to its steering profile's ",[513,1884,1885],{},"instructions"," and freezes the text into the item. Editing a steering profile reaches items filed afterwards and never one already filed.",[1565,1888,1889,1890,1893],{},"Every launch gets the repository's steering profiles first, then the task's, in the agent's system prompt under a ",[513,1891,1892],{},"## Project standards"," heading, 8 KB at most together.",[1565,1895,1896],{},"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.",[1565,1898,1899,1900,854],{},"You write steering profiles in Templates › Library, which edits ",[513,1901,1451],{},[510,1903,1904,1905,735,1908,1911],{},"This is not a place for target-repo files: Kraft never reads ",[513,1906,1907],{},"CLAUDE.md",[513,1909,1910],{},"AGENTS.md",", or anything else from inside the repo being worked on as a source of process context.",[871,1913,1914],{"id":535},[513,1915,535],{},[510,1917,1918,1920,1921,1924,1925,1928,1929,1932,1933,1936,1937,1940,1941,854],{},[513,1919,535],{}," is part of the repository policy layer. ",[517,1922,338],{"href":1923},"\u002Freference\u002Fconfiguration\u002Fsandbox#the-sandbox-key"," lists its keys, which go with ",[513,1926,1927],{},"kind: docker"," and which with ",[513,1930,1931],{},"kind: kit",", and says why no chain, node or task can change it. A sandbox needs a ",[513,1934,1935],{},"network:"," policy or ",[513,1938,1939],{},"unrestricted_network: true",": a launch into one with neither is refused. See ",[517,1942,352],{"href":1943},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy#without-a-network-policy",[871,1945,1529],{"id":1946},"automated-review",[510,1948,1949,1951,1952,1954],{},[513,1950,1506],{}," names exactly one reviewer, one of two ways. It is the reviewer a chain's ",[513,1953,1518],{}," task waits for.",[1562,1956,1957,1970],{},[1565,1958,1959,1961,1962],{},[513,1960,1522],{}," settles when that forge login has reviewed the merge request's current head.\n",[1562,1963,1964,1967],{},[1565,1965,1966],{},"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.",[1565,1968,1969],{},"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.",[1565,1971,1972,1974],{},[513,1973,1525],{}," settles when that check run or commit status on the head completes. Success is clean. Failure is actionable, with its output as the finding.",[510,1976,1977,1978,1981],{},"Unset, the repository expects no automated review: the task settles clean at once and records ",[513,1979,1980],{},"automated_review_not_configured",". A reviewer that errors stops the item for you rather than spending a repair.",[510,1983,1984],{},"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.",[871,1986,1987],{"id":1536},[513,1988,1536],{},[510,1990,1991,1992,1995,1996,1999,2000,2003,2004,2006,2007,2009,2010,835,2012,854],{},"The two waits are a chain's ",[513,1993,1994],{},"mr.ci"," task before the merge and its ",[513,1997,1998],{},"mr.post_merge_ci"," task after it. Each records ",[513,2001,2002],{},"ci_not_configured"," when it passes at once because ",[513,2005,1536],{}," is ",[513,2008,976],{},". It does not touch ",[513,2011,1518],{},[513,2013,2014],{},"mr.external_approval",[781,2016,2018],{"id":2017},"in-this-section","In this section",[1562,2020,2021,2029,2036],{},[1565,2022,2023,2025,2026,2028],{},[517,2024,298],{"href":299},": how ",[513,2027,522],{}," proposes setup and test commands, and what to do when it finds none.",[1565,2030,2031,571,2033,2035],{},[517,2032,302],{"href":303},[513,2034,302],{},", where you teach connect your own conventions, and the toolchains Kraft ships.",[1565,2037,2038,2040],{},[517,2039,306],{"href":307},": a root repository with other repositories mounted as submodules.",[2042,2043,2044],"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":544,"searchDepth":562,"depth":562,"links":2046},[2047,2048,2055,2075],{"id":783,"depth":562,"text":784},{"id":857,"depth":562,"text":858,"children":2049},[2050,2051,2052,2053,2054],{"id":873,"depth":578,"text":874},{"id":1123,"depth":578,"text":1124},{"id":1301,"depth":578,"text":1302},{"id":1368,"depth":578,"text":1369},{"id":1482,"depth":578,"text":1483},{"id":1555,"depth":562,"text":1556,"children":2056},[2057,2058,2060,2061,2063,2065,2067,2068,2069,2070,2071,2072,2073],{"id":962,"depth":578,"text":962},{"id":1067,"depth":578,"text":2059},"default_​chain",{"id":802,"depth":578,"text":802},{"id":1147,"depth":578,"text":2062},"setup_​command",{"id":1173,"depth":578,"text":2064},"test_​command",{"id":1194,"depth":578,"text":2066},"test_​scopes",{"id":1227,"depth":578,"text":1227},{"id":1325,"depth":578,"text":1325},{"id":1392,"depth":578,"text":1392},{"id":1861,"depth":578,"text":1456},{"id":535,"depth":578,"text":535},{"id":1946,"depth":578,"text":1529},{"id":1536,"depth":578,"text":2074},"ci_​checks",{"id":2017,"depth":562,"text":2018},"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":292,"description":2076},"Jyg2gPGeNivDlkP-Qv3z86nxAqOL5r3tfuP2hqrj_3o",[2084,2086],{"title":10,"path":287,"stem":288,"description":2085,"children":-1},"Which file in Kraft's config directory controls what, and how Kraft creates, edits, validates and rereads the directory.",{"title":298,"path":299,"stem":300,"description":2087,"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.",1791801261240]