OnyxSi
Connects to Google Antigravity as an MCP client, exposing OnyxSi's eight meta-tools for zero-copy AST inspection, RAM-buffered edits, MCTS forking, causal flight tracking, and task state synchronization over stdio JSON-RPC 2.0.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OnyxSiexplore two fixes for the failing auth tests and commit the one that passes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
⚡ OnyxSi (Onyx-Si)
Pure Headless Zero-Dependency Autonomous Agent Kernel, ContextFS & Causal Execution Box
100% Python Standard Library · 100% Headless · Strict Token Budget · Crash-Safe Writes
Why OnyxSi • Connect MCP • Live Transcript • 8 Meta-Tools • Architecture • Benchmarks • Installation
Zero external dependencies by design. An AST auditor (src/onyxsi/auditor.py) scans the codebase at boot and rejects banned third-party imports and UI packages. The latest audit checked 45 files with 0 violations. OnyxSi needs no pip install step, compiles no native extensions, and runs without a GUI. It communicates over stdio using JSON-RPC 2.0 and persists state to Markdown and JSON files.
🎯 Why OnyxSi Exists
⚠️ The Problem in Modern Coding Agents | ⚡ The OnyxSi Solution |
Context window bloat. Dozens of narrow MCP tools burn tens of thousands of tokens before the model has read a single line of the codebase. | 8 polymorphic meta-tools, 1,593 tokens total. The whole tool surface is smaller than a typical system prompt. Output is folded into retrievable |
Destructive edits. An agent writes a file, the build breaks, and nobody knows which of forty edits caused it. | Tier-0 Ghost-CoW overlay. Every mutation lands in a zero-copy piece table in RAM. Disk is touched only after a syntax gate, a blast-radius test run, and an explicit commit. |
Linear trial and error. One hypothesis at a time, each attempt a full round-trip through the model. | In-RAM MCTS forking. Several competing fixes are explored simultaneously in RAM, scored against real test runs, and the winner is the only one that reaches disk. |
Repeat-offender bugs. The same mistake is re-introduced three weeks later because nobody wrote it down. | Autonomous AST antibody vaccine. Every commit is diffed against its own pre-image; the defective pattern that was removed becomes a permanent rule that blocks the reintroduction. |
Cross-project contamination. Two repos on one machine share task IDs, progress state, and learned rules. | Project-namespaced storage. Task state and antibody rules live under |
Lost reasoning. The agent's decision trail evaporates when the session ends. | Time-Travel Chronicle. The branch tree and frame-by-frame event log write directly to |
🎬 The Architectural Narrative
Figure 1: The Entropy of Modern Coding Agents
Coding agents commonly struggle with three structural issues:
Context Bloat: Dozens of micro-tools consume thousands of prompt tokens on definitions alone before reading a single line of code.
Destructive Edits: Unbuffered disk writes corrupt working trees during multi-step edits, leaving broken builds behind.
Amnesia & Repetition: Without cross-session memory, fixed bugs recur weeks later because reasoning trails disappear when sessions close.
Figure 2: Replacing Linear Trial-and-Error with Governed Architecture
OnyxSi replaces speculative guesswork with deterministic, bounded execution:
Efficiency: Eight polymorphic meta-tools capped at 1,593 tokens total, eliminating tool catalog bloat.
Safety: A Tier-0 Ghost-CoW overlay buffers mutations in RAM; files touch disk only after passing syntax and blast-radius checks.
Multiverse: In-memory MCTS forking tests competing fixes in parallel rather than guessing one attempt at a time.
Immunity: AST antibody memory turns fixed bugs into permanent anti-patterns right after a commit lands.
Figure 3: Seven Decoupled Layers Governed at Boot
The runtime divides into seven layers. Before startup, an AST compliance auditor scans all 45 source files to confirm zero banned imports or UI packages:
Layer 7 (MCP Daemon): Headless JSON-RPC 2.0 engine over stdio, serving eight meta-tools with zero web server dependencies.
Layers 4 & 5 (Gateway & Causal): GBNF grammar checks, token folding, four-stage flight tracking, and a three-strike error budget.
Layers 2 & 3 (ContextFS & DeltaFS): Bitplane AST scanner, token governor, memoryview piece table, and in-memory branch leases.
Layer 1 (HAL): 64MB shared-memory superblock, lock-free SPSC telemetry ring, and process sandboxing.
🧩 Subsystem Architecture & Capability Matrix
🛠️ Fixed 8 Meta-Tool Surface | 🌲 In-RAM MCTS Multiverse Forking |
Functional surface capped at 1,593 tokens• | Test competing fixes in parallel in RAM• Fork: Clones candidate fixes in memory with zero disk I/O• Test: Runs syntax gates and blast-radius tests in isolated shadow copies• Merge: Commits only the highest-scoring branch to disk and drops failed attempts cleanly |
🛡️ Autonomous AST Antibody Vaccine | ⏱️ Time-Travel Chronicle & Flight Recorder |
Automatic regression prevention from commit diffs• Diff Analysis: Evaluates changed code lines on every successful commit• Forbidden Pattern: The removed bug becomes an active AST anti-pattern• Prescribed Cure: The replacement code becomes the recommended fix• Deterministic Hashing: SHA-256 keys prevent duplicate rule entries | Verifiable reasoning trace across sessions• Project Namespaced: Task state isolates under |
📊 Empirically Verified Invariants | 🔌 Zero-Install Connection & Stdio Bridge |
Empirically verified resource ceilings• 1,593 Tokens: Combined schema footprint ceiling strictly maintained• 1,250 Tokens: Per-call output limit with folding into | Pure Python stdlib headless orchestration• Zero Installation: Runs directly from checkout with |
Related MCP server: agentvc
🔌 Connect to Antigravity, OpenCode & MCP Clients
OnyxSi is a standard MCP server communicating over stdio using JSON-RPC 2.0. It requires zero package installations and runs straight from source on both Windows and Linux.
1. Google Antigravity
Antigravity natively orchestrates OnyxSi via its global configuration file (~/.gemini/config/mcp_config.json). All 8 Meta-Tools are auto-discovered from ~/.gemini/antigravity/mcp/onyxsi/:
Global Configuration (C:\Users\<user>\.gemini\config\mcp_config.json):
{
"mcpServers": {
"onyxsi": {
"command": "L:\\.Tool\\OnyxSi\\.venv\\Scripts\\python.exe",
"args": [
"L:\\.Tool\\OnyxSi\\onyxsi-mcp.py",
"--workspace",
"L:\\.Tool\\OnyxSi"
],
"env": {
"PYTHONUNBUFFERED": "1",
"PYTHONIOENCODING": "utf-8"
}
}
}
}Pre-compiled Tool Schemas: Tool schemas and execution instructions are stored directly under ~/.gemini/antigravity/mcp/onyxsi/ (onyxsi_vfs_inspect.json, onyxsi_vfs_mutate.json, etc.), allowing Antigravity to invoke each tool with zero catalog latency.
2. OpenCode v2
OpenCode v2 reads MCP servers from mcp.servers (unlike v1, which read mcp directly). Create opencode.jsonc in your project root, or add the block to ~/.config/opencode/opencode.jsonc to make it available everywhere.
Project-scoped (opencode.jsonc next to your code):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"onyxsi": {
"type": "local",
"command": ["python", "/absolute/path/to/OnyxSi/onyxsi-mcp.py", "--workspace", "."],
"timeout": { "startup": 60000, "execution": 600000 }
}
}
}
}Global (~/.config/opencode/opencode.jsonc): omit --workspace and OnyxSi targets whichever project the editor is currently in:
{
"$schema": "https://opencode.ai/config.json",
"shell": "powershell",
"mcp": {
"servers": {
"onyxsi": {
"type": "local",
"command": [
"python",
"L:\\.Tool\\OnyxSi\\onyxsi-mcp.py"
],
"timeout": { "startup": 60000, "execution": 600000 }
}
}
}
}Zero-install bridge. onyxsi-mcp.py puts the checkout's src/ on sys.path, pins stdin/stdout to UTF-8, and disables .pyc writing so the checkout stays pristine. onyxsi-mcp.cmd (Windows) and onyxsi-mcp.sh (Linux/macOS) are thin wrappers around it. No pip install, no PYTHONPATH, no virtualenv.
3. Claude Desktop / Cursor / Windsurf / VS Code
Add to your client's claude_desktop_config.json or MCP settings:
{
"mcpServers": {
"onyxsi": {
"command": "python",
"args": [
"/absolute/path/to/OnyxSi/onyxsi-mcp.py",
"--workspace",
"/absolute/path/to/your/project"
]
}
}
}4. Direct Terminal Verification
Verify the server protocol initialization directly over terminal pipes:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"1.0"}}}' \
| python onyxsi-mcp.py --workspace .onyxsi --workspace DIR # serve DIR over JSON-RPC stdio
--project-name NAME # namespace for the task wiki + antibody store
# (default: the workspace folder name)
--no-pre-flight-gate # allow vfs_mutate without causal_flight pre_flight
--telemetry-out PATH # append per-tool JSONL telemetry on shutdown
--max-index-files N # cap on indexed .py files (default: 5000)
--max-index-mb MB # per-file size cap (default: 2.0)
--max-index-total-mb MB # total index byte budget (default: 128.0)
--max-shadow-mb MB # temp shadow copy cap for tests (default: 512.0)🧪 Live MCP Transcript (Verified)
The transcript below was captured directly from an interactive session over stdio JSON-RPC. It exercises the full MCTS loop: forking competing hypotheses in RAM, testing each in an isolated shadow copy of the workspace, scoring the results, merging the winner, and writing the final state to disk.
Step 1: Open a session and stage the baseline fix
→ {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{"cmd":"begin"}}}
← {"status":"ok","mode":"ghost_sandbox_active","session_id":"074a5c0c"}
→ {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{"cmd":"fork","branch_id":"branch_fast","hypothesis":"rename the helper, keep the body"}}}
← {"status":"ok","branch_id":"branch_fast","branches":[
{"branch_id":"main","parent":null,"hypothesis":"","active":false,"modified_files":1,"score":null},
{"branch_id":"branch_fast","parent":"main","hypothesis":"rename the helper, keep the body","active":true,"modified_files":1,"score":null}]}Step 2: Test each branch in an isolated shadow workspace
→ {"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{"cmd":"switch_branch","branch_id":"branch_fast"}}}
→ {"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{"cmd":"test","command":"python demo_mcts/check.py","timeout_s":60}}}
← {"status":"ok","test_result":"FAILED","mode":"shadow-workspace","exit_code":1,"duration_ms":30.9,
"shadow_files":132,"staged_files":1,
"stderr_tail":"AssertionError: add(2, 3) returned -1, expected 5\n",
"enforcement":{"workspace":"path-prefix; the command ran in a temp copy, the real workspace was not written",
"syscall":"none","network":"not isolated"}}
→ {"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{"cmd":"switch_branch","branch_id":"branch_robust"}}}
→ {"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{"cmd":"test","command":"python demo_mcts/check.py","timeout_s":60}}}
← {"status":"ok","test_result":"PASSED","exit_code":0,"stdout_tail":"PASS: add(2, 3) == 5\n"}Step 3: Score, merge the winner, and commit it
→ {"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{
"cmd":"merge_best",
"scores":[{"branch_id":"main","passed_tests":0,"total_tests":1},
{"branch_id":"branch_fast","passed_tests":0,"total_tests":1},
{"branch_id":"branch_robust","passed_tests":1,"total_tests":1}]}}}
← {"status":"ok","winner":"branch_robust","score":99.9914,"scores":[
{"branch_id":"main","score":0},
{"branch_id":"branch_fast","score":-0.0024},
{"branch_id":"branch_robust","score":99.9914}],
"hint":"The winning branch is active and still in RAM; cmd=commit writes it to disk."}
→ {"jsonrpc":"2.0","id":8,"method":"tools/call","params":{"name":"ghost_sandbox","arguments":{"cmd":"commit"}}}
← {"status":"ok","committed_files":{"L:\\.Tool\\OnyxSi\\demo_mcts\\calc.py":118}}The file on disk after the commit:
def add(a, b):
if not isinstance(a, (int, float)):
raise TypeError('a must be a number')
return a + bStep 4: Write the decision trail to disk
→ {"jsonrpc":"2.0","id":9,"method":"tools/call","params":{"name":"wiki_task_sync","arguments":{
"task_id":"TASK-001","op":"replay","project_name":"OnyxSi",
"branches":[{"branch_id":"main","hypothesis":"baseline as found on disk","score":0},
{"branch_id":"branch_fast","parent":"main","hypothesis":"rename the helper, keep the body","score":-0.0024},
{"branch_id":"branch_robust","parent":"main","hypothesis":"fix the operator, guard the type","score":99.9914}]}}}
← {"status":"ok","path":"L:\\.Tool\\OnyxSi\\.onyxsi\\wiki\\projects\\OnyxSi\\tasks\\TASK-001\\TIME_TRAVEL_REPLAY.md"}Which produced TIME_TRAVEL_REPLAY.md:
# Time-Travel Replay: TASK-001
**Project:** `OnyxSi` | **Generated:** 2026-10-20T11:59:00Z | **Frames:** 0 | **Branches:** 3
## 1. ASCII Decision & State Branch Tree
```text
main [score=0.00] — baseline as found on disk
├── branch_fast [score=-0.00] — rename the helper, keep the body
└── branch_robust [score=99.99] — fix the operator, guard the type
> [!NOTE]
> **The scoring formula:** `score = (passed / max(1, total)) * 100 - drift * 50 - min(10, diff_bytes / 10000)`. The test pass ratio carries the most weight. Drift reflects trajectory divergence measured by the causal engine, and the diff penalty is capped at 10 points so a larger correct patch is not penalized over a smaller incorrect one. If omitted, `drift` defaults to the live trajectory drift.
</details>
---
<a id="-the-fixed-8-meta-tool-surface"></a>
## 🧰 The Fixed 8 Meta-Tool Surface
<details>
<summary><b>🔍 Click to expand: 8 Meta-Tools Specifications, Verified Payloads & Architectural Deep-Dives</b></summary>
<br>
OnyxSi exposes eight polymorphic meta-tools with a combined schema size of 1,593 tokens. The router enforces an 1,800-token hard ceiling at construction and refuses to start if it is exceeded.
| Meta-Tool | Operations | Purpose |
| :--- | :--- | :--- |
| `vfs_inspect` | `tree`, `skeleton`, `read`, `symbols`, `grammar`, `resolve` | Read-only inspection: directory maps, AST outlines, line ranges, exact/prefix symbol lookup, GBNF grammar export, `ref://` handle resolution. |
| `vfs_mutate` | `replace_file`, `replace_node`, `insert_after`, `slice_patch`, `merge_patches` | Stages a speculative edit in the in-RAM Ghost overlay. Disk stays untouched until commit. `merge_patches` applies non-overlapping agent patches and unifies imports. |
| `ghost_sandbox` | `begin`, `mutate`, `test`, `commit`, `discard`, `fork`, `switch_branch`, `list_branches`, `merge_best` | Ghost overlay lifecycle plus the in-RAM MCTS branch machinery. `test` runs blast-radius selection or an explicit command inside a shadow copy of the workspace. |
| `causal_flight` | `pre_flight`, `ghost_burn`, `verify`, `commit`, `reflect`, `bisect` | The 4-stage flight controller: declares blast radius, checks drift (<15%), re-parses staged files, logs the commit, resets the 3-strike budget, and binary-searches checkpoints for the culprit. |
| `hypothesis_branch` | `register`, `falsify`, `select` | Enforces orthogonal debugging hypotheses (Jaccard ≤ 0.70) with mandatory falsification probes, distilling failures into one-line negative lessons. |
| `wiki_task_sync` | `init`, `update`, `handoff`, `replay` | Project-namespaced task state: spec, progress JSON/Markdown, execution log, `AGENT_HANDOFF.md`, and the `TIME_TRAVEL_REPLAY.md` chronicle. |
| `graph_compute` | `engine=bm25` · `engine=blast_radius` · `engine=alu` (`type=eval`\|`matrix_matmul`\|`matrix_inv`\|`ieee754`) | Deterministic local compute: CSR+BM25 search, impacted-test selection, safe math evaluation, matrix algebra, IEEE-754 inspection. No LLM involved. |
| `mcp_orchestrate` | `steps[]` with `depends_on` | Runs meta-tools as one dependency-ordered DAG in a single round-trip; later steps read earlier output via `$prev.output` or `$<step>.output`. |
Every argument is validated against the declared JSON schema **before** a handler runs: unknown properties are rejected, enums are enforced, and a tool without a bound handler fails closed rather than echoing its input.
### 🔬 Verified Meta-Tool & Resource Schema Reference
The examples below show tested payloads from stdio JSON-RPC and Google Antigravity MCP sessions:
<details>
<summary><b>📋 Click to expand: Verified Payloads & Empirical Responses for all 8 Meta-Tools</b></summary>
#### 1. `vfs_inspect`: AST Outline & Read-Only Navigation
- **Operations (`action`):** `tree` · `skeleton` · `read` · `symbols` · `grammar` · `resolve`
- **Example Call:**
```json
{"name": "vfs_inspect", "arguments": {"action": "tree", "target": "src/onyxsi", "max_tokens": 500}}Verified Output: Compact hierarchical tree representation with token budget folding.
2. vfs_mutate: In-RAM Speculative Edits (Ghost-CoW)
Operations (
op):slice_patch·replace_file·replace_node·insert_after·merge_patchesExample Call:
{"name": "vfs_mutate", "arguments": {"op": "slice_patch", "path": "src/onyxsi/contracts.py", "start_line": 1, "end_line": 1, "code": "# contracts\n"}}Verified Output: In-RAM piece-table diff and staged hash; disk remains completely untouched until committed.
3. ghost_sandbox: In-RAM MCTS Branching & Isolated Shadow Tests
Operations (
cmd):begin·fork·test·switch_branch·list_branches·merge_best·commit·discardExample Call:
{"name": "ghost_sandbox", "arguments": {"cmd": "begin"}}Verified Output: Active session ID (
session_id) and branch table for branch isolation.
4. causal_flight: 4-Stage Trajectory & Drift Guard
Stages (
stage):pre_flight·ghost_burn·verify·commit·reflect·bisectExample Call:
{"name": "causal_flight", "arguments": {"stage": "pre_flight", "blast_radius": ["src/onyxsi/contracts.py"], "hypothesis": "Inspect contracts"}}Verified Output: Stage authorization, drift index check (<15%), and error budget counter verification.
5. hypothesis_branch: Orthogonal Debugging Exploration
Modes (
mode):register·falsify·selectExample Call:
{ "name": "hypothesis_branch", "arguments": { "mode": "register", "branches": [ {"branch_id": "H1", "statement": "Verify causal tracking", "target_nodes": ["contracts.py"], "probe": "probe_test"} ] } }Verified Output: Hypothesis registered with Jaccard divergence check (≤ 0.70) against competing hypotheses.
6. wiki_task_sync: Project-Namespaced Task & Replay Engine
Operations (
op):init·update·handoff·replayExample Call:
{"name": "wiki_task_sync", "arguments": {"op": "init", "task_id": "TASK-ANTIGRAVITY", "spec": "Verify Antigravity MCP"}}Verified Output: Isolated state persistence initialized under
.onyxsi/wiki/projects/<project>/tasks/.
7. graph_compute: Deterministic Local Compute ALU & Graph Engine
Engines (
engine):alu(type=eval|matrix_matmul|matrix_inv|ieee754) ·bm25(query) ·blast_radius(changed_files)Example Call:
{"name": "graph_compute", "arguments": {"engine": "alu", "type": "eval", "query": "2 + 2"}}Verified Output: Deterministic evaluation result (
4) computed in-process with 0 LLM latency.
8. mcp_orchestrate: Zero-Round-Trip Meta-Tool DAG Pipeline
Parameters:
steps[]withid,tool,arguments, and optionaldepends_onExample Call:
{ "name": "mcp_orchestrate", "arguments": { "steps": [ {"id": "s1", "tool": "graph_compute", "arguments": {"engine": "alu", "type": "eval", "query": "40 + 2"}} ] } }Verified Output: Multi-step pipeline output resolved and merged in a single transport cycle.
📦 Live MCP Resources
OnyxSi exposes direct state and compliance resources over the MCP protocol:
onyxsi://schema: JSON-RPC 2.0 schema for all eight meta-tools with exact token counts (1,593 tokens).onyxsi://audit: AST auditor report verifying zero third-party dependencies and zero UI packages.
1. In-RAM MCTS speculative forking
┌───────────────┐
│ main │ ← the baseline every branch forks from
└───────┬───────┘
┌────────────────┼────────────────┐
▼ ▼ ▼
┌────────────┐ ┌──────────────┐ ┌────────────┐
│ branch_fast│ │ branch_robust│ │ branch_alt │
│ score 41.0 │ │ score 99.99 │ │ score 62.5 │
└────────────┘ └──────────────┘ └────────────┘
│ │
└──── fork ──────┘
▼
┌──────────────┐
│ merge_best │ → winner stays active in RAM, losers are released
└──────────────┘
▼
ghost_commit() → one atomic write to diskEach branch owns its own piece-table documents and tombstones. Forking clones the source branch in RAM so mutations cannot corrupt parent branches. Switching branches requires only a pointer rebind with no copying, write-back, or state loss.
2. Autonomous AST antibody auto-vaccine
commit ──► diff(baseline, fixed)
│
├─ removed line ──► forbidden_pattern (blocks the reintroduction)
└─ added line ──► prescribed_alternative (the cure)
│
└─► AB-<sha256(file, pattern)[:10] ──► .onyxsi/wiki/projects/<p>/ANTIBODIES.jsonThe antibody generates only after a successful commit. A rolled-back write leaves no rules behind for unmerged code. The generated antibody_id uses a deterministic SHA-256 hash, so committing an identical fix never creates duplicate entries.
3. Time-Travel Chronicle
wiki_task_sync op=replay renders two sections: an ASCII decision tree of all explored branches and a table logging the 64-event ring buffer (Frame, Relative Time, Branch, Action, Target, Outcome). Writes are atomic.
🏛️ Architecture & System Topology
┌───────────────────────────────────────────────────────────────────────────┐
│ Layer 7 — MCP Daemon (server.py) │
│ JSON-RPC 2.0 over stdio · 8 fixed meta-tools │
└──────────────────────────────────────┬────────────────────────────────────┘
│
┌──────────────────────────────────────┴────────────────────────────────────┐
│ Layer 4 — Headless Gateway & Shields │
│ Fixed 8 Meta-Tools · Grammar Shield · Stream Folder · Policy Gate │
└───────────────┬───────────────────────┬───────────────────────┬────────────┘
│ │ │
┌───────────────┴──────────────┐ ┌──────┴──────────────┐ ┌──────┴──────────────┐
│ Layer 2 — ContextFS │ │ Layer 3 — DeltaFS │ │ Layer 5 — Causal │
│ Bitplane AST · Piece Table │ │ Ghost-CoW Overlay │ │ 4-Stage Flight │
│ Token Governor · ref:// │ │ MCTS Branching │ │ Error Budget · WAL │
│ Virtual Handles │ │ AST Lease & Merger │ │ Antibody Vaccine │
└───────────────┬──────────────┘ └──────┬──────────────┘ └──────┬──────────────┘
│ │ │
┌───────────────┴───────────────────────┴───────────────────────┴────────────┐
│ Layer 6 — Knowledge, Graph & Deterministic ALU │
│ Project-Namespaced Task Wiki · CSR Graph + BM25 · Blast-Radius Runner │
└──────────────────────────────────────┬─────────────────────────────────────┘
│
┌──────────────────────────────────────┴────────────────────────────────────┐
│ Layer 1 — HAL: SHM Superblock · SPSC Ring · Radix Trie · Proc │
└──────────────────────────────────────┬─────────────────────────────────────┘
│
┌──────────────────────────────────────┴────────────────────────────────────┐
│ Layer 0 — Contracts & Error Codes (E0001 – E9004) │
└───────────────────────────────────────────────────────────────────────────┘The architecture consists of seven layers, verified at startup by the AST compliance auditor:
Layer | Module | Responsibility |
0 |
|
|
1 |
| 64MB shared-memory superblock (POSIX |
2 |
| SWAR/DBP bitplane AST scanner and skeleton pruner, memoryview piece table with nano-checkpoints, token ceiling governor, |
3 |
| Tier-0 Ghost-CoW overlay (now with MCTS branches), 4KB sparse page delta map with reflink + disk spillover to |
4 |
| Fixed 8 meta-tool router, deterministic JSON auto-repair shield, GBNF grammar exporter, macro pipeline fusion, stream folder, policy gate with secret masking. |
5 |
| 4-stage trajectory enforcer, 3-strike error budget, micro-WAL flight recorder, orthogonal hypothesis engine, in-RAM causal bisect, antibody memory with the auto-vaccine. |
6 |
| Project-namespaced task wiki, vectorless CSR graph + tuned BM25, blast-radius differential test runner, safe compute ALU. |
7 |
| The headless JSON-RPC 2.0 daemon and the MCP bridge. |
OnyxSi/
├── onyxsi-mcp.py # Zero-install UTF-8 MCP bridge
├── onyxsi-mcp.sh # Linux/macOS launcher wrapper
├── onyxsi-mcp.cmd # Windows batch launcher wrapper
├── opencode.jsonc # OpenCode MCP server definition
├── pyproject.toml # Build config (zero dependencies, MIT)
├── src/onyxsi/
│ ├── __init__.py # Root facade exposing Layers 0-6
│ ├── __main__.py # python -m onyxsi entry point
│ ├── server.py # JSON-RPC 2.0 stdio daemon
│ ├── contracts.py # OnyxError, OnyxErrorCode, path-segment sanitizer
│ ├── auditor.py # AST zero-dependency & zero-UI auditor
│ ├── hal/ # Layer 1
│ ├── contextfs/ # Layer 2
│ ├── deltafs/ # Layer 3
│ ├── gateway/ # Layer 4
│ ├── causal/ # Layer 5
│ └── knowledge/ # Layer 6
├── tests/
│ ├── run_tests.py # Zero-dependency stdlib test runner
│ ├── test_killer_features.py # Namespacing / MCTS / vaccine / replay / dispatch
│ ├── normal/ # 45 spec-verification modules
│ ├── street/ # 11 chaos, fuzz and concurrency modules
│ └── character/ # 10 end-to-end scenario modules
├── benchmarks/
│ ├── bench_onyxsi.py # Automated benchmark harness
│ ├── recall_eval.py # Labelled-corpus retrieval evaluator
│ ├── BENCHMARKS.md # Measured performance report
│ └── results_v1.0.json # Telemetry snapshot
└── md/ # Architectural blueprints & phase specsOn-disk state
<workspace>/.onyxsi/
├── leases/ # Cross-process AST leases
├── spill/ # CoW workspace disk spillover
├── FLIGHT_LOG.md # Stage 4 commit trail
├── CRASH_REPRO.md # Written on a daemon crash
└── wiki/
├── ANTIBODIES.json # Legacy store (still read)
└── projects/
└── <project>/
├── ANTIBODIES.json # Project-scoped vaccine
└── tasks/
└── TASK-<ID>/
├── TASK_SPEC.md
├── PROGRESS.json
├── PROGRESS.md
├── EXECUTION_LOG.md
├── AGENT_HANDOFF.md
└── TIME_TRAVEL_REPLAY.md📊 Verification & Empirical Metrics
Benchmark sources: Every metric below is drawn directly from benchmarks/results_v1.0.json, generated by running python benchmarks/bench_onyxsi.py on the test environment described below.
Telemetry Metric | Measured | Ceiling | Status |
Meta-tool schema footprint | 1,593 tokens | ≤ 1,800 | PASS |
Output token ceiling | 1,250 tokens | ≤ 1,250 | PASS |
Virtual handle resolvability ( | resolvable | true | PASS |
Bitplane AST scanner throughput | 35.98 MB/s | ≥ 20.0 MB/s | PASS |
Piece-table rollback latency (p95) | 0.0039 ms | ≤ 1.0 ms | PASS |
Ghost overlay discard latency (p95, 25 files) | 3.26 ms | ≤ 5.0 ms | PASS |
Blast-radius test selection (p95, 500 tests) | 0.625 ms | ≤ 5.0 ms | PASS |
Causal bisect search latency (p95, 64 steps) | 0.0105 ms | ≤ 1,000 ms | PASS |
Antibody check latency (p95) | 0.0051 ms | ≤ 5.0 ms | PASS |
CSR + BM25 hybrid search (p95, 5,000 nodes) | 5.70 ms | ≤ 50.0 ms | PASS |
JSON-RPC stdio round-trip (p95) | 0.52 ms | ≤ 50.0 ms | PASS |
Held-out retrieval Hit@5 (150 queries) | 54.67% | ≥ 50.0% | PASS |
Held-out retrieval Recall@5 (150 queries) | 39.11% | ≥ 30.0% | PASS |
Measurement environment: Windows 11 · AMD64 · 8 logical CPUs · Python 3.15.0rc2 · benchmarks/results_v1.0.json (Updated 2026-10-21).
⚡ Multi-Runtime & Dual-OS Benchmark Comparison
Comparison across deployment environments tested on the same physical hardware:
Invariant / Telemetry Metric | Windows 11 (Py 3.12.10) | Windows 11 (Py 3.15.0rc2) | WSL2 Ubuntu (Py 3.14.4) | Target Ceiling | Status |
Bitplane AST Scanner Throughput | 26.54 MB/s | 35.98 MB/s | 43.29 MB/s | $\ge$ 20.0 MB/s | PASS |
Piece-Table Rollback (p95) | 0.0054 ms | 0.0039 ms | 0.0031 ms | $\le$ 1.0 ms | PASS |
Ghost Overlay Discard (p95) | 3.27 ms | 3.26 ms | 0.33 ms | $\le$ 5.0 ms | PASS |
Blast-Radius Test Selection (p95) | 0.631 ms | 0.625 ms | 0.472 ms | $\le$ 5.0 ms | PASS |
Causal Bisect Latency (p95) | 0.0122 ms | 0.0105 ms | 0.0089 ms | $\le$ 1,000 ms | PASS |
Antibody Vaccine Check (p95) | 0.0049 ms | 0.0051 ms | 0.0045 ms | $\le$ 5.0 ms | PASS |
CSR Graph + BM25 Search (p95) | 6.47 ms | 5.70 ms | 5.94 ms | $\le$ 50.0 ms | PASS |
JSON-RPC stdio Round-Trip (p95) | 0.56 ms | 0.52 ms | 0.12 ms | $\le$ 50.0 ms | PASS |
Full Benchmark Suite Wall Clock | 1.76 s | 1.47 s | 1.74 s | — | ALL PASS |
Measurement details: The AST skeleton pruner reports the measured ratio (skeleton ÷ source = 0.683, roughly 32% smaller than original source files across the benchmark corpus) rather than theoretical estimates. Retrieval evaluations use held-out test data without docstring leakage. While indexing docstrings directly yields an artificial 100% Hit@5, held-out retrieval reflects actual search performance.
Test suite
# Full suite under pytest
python -m pytest -v
# Same suite, zero third-party dependencies
python tests/run_tests.py
# Reproduce the benchmark table
python benchmarks/bench_onyxsi.pySuite | Scope |
| 1:1 specification verification across every layer: superblock, SPSC ring, bitplane AST, piece table, ghost overlay, leases, merger, router, grammar shield, trajectory, error budget, hypothesis engine, bisect, antibody, task wiki, CSR+BM25, blast runner, ALU, daemon, MCP protocol. |
| Fuzzing: unclosed JSON brackets, circular DAG pipelines, lease races, concurrent writers, simulated power cuts during atomic writes, boundary conditions. |
| End-to-end personas: amnesiac handoffs, rapid single-byte patching, deep recursion bombs, hostile string manipulation, multi-agent swarms. |
| The v1.0.0-PROD features: project namespacing, Time-Travel Chronicle, MCTS forking and merge, the auto-vaccine, and JSON-RPC dispatch. |
Result: 669 tests passing, 0 failures. Verified on Windows (Python 3.12.10, Python 3.15.0rc2) and Ubuntu WSL2 (Python 3.14.4 / pytest 9.0.2).
🚀 Installation & Quick Start
Prerequisites: Python 3.11 or newer. Nothing else.
# Option 1 (zero install): run straight from the checkout
python onyxsi-mcp.py --workspace /path/to/your/project
# Option 2 (install as an editable package):
pip install -e .
onyxsi --workspace /path/to/your/project# Linux / macOS
./onyxsi-mcp.sh --workspace /path/to/your/project
# Windows
onyxsi-mcp.cmd --workspace C:\path\to\your\project☕ Support & Sponsor
If OnyxSi is useful in your agent workflows or saves context tokens, consider supporting continued development:
📜 License
MIT license. See LICENSE. Copyright © 2026 xTanTHaix.
Deterministic, headless, and dependency-free by construction.
Available Tools
8 toolscausal_flightA
4-stage flight recorder. pre_flight declares blast radius; ghost_burn checks drift (<15%); verify re-parses staged files; commit logs; reflect resets the 3-strike budget; bisect finds the culprit checkpoint. USE WHEN: before/after any non-trivial edit. DO NOT USE: instead of running the affected tests.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | Yes | ||
| target | No | ||
| strategy | No | ||
| hypothesis | No | ||
| root_cause | No | ||
| blast_radius | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose genuine behavior: blast-radius declaration, drift threshold (<15%), re-parsing of staged files, and a 3-strike budget reset. But it never says whether these stages mutate the repository/filesystem, whether state persists between calls or sessions, or whether stages must be run in order — significant gaps for a stateful multi-stage workflow tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the stage semantics come first, followed by the USE/DO NOT USE structure. Every sentence carries information and nothing repeats the schema verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, stateful workflow tool with no annotations and no output schema, the description covers the stage verbs but omits parameter meaning, state/ordering requirements, side effects, and what each stage returns. It is enough to understand the concept but not enough to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters. The description glosses the 'stage' enum values, which is useful, but target, strategy, hypothesis, root_cause, and blast_radius are never explained, including what string lengths or formats the minLength constraints imply. The description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific artifact ('4-stage flight recorder') and enumerates six named stages with one-line meanings, so an agent can tell this is a checkpointing/verification workflow tool rather than a sibling like ghost_sandbox or hypothesis_branch. However, the header says '4-stage' while the schema enum exposes six stages, a small internal inconsistency that muddies the framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE WHEN ('before/after any non-trivial edit') and DO NOT USE ('instead of running the affected tests') clauses give both the trigger and the anti-pattern. This is exactly the explicit when/when-not guidance the rubric rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_sandboxB
Ghost overlay lifecycle: begin, mutate (path+content), test (blast-radius selection, or an explicit command run in a shadow copy of the workspace), commit (atomic, fsync+replace), discard, plus fork / switch_branch / list_branches / merge_best for in-RAM MCTS branches. USE WHEN: you need speculative edits, a rollback point, competing fixes, or to run the project's own tests against staged content. DO NOT USE: before knowing the blast radius.
| Name | Required | Description | Default |
|---|---|---|---|
| cmd | Yes | ||
| path | No | ||
| scores | No | ||
| command | No | ||
| content | No | ||
| branch_id | No | ||
| timeout_s | No | ||
| hypothesis | No | ||
| from_branch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose meaningful traits: commit is atomic with fsync+replace, test runs an explicit command in a shadow copy of the workspace, and branches live in RAM. However it omits persistence/cleanup semantics for overlays, permission or concurrency constraints, and failure modes, leaving significant behavioral gaps for a 9-parameter mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: lifecycle verbs come first, then the USE WHEN / DO NOT USE routing clauses. Every clause carries information, though the parenthetical glosses get crowded and read more like a compact spec than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, multi-command tool with no annotations and no output schema, the description covers the lifecycle model and selection intent but does not map parameters to commands or explain return values. It is the minimum viable framing rather than a complete one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only partially does: it implies mutate uses path+content, test takes an explicit command, and the branch commands take branch_id. It says nothing about scores, timeout_s, hypothesis, or from_branch, leaving most parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (ghost overlay) and enumerates the lifecycle operations (begin, mutate, test, commit, discard) with brief glosses for several of them. It is clearly distinguishable from siblings like vfs_mutate or hypothesis_branch, though it never names an alternative to route against. A solid verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE WHEN ('speculative edits, a rollback point, competing fixes, running the project's own tests against staged content') and DO NOT USE ('before knowing the blast radius') clauses give real selection guidance. Alternatives among the sibling tools are not named, and the DO-NOT clause is terse/cryptic, keeping it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_computeA
Deterministic local compute. engine=bm25 (CSR+BM25 search) | blast_radius (select+run impacted tests) | alu (type=eval | matrix_matmul | matrix_inv | ieee754). USE WHEN: locating code, checking test impact, or arithmetic without an LLM. DO NOT USE: for free-form reasoning or file edits.
| Name | Required | Description | Default |
|---|---|---|---|
| bits | No | ||
| type | No | ||
| query | No | ||
| engine | Yes | ||
| matrix | No | ||
| matrix_a | No | ||
| matrix_b | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It usefully discloses that compute is local and deterministic and that no LLM is involved, which rules out network/agent behavior, but it never says what the outputs look like, whether blast_radius actually executes tests (a side effect), or what errors occur on bad matrix input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense block, front-loaded with the core concept, then engine enumeration, then USE/DO NOT USE guards. No filler sentences; the pipe-delimited structure is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, 1-required, no-output-schema, no-annotation tool, the description covers the routing question well but leaves matrix argument shapes, the meaning of 'bits', and the query semantics for bm25/blast_radius unaddressed. An agent could choose the right tool but struggle to construct a valid call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description has to compensate. It does map the engine and type enum values to concrete operations, which is genuinely useful, but 'query', 'bits', 'matrix', 'matrix_a' and 'matrix_b' receive no meaning, shape, or required-when guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific capability ('deterministic local compute') and enumerates the three engines with their sub-operations (bm25 search, blast_radius test impact, alu eval/matrix/ieee754), which is far more specific than the opaque tool name. It also implicitly separates itself from file-edit and reasoning tools, so an agent can place it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE WHEN: locating code, checking test impact, or arithmetic without an LLM' and 'DO NOT USE: for free-form reasoning or file edits' give both positive selection criteria and hard exclusions. This is the strongest kind of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hypothesis_branchB
Orthogonal hypotheses (Jaccard <= 0.70) with falsification probes. mode=register|falsify (pass the observed probe_succeeded)|select. USE WHEN: several plausible root causes to prune. DO NOT USE: to run the probe.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| lesson | No | ||
| branches | No | ||
| hypothesis_id | No | ||
| probe_succeeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the orthogonality threshold and falsification-probe concept, but omits persistence, mutation effects, what each mode actually changes, and return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely terse and front-loaded: core concept, mode semantics, and usage boundaries appear immediately with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 5-parameter tool with no annotations, no output schema, and 0% schema description coverage. The description is too sparse for that complexity, leaving several parameters and the overall behavior of register/falsify/select under-explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only explains mode values and the falsify-specific probe_succeeded flag; lesson, branches, and hypothesis_id are left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific domain: managing orthogonal hypotheses with a Jaccard threshold and falsification probes, with modes register/falsify/select. That is more specific than a tautology, but 'branch' remains somewhat opaque and there is no explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear USE WHEN condition ('several plausible root causes to prune') and a clear DO NOT USE condition ('to run the probe'). It does not name the alternative tool for running probes, so it falls short of full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_orchestrateA
Run meta-tools as one dependency-ordered DAG; later steps read earlier output via '$prev.output' or '$.output'. USE WHEN: a fix needs inspect->mutate->test in one round-trip. DO NOT USE: for one call, parallel work, or nesting.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose the data-flow mechanism ($prev.output / $<step>.output), dependency ordering, and the no-nesting constraint. However it says nothing about failure semantics — what happens when a step fails, whether execution is atomic or partial, or how errors surface — which is critical for an orchestration tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences, front-loaded with the core mechanism, then the USE/DO NOT USE routing. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex orchestration tool with no annotations and no output schema, the core mechanism and routing are well covered. The main omission is failure/error behavior and result shape, which an agent orchestrating mutations would want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does explain the output-reference syntax ('$prev.output' or '$<step>.output') that feeds the arguments field, plus the dependency-ordered model underlying depends_on. It leaves id, arguments, and the exact depends_on format implicit, so it does not fully close the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: runs meta-tools as a single dependency-ordered DAG. This immediately distinguishes it from the sibling tools, which are the individual meta-tools being orchestrated (vfs_inspect, vfs_mutate, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE WHEN condition (inspect->mutate->test in one round-trip) and explicit DO NOT USE cases (single call, parallel work, nesting). This tells an agent both when to reach for the orchestrator and when to fall back to the individual siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vfs_inspectA
Read-only view: action=tree (dir map), skeleton (AST outline), read (line range), symbols (exact/prefix symbol lookup), grammar (GBNF export), resolve (canonical path or ref:// handle). USE WHEN: orienting, reading code, fetching folded content, finding a symbol, or checking the tool grammar. DO NOT USE: to write or run tests.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| query | No | ||
| action | Yes | ||
| target | No | ||
| end_line | No | ||
| max_tokens | No | ||
| start_line | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden: it correctly declares the operation read-only and enumerates what each action does, which is genuine safety context. However, it omits return-shape behavior, the max_tokens=1250 cap, and any auth or error semantics. Adequate but well short of full disclosure for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the read-only framing, then tightly structured into action glossary, USE WHEN, and DO NOT USE blocks. Every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, 6-action tool with no output schema and no annotations, the description is nearly sufficient: action purposes and usage boundaries are covered. The gap is that per-action return format and the max_tokens behavior are never described, which matters given the absent output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: every action enum value is glossed, and 'symbols (exact/prefix symbol lookup)' plus 'read (line range)' imply mode, query, start_line, and end_line. Only target and the max_tokens ceiling are left unexplained, so it adds real value over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific read-only verb on a virtual file system and enumerates all six action modes (tree, skeleton, read, symbols, grammar, resolve) with a parenthetical meaning for each. The 'DO NOT USE: to write' clause cleanly separates it from the sibling vfs_mutate. An agent can distinguish purpose without inspecting anything else.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE WHEN' list covers orienting, reading code, fetching folded content, symbol lookup, and grammar inspection; 'DO NOT USE' excludes writing and running tests. This is the strongest form of routing guidance, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vfs_mutateA
Stage a write in the in-RAM Ghost overlay (disk untouched until commit). op=replace_file (default) | replace_node | insert_after | slice_patch | merge_patches (non-overlapping agent patches, unified imports). USE WHEN: applying a speculative code edit. DO NOT USE: for reads, or before causal_flight pre_flight.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | ||
| code | No | ||
| path | Yes | ||
| node_id | No | ||
| patches | No | ||
| agent_id | No | ||
| end_line | No | ||
| start_line | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the staging semantics (in-RAM overlay, disk untouched until commit) and merge_patches constraints (non-overlapping patches, unified imports). It omits what happens after staging — how/whether the overlay is committed, discarded, or rolled back — and any auth or conflict behavior, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Telegraphic and front-loaded: purpose first, then op variants, then when/when-not. Every clause carries information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, 0%-coverage mutation tool with no annotations and no output schema, the description covers purpose, routing, and the op enum but leaves the majority of parameters and the post-staging lifecycle unexplained. Adequate to invoke the common case, incomplete for the full surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description must compensate and largely does not. It lists the op enum values and marks replace_file as default, and gives real semantics only for merge_patches; code, path, node_id, patches, agent_id, start_line and end_line are never explained, leaving most parameters undefined in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Stage a write in the in-RAM Ghost overlay") and immediately distinguishes itself from siblings by naming reads (vfs_inspect territory) and the causal_flight pre_flight step as out of scope. An agent can tell this apart from vfs_inspect and causal_flight without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE WHEN ("applying a speculative code edit") and DO NOT USE ("for reads, or before causal_flight pre_flight") sections name both the condition and the sibling alternative. This is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wiki_task_syncA
Persist task state in .onyxsi/wiki/projects//tasks/TASK-/ (spec, progress, log), render AGENT_HANDOFF.md, and write TIME_TRAVEL_REPLAY.md. op=init|update|handoff|replay. USE WHEN: starting work, checkpointing, handing off. NOT a scratchpad; it writes real files.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| spec | No | ||
| frames | No | ||
| status | No | ||
| task_id | Yes | ||
| branches | No | ||
| project_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that files are actually written, names the target path and the side-artifacts (AGENT_HANDOFF.md, TIME_TRAVEL_REPLAY.md), and warns 'NOT a scratchpad'. It omits permissions, overwrite/reversibility behavior, and failure modes, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and destination, then usage triggers, then the scratchpad caveat. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param mutation tool with no annotations and no output schema, the description tells an agent what gets written and when to call it, which covers the behavioral core. It leaves the majority of parameters (frames, branches, status, spec semantics) undefined, so it is adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 7 params, so the description must compensate and largely does not. The op values (init|update|handoff|replay) merely restate the schema enum, and spec/frames/status/task_id/branches/project_name are never explained — task_id only appears implicitly via 'TASK-<ID>' in the path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Persist) and resource (task state files) plus the exact target directory, artifacts rendered (AGENT_HANDOFF.md, TIME_TRAVEL_REPLAY.md), and the op set. It never names a sibling to distinguish itself from vfs_mutate/graph_compute, only negates a generic 'scratchpad', so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE WHEN: starting work, checkpointing, handing off' gives clear trigger contexts, and 'NOT a scratchpad; it writes real files' bounds when not to treat it casually. No alternative tool is named for those situations, so it is context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
causal_flight - First observed
ghost_sandbox - First observed
graph_compute - First observed
hypothesis_branch - First observed
mcp_orchestrate - First observed
vfs_inspect - First observed
vfs_mutate - First observed
wiki_task_sync
TDQS
Scored across 8 tools
Most tools occupy distinct phases (read, mutate, compute, orchestrate), and descriptions include explicit USE/DO NOT USE boundaries. However, vfs_mutate and ghost_sandbox both stage mutations in the Ghost overlay, and graph_compute overlaps slightly with vfs_inspect for code location, so an agent could confuse those boundaries.
All names use lowercase snake_case without camelCase or inconsistent casing. The structure is not a strict verb_noun pattern; some are domain-prefixed actions (vfs_inspect), others are noun compounds (ghost_sandbox, causal_flight), but it remains readable and predictable.
Eight tools are well-scoped for a speculative coding agent workflow, and each covers a distinct capability area (inspect, mutate, compute, sandbox, flight recorder, hypotheses, task sync, orchestration). No obvious redundancy that bloats the surface.
The set covers the core lifecycle: inspect, search/compute, speculative mutation, sandbox testing/commit/discard, causal tracking, hypothesis falsification, task persistence, and orchestration. Minor gaps exist around direct task query/list/delete or explicit file creation/deletion, but agents can likely work around them via overlay and wiki operations.
Maintenance
Related MCP Connectors
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Hosted MCP memory for coding agents: persistent across sessions, editable markdown, team sharing.
System-of-record notebook for AI coding agents: pages, datastores, tasks, skills over MCP.
Multiple MCP tools, persistent graph memory, token-saving data pointers, and more.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents and hosts to enforce deterministic repository boundaries via MCP, providing structured reads, supervised edits, snapshots, audits, and recovery with machine-readable evidence.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to checkpoint workspace state, branch parallel attempts, inspect diffs, and roll back to known-good states mid-task through MCP tools, with automatic safety checkpoints to prevent data loss.3 npmMIT
- AlicenseAqualityBmaintenanceEnables AI agents to perform software engineering tasks inside an isolated, deterministic sandbox—exploring repositories, reproducing failures, applying patches, running tests, and verifying solutions against hidden suites through MCP tools.8MIT
- AlicenseNot gradedqualityAmaintenanceEnables coding agents to inspect files, search text, compare directories, read symbols, and apply structured edits against large codebases through bounded, local-first MCP tools.4Apache 2.0