[{"data":1,"prerenderedAt":665},["ShallowReactive",2],{"navigation_docs":3,"-guides-review-a-change":270,"-guides-review-a-change-surround":660},[4,28,51,110,243],{"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},"Troubleshooting and FAQ","\u002Fget-started\u002Ftroubleshooting","1.get-started\u002F3.troubleshooting",{"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},"Vocabulary","\u002Fconcepts\u002Fvocabulary","2.concepts\u002F1.vocabulary",{"title":40,"path":41,"stem":42},"How a work item runs","\u002Fconcepts\u002Fhow-a-work-item-runs","2.concepts\u002F2.how-a-work-item-runs",{"title":44,"path":45,"stem":46},"Caps and budgets","\u002Fconcepts\u002Fcaps-and-budgets","2.concepts\u002F3.caps-and-budgets",{"title":48,"path":49,"stem":50},"Why a permission gate","\u002Fconcepts\u002Fpermission-gate","2.concepts\u002F4.permission-gate",{"title":52,"path":53,"stem":54,"children":55},"Guides","\u002Fguides","3.guides",[56,58,62,66,70,74,78,82,86,90,94,98,102,106],{"title":10,"path":53,"stem":57},"3.guides\u002Findex",{"title":59,"path":60,"stem":61},"Use Kraft from your agent","\u002Fguides\u002Fagent-integration","3.guides\u002F01.agent-integration",{"title":63,"path":64,"stem":65},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F02.kraft-lite",{"title":67,"path":68,"stem":69},"Remote access","\u002Fguides\u002Fremote-access","3.guides\u002F03.remote-access",{"title":71,"path":72,"stem":73},"Add or override a harness","\u002Fguides\u002Fadding-a-harness","3.guides\u002F04.adding-a-harness",{"title":75,"path":76,"stem":77},"Schedule or webhook work","\u002Fguides\u002Fschedule-and-webhook-work","3.guides\u002F05.schedule-and-webhook-work",{"title":79,"path":80,"stem":81},"Add a security review or a gate reviewer","\u002Fguides\u002Fadd-review-agents","3.guides\u002F06.add-review-agents",{"title":83,"path":84,"stem":85},"Kraft for VS Code","\u002Fguides\u002Fvscode","3.guides\u002F07.vscode",{"title":87,"path":88,"stem":89},"Reviewing a change","\u002Fguides\u002Freview-a-change","3.guides\u002F08.review-a-change",{"title":91,"path":92,"stem":93},"Write your own chain","\u002Fguides\u002Fwrite-your-own-chain","3.guides\u002F09.write-your-own-chain",{"title":95,"path":96,"stem":97},"Switch a harness","\u002Fguides\u002Fswitch-harness","3.guides\u002F10.switch-harness",{"title":99,"path":100,"stem":101},"Upgrade your templates","\u002Fguides\u002Fupgrading-templates","3.guides\u002F11.upgrading-templates",{"title":103,"path":104,"stem":105},"Operations","\u002Fguides\u002Foperations","3.guides\u002F12.operations",{"title":107,"path":108,"stem":109},"Worker Kit","\u002Fguides\u002Fworker-kit","3.guides\u002F13.worker-kit",{"title":111,"path":112,"stem":113,"children":114},"Reference","\u002Freference","4.reference",[115,117,139,183,201,205,227,231,235,239],{"title":10,"path":112,"stem":116},"4.reference\u002Findex",{"title":118,"path":119,"stem":120,"children":121},"CLI","\u002Freference\u002Fcli","4.reference\u002F1.cli\u002Findex",[122,123,127,131,135],{"title":10,"path":119,"stem":120},{"title":124,"path":125,"stem":126},"Item verbs","\u002Freference\u002Fcli\u002Fitem","4.reference\u002F1.cli\u002F2.item",{"title":128,"path":129,"stem":130},"View verbs","\u002Freference\u002Fcli\u002Fview","4.reference\u002F1.cli\u002F3.view",{"title":132,"path":133,"stem":134},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","4.reference\u002F1.cli\u002F4.repo",{"title":136,"path":137,"stem":138},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","4.reference\u002F1.cli\u002F5.admin",{"title":140,"path":141,"stem":142,"children":143},"Configuration","\u002Freference\u002Fconfiguration","4.reference\u002F2.configuration\u002Findex",[144,145,155,159,163,167,171,175,179],{"title":10,"path":141,"stem":142},{"title":146,"path":147,"stem":148,"children":149},"Repos","\u002Freference\u002Fconfiguration\u002Frepos","4.reference\u002F2.configuration\u002F2.repos\u002Findex",[150,151],{"title":10,"path":147,"stem":148},{"title":152,"path":153,"stem":154},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","4.reference\u002F2.configuration\u002F2.repos\u002F3.workspaces",{"title":156,"path":157,"stem":158},"Policy","\u002Freference\u002Fconfiguration\u002Fpolicy","4.reference\u002F2.configuration\u002F3.policy",{"title":160,"path":161,"stem":162},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","4.reference\u002F2.configuration\u002F4.library-and-chains",{"title":164,"path":165,"stem":166},"Harnesses file","\u002Freference\u002Fconfiguration\u002Fharnesses-file","4.reference\u002F2.configuration\u002F5.harnesses-file",{"title":168,"path":169,"stem":170},"Access","\u002Freference\u002Fconfiguration\u002Faccess","4.reference\u002F2.configuration\u002F6.access",{"title":172,"path":173,"stem":174},"Intake","\u002Freference\u002Fconfiguration\u002Fintake","4.reference\u002F2.configuration\u002F7.intake",{"title":176,"path":177,"stem":178},"Sandbox host","\u002Freference\u002Fconfiguration\u002Fsandbox","4.reference\u002F2.configuration\u002F8.sandbox",{"title":180,"path":181,"stem":182},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","4.reference\u002F2.configuration\u002F9.environment-variables",{"title":184,"path":185,"stem":186,"children":187},"Chain nodes","\u002Freference\u002Fchain-nodes","4.reference\u002F3.chain-nodes\u002Findex",[188,189,193,197],{"title":10,"path":185,"stem":186},{"title":190,"path":191,"stem":192},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","4.reference\u002F3.chain-nodes\u002F2.subprocess-tasks",{"title":194,"path":195,"stem":196},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","4.reference\u002F3.chain-nodes\u002F3.fix-loop",{"title":198,"path":199,"stem":200},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","4.reference\u002F3.chain-nodes\u002F4.result-file",{"title":202,"path":203,"stem":204},"Permission gate","\u002Freference\u002Fpermissions","4.reference\u002F4.permissions",{"title":206,"path":207,"stem":208,"children":209},"Agent harnesses","\u002Freference\u002Fharnesses","4.reference\u002F5.harnesses\u002Findex",[210,211,215,219,223],{"title":10,"path":207,"stem":208},{"title":212,"path":213,"stem":214},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","4.reference\u002F5.harnesses\u002F2.unattended-runs",{"title":216,"path":217,"stem":218},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","4.reference\u002F5.harnesses\u002F3.agent-profiles",{"title":220,"path":221,"stem":222},"Harness files","\u002Freference\u002Fharnesses\u002Fharness-files","4.reference\u002F5.harnesses\u002F4.harness-files",{"title":224,"path":225,"stem":226},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","4.reference\u002F5.harnesses\u002F5.fallback-and-escalation",{"title":228,"path":229,"stem":230},"Inbound triggers","\u002Freference\u002Ftriggers","4.reference\u002F6.triggers",{"title":232,"path":233,"stem":234},"HTTP API","\u002Freference\u002Fhttp-api","4.reference\u002F7.http-api",{"title":236,"path":237,"stem":238},"MCP tools","\u002Freference\u002Fmcp-tools","4.reference\u002F8.mcp-tools",{"title":240,"path":241,"stem":242},"Events","\u002Freference\u002Fevents","4.reference\u002F9.events",{"title":244,"path":245,"stem":246,"children":247},"Project","\u002Fproject","5.project",[248,250,254,258,262,266],{"title":10,"path":245,"stem":249},"5.project\u002Findex",{"title":251,"path":252,"stem":253},"Architecture","\u002Fproject\u002Farchitecture","5.project\u002F1.architecture",{"title":255,"path":256,"stem":257},"Contributing","\u002Fproject\u002Fcontributing","5.project\u002F2.contributing",{"title":259,"path":260,"stem":261},"Security","\u002Fproject\u002Fsecurity","5.project\u002F3.security",{"title":263,"path":264,"stem":265},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","5.project\u002F4.data-and-privacy",{"title":267,"path":268,"stem":269},"Status and support","\u002Fproject\u002Fstatus-and-support","5.project\u002F5.status-and-support",{"id":271,"title":87,"body":272,"description":653,"extension":654,"links":655,"meta":656,"navigation":657,"path":88,"seo":658,"stem":89,"__hash__":659},"docs\u002F3.guides\u002F08.review-a-change.md",{"type":273,"value":274,"toc":644},"minimark",[275,284,289,379,393,418,422,437,441,448,451,501,512,540,546,550,556,560,607,629,633,640],[276,277,278,279,283],"p",{},"You can review a Kraft work item whenever you like — while it is running, while\nit is stopped for a human, or at a pending gate. Comments never interrupt an\nagent by themselves; only ",[280,281,282],"code",{},"request-changes"," does, and only the node it targets.",[285,286,288],"h2",{"id":287},"drafts-and-sending","Drafts and sending",[290,291,296],"pre",{"className":292,"code":293,"language":294,"meta":295,"style":295},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kraft item comment --body \"this leaks the connection\" --file src\u002Fdb.py --lines 40-46 --label must-fix\nkraft view threads\nkraft item review comment --summary \"a few notes, nothing blocking\"\n","bash","",[280,297,298,345,356],{"__ignoreMap":295},[299,300,303,307,311,314,317,321,324,327,330,333,336,339,342],"span",{"class":301,"line":302},"line",1,[299,304,306],{"class":305},"sBMFI","kraft",[299,308,310],{"class":309},"sfazB"," item",[299,312,313],{"class":309}," comment",[299,315,316],{"class":309}," --body",[299,318,320],{"class":319},"sMK4o"," \"",[299,322,323],{"class":309},"this leaks the connection",[299,325,326],{"class":319},"\"",[299,328,329],{"class":309}," --file",[299,331,332],{"class":309}," src\u002Fdb.py",[299,334,335],{"class":309}," --lines",[299,337,338],{"class":309}," 40-46",[299,340,341],{"class":309}," --label",[299,343,344],{"class":309}," must-fix\n",[299,346,348,350,353],{"class":301,"line":347},2,[299,349,306],{"class":305},[299,351,352],{"class":309}," view",[299,354,355],{"class":309}," threads\n",[299,357,359,361,363,366,368,371,373,376],{"class":301,"line":358},3,[299,360,306],{"class":305},[299,362,310],{"class":309},[299,364,365],{"class":309}," review",[299,367,313],{"class":309},[299,369,370],{"class":309}," --summary",[299,372,320],{"class":319},[299,374,375],{"class":309},"a few notes, nothing blocking",[299,377,378],{"class":319},"\"\n",[276,380,381,384,385,388,389,392],{},[280,382,383],{},"kraft item comment"," files a draft. Drafts are invisible to every agent — and\nto ",[280,386,387],{},"kraft view threads"," output as anything but a draft — until you send them\nwith ",[280,390,391],{},"kraft item review",". That one command is one of three outcomes:",[394,395,396,403,413],"ul",{},[397,398,399,402],"li",{},[280,400,401],{},"comment"," queues your drafts for the next agent that runs. It never stops\nanything, and it works whether or not a gate is pending.",[397,404,405,408,409,412],{},[280,406,407],{},"approve"," needs a pending gate: it clears it, the same as ",[280,410,411],{},"kraft item approve",".",[397,414,415,417],{},[280,416,282],{}," redoes work now — see below.",[285,419,421],{"id":420},"must-fix","Must-fix",[276,423,424,425,428,429,432,433,436],{},"A comment labeled ",[280,426,427],{},"--label must-fix"," blocks every gate approval on the item\nuntil it is resolved, no matter which gate it was filed at or whether one was\npending at all. ",[280,430,431],{},"kraft item resolve \u003Cthread-id>"," clears it; ",[280,434,435],{},"kraft item reopen"," puts it back if the fix did not hold up.",[285,438,440],{"id":439},"commenting-while-it-runs","Commenting while it runs",[276,442,443,444,447],{},"Every agent dispatch — the next implementation run, every verify reviewer,\nevery fix-loop round — carries the item's unanswered threads. A working agent\n(no review skill) is told to address each one and reply with ",[280,445,446],{},"kraft item reply","; a reviewer agent is told to judge the change against them, and reports\nan unaddressed must-fix as a finding. A thread drops off the list the moment\nan agent replies or you resolve it.",[285,449,450],{"id":282},"Request changes",[290,452,454],{"className":292,"code":453,"language":294,"meta":295,"style":295},"kraft item review request-changes --summary \"please address the must-fix\"\nkraft item review request-changes --node implementation --summary \"redo this part\"\n",[280,455,456,476],{"__ignoreMap":295},[299,457,458,460,462,464,467,469,471,474],{"class":301,"line":302},[299,459,306],{"class":305},[299,461,310],{"class":309},[299,463,365],{"class":309},[299,465,466],{"class":309}," request-changes",[299,468,370],{"class":309},[299,470,320],{"class":319},[299,472,473],{"class":309},"please address the must-fix",[299,475,378],{"class":319},[299,477,478,480,482,484,486,489,492,494,496,499],{"class":301,"line":347},[299,479,306],{"class":305},[299,481,310],{"class":309},[299,483,365],{"class":309},[299,485,466],{"class":309},[299,487,488],{"class":309}," --node",[299,490,491],{"class":309}," implementation",[299,493,370],{"class":309},[299,495,320],{"class":319},[299,497,498],{"class":309},"redo this part",[299,500,378],{"class":319},[276,502,503,504,507,508,511],{},"With no ",[280,505,506],{},"--node",", the target is derived from your threads: the earliest node,\nat or before the one now running, that wrote what a thread is about (a\nthread's own ",[280,509,510],{},"file_path",", or the node it names). A whole-change comment falls\nback to the current working node.",[394,513,514,517,527,534],{},[397,515,516],{},"If the target is the node that is running, it stops and re-runs now, with\nyour review as its note.",[397,518,519,520,523,524,412],{},"If the target is an earlier node, nothing running is touched. The rewind is\nqueued and takes effect the moment the running node finishes, or on your\nnext ",[280,521,522],{},"kraft item resume"," or ",[280,525,526],{},"kraft item retry",[397,528,529,530,533],{},"On a ",[280,531,532],{},"needs_human"," item with nothing else running, it retries at the target\nimmediately.",[397,535,536,537,539],{},"On a paused item, only the rewind is queued — resuming a paused item is your\ncall, so ",[280,538,282],{}," does not do it for you.",[276,541,542,543,412],{},"The response says which of these happened, and the CLI prints it:\n",[280,544,545],{},"request-changes -> implementation (threads on src\u002Fdb.py), rerun",[285,547,549],{"id":548},"gates-dont-ask-twice","Gates don't ask twice",[276,551,552,553,555],{},"Reaching a gate with an unanswered ",[280,554,420],{}," bounces it back to the reject\ntarget instead of opening — the same as if you had rejected it yourself,\ncapped by the gate's own reject-loop limit so an agent that never answers\ncannot loop forever. A gate with only unanswered questions or nits opens as\nusual, with the reply agent already launched to answer them.",[285,557,559],{"id":558},"comparing-attempts","Comparing attempts",[290,561,563],{"className":292,"code":562,"language":294,"meta":295,"style":295},"kraft view compare --from base --to latest\nkraft view compare --from attempt:1 --to attempt:2 --stat\n",[280,564,565,586],{"__ignoreMap":295},[299,566,567,569,571,574,577,580,583],{"class":301,"line":302},[299,568,306],{"class":305},[299,570,352],{"class":309},[299,572,573],{"class":309}," compare",[299,575,576],{"class":309}," --from",[299,578,579],{"class":309}," base",[299,581,582],{"class":309}," --to",[299,584,585],{"class":309}," latest\n",[299,587,588,590,592,594,596,599,601,604],{"class":301,"line":347},[299,589,306],{"class":305},[299,591,352],{"class":309},[299,593,573],{"class":309},[299,595,576],{"class":309},[299,597,598],{"class":309}," attempt:1",[299,600,582],{"class":309},[299,602,603],{"class":309}," attempt:2",[299,605,606],{"class":309}," --stat\n",[276,608,609,612,613,616,617,620,621,624,625,628],{},[280,610,611],{},"base",", ",[280,614,615],{},"last_review"," and ",[280,618,619],{},"latest"," (the working tree) resolve at any time.\n",[280,622,623],{},"attempt:N"," needs a pending gate. ",[280,626,627],{},"--nodes a,b"," limits the diff to files those\nnodes touched.",[285,630,632],{"id":631},"for-agents","For agents",[276,634,635,636,639],{},"A worker replies to a thread it was handed with ",[280,637,638],{},"kraft item reply \u003Cthread-id> --body \"...\" --claim fixed|answered|should_fix",". Every other review verb\nabove is refused from inside a worker's own worktree — reviewing is a human's\njob, or an assistant acting on a human's behalf from outside the item.",[641,642,643],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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":295,"searchDepth":347,"depth":347,"links":645},[646,647,648,649,650,651,652],{"id":287,"depth":347,"text":288},{"id":420,"depth":347,"text":421},{"id":439,"depth":347,"text":440},{"id":282,"depth":347,"text":450},{"id":548,"depth":347,"text":549},{"id":558,"depth":347,"text":559},{"id":631,"depth":347,"text":632},"Comment on a Kraft work item at any point in its life, not only at a gate, and see your feedback reach the next agent that touches the code.","md",null,{},true,{"title":87,"description":653},"Ox3wIh_5oWyVaQ6nOWeJA9feHsSjDGT81xef0DxxL3A",[661,663],{"title":83,"path":84,"stem":85,"description":662,"children":-1},"Install the Kraft extension to clear gates, review a branch's diff, and edit Kraft config files without leaving VS Code.",{"title":91,"path":92,"stem":93,"description":664,"children":-1},"Add a lint node to a copy of the default chain, with an agent that fixes what lint reports, a time cap, and no way to skip it.",1790824541412]