One index per workspace
Why a workspace keeps a single hosted code index, and what each plan gets from it.
Every agent that opens a codebase reads it again from scratch. It walks the tree, greps for a symbol, opens the files around it, and throws the result away when the session ends. The next agent, on the next machine, repeats it.
mux builds that reading once. A workspace connects GitHub, chooses repositories, and mux keeps one index of them: a mirror per repository, split into syntax-aware chunks, and on paid plans embedded so a search can rank by meaning rather than by words. Everyone in the workspace searches the same index — from the Home page, from Fluxcode after a device signs in, and from any agent over MCP.
What a search returns
Three ways in, and all of them return the same shape: the repository, the file path, the start and end lines, a score, an excerpt, and the commit the excerpt was read at.
grep_codematches the shape of the syntax tree.foo($X)finds every call offoowith one argument, whatever that argument is — not a regular expression, and not a text match.search_coderanks by meaning, so a search for “retry a failed upload” can return code that never uses those words.ask_codetakes a question in plain words and returns the passages that bear on it. It does not write the answer; your agent reads the passages and does that.
corpus_status and list_repositories complete the set. Five tools, no workspace argument: the key names the workspace.
What the plans draw
Pattern search is on every plan, because it costs a process and a tree, not an embedding. Hobby indexes one repository and refreshes it when you ask. Pro indexes five and re-indexes on push. Team indexes every repository the GitHub installation grants and re-indexes on push. Search by meaning and ask_code come with Pro and Team; on Hobby they refuse in plain words rather than quietly returning something else.
What the index does not do
It does not hold your code: the repositories stay in GitHub, and deselecting one removes its mirror and its part of the index. It reads only what the installation grants. And it does not answer for you — the index returns code with line numbers, and the model you already trust does the rest.