Docs
Ixos searches the files on your computer by keywords and meaning. It is one program, ixos, used three ways: the desktop app, the terminal, and AI agents over MCP. All three share the same settings, models and records.
Install
One installer. The small bootstrap executable from the releases page installs the shared CLI/engine, MCP and agent skill, verifies both models, and includes desktop by default. Windows and Linux on x86-64 and macOS on Apple silicon and Intel are supported.
Agent installation. These scripts download and verify the same binary installer. No Rust or Node is needed. They add ixos to your user PATH and verify the models from Hugging Face.
& ([scriptblock]::Create((irm https://github.com/Thunderboltdy-10/ixos/releases/latest/download/install-cli.ps1)))curl -fsSL https://github.com/Thunderboltdy-10/ixos/releases/latest/download/install-cli.sh | shFor CLI/MCP/skill only, append -NoDesktop on Windows, or use sh -s -- --no-desktop after the pipe on macOS/Linux. Open a new terminal after installation. Published engine and desktop releases are required for these links.
ixos update updates the CLI/MCP/skill; ixos update --desktop includes desktop. CLI and MCP suggest available updates, while desktop applies compatible engine and signed app updates on launch/login and restarts. Custom engine overrides are preserved.
After setup, everything works offline. Keyword search, grep and read never need a model. To install without a network, see setup and model.
First search
From a project folder, ask for something by what it does. This example shows results from Ixos's source:
ixos search "skip files that are still in the cloud" --dir . --limit 3Each result is the file and the passage that matched best, with line numbers:
ixos-core/src/cloud.rs:184:/// Check if we should skip processing this file to avoid triggering a cloud download ixos-core/src/cloud.rs:185:/// ixos-core/src/cloud.rs:186:/// Returns `true` if the file should be skipped (cloud-only) ixos-core/src/discover.rs:5:/// `build` is intentionally absent: it can be a source module (e.g. Clap). …
Add --json for output a program can read:
{"results":[{"path":"ixos-core/src/cloud.rs","score":0.73457474,"snippet":{
"path":"ixos-core/src/cloud.rs","start_line":182,"end_line":186,"text":"…"}}]}How Ixos ranks
Every search runs two rankings and averages them.
| Part | How it works |
|---|---|
| Keywords | BM25 over the full text of each file, including its path (k1 = 1.2, b = 0.75). Small spelling mistakes are corrected; names, paths, numbers and quoted text are left alone. |
| Meaning | Model2Vec static embeddings on the CPU. Code files keep up to eight passages of at most 1,800 characters; documents keep one vector for the whole text. |
| Candidates | The top 100 files by keywords together with the top 100 by meaning whose similarity is above 0.25. |
| Score | Half the cosine similarity plus half the keyword score divided by the best keyword score. |
| Passage | Within the chosen file, the passage closest to the query is picked, then its strongest keyword line anchors the excerpt. |
Scores order the results; they are not probabilities. A query that is an exact identifier only matches files that contain it. Choose a mode with --mode:
| Mode | Uses | Needs a model |
|---|---|---|
hybrid | Keywords and meaning. The default. | Yes |
lexical | Keywords only. | No |
semantic | Meaning only. | Yes |
The two profiles use different models:
| Profile | For | Model |
|---|---|---|
code | Source files in any language. The default. | ixos-code |
documents | PDFs, Word and other Office files, notes and text. | ixos-documents |
Quick search
Press Ctrl Space anywhere to open the quick search over whatever you are working in. Keyword results appear as you type; meaning is added a moment later and the list re-orders. The selected result shows its best passage beside the list. The shortcut can be changed in Settings.
The app lives in the tray. Closing a window hides it, so the next search starts warm, unless you turn off Keep running when closed.
Search window
The main window shows the full list on the left and the file on the right, scrolled to the passage, with your query highlighted. Three menus sit in the search bar:
| Menu | Choices |
|---|---|
| Search in | All folders, or one of the folders you chose in Settings. |
| Search for | Automatic, Code or Documents. Automatic picks from what the folders contain. |
| Remember files | Saved keeps a small record on each file so the next search is fast. Fresh writes nothing. |
Settings
| Setting | What it does |
|---|---|
| Folders | The only places Ixos reads. Nothing is chosen until you add a folder. |
| What you search | Automatic, Code or Documents. |
| Remember files | Whether to keep records on files between searches. |
| Results to show | How many files each search returns. |
| Quick search shortcut | Ctrl + Space by default. Click and press a new combination. |
| Keep running when closed | Leaves Ixos in the tray when its window closes. |
| Start with Windows | Starts Ixos in the tray when you sign in. |
| Saved records | How many records Ixos keeps in each folder, and a button to remove them. |
| Models | Download status for both models, with a retry if setup failed. |
| AI agents | The commands that give Claude Code or Codex the same search. |
| Recent searches | A short local list, which you can clear. |
Shortcuts
| Keys | Action |
|---|---|
| Ctrl Space | Open quick search |
| ↑ ↓ | Move through results |
| Enter | Open the file |
| Ctrl Enter | Show the file in its folder (⌘ Enter on macOS) |
| Esc | Clear the search, or close quick search when it is empty |
search
Finds files by what they are about, by keywords, or both.
ixos search "where are settings saved" --dir . --profile code --limit 5| Option | Default | What it does |
|---|---|---|
--dir | . | Folder to search. |
--profile | code | code or documents. |
--mode | hybrid | hybrid, lexical or semantic. |
--limit | 10 | Number of files, 1 to 10,000. |
--context | 2 | Lines around each passage, up to 100. |
--evidence | none | none, passages or functions. See function evidence. |
--json | Structured output. | |
--model-path | Load a model from a local folder instead of the installed one. |
Defaults for profile, limit and context come from the settings file.
grep
Finds exact text or a regular expression. It follows the same ignore rules as search and needs no model.
ixos grep "source_hash" --dir crates/ixos-core --fixed| Option | Default | What it does |
|---|---|---|
--dir | . | Folder to search. |
-F, --fixed | Treat the pattern as plain text. | |
-i, --ignore-case | Ignore letter case. | |
--context | 2 | Lines around each hit. |
--limit | 10 | Number of files. |
--json | Structured output. |
read
Prints lines from a file. PDFs and Office files are read as their extracted text, so line numbers refer to that text rather than pages.
ixos read src/source.rs --dir crates/ixos-core --start 1 --lines 30| Option | Default | What it does |
|---|---|---|
--start | 1 | First line. |
--lines | 40 | How many lines to print. |
--end | Last line, inclusive, instead of --lines. | |
--expected-source-hash | Refuse if the file changed. See source hashes. | |
--characters | Read part of one very long line. | |
--character-offset | 0 | Where that part starts. |
--json | Structured output. |
cache
Shows or removes the records Ixos keeps. Removing them is safe; Ixos rebuilds them on the next search. Only Ixos metadata is touched, never the files themselves.
ixos cache stats --dir .
ixos cache clear --dir .
ixos cache clear --dir . --yes
ixos cache clear --all --yes| Command | What it does |
|---|---|
cache stats | Files with records, bytes used, entries in the fallback cache and records from older versions. |
cache clear | Lists what would be removed. Nothing changes without --yes. |
cache clear --yes | Removes the records under --dir, which defaults to the current folder. |
cache clear --all --yes | Removes records in every configured folder and the whole fallback cache. |
config
Shows the shared settings, or changes one. The desktop app reads the same file.
ixos config
ixos config limit 5
ixos config cache false
ixos config locations '["/home/me/projects", "/home/me/notes"]'The keys are listed under settings file.
setup and model
ixos setup downloads both models from pinned Hugging Face revisions, checks their SHA-256 hashes and installs the agent skill. A failed download leaves nothing half installed; run it again once you are online.
ixos setup
ixos setup --skip-models
ixos model install documents
ixos model listWithout a network, copy the three files of each model from ixos-code and ixos-documents into a folder, then install from it:
ixos model install code --from ./ixos-code
ixos model install documents --from ./ixos-documentsIf you skip setup, the first search that needs meaning downloads the model it needs.
doctor
Loads the model, checks that the cache can be written, and runs a small search.
ixos doctor --dir . --profile codeClaude Code and Codex
ixos mcp starts an MCP server over stdio that gives an agent three tools: search, grep and read. Register it once per project, with the project's full path:
claude mcp add --transport stdio ixos -- ixos mcp --dir /your/project --profile codecodex mcp add ixos -- ixos mcp --dir /your/project --profile codeOther MCP clients take the same command in their settings file:
{
"mcpServers": {
"ixos": {
"command": "ixos",
"args": ["mcp", "--dir", "/your/project", "--profile", "code"]
}
}
}If ixos is not on your path, use its full path. Quote Windows paths that contain spaces. Reload the agent afterwards and check the tools with a real call. ixos setup also installs a short skill for Claude Code and Codex that explains when each tool helps; it does not register the server.
Tools
| Tool | Use it for | Arguments |
|---|---|---|
search | Finding code or documents from a description. | query, dir, profile, mode, limit, context, evidence, view |
grep | Exact names, text or regular expressions. | pattern, dir, fixed, ignore_case, limit, context, view |
read | Lines from a known file, a whole function, or several ranges at once. | path, dir, start, lines | end, within, body, expected_source_hash, characters, character_offset, requests, max_bytes, view |
Only query, pattern or path (or requests) is required; the rest default to the server's folder and settings. Line ranges are inclusive. view is json by default; numbered returns compact source with line numbers and groups grep hits by file.
{ "path": "ixos-core/src/cloud.rs", "within": "should_skip_cloud_file", "view": "numbered" }within reads a whole function by name, including its doc comment. Owner::name picks a method. Add "body": true to start at the body. If the name is defined more than once, the answer lists each definition instead of guessing.
Function evidence
For code, search can return the functions in each top file that best match the query, next to the usual passage. File ranking does not change.
{ "query": "invalidate cached source after file changes", "evidence": "functions", "limit": 5, "view": "numbered" }| Value | Returns |
|---|---|
none | One passage per file. The default. |
passages | Another distinct passage per file, without parsing. |
functions | For the top three files, the closest functions with their names and exact line extents. Files that cannot be parsed fall back to passages. |
With evidence on, matches replaces snippet; its first entry is the usual passage. Each match has lines, text, and when known a symbol with the definition's extent. Evidence applies to the code profile with a model; keyword search and documents return their normal passage.
Batched reads
read accepts up to eight ranges in one call through requests. Each can carry an id, and results come back in the same order.
{
"requests": [
{ "id": "definition", "path": "src/cache.rs", "start": 20, "end": 55 },
{ "id": "caller", "path": "src/main.rs", "start": 80, "lines": 12 }
],
"max_bytes": 12000
}The byte budget is split equally between the requests. A request that fails returns its own error and the others still run. dir, view and max_bytes apply to the whole call.
Source hashes
Search and read return a source_hash for each file. Pass it back as expected_source_hash and the read is refused if the file changed since, so an agent never acts on old line numbers.
{ "path": "src/cache.rs", "start": 20, "end": 55, "expected_source_hash": "<source_hash from the search>" }When a read is cut short, continue from next_start_line. For one very long line, set characters and move character_offset forward using next_character_offset.
Settings file
The command, the agent server and the desktop app share one file, ixos/settings.toml, in your system's configuration folder.
| System | Settings | Models |
|---|---|---|
| Windows | %APPDATA%\ixos\settings.toml | %LOCALAPPDATA%\ixos\models |
| macOS | ~/Library/Application Support/ixos/settings.toml | ~/Library/Application Support/ixos/models |
| Linux | ~/.config/ixos/settings.toml | ~/.local/share/ixos/models |
| Key | Default | Meaning |
|---|---|---|
locations | [] | Folders the desktop app searches. |
profile | code | code or documents. |
limit | 10 | Files per search, 1 to 10,000. |
context | 2 | Lines around each passage, up to 100. |
cache | true | Keep records between searches. |
model_dir | the models folder above | Where models are installed. |
Pass --config path/to/settings.toml to any command to use another file.
Environment variables
| Variable | Effect |
|---|---|
IXOS_HOME | Keeps settings, models and the fallback cache in config, data and cache under one folder. Useful for a portable or test setup. |
IXOS_SKILL_HOME | Installs the agent skill under this folder instead of your home folder. |
IXOS_MODEL_PATH | Loads a model from this folder, like --model-path. |
IXOS_ENGINE_PATH | Makes the desktop app use this ixos executable. |
IXOS_RUNTIME_FROM | Makes the desktop app install its engine from this folder instead of downloading it. |
Records and cache
With Remember files on, Ixos saves one small record in each file's own metadata: an alternate data stream named :ixos on Windows and the extended attribute user.ixos on macOS and Linux. Where a drive cannot hold metadata, the record goes in one database in the application cache instead. The file's contents and modified time are never changed.
A record stays valid while the file and the model are the same. Change the file and only that file is read again.
| Field | Bytes |
|---|---|
| IXOS magic | 4 |
| Format version | 1 |
| Model fingerprint | 32 |
| Source fingerprint | 32 |
| Dimensions | 2 |
| Passage count | 1 |
| Each passage: byte and line range, scale | 28 |
| Each passage: int8 vector | dimensions |
| Checksum, xxh3 | 8 |
| Profile | Dimensions | Passages | Record size |
|---|---|---|---|
| code | 256 | 1 to 8 | 364 B to 2,352 B |
| documents | 512 | 1 | 620 B |
Output and size limits
| Limit | Value |
|---|---|
| Answer size | 6,000 bytes by default. Passages are shortened first, then fewer files are returned. |
| read with max_bytes | 128 to 24,000 bytes |
| One file | 16 MiB |
| All extracted text in one search | 256 MiB |
| Batched reads | 8 per call |
Ixos reads text, PDF and Office files. Scanned pages without a text layer are skipped, as are symbolic links, files your ignore rules exclude, and cloud files that have not been downloaded.
Retrieval benchmarks
Two public sets: 260 descriptions of functions from 26 repository families in RepoQA, and all 300 test claims in SciFact over 5,183 papers. Every method returns 10 files with 2 lines of context under the same 6,000-byte limit.
| Set | Method | nDCG@10 | MRR@10 | File found in top 10 |
|---|---|---|---|---|
| RepoQA | Ixos | 0.6937 | 0.6212 | 92.3% |
| RepoQA | BM25 | 0.6066 | 0.5326 | 84.2% |
| RepoQA | ripgrep, ranked | 0.4469 | 0.3614 | 72.3% |
| SciFact | Ixos | 0.6950 | 0.6665 | 80.7% |
| SciFact | BM25 | 0.6645 | 0.6342 | 77.6% |
| SciFact | ripgrep, ranked | 0.5361 | 0.5172 | 62.7% |
These sets were also looked at during development, so read them as a check rather than a fresh test. RepoQA descriptions are generated, and neither set measures PDF extraction or whether an agent finishes its task. Per-query results and the commands to reproduce them are in the repository.
Speed
260 searches through the agent server, one per RepoQA description, on a Ryzen 7 5800X with the folders already read once.
| Median | 95th percentile | Fastest | Slowest | Memory |
|---|---|---|---|---|
| 27 ms | 56 ms | 9.8 ms | 99.4 ms | 95 MB |
The first search in a new folder reads every file. One check on 9,892 files (65 MB) took 2,873 ms from a fresh process, including loading the model, and 573 ms for the second search in a running server.
Agent studies
On the RepoQA set, Ixos put the right file in the top ten for 240 of 260 descriptions. The passage it showed overlapped the function being described for 101 of them; with function evidence on, 171 did.
That makes the right code easier to reach. It is not the same as an agent doing better work: in controlled runs, agents using Ixos were not reliably more correct and did not reliably use less context than agents using ordinary tools. The full write-up has the details.