[{"data":1,"prerenderedAt":487},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fapi\u002Fconfig\u002Fpolicy\u002Fescalate":3},{"id":4,"title":5,"body":6,"description":479,"extension":480,"meta":481,"navigation":482,"path":483,"seo":484,"stem":485,"__hash__":486},"docs\u002Fdocs\u002Fv2\u002Fapi\u002Fconfig\u002Fpolicy\u002Fescalate.md","escalate",{"type":7,"value":8,"toc":475},"minimark",[9,12,28,69,80,224,229,232,242,246,255,322,328,468,471],[10,11,5],"h1",{"id":5},[13,14,15,16,19,20,23,24,27],"p",{},"Programmatic escalation gate. Called when a tool call matches an ",[17,18,5],"code",{}," pattern on\n",[17,21,22],{},"fs"," or ",[17,25,26],{},"process",", or when you need conditions the pattern lists can't express.",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-ts shiki shiki-themes dark-plus","escalate?: (call: PolicyCall) => boolean\n","ts","",[17,36,37],{"__ignoreMap":34},[38,39,42,45,49,52,55,59,62,66],"span",{"class":40,"line":41},"line",1,[38,43,5],{"class":44},"s3F5K",[38,46,48],{"class":47},"sTNBD","?: (",[38,50,51],{"class":44},"call",[38,53,54],{"class":47},": ",[38,56,58],{"class":57},"sNl3T","PolicyCall",[38,60,61],{"class":47},") ",[38,63,65],{"class":64},"scz_3","=>",[38,67,68],{"class":44}," boolean\n",[13,70,71,72,75,76,79],{},"Return ",[17,73,74],{},"true"," to pause execution and surface the call for human approval in the TUI.\nReturn ",[17,77,78],{},"false"," to allow the call to proceed normally (assuming it passes the static\nrules).",[29,81,83],{"className":31,"code":82,"language":33,"meta":34,"style":34},"export default defineAgent({\n    policy: {\n        escalate: (call) => {\n            \u002F\u002F call.fn   — \"fs.write\", \"process.spawn\", \"network.fetch\", etc.\n            \u002F\u002F call.args — arguments passed to the operation\n            return call.fn === \"process.spawn\"\n                && call.args[0]?.toString().includes(\"--force\")\n        },\n    },\n})\n",[17,84,85,101,110,130,137,143,165,206,212,218],{"__ignoreMap":34},[38,86,87,91,94,98],{"class":40,"line":41},[38,88,90],{"class":89},"sYbnZ","export",[38,92,93],{"class":89}," default",[38,95,97],{"class":96},"sCudf"," defineAgent",[38,99,100],{"class":47},"({\n",[38,102,104,107],{"class":40,"line":103},2,[38,105,106],{"class":44},"    policy:",[38,108,109],{"class":47}," {\n",[38,111,113,116,119,122,124,126,128],{"class":40,"line":112},3,[38,114,115],{"class":96},"        escalate",[38,117,118],{"class":44},":",[38,120,121],{"class":47}," (",[38,123,51],{"class":44},[38,125,61],{"class":47},[38,127,65],{"class":64},[38,129,109],{"class":47},[38,131,133],{"class":40,"line":132},4,[38,134,136],{"class":135},"sOLPB","            \u002F\u002F call.fn   — \"fs.write\", \"process.spawn\", \"network.fetch\", etc.\n",[38,138,140],{"class":40,"line":139},5,[38,141,142],{"class":135},"            \u002F\u002F call.args — arguments passed to the operation\n",[38,144,146,149,152,155,158,161],{"class":40,"line":145},6,[38,147,148],{"class":89},"            return",[38,150,151],{"class":44}," call",[38,153,154],{"class":47},".",[38,156,157],{"class":44},"fn",[38,159,160],{"class":47}," === ",[38,162,164],{"class":163},"sKc5r","\"process.spawn\"\n",[38,166,168,171,173,175,178,181,185,188,191,194,197,200,203],{"class":40,"line":167},7,[38,169,170],{"class":47},"                && ",[38,172,51],{"class":44},[38,174,154],{"class":47},[38,176,177],{"class":44},"args",[38,179,180],{"class":47},"[",[38,182,184],{"class":183},"sDGX8","0",[38,186,187],{"class":47},"]?.",[38,189,190],{"class":96},"toString",[38,192,193],{"class":47},"().",[38,195,196],{"class":96},"includes",[38,198,199],{"class":47},"(",[38,201,202],{"class":163},"\"--force\"",[38,204,205],{"class":47},")\n",[38,207,209],{"class":40,"line":208},8,[38,210,211],{"class":47},"        },\n",[38,213,215],{"class":40,"line":214},9,[38,216,217],{"class":47},"    },\n",[38,219,221],{"class":40,"line":220},10,[38,222,223],{"class":47},"})\n",[225,226,228],"h2",{"id":227},"how-escalation-works","How escalation works",[13,230,231],{},"When a call escalates, the agent's execution is suspended. The TUI shows the function\nname, module, and arguments and waits for a response. Approving lets the call proceed.\nDenying throws in the capsule and the agent is told the call was blocked.",[13,233,234,235,154],{},"In headless execution with no TUI attached, unresolved escalations fail closed after the\ntimeout. Default is 30 seconds — configurable via\n",[236,237,239],"a",{"href":238},"\u002Fdocs\u002Fv2\u002Fapi\u002Fconfig\u002Fpolicy\u002Fresources",[17,240,241],{},"resources.escalationTimeoutMs",[225,243,245],{"id":244},"pattern-escalation-vs-function-escalation","Pattern escalation vs function escalation",[13,247,248,249,251,252,254],{},"Pattern-based escalation on ",[17,250,22],{}," and ",[17,253,26],{}," covers static cases:",[29,256,258],{"className":31,"code":257,"language":33,"meta":34,"style":34},"export default defineAgent({\n    policy: {\n        process: {\n            allow:    [\"git *\"],\n            escalate: [\"git push*\"],\n        },\n    },\n})\n",[17,259,260,270,276,283,297,310,314,318],{"__ignoreMap":34},[38,261,262,264,266,268],{"class":40,"line":41},[38,263,90],{"class":89},[38,265,93],{"class":89},[38,267,97],{"class":96},[38,269,100],{"class":47},[38,271,272,274],{"class":40,"line":103},[38,273,106],{"class":44},[38,275,109],{"class":47},[38,277,278,281],{"class":40,"line":112},[38,279,280],{"class":44},"        process:",[38,282,109],{"class":47},[38,284,285,288,291,294],{"class":40,"line":132},[38,286,287],{"class":44},"            allow:",[38,289,290],{"class":47},"    [",[38,292,293],{"class":163},"\"git *\"",[38,295,296],{"class":47},"],\n",[38,298,299,302,305,308],{"class":40,"line":139},[38,300,301],{"class":44},"            escalate:",[38,303,304],{"class":47}," [",[38,306,307],{"class":163},"\"git push*\"",[38,309,296],{"class":47},[38,311,312],{"class":40,"line":145},[38,313,211],{"class":47},[38,315,316],{"class":40,"line":167},[38,317,217],{"class":47},[38,319,320],{"class":40,"line":208},[38,321,223],{"class":47},[13,323,324,325,327],{},"The ",[17,326,5],{}," function covers cases where the decision depends on the arguments:",[29,329,331],{"className":31,"code":330,"language":33,"meta":34,"style":34},"export default defineAgent({\n    policy: {\n        escalate: (call) => {\n            if (call.fn !== \"fs.write\") return false\n            const path = call.args[0]?.toString() ?? \"\"\n            return path.includes(\"production\") || path.includes(\"deploy\")\n        },\n    },\n})\n",[17,332,333,343,349,365,392,424,456,460,464],{"__ignoreMap":34},[38,334,335,337,339,341],{"class":40,"line":41},[38,336,90],{"class":89},[38,338,93],{"class":89},[38,340,97],{"class":96},[38,342,100],{"class":47},[38,344,345,347],{"class":40,"line":103},[38,346,106],{"class":44},[38,348,109],{"class":47},[38,350,351,353,355,357,359,361,363],{"class":40,"line":112},[38,352,115],{"class":96},[38,354,118],{"class":44},[38,356,121],{"class":47},[38,358,51],{"class":44},[38,360,61],{"class":47},[38,362,65],{"class":64},[38,364,109],{"class":47},[38,366,367,370,372,374,376,378,381,384,386,389],{"class":40,"line":132},[38,368,369],{"class":89},"            if",[38,371,121],{"class":47},[38,373,51],{"class":44},[38,375,154],{"class":47},[38,377,157],{"class":44},[38,379,380],{"class":47}," !== ",[38,382,383],{"class":163},"\"fs.write\"",[38,385,61],{"class":47},[38,387,388],{"class":89},"return",[38,390,391],{"class":64}," false\n",[38,393,394,397,401,404,406,408,410,412,414,416,418,421],{"class":40,"line":139},[38,395,396],{"class":64},"            const",[38,398,400],{"class":399},"s9McN"," path",[38,402,403],{"class":47}," = ",[38,405,51],{"class":44},[38,407,154],{"class":47},[38,409,177],{"class":44},[38,411,180],{"class":47},[38,413,184],{"class":183},[38,415,187],{"class":47},[38,417,190],{"class":96},[38,419,420],{"class":47},"() ?? ",[38,422,423],{"class":163},"\"\"\n",[38,425,426,428,430,432,434,436,439,442,445,447,449,451,454],{"class":40,"line":145},[38,427,148],{"class":89},[38,429,400],{"class":44},[38,431,154],{"class":47},[38,433,196],{"class":96},[38,435,199],{"class":47},[38,437,438],{"class":163},"\"production\"",[38,440,441],{"class":47},") || ",[38,443,444],{"class":44},"path",[38,446,154],{"class":47},[38,448,196],{"class":96},[38,450,199],{"class":47},[38,452,453],{"class":163},"\"deploy\"",[38,455,205],{"class":47},[38,457,458],{"class":40,"line":167},[38,459,211],{"class":47},[38,461,462],{"class":40,"line":208},[38,463,217],{"class":47},[38,465,466],{"class":40,"line":214},[38,467,223],{"class":47},[13,469,470],{},"Both can be declared simultaneously. Either one triggering is sufficient to escalate —\nthey are not exclusive.",[472,473,474],"style",{},"html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .sNl3T, html code.shiki .sNl3T{--shiki-default:#4EC9B0}html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}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 pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}html pre.shiki code .sDGX8, html code.shiki .sDGX8{--shiki-default:#B5CEA8}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}",{"title":34,"searchDepth":103,"depth":103,"links":476},[477,478],{"id":227,"depth":103,"text":228},{"id":244,"depth":103,"text":245},"Programmatic escalation gate. Called when a tool call matches an escalate pattern on\nfs or process, or when you need conditions the pattern lists can't express.","md",{},true,"\u002Fdocs\u002Fv2\u002Fapi\u002Fconfig\u002Fpolicy\u002Fescalate",{"title":5,"description":479},"docs\u002Fv2\u002Fapi\u002Fconfig\u002Fpolicy\u002Fescalate","0XvU6YrSlXiXn36a6ML3IPQhJUsJrd6fvuJgAQyYyz0",1786529563300]