[{"data":1,"prerenderedAt":976},["ShallowReactive",2],{"doc-\u002Fen\u002Fdocs\u002Fguides\u002Fhooks":3,"doc-surround-\u002Fen\u002Fdocs\u002Fguides\u002Fhooks":864,"doc-nav-en":872},{"id":4,"title":5,"body":6,"description":854,"extension":855,"meta":856,"navigation":857,"order":858,"path":859,"section":860,"seo":861,"stem":862,"__hash__":863},"docs_en\u002Fen\u002Fdocs\u002F02.guides\u002F21.hooks.md","Hook automation and blocking",{"type":7,"value":8,"toc":846},"minimark",[9,13,33,38,45,56,231,235,277,287,290,321,336,340,347,350,378,421,424,441,445,529,540,544,556,614,641,681,685,693,738,753,757,831,842],[10,11,5],"h1",{"id":12},"hook-automation-and-blocking",[14,15,16,17,21,22,27,28,32],"p",{},"Hooks run checks or notifications at specific points in kernel execution. Definitions live in your project's ",[18,19,20],"code",{},".lxz\u002Fhooks\u002F*.json","; the IDE automation \u002F Hook settings can also manage them. Hooks have different responsibilities from ",[23,24,26],"a",{"href":25},"\u002Fen\u002Fdocs\u002Fguides\u002Fmcp","MCP tools"," and ",[23,29,31],{"href":30},"\u002Fen\u002Fdocs\u002Fguides\u002Fa2a","A2A tasks",".",[34,35,37],"h2",{"id":36},"_1-create-a-command-hook","1. Create a Command hook",[14,39,40,41,44],{},"Install Node.js and make ",[18,42,43],{},"node"," available in the kernel process PATH. Use a trusted project directory: project hooks can start processes as your local user, so review scripts before enabling them.",[14,46,47,48,51,52,55],{},"Create ",[18,49,50],{},".lxz\u002Fhooks\u002Fcheck-tool.json",". Every field below is required except ",[18,53,54],{},"handler",", which defaults to Command.",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-json shiki shiki-themes tokyo-night","{\n  \"name\": \"check-tool\",\n  \"event\": \"BeforeToolCall\",\n  \"command\": \"node\",\n  \"args\": [\".lxz\u002Fscripts\u002Fcheck-tool.cjs\"],\n  \"enabled\": true,\n  \"timeout_secs\": 5,\n  \"handler\": \"Command\"\n}\n","json","",[18,64,65,74,103,124,144,171,189,206,225],{"__ignoreMap":62},[66,67,70],"span",{"class":68,"line":69},"line",1,[66,71,73],{"class":72},"sgJMe","{\n",[66,75,77,81,85,88,91,94,98,100],{"class":68,"line":76},2,[66,78,80],{"class":79},"sAklC","  \"",[66,82,84],{"class":83},"s3R4Z","name",[66,86,87],{"class":79},"\"",[66,89,90],{"class":79},":",[66,92,93],{"class":79}," \"",[66,95,97],{"class":96},"sPY7s","check-tool",[66,99,87],{"class":79},[66,101,102],{"class":79},",\n",[66,104,106,108,111,113,115,117,120,122],{"class":68,"line":105},3,[66,107,80],{"class":79},[66,109,110],{"class":83},"event",[66,112,87],{"class":79},[66,114,90],{"class":79},[66,116,93],{"class":79},[66,118,119],{"class":96},"BeforeToolCall",[66,121,87],{"class":79},[66,123,102],{"class":79},[66,125,127,129,132,134,136,138,140,142],{"class":68,"line":126},4,[66,128,80],{"class":79},[66,130,131],{"class":83},"command",[66,133,87],{"class":79},[66,135,90],{"class":79},[66,137,93],{"class":79},[66,139,43],{"class":96},[66,141,87],{"class":79},[66,143,102],{"class":79},[66,145,147,149,152,154,156,159,161,164,166,169],{"class":68,"line":146},5,[66,148,80],{"class":79},[66,150,151],{"class":83},"args",[66,153,87],{"class":79},[66,155,90],{"class":79},[66,157,158],{"class":72}," [",[66,160,87],{"class":79},[66,162,163],{"class":96},".lxz\u002Fscripts\u002Fcheck-tool.cjs",[66,165,87],{"class":79},[66,167,168],{"class":72},"]",[66,170,102],{"class":79},[66,172,174,176,179,181,183,187],{"class":68,"line":173},6,[66,175,80],{"class":79},[66,177,178],{"class":83},"enabled",[66,180,87],{"class":79},[66,182,90],{"class":79},[66,184,186],{"class":185},"sOJ5S"," true",[66,188,102],{"class":79},[66,190,192,194,197,199,201,204],{"class":68,"line":191},7,[66,193,80],{"class":79},[66,195,196],{"class":83},"timeout_secs",[66,198,87],{"class":79},[66,200,90],{"class":79},[66,202,203],{"class":185}," 5",[66,205,102],{"class":79},[66,207,209,211,213,215,217,219,222],{"class":68,"line":208},8,[66,210,80],{"class":79},[66,212,54],{"class":83},[66,214,87],{"class":79},[66,216,90],{"class":79},[66,218,93],{"class":79},[66,220,221],{"class":96},"Command",[66,223,224],{"class":79},"\"\n",[66,226,228],{"class":68,"line":227},9,[66,229,230],{"class":72},"}\n",[14,232,47,233,90],{},[18,234,163],{},[57,236,240],{"className":237,"code":238,"language":239,"meta":62,"style":62},"language-javascript shiki shiki-themes tokyo-night","\u002F\u002F Input is an environment variable. stdin is closed; never wait for input.\nconst raw = process.env.LXZ_HOOK_DATA || ''\n\u002F\u002F Demonstration rule. Parse the particular tool's data for real checks.\nconst blocked = raw.includes('LXZ_DEMO_BLOCK')\nprocess.stdout.write(JSON.stringify(blocked\n  ? { action: 'block', reason: 'The demonstration rule blocked this tool call' }\n  : { action: 'continue' }))\n","javascript",[18,241,242,247,252,257,262,267,272],{"__ignoreMap":62},[66,243,244],{"class":68,"line":69},[66,245,246],{},"\u002F\u002F Input is an environment variable. stdin is closed; never wait for input.\n",[66,248,249],{"class":68,"line":76},[66,250,251],{},"const raw = process.env.LXZ_HOOK_DATA || ''\n",[66,253,254],{"class":68,"line":105},[66,255,256],{},"\u002F\u002F Demonstration rule. Parse the particular tool's data for real checks.\n",[66,258,259],{"class":68,"line":126},[66,260,261],{},"const blocked = raw.includes('LXZ_DEMO_BLOCK')\n",[66,263,264],{"class":68,"line":146},[66,265,266],{},"process.stdout.write(JSON.stringify(blocked\n",[66,268,269],{"class":68,"line":173},[66,270,271],{},"  ? { action: 'block', reason: 'The demonstration rule blocked this tool call' }\n",[66,273,274],{"class":68,"line":191},[66,275,276],{},"  : { action: 'continue' }))\n",[14,278,279,280,282,283,286],{},"Commands run with the project root as their working directory. ",[18,281,151],{}," contains separate arguments; shell expansion is not automatic. On Windows, explicitly choose an interpreter for ",[18,284,285],{},".ps1"," files or shell built-ins. Write diagnostics to stderr and exactly one decision JSON to stdout.",[14,288,289],{},"Check the script from the project directory first:",[57,291,295],{"className":292,"code":293,"language":294,"meta":62,"style":62},"language-powershell shiki shiki-themes tokyo-night","$env:LXZ_HOOK_DATA = '{\"demo\":\"ok\"}'\nnode .lxz\u002Fscripts\u002Fcheck-tool.cjs\n$env:LXZ_HOOK_DATA = '{\"demo\":\"LXZ_DEMO_BLOCK\"}'\nnode .lxz\u002Fscripts\u002Fcheck-tool.cjs\nRemove-Item Env:LXZ_HOOK_DATA\n","powershell",[18,296,297,302,307,312,316],{"__ignoreMap":62},[66,298,299],{"class":68,"line":69},[66,300,301],{},"$env:LXZ_HOOK_DATA = '{\"demo\":\"ok\"}'\n",[66,303,304],{"class":68,"line":76},[66,305,306],{},"node .lxz\u002Fscripts\u002Fcheck-tool.cjs\n",[66,308,309],{"class":68,"line":105},[66,310,311],{},"$env:LXZ_HOOK_DATA = '{\"demo\":\"LXZ_DEMO_BLOCK\"}'\n",[66,313,314],{"class":68,"line":126},[66,315,306],{},[66,317,318],{"class":68,"line":146},[66,319,320],{},"Remove-Item Env:LXZ_HOOK_DATA\n",[14,322,323,324,327,328,331,332,335],{},"Expect ",[18,325,326],{},"{\"action\":\"continue\"}",", then ",[18,329,330],{},"block"," with a nonempty ",[18,333,334],{},"reason",". This checks script input\u002Foutput; trigger a tool call in the IDE to verify its actual integration.",[34,337,339],{"id":338},"_2-input-decisions-and-failures","2. Input, decisions, and failures",[14,341,342,343,346],{},"The working directory provides the Command's project context; call sites may also explicitly supply environment variables. ",[18,344,345],{},"LXZ_HOOK_DATA"," contains the original string supplied by the current call site. Events need not share a JSON schema or include lifecycle identifiers. Validate data per event and never splice it into commands or treat it as trusted instructions.",[14,348,349],{},"Asynchronous Command \u002F Prompt \u002F Mcp decisions accept strict JSON only:",[57,351,353],{"className":59,"code":352,"language":61,"meta":62,"style":62},"{\"action\":\"continue\"}\n",[18,354,355],{"__ignoreMap":62},[66,356,357,360,362,365,367,369,371,374,376],{"class":68,"line":69},[66,358,359],{"class":72},"{",[66,361,87],{"class":79},[66,363,364],{"class":83},"action",[66,366,87],{"class":79},[66,368,90],{"class":79},[66,370,87],{"class":79},[66,372,373],{"class":96},"continue",[66,375,87],{"class":79},[66,377,230],{"class":72},[57,379,381],{"className":59,"code":380,"language":61,"meta":62,"style":62},"{\"action\":\"block\",\"reason\":\"Complete the required check first\"}\n",[18,382,383],{"__ignoreMap":62},[66,384,385,387,389,391,393,395,397,399,401,404,406,408,410,412,414,417,419],{"class":68,"line":69},[66,386,359],{"class":72},[66,388,87],{"class":79},[66,390,364],{"class":83},[66,392,87],{"class":79},[66,394,90],{"class":79},[66,396,87],{"class":79},[66,398,330],{"class":96},[66,400,87],{"class":79},[66,402,403],{"class":79},",",[66,405,87],{"class":79},[66,407,334],{"class":83},[66,409,87],{"class":79},[66,411,90],{"class":79},[66,413,87],{"class":79},[66,415,416],{"class":96},"Complete the required check first",[66,418,87],{"class":79},[66,420,230],{"class":72},[14,422,423],{},"Do not add Markdown, extra fields, or plain text. Blocking requires a nonempty reason. A nonzero Command exit, timeout, excessive output, or invalid decision fails and blocks execution. stdout and stderr are each capped at 1 MiB. The timeout has a one-second minimum; timeout or cancellation terminates the process tree. Interactive commands are unsuitable.",[14,425,426,428,429,432,433,436,437,440],{},[18,427,119],{}," can prevent the subsequent operation. An ",[18,430,431],{},"AfterToolCall"," check runs after the operation and cannot undo its side effects. The legacy synchronous ",[18,434,435],{},"fire"," interface's ",[18,438,439],{},"BLOCK:"," convention does not apply to the IDE's asynchronous runtime.",[34,442,444],{"id":443},"_3-events-currently-connected","3. Events currently connected",[446,447,448,461],"table",{},[449,450,451],"thead",{},[452,453,454,458],"tr",{},[455,456,457],"th",{},"Execution path",[455,459,460],{},"Connected events",[462,463,464,477,491],"tbody",{},[452,465,466,470],{},[467,468,469],"td",{},"Tools",[467,471,472,474,475],{},[18,473,119],{},", ",[18,476,431],{},[452,478,479,482],{},[467,480,481],{},"Agent \u002F RUSH",[467,483,484,474,487,490],{},[18,485,486],{},"BeforeAgentRun",[18,488,489],{},"AfterAgentRun","; the start event also has a fallback path",[452,492,493,496],{},[467,494,495],{},"RUSH stages",[467,497,498,501,502,474,505,501,508,474,511,501,514,474,517,501,520,474,523,501,526],{},[18,499,500],{},"BeforeGuide"," \u002F ",[18,503,504],{},"AfterGuide",[18,506,507],{},"BeforePlan",[18,509,510],{},"AfterPlan",[18,512,513],{},"BeforeCode",[18,515,516],{},"AfterCode",[18,518,519],{},"BeforeVerify",[18,521,522],{},"AfterVerify",[18,524,525],{},"BeforeLearn",[18,527,528],{},"AfterLearn",[14,530,531,532,535,536,539],{},"The event type also lists file writes, commands, commits, sessions, and errors. An enum variant does not guarantee a trigger at every operation. Do not depend on names such as ",[18,533,534],{},"BeforeFileWrite"," or ",[18,537,538],{},"BeforeCommit"," for enforcement in this version; verify events on the actual execution path.",[34,541,543],{"id":542},"_4-other-handlers","4. Other handlers",[14,545,546,547,549,550,552,553,555],{},"Keep the complete outer definition and replace ",[18,548,54],{}," with the appropriate object below. For non-command handlers, use an empty ",[18,551,131],{}," and an empty ",[18,554,151],{}," array.",[446,557,558,573],{},[449,559,560],{},[452,561,562,565,570],{},[455,563,564],{},"Handler",[455,566,567,569],{},[18,568,54],{}," example",[455,571,572],{},"Requirements",[462,574,575,588,601],{},[452,576,577,580,585],{},[467,578,579],{},"HTTP",[467,581,582],{},[18,583,584],{},"{\"Http\":{\"url\":\"http:\u002F\u002F127.0.0.1:8787\u002Fhook\",\"timeout_secs\":3}}",[467,586,587],{},"Reachable HTTP service",[452,589,590,593,598],{},[467,591,592],{},"MCP",[467,594,595],{},[18,596,597],{},"{\"Mcp\":{\"server\":\"checks\",\"tool\":\"validate\",\"arguments\":\"{}\"}}",[467,599,600],{},"Configured server\u002Ftool, runtime executor, and tool approval",[452,602,603,606,611],{},[467,604,605],{},"Prompt",[467,607,608],{},[18,609,610],{},"{\"Prompt\":{\"prompt\":\"Check the call and return only decision JSON\"}}",[467,612,613],{},"Configured model and runtime executor",[14,615,616,619,620,624,625,628,629,632,633,636,637,640],{},[18,617,618],{},"Mcp.arguments"," is a JSON ",[621,622,623],"strong",{},"string",", not an object. Names are case-sensitive and externally tagged: use ",[18,626,627],{},"Http",", not ",[18,630,631],{},"type: http",". An ",[18,634,635],{},"Agent"," variant exists in the type, but current file loading and IDE saving reject enabled Agent hooks. It is not an available configuration feature. Plugin loading and fingerprint approval generate ",[18,638,639],{},"PluginCommand","; do not fabricate its approval fields.",[14,642,643,644,474,646,474,649,474,651,474,654,474,657,474,660,663,664,667,668,670,671,535,673,676,677,680],{},"HTTP sends POST with ",[18,645,110],{},[18,647,648],{},"tool_name",[18,650,151],{},[18,652,653],{},"session_id",[18,655,656],{},"run_id",[18,658,659],{},"event_id",[18,661,662],{},"sequence",", and ",[18,665,666],{},"occurred_at",". Missing fields may be null, and ",[18,669,151],{}," remains a string. Return 2xx with ",[18,672,326],{},[18,674,675],{},"{\"action\":\"block\",\"reason\":\"Explanation\"}",". Network errors, timeouts, non-2xx responses, invalid responses, and unknown actions log a warning and continue: HTTP is ",[621,678,679],{},"fail-open",", not an enforcement boundary. Its response parsing differs from strict Command decisions.",[34,682,684],{"id":683},"_5-save-toggle-and-reload","5. Save, toggle, and reload",[14,686,687,688,692],{},"Use the actual listener address and local Bearer token as explained in ",[23,689,691],{"href":690},"\u002Fen\u002Fdocs\u002Freference\u002Fkernel-api","Kernel API",". Never put tokens in configuration files or logs.",[57,694,696],{"className":292,"code":695,"language":294,"meta":62,"style":62},"# Set $kernelBase and $kernelToken to the current kernel's actual values.\n$hookHeaders = @{ Authorization = \"Bearer $kernelToken\" }\n$projectRoot = (Get-Location).Path\n$rootQuery = [uri]::EscapeDataString($projectRoot)\nInvoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Flist?project_root=$rootQuery\" -Headers $hookHeaders\n$toggle = @{ name = 'check-tool'; enabled = $true; project_root = $projectRoot } | ConvertTo-Json\nInvoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Ftoggle\" -Method Post -Headers $hookHeaders -ContentType 'application\u002Fjson' -Body $toggle\nInvoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Freload?project_root=$rootQuery\" -Method Post -Headers $hookHeaders\n",[18,697,698,703,708,713,718,723,728,733],{"__ignoreMap":62},[66,699,700],{"class":68,"line":69},[66,701,702],{},"# Set $kernelBase and $kernelToken to the current kernel's actual values.\n",[66,704,705],{"class":68,"line":76},[66,706,707],{},"$hookHeaders = @{ Authorization = \"Bearer $kernelToken\" }\n",[66,709,710],{"class":68,"line":105},[66,711,712],{},"$projectRoot = (Get-Location).Path\n",[66,714,715],{"class":68,"line":126},[66,716,717],{},"$rootQuery = [uri]::EscapeDataString($projectRoot)\n",[66,719,720],{"class":68,"line":146},[66,721,722],{},"Invoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Flist?project_root=$rootQuery\" -Headers $hookHeaders\n",[66,724,725],{"class":68,"line":173},[66,726,727],{},"$toggle = @{ name = 'check-tool'; enabled = $true; project_root = $projectRoot } | ConvertTo-Json\n",[66,729,730],{"class":68,"line":191},[66,731,732],{},"Invoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Ftoggle\" -Method Post -Headers $hookHeaders -ContentType 'application\u002Fjson' -Body $toggle\n",[66,734,735],{"class":68,"line":208},[66,736,737],{},"Invoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Freload?project_root=$rootQuery\" -Method Post -Headers $hookHeaders\n",[14,739,740,741,744,745,748,749,752],{},"POST ",[18,742,743],{},"\u002Fapi\u002Fhooks\u002Fsave"," accepts ",[18,746,747],{},"{ \"hook\": \u003Ccomplete definition>, \"file\": \"check-tool.json\", \"project_root\": \"absolute project path\" }",". Save and toggle persist project files. Reload reports the rescan result; it does not guarantee replacement of an already running engine. Start a new task after changes. Some API errors use ",[18,750,751],{},"success: false"," in the response body even with HTTP 200, so inspect the body.",[34,754,756],{"id":755},"_6-troubleshooting","6. Troubleshooting",[446,758,759,769],{},[449,760,761],{},[452,762,763,766],{},[455,764,765],{},"Symptom",[455,767,768],{},"Check",[462,770,771,783,791,799,807,815,823],{},[452,772,773,776],{},[467,774,775],{},"No hook execution",[467,777,778,779,782],{},"Actual project root, ",[18,780,781],{},".lxz\u002Fhooks",", enabled flag, connected event, and a new task",[452,784,785,788],{},[467,786,787],{},"Configuration failure blocks execution",[467,789,790],{},"Required fields, handler tags, Agent restriction; repair and reload",[452,792,793,796],{},[467,794,795],{},"Process fails to start",[467,797,798],{},"Kernel PATH, Node installation, relative script path, interpreter, and permissions",[452,800,801,804],{},[467,802,803],{},"Repeated timeouts",[467,805,806],{},"Accidental stdin reading, interactive commands, network calls without timeouts",[452,808,809,812],{},[467,810,811],{},"Invalid decision",[467,813,814],{},"Logs on stdout, strict JSON, and nonempty block reason",[452,816,817,820],{},[467,818,819],{},"HTTP outage continues execution",[467,821,822],{},"Expected fail-open behavior; inspect hook warnings and service logs",[452,824,825,828],{},[467,826,827],{},"A file changed despite an after-hook block",[467,829,830],{},"The operation already happened; use a connected before-event check",[14,832,833,836,837,836,840],{},[23,834,835],{"href":30},"A2A guide"," · ",[23,838,839],{"href":25},"MCP configuration",[23,841,691],{"href":690},[843,844,845],"style",{},"html pre.shiki code .sgJMe, html code.shiki .sgJMe{--shiki-default:#9ABDF5}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s3R4Z, html code.shiki .s3R4Z{--shiki-default:#7AA2F7}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}html pre.shiki code .sOJ5S, html code.shiki .sOJ5S{--shiki-default:#FF9E64}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);}",{"title":62,"searchDepth":76,"depth":76,"links":847},[848,849,850,851,852,853],{"id":36,"depth":76,"text":37},{"id":338,"depth":76,"text":339},{"id":443,"depth":76,"text":444},{"id":542,"depth":76,"text":543},{"id":683,"depth":76,"text":684},{"id":755,"depth":76,"text":756},"Configure project hooks, read event input, return decisions, and diagnose failures","md",{},true,21,"\u002Fen\u002Fdocs\u002Fguides\u002Fhooks","Guides",{"title":5,"description":854},"en\u002Fdocs\u002F02.guides\u002F21.hooks","nmUMpg5Lrk0sC6ZGH39xEHVEb1RnvoxxqXsgYiVxVnk",[865,868],{"title":866,"path":30,"stem":867,"children":-1},"A2A connections and task collaboration","en\u002Fdocs\u002F02.guides\u002F20.a2a",{"title":869,"path":870,"stem":871,"children":-1},"Supported Models","\u002Fen\u002Fdocs\u002Fmodels-billing\u002Fmodels","en\u002Fdocs\u002F03.models-billing\u002F12.models",[873],{"title":874,"path":875,"stem":876,"children":877,"page":904},"En","\u002Fen","en",[878],{"title":879,"path":880,"stem":881,"children":882,"page":904},"Docs","\u002Fen\u002Fdocs","en\u002Fdocs",[883,905,939,953],{"title":884,"path":885,"stem":886,"children":887,"page":904},"Getting Started","\u002Fen\u002Fdocs\u002Fgetting-started","en\u002Fdocs\u002F01.getting-started",[888,892,896,900],{"title":889,"path":890,"stem":891},"Installation & Download","\u002Fen\u002Fdocs\u002Fgetting-started\u002Finstallation","en\u002Fdocs\u002F01.getting-started\u002F01.installation",{"title":893,"path":894,"stem":895},"Register & Sign In","\u002Fen\u002Fdocs\u002Fgetting-started\u002Fregister-login","en\u002Fdocs\u002F01.getting-started\u002F02.register-login",{"title":897,"path":898,"stem":899},"First Setup","\u002Fen\u002Fdocs\u002Fgetting-started\u002Ffirst-setup","en\u002Fdocs\u002F01.getting-started\u002F03.first-setup",{"title":901,"path":902,"stem":903},"Manual Migration from VS Code \u002F Cursor","\u002Fen\u002Fdocs\u002Fgetting-started\u002Fmigrate-from-vscode","en\u002Fdocs\u002F01.getting-started\u002F04.migrate-from-vscode",false,{"title":906,"path":907,"stem":908,"children":909,"page":904},"Feature Guides","\u002Fen\u002Fdocs\u002Fguides","en\u002Fdocs\u002F02.guides",[910,914,918,922,926,929,933,937,938],{"title":911,"path":912,"stem":913},"AI Chat and Inline Editing","\u002Fen\u002Fdocs\u002Fguides\u002Fai-chat","en\u002Fdocs\u002F02.guides\u002F05.ai-chat",{"title":915,"path":916,"stem":917},"RUSH Deep Tasks","\u002Fen\u002Fdocs\u002Fguides\u002Frush","en\u002Fdocs\u002F02.guides\u002F06.rush",{"title":919,"path":920,"stem":921},"FIM Completion","\u002Fen\u002Fdocs\u002Fguides\u002Ffim-completion","en\u002Fdocs\u002F02.guides\u002F07.fim-completion",{"title":923,"path":924,"stem":925},"Semantic Code Graph","\u002Fen\u002Fdocs\u002Fguides\u002Fcode-graph","en\u002Fdocs\u002F02.guides\u002F08.code-graph",{"title":927,"path":25,"stem":928},"MCP Tools and Configuration","en\u002Fdocs\u002F02.guides\u002F09.mcp",{"title":930,"path":931,"stem":932},"Debugging","\u002Fen\u002Fdocs\u002Fguides\u002Fdebugging","en\u002Fdocs\u002F02.guides\u002F10.debugging",{"title":934,"path":935,"stem":936},"Terminal and Sandbox","\u002Fen\u002Fdocs\u002Fguides\u002Fterminal","en\u002Fdocs\u002F02.guides\u002F11.terminal",{"title":866,"path":30,"stem":867},{"title":5,"path":859,"stem":862},{"title":940,"path":941,"stem":942,"children":943,"page":904},"Models & Billing","\u002Fen\u002Fdocs\u002Fmodels-billing","en\u002Fdocs\u002F03.models-billing",[944,945,949],{"title":869,"path":870,"stem":871},{"title":946,"path":947,"stem":948},"Plans and Credits","\u002Fen\u002Fdocs\u002Fmodels-billing\u002Fplans-quota","en\u002Fdocs\u002F03.models-billing\u002F13.plans-quota",{"title":950,"path":951,"stem":952},"Bring Your Own API Key","\u002Fen\u002Fdocs\u002Fmodels-billing\u002Fbyok","en\u002Fdocs\u002F03.models-billing\u002F14.byok",{"title":954,"path":955,"stem":956,"children":957,"page":904},"Reference & FAQ","\u002Fen\u002Fdocs\u002Freference","en\u002Fdocs\u002F04.reference",[958,962,966,968,972],{"title":959,"path":960,"stem":961},"Keyboard Shortcuts","\u002Fen\u002Fdocs\u002Freference\u002Fshortcuts","en\u002Fdocs\u002F04.reference\u002F15.shortcuts",{"title":963,"path":964,"stem":965},"Configuration and Data Directory","\u002Fen\u002Fdocs\u002Freference\u002Fconfiguration","en\u002Fdocs\u002F04.reference\u002F16.configuration",{"title":691,"path":690,"stem":967},"en\u002Fdocs\u002F04.reference\u002F17.kernel-api",{"title":969,"path":970,"stem":971},"FAQ","\u002Fen\u002Fdocs\u002Freference\u002Ffaq","en\u002Fdocs\u002F04.reference\u002F18.faq",{"title":973,"path":974,"stem":975},"Cloud REST API","\u002Fen\u002Fdocs\u002Freference\u002Fcloud-api","en\u002Fdocs\u002F04.reference\u002F19.cloud-api",1793596426851]