[{"data":1,"prerenderedAt":30},["ShallowReactive",2],{"doc:en:code-index":3},{"title":4,"lede":5,"html":6,"headings":7},"The code index","Escouade sorts a project’s code into symbols and links, so that its agents find what they look for in one call, faster and for fewer tokens than by reading whole files.","\u003Ch2 id=\"what-it-saves\">What it saves\u003C\u002Fh2>\n\u003Cp>Without an index, an agent searches with grep, then reads the files it found, often whole. With the index, it asks in one call:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>where a symbol is (function, method, class, type, field, Markdown heading), with its signature and doc;\u003C\u002Fli>\n\u003Cli>the context of a task: the entry points and the related symbols, with their excerpts;\u003C\u002Fli>\n\u003Cli>the callers and the callees of a function;\u003C\u002Fli>\n\u003Cli>what a change would touch.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Each answer says what it saved: the tokens of the files it draws on, read whole, against its own. The \u003Ca href=\"\u002Fen\u002Fdocs\u002Fstats\u002F\">statistics\u003C\u002Fa> add them up per project.\u003C\u002Fp>\n\u003Cp>The languages read: Rust, TypeScript, JavaScript, Svelte, Python, Go, Java, C#, PHP and Markdown.\u003C\u002Fp>\n\u003Ch2 id=\"turning-it-on\">Turning it on\u003C\u002Fh2>\n\u003Cp>The index is \u003Cstrong>off by default\u003C\u002Fstrong>. Escouade offers it:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>when a project is added, at the last step of the “New project” assistant (\u003Cstrong>Index the code\u003C\u002Fstrong>);\u003C\u002Fli>\n\u003Cli>in \u003Cstrong>Settings › Projects › Code index\u003C\u002Fstrong> (\u003Cstrong>Index this project\u003C\u002Fstrong>), at any time.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Once on, the project is read once, then kept up to date without a file watcher: at each question of the agents (every 3 seconds at most), on commits, branch changes and the ends of turns. The setting says what it holds: its files, its symbols, its size and when it was read. Turning it off erases the index.\u003C\u002Fp>\n\u003Cp>The agents’ worktrees are not indexed whole: the index of the base branch serves them all, and each worktree only adds what differs from it.\u003C\u002Fp>\n\u003Ch2 id=\"nothing-leaves-the-machine\">Nothing leaves the machine\u003C\u002Fh2>\n\u003Cp>The index is computed on your machine and kept in \u003Ca href=\"\u002Fen\u002Fdocs\u002Fdata\u002F\">Escouade’s folder\u003C\u002Fa>, never in the repository nor in an online service. Only the agents get excerpts of it, as they already get code. Files git ignores are not read.\u003C\u002Fp>\n\u003Ch2 id=\"private-projects\">Private projects\u003C\u002Fh2>\n\u003Cp>The index of a \u003Ca href=\"\u002Fen\u002Fdocs\u002Fmcp\u002F#private-projects\">private project\u003C\u002Fa> serves its own agents alone: those of the other projects never reach it, by name or by id. What its fence refuses is never read nor indexed; when another project sits inside its folder, the setting names it: “Left out of the index: …”. Likewise, an open project that holds a private project inside its folder leaves it out of its index.\u003C\u002Fp>\n\u003Ch2 id=\"search-by-meaning\">Search by meaning\u003C\u002Fh2>\n\u003Cp>Besides the words, a project’s \u003Ca href=\"\u002Fen\u002Fdocs\u002Fshared-memory\u002F\">shared memory\u003C\u002Fa> and docs are searched by meaning, with a small multilingual model (multilingual-e5-base, MIT license) that runs on your machine. It is downloaded once for every project, from \u003Cstrong>Settings › Projects › Code index › Search by meaning\u003C\u002Fstrong> (282 MB):\u003C\u002Fp>\n\u003Cul>\n\u003Cli>a gauge shows how far the download is, and \u003Cstrong>Cancel\u003C\u002Fstrong> stops it;\u003C\u002Fli>\n\u003Cli>what came is kept: \u003Cstrong>Resume\u003C\u002Fstrong> goes on from there;\u003C\u002Fli>\n\u003Cli>the file is checked by its SHA-256 and goes through the proxy of the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-network\u002F\">network settings\u003C\u002Fa>;\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Delete\u003C\u002Fstrong> removes it; the search then goes by the words alone.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Once the model is downloaded, nothing leaves the machine any more.\u003C\u002Fp>\n\u003Ch2 id=\"what-the-agents-see\">What the agents see\u003C\u002Fh2>\n\u003Cp>The agents go through five tools of the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fmcp\u002F\">MCP server\u003C\u002Fa>, the same for \u003Ca href=\"\u002Fen\u002Fdocs\u002Fharness\u002F\">every harness\u003C\u002Fa>: \u003Ccode class=\"key\">index_search\u003C\u002Fcode>, \u003Ccode class=\"key\">index_context\u003C\u002Fcode>, \u003Ccode class=\"key\">index_callers\u003C\u002Fcode>, \u003Ccode class=\"key\">index_callees\u003C\u002Fcode> and \u003Ccode class=\"key\">index_impact\u003C\u002Fcode>. In the Claude Code and Codex views, a search aimed at a symbol gets a line saying the index answers it in one call; elsewhere, it is a rule of their instructions. A text search is never blocked.\u003C\u002Fp>\n\u003Ch2 id=\"what-it-saved\">What it saved\u003C\u002Fh2>\n\u003Cp>The \u003Ca href=\"\u002Fen\u002Fdocs\u002Fstats\u002F\">statistics\u003C\u002Fa> have a \u003Cstrong>Code index savings\u003C\u002Fstrong> part, over the period chosen: per project, the number of answers of the index, the tokens saved and their worth in dollars. The dollars are an estimate: the tokens saved at the input price of the model each agent ran on.\u003C\u002Fp>\n",[8,12,15,18,21,24,27],{"id":9,"text":10,"depth":11},"what-it-saves","What it saves",2,{"id":13,"text":14,"depth":11},"turning-it-on","Turning it on",{"id":16,"text":17,"depth":11},"nothing-leaves-the-machine","Nothing leaves the machine",{"id":19,"text":20,"depth":11},"private-projects","Private projects",{"id":22,"text":23,"depth":11},"search-by-meaning","Search by meaning",{"id":25,"text":26,"depth":11},"what-the-agents-see","What the agents see",{"id":28,"text":29,"depth":11},"what-it-saved","What it saved",1793278986338]