> ## Documentation Index
> Fetch the complete documentation index at: https://vietbui.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# omp (oh-my-pi)

> Fork of badlogic/pi-mono by can1357. Positions itself as the batteries-included coding agent: same TypeScript + TUI shell as Pi, but with a ~55k-line Rust na…

# omp (oh-my-pi)

Fork of `badlogic/pi-mono` by `can1357`. Positions itself as the batteries-included coding agent: same TypeScript + TUI shell as Pi, but with a \~55k-line Rust native core and 32 built-in tools. MIT license.

GitHub: [https://github.com/can1357/oh-my-pi](https://github.com/can1357/oh-my-pi)
Docs: [https://omp.sh](https://omp.sh)

Install: `curl -fsSL https://omp.sh/install | sh` · Homebrew · Bun · Windows PowerShell · mise

***

## Why It Diverges From Pi

Pi's thesis: **minimal harness beats feature-heavy harness** (validated by Terminal Bench). omp accepts the data but identifies a different failure class: **tool quality failures** — string-match edits that fail on whitespace drift, missing debugger forcing print-statement debugging, no LSP integration for cross-file renames, fork/exec overhead on every search. omp's answer: replace unreliable primitives with native ones, then add the tools that eliminate entire categories of retry loops.

***

## Tool Surface (32 tools)

### Files & Search

| Tool       | Description                                                                  |
| ---------- | ---------------------------------------------------------------------------- |
| `read`     | Files, dirs, archives, SQLite, PDFs, notebooks, URLs, internal `://` schemes |
| `write`    | File, archive entry, SQLite row                                              |
| `edit`     | Hashline patches (content-hash anchors + stale-anchor rejection)             |
| `ast_edit` | Structural rewrite via ast-grep; preview card → `resolve` to commit          |
| `ast_grep` | Structural code queries, 50+ tree-sitter grammars                            |
| `search`   | Regex over files, globs, internal URLs                                       |
| `find`     | Glob path lookup                                                             |

### Runtime

| Tool   | Description                                                        |
| ------ | ------------------------------------------------------------------ |
| `bash` | Workspace shell; optional PTY or background jobs                   |
| `eval` | Persistent Python + Bun kernels; tool re-entry via loopback bridge |
| `ssh`  | One remote command against configured host                         |

### Code Intelligence

| Tool    | Description                                                           |
| ------- | --------------------------------------------------------------------- |
| `lsp`   | Diagnostics, navigation, symbols, renames, code actions, raw requests |
| `debug` | DAP sessions — breakpoints, stepping, threads, stack, variables       |

### Coordination

| Tool   | Description                                                 |
| ------ | ----------------------------------------------------------- |
| `task` | Fan-out subagents; worktree isolation; typed schema results |
| `irc`  | Short prose between live agents in-process                  |
| `todo` | Ordered mutations over session todo list                    |
| `job`  | Wait/cancel background jobs                                 |
| `ask`  | Structured option picker for interactive runs               |

### Outside the Box

| Tool             | Description                                                                      |
| ---------------- | -------------------------------------------------------------------------------- |
| `browser`        | Puppeteer/CDP; headless Chromium; stealth on by default; can drive Electron apps |
| `web_search`     | 14 providers; specialized handlers (GitHub, npm, arxiv, CVEs, forums, docs)      |
| `github`         | GitHub CLI ops; PR/issues/code search/Actions                                    |
| `generate_image` | Via Gemini/GPT-image/Grok                                                        |
| `inspect_image`  | Vision-model analysis                                                            |
| `tts`            | Text-to-speech via xAI Grok Voice                                                |

### Memory & State

| Tool         | Description                                    |
| ------------ | ---------------------------------------------- |
| `checkpoint` | Mark conversation state for later collapse     |
| `rewind`     | Prune exploratory context, keep concise report |
| `retain`     | Queue durable facts into Hindsight bank        |
| `recall`     | Search Hindsight bank                          |
| `reflect`    | Synthesize answer over Hindsight bank          |

### Misc

| Tool               | Description                                                    |
| ------------------ | -------------------------------------------------------------- |
| `resolve`          | Apply or discard a queued preview action                       |
| `search_tool_bm25` | BM25 over hidden tool index; activates top matches mid-session |

***

## Differentiating Primitives

### Hashline Edit Format

Content-hash anchors replace string matching. Stale anchors (file changed since read) are rejected before corruption. 61% fewer output tokens on Grok 4 Fast. 2.1× pass rate lift on MiniMax. +5pp over str\_replace on Gemini 3 Flash.

### LSP Wired Into Writes

Every write goes through `workspace/willRenameFiles`. Re-exports, barrel files, aliased imports update before the file moves. No post-rename breakage without IDE.

### Time-Traveling Stream Rules (TTSR)

Regex match aborts mid-token stream → injects rule as system reminder → retries from same point. No full-context tax. Injections survive compaction. Qualitatively different from PreToolUse hooks: fires mid-stream, not between turns.

### DAP Debugger

Drives lldb (C/C++/Rust), dlv (Go), debugpy (Python) via DAP protocol. Attach, step, inspect frame. Not a REPL workaround.

### Task (First-Class Subagents)

Worktree-isolated workers with typed schema-validated return objects. `irc` enables in-process inter-agent prose. No prose parsing of subagent output.

### Eval Kernels

Persistent Python + Bun cells that share a prelude and can call back into agent tools. Multi-kernel, multi-cell within one session.

### Conflict Resolution Scheme

`conflict://N` URL → write `@theirs`/`@ours`/`@base` → file resolves atomically. `conflict://*` for bulk.

### Preview/Accept Workflow

`ast_edit` returns a staged "(proposed)" card. Agent calls `resolve` to commit atomically. Structural rewrites have a gate between proposal and application.

### Hindsight Memory

SQLite memory engine, project-scoped. `retain` (write) / `recall` (search) / `reflect` (synthesize). Survives sessions. Qualitatively different from manually maintained MEMORY.md.

### Snapcompact

Bitmap-frame context compression — distinct from summarization-based compaction. Renders discarded conversation history into dense PNG frames of pixel-font glyphs that vision models read back directly. Local and deterministic — no LLM call, no API key.

**Key detail for tool outputs:** snapcompact already truncates tool results during archival compaction:

* Default cap: **2000 chars** per tool result (`toolResultMaxChars`)
* Head/tail truncation with 60/40 split (`truncateHeadRatio`)
* "Useless" tool results skipped entirely
* Tool arguments capped at 500 chars per value, 2000 chars per call

This is **conversation-level** archival compression (old turns → PNG frames). It complements but does not replace per-turn tool output truncation. See Omp Snapcompact Rpc for full research.

***

## Native Rust Core (\~55k LoC)

In-process on libuv thread pool. No fork/exec on hot path.

| Module    | What                                                            |
| --------- | --------------------------------------------------------------- |
| shell     | Embedded bash (brush-vendored); persistent sessions             |
| grep      | Parallel regex; glob + type filters; fuzzy find                 |
| summary   | Tree-sitter structural summaries                                |
| ast       | ast-grep pattern matching and structural rewrites               |
| glob      | Discovery; gitignore-aware                                      |
| highlight | Syntax highlighting; 30+ aliases                                |
| pty       | Native PTY for sudo/ssh                                         |
| iso       | Workspace isolation: APFS/btrfs/zfs reflinks, overlayfs, projfs |
| tokens    | O200k/Cl100k BPE counting, tables embedded                      |
| sixel     | Terminal image: PNG/JPEG/WebP/GIF → SIXEL                       |

***

## Provider Surface (40+)

Roles: `default`, `smol` (cheap fan-out), `slow` (deep reasoning), `plan`, `commit`. Cycle with `Ctrl+P`, swap mid-session with `/model`.

Features: fallback chains per role, path-scoped model overrides (different model set per repo prefix), round-robin credential rotation with per-key backoff.

Notable: Cursor (oauth), GitHub Copilot (oauth), Kimi Code, MiniMax Coding Plan, Alibaba Coding Plan, Qwen Portal, Xiaomi MiMo — plus all OpenAI-compatible local servers (Ollama, LM Studio, llama.cpp, vLLM, LiteLLM).

***

## Config Inheritance

Inherits from `.claude`, `.cursor`, `.windsurf`, `.gemini`, `.codex`, `.cline`, `.github/copilot`, `.vscode` on first run. Existing rules, skills, MCP servers carry over without migration.

***

## Entry Points

| Mode            | Command                     | Use Case                                                      |
| --------------- | --------------------------- | ------------------------------------------------------------- |
| Interactive TUI | `omp`                       | Daily coding sessions                                         |
| One-shot        | `omp -p "..."`              | CI, quick tasks                                               |
| Node/TS SDK     | `@oh-my-pi/pi-coding-agent` | Embedding in Node apps                                        |
| NDJSON RPC      | `omp --mode rpc`            | **Headless automation, bus integration, polyglot host tools** |
| ACP (Zed)       | `omp acp`                   | Editor integration                                            |

### RPC Mode (Deep Dive)

`omp --mode rpc` is a JSON-lines protocol: commands on stdin, responses/events on stdout.

**Key capabilities for bus integration:**

* `set_host_tools` — register host-side tools that the agent can call (language-agnostic: Python, Rust, Go, bash)
* `set_host_uri_schemes` — custom URI schemes (e.g., `commandr://events.jsonl`)
* `host_tool_call` / `host_tool_result` — bidirectional structured RPC
* `extension_ui_request` — agent requests UI: selector, confirm, input, OAuth
* `subagent_lifecycle` / `subagent_progress` / `subagent_event` — native subagent monitoring
* Real-time event streaming: `message_update`, `tool_execution_*`, `agent_start`/`agent_end`

**Why it matters for Commandr:** RPC mode enables Level 2+ integration without writing TypeScript plugins. The host (commandr-omp-runner) can be any language — it just speaks JSON lines. See Omp Snapcompact Rpc for full protocol research.

**RPC vs MCP:**

| Dimension | RPC mode                      | MCP               |
| --------- | ----------------------------- | ----------------- |
| Transport | stdin/stdout JSON lines       | stdio or HTTP/SSE |
| Scope     | Full agent lifecycle + UI     | Tools only        |
| Direction | Bidirectional commands+events | Request/response  |
| Session   | Stateful                      | Stateless         |
| Subagents | Native monitoring             | Not applicable    |

***

## Plugin Architecture

omp bundles skills, commands, hooks, custom tools, MCP servers, and themes in a single installable package. The surface is Claude-Code-compatible — existing `.claude-plugin/` catalogs work as-is.

| Piece        | Discovery                           | What it does                                                       |
| ------------ | ----------------------------------- | ------------------------------------------------------------------ |
| Hooks        | `hooks/pre/*.ts`, `hooks/post/*.ts` | Intercept `tool_call`, `tool_result`, `context`, session lifecycle |
| Custom Tools | `tools/<name>/index.ts`             | Register new tools with Zod/TypeBox schemas                        |
| Skills       | `skills/<name>/SKILL.md`            | On-demand markdown playbooks                                       |
| Commands     | `commands/<name>.md`                | Slash-command prompt templates                                     |
| MCP          | `mcp.json`                          | Extra `mcpServers` entries                                         |

Install: `omp install ./path` (symlinks + watches), `omp install github:user/repo`, `omp install @scope/plugin`. Project-scoped with `-l`.

### Headroom Compression Plugin (Local)

A working example lives at `pi-headroom/` in this repo:

* **`hooks/pre/headroom-compress.ts`** — `tool_result` hook that compresses or truncates large tool outputs before the model sees them using `headroom-ai`
* **`tools/headroom-retrieve/index.ts`** — custom tool that lets the model fetch original uncompressed content on demand

Install:

```bash theme={null}
cd pi-headroom && npm install
omp install ./pi-headroom
```

**Tested on omp v16.0.9:**

| Feature                       | Status                                                                    |
| ----------------------------- | ------------------------------------------------------------------------- |
| `tool_result` hook            | ✅ Fires and modifies content the model sees                               |
| `headroom_retrieve` tool      | ✅ Registered and callable                                                 |
| `context` hook `{ messages }` | ❌ Return contract ignored in v16.0.9                                      |
| Headroom compression          | ⚠️ Requires proxy passthrough or cloud API key; fallback truncation works |

The plugin uses `tool_result` instead of `context` because omp 16.0.9 does not support message-array replacement via `context` hook returns. This still covers the bulk of token bloat (tool outputs). See `pi-headroom/README.md` for full test results and configuration.

## Role in Commandr Stack

omp is the strongest practical L2 runner candidate: a high-quality worker, not the bus. Its value is execution quality inside a task: hashline edits, LSP/DAP, typed subagent outputs, internal schemes, persistent eval kernels, and provider routing. [Commandr](/entities/commandr) should still own claim/progress/approval/complete lifecycle.

Integration ladder:

| Level | Shape                                                                                                                        |
| ----- | ---------------------------------------------------------------------------------------------------------------------------- |
| 0     | `omp -p "<task packet>"` subprocess; Tauri captures stdout/stderr                                                            |
| 1     | `commandr-omp-runner` wrapper claims next packet, creates workspace, runs omp, streams logs, emits progress, completes/fails |
| 2     | omp custom tools for Commandr: progress, request approval, emit artifact, complete                                           |
| 3     | omp plugin intercepts tool calls/events and writes turn snapshots/approval requests directly                                 |

Level 1 is complete with `commandr-omp-runner` (see `commandr-omp-runner/` in this repo). Level 2 becomes useful once task/event/approval schemas stabilize. Level 3 (plugin-based bidirectional sync) is where the headroom plugin pattern also lives — a plugin can both intercept context and register tools that talk back to Commandr's bus.

***

## Internal Schemes (`://`)

`pr://`, `issue://`, `agent://`, `skill://`, `rule://` and others resolve through the same FS-shaped tools. `read pr://owner/repo/1428` returns the same shape as `read src/foo.ts`. `agent://<id>/findings.0.path` extracts a field from subagent output.

***

## Monorepo Packages (omp-specific additions)

| Package                     | Purpose                                        |
| --------------------------- | ---------------------------------------------- |
| `@oh-my-pi/pi-natives`      | Rust N-API addon aggregating all native crates |
| `@oh-my-pi/pi-mnemopi`      | Hindsight SQLite memory engine                 |
| `@oh-my-pi/snapcompact`     | Bitmap-frame context compression               |
| `@oh-my-pi/hashline`        | Hashline patch format and applier              |
| `@oh-my-pi/swarm-extension` | Swarm orchestration extension                  |
| `@oh-my-pi/collab-web`      | Browser guest client for collab live sessions  |
| `@oh-my-pi/omp-stats`       | Local observability dashboard                  |

***

## Related Pages

* [Pi Agent (pi-mono)](/entities/pi-agent) — upstream fork; minimal harness design; Terminal Bench data
* Omp Oh My Pi — full source summary
* [Our Stack vs omp](/comparisons/our-stack-vs-omp) — feature gap vs our Claude Code + Pi setup
* [Commandr](/entities/commandr) — L3 bus omp should speak through
* [DiffViewer](/entities/diffviewer) — L5 UI consuming omp artifacts through Commandr/DiffViewer sidecars
* [Agent Harness](/concepts/agent-harness) — harness engineering framing
* [Claude Code vs OpenCode Plugin Systems](/comparisons/claude-code-vs-opencode-plugins) — adjacent harness comparison

<iframe
  srcDoc="<!doctype html><html><head><meta charset=&#x22;utf-8&#x22;><style>
html,body{margin:0;height:100%;background:#0f1117;overflow:hidden;font-family:ui-sans-serif,system-ui,-apple-system,sans-serif}
#g{width:100%;height:100%}
#hd{position:absolute;top:0;left:0;right:30px;height:22px;display:flex;align-items:center;gap:6px;padding:0 10px;color:#aeb3c2;font-size:10px;letter-spacing:.08em;text-transform:uppercase;z-index:6;cursor:move;user-select:none;touch-action:none;background:linear-gradient(#0f1117cc,#0f111700)}
#gear{position:absolute;top:5px;right:7px;z-index:7;cursor:pointer;color:#aeb3c2;background:#1b1e27;border:1px solid #2b2f3a;border-radius:6px;width:22px;height:22px;display:flex;align-items:center;justify-content:center;font-size:12px;user-select:none}
#panel{position:absolute;top:31px;right:7px;z-index:7;background:rgba(22,25,34,.96);border:1px solid #2b2f3a;border-radius:8px;padding:6px 9px 9px;display:none;width:150px;color:#c9cdd8;font-size:10px}
#panel.open{display:block}
#panel label{display:flex;justify-content:space-between;margin:7px 0 1px;color:#9aa0b0}
#panel input[type=range]{width:100%;margin:0}
#panel .row{display:flex;align-items:center;gap:6px;margin-top:8px;color:#c9cdd8}
</style><script src=&#x22;https://cdn.jsdelivr.net/npm/force-graph@1.51.4/dist/force-graph.min.js&#x22; integrity=&#x22;sha384-Hm6GpQcTNI5VqGgGS7lLxTGtEFcxu/kOVV0B7ozIZRu9blWVvigv5httJQZ2qZmY&#x22; crossorigin=&#x22;anonymous&#x22;></script></head>
<body><div id=&#x22;hd&#x22;>Graph</div><div id=&#x22;gear&#x22;>⚙</div>
<div id=&#x22;panel&#x22;>
<label>Node size<span id=&#x22;vns&#x22;></span></label><input id=&#x22;ns&#x22; type=&#x22;range&#x22; min=&#x22;0.6&#x22; max=&#x22;6&#x22; step=&#x22;0.2&#x22;>
<label>Link width<span id=&#x22;vlw&#x22;></span></label><input id=&#x22;lw&#x22; type=&#x22;range&#x22; min=&#x22;0&#x22; max=&#x22;3&#x22; step=&#x22;0.1&#x22;>
<label>Label size<span id=&#x22;vts&#x22;></span></label><input id=&#x22;ts&#x22; type=&#x22;range&#x22; min=&#x22;0&#x22; max=&#x22;8&#x22; step=&#x22;0.5&#x22;>
<label>Label opacity<span id=&#x22;vto&#x22;></span></label><input id=&#x22;to&#x22; type=&#x22;range&#x22; min=&#x22;0&#x22; max=&#x22;1&#x22; step=&#x22;0.05&#x22;>
<div id=&#x22;depthRow&#x22;><label>Depth<span id=&#x22;vd&#x22;></span></label><input id=&#x22;dp&#x22; type=&#x22;range&#x22; min=&#x22;1&#x22; max=&#x22;5&#x22; step=&#x22;1&#x22;></div>
<div class=&#x22;row&#x22;><input id=&#x22;ar&#x22; type=&#x22;checkbox&#x22;><span>Directional arrows</span></div>
</div>
<div id=&#x22;g&#x22;></div>
<script>
const NODES=[{&#x22;id&#x22;:&#x22;entities/omp&#x22;,&#x22;label&#x22;:&#x22;omp (oh-my-pi)&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;label&#x22;:&#x22;Agent Harness&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:7.48074069840786},{&#x22;id&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;label&#x22;:&#x22;Pi Agent (pi-mono)&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:5.123105625617661},{&#x22;id&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;label&#x22;:&#x22;Desktop AI Agent Control Plane — Architecture Synthesis&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:4.60555127546399},{&#x22;id&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;label&#x22;:&#x22;Control Plane Expansion Plan — Gap Analysis and Phase 0.5 Roadmap&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:4.3166247903554},{&#x22;id&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;label&#x22;:&#x22;Our Stack vs omp&#x22;,&#x22;group&#x22;:&#x22;comparisons&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;entities/commandr&#x22;,&#x22;label&#x22;:&#x22;Commandr&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;,&#x22;label&#x22;:&#x22;Claude Code vs OpenCode Plugin Systems&#x22;,&#x22;group&#x22;:&#x22;comparisons&#x22;,&#x22;val&#x22;:3.8284271247461903},{&#x22;id&#x22;:&#x22;entities/diffviewer&#x22;,&#x22;label&#x22;:&#x22;DiffViewer&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.6457513110645907},{&#x22;id&#x22;:&#x22;concepts/lsp-agent-baseline&#x22;,&#x22;label&#x22;:&#x22;LSP as Agent Baseline&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:2.732050807568877},{&#x22;id&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;label&#x22;:&#x22;Context Compression Strategies&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:6.0990195135927845},{&#x22;id&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;label&#x22;:&#x22;Lean Agentic Coding Workflow&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:5.795831523312719},{&#x22;id&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;label&#x22;:&#x22;Agent Skills&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:5.795831523312719},{&#x22;id&#x22;:&#x22;entities/opencode&#x22;,&#x22;label&#x22;:&#x22;OpenCode&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:5.358898943540674},{&#x22;id&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;label&#x22;:&#x22;Agent Self-Correction&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:5.358898943540674},{&#x22;id&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;label&#x22;:&#x22;Verification Pipeline&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:5.358898943540674},{&#x22;id&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;label&#x22;:&#x22;Multi-Vendor Adversarial Review&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.872983346207417},{&#x22;id&#x22;:&#x22;concepts/ralph-loop&#x22;,&#x22;label&#x22;:&#x22;Ralph Loop&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.872983346207417},{&#x22;id&#x22;:&#x22;concepts/agent-context-instructions&#x22;,&#x22;label&#x22;:&#x22;Agent Context Instructions&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.872983346207417},{&#x22;id&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;label&#x22;:&#x22;Agent Subagents&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.741657386773941},{&#x22;id&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;label&#x22;:&#x22;Worktree Isolation&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.60555127546399},{&#x22;id&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;label&#x22;:&#x22;Agentic CI/CD&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.60555127546399},{&#x22;id&#x22;:&#x22;concepts/context-degradation&#x22;,&#x22;label&#x22;:&#x22;Context Degradation Patterns&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.60555127546399},{&#x22;id&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;label&#x22;:&#x22;Agentic Sandbox Controls&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.464101615137754},{&#x22;id&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;label&#x22;:&#x22;Context Engineering&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.464101615137754},{&#x22;id&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;label&#x22;:&#x22;Agent Primitive Selection&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:4.464101615137754},{&#x22;id&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;label&#x22;:&#x22;AI and ML Engineering&#x22;,&#x22;group&#x22;:&#x22;systems&#x22;,&#x22;val&#x22;:4.3166247903554},{&#x22;id&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;label&#x22;:&#x22;Spec-Driven Frameworks vs Native Claude Code&#x22;,&#x22;group&#x22;:&#x22;comparisons&#x22;,&#x22;val&#x22;:4.3166247903554},{&#x22;id&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;label&#x22;:&#x22;Agent Teams&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;concepts/tool-design-for-agents&#x22;,&#x22;label&#x22;:&#x22;Tool Design for Agents&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;label&#x22;:&#x22;Self-Healing Loop&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;entities/dangeresque&#x22;,&#x22;label&#x22;:&#x22;Dangeresque&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;label&#x22;:&#x22;SandCastle&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;concepts/council-pattern&#x22;,&#x22;label&#x22;:&#x22;Council Pattern&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;concepts/shared-task-queue&#x22;,&#x22;label&#x22;:&#x22;Shared Task Queue (Cross-Worktree)&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;concepts/rules-vs-hooks&#x22;,&#x22;label&#x22;:&#x22;Rules vs. Hooks&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;label&#x22;:&#x22;Branch Strategy for Agents&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.8284271247461903},{&#x22;id&#x22;:&#x22;entities/agent-native&#x22;,&#x22;label&#x22;:&#x22;Agent-Native&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.6457513110645907},{&#x22;id&#x22;:&#x22;concepts/model-tier-routing&#x22;,&#x22;label&#x22;:&#x22;Model Tier Routing&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.6457513110645907},{&#x22;id&#x22;:&#x22;syntheses/pi-orchestration-architecture&#x22;,&#x22;label&#x22;:&#x22;Pi Orchestration Architecture&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;entities/ponytail&#x22;,&#x22;label&#x22;:&#x22;Ponytail&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;concepts/deep-modules&#x22;,&#x22;label&#x22;:&#x22;Deep Modules&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;entities/everything-claude-code&#x22;,&#x22;label&#x22;:&#x22;Everything Claude Code (ECC)&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;,&#x22;label&#x22;:&#x22;Agent Diff Viewer — Real-Time Code Review Tool&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:3.23606797749979}],LINKS=[{&#x22;source&#x22;:&#x22;concepts/agent-context-instructions&#x22;,&#x22;target&#x22;:&#x22;concepts/rules-vs-hooks&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/tool-design-for-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/model-tier-routing&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/context-engineering&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/rules-vs-hooks&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/model-tier-routing&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-teams&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-teams&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/shared-task-queue&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;entities/dangeresque&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;entities/dangeresque&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;target&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;target&#x22;:&#x22;entities/everything-claude-code&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-degradation&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-degradation&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-degradation&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/tool-design-for-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/council-pattern&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/council-pattern&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;concepts/council-pattern&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/deep-modules&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/deep-modules&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/lsp-agent-baseline&#x22;,&#x22;target&#x22;:&#x22;entities/omp&#x22;},{&#x22;source&#x22;:&#x22;concepts/model-tier-routing&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/model-tier-routing&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/model-tier-routing&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-self-correction&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;entities/dangeresque&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;concepts/council-pattern&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/ralph-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/rules-vs-hooks&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/rules-vs-hooks&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-self-correction&#x22;},{&#x22;source&#x22;:&#x22;concepts/rules-vs-hooks&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;concepts/shared-task-queue&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;concepts/shared-task-queue&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;concepts/shared-task-queue&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/shared-task-queue&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;concepts/tool-design-for-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;entities/dangeresque&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/shared-task-queue&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/context-engineering&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-teams&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;,&#x22;target&#x22;:&#x22;entities/diffviewer&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;,&#x22;target&#x22;:&#x22;syntheses/desktop-control-plane&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;,&#x22;target&#x22;:&#x22;concepts/tool-design-for-agents&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-teams&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/council-pattern&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;entities/agent-native&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;entities/omp&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/shared-task-queue&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-teams&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/rules-vs-hooks&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;entities/commandr&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;entities/diffviewer&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;entities/omp&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;entities/agent-native&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;concepts/lsp-agent-baseline&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;syntheses/desktop-control-plane&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;entities/dangeresque&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/council-pattern&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-self-correction&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/rules-vs-hooks&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;},{&#x22;source&#x22;:&#x22;syntheses/pi-orchestration-architecture&#x22;,&#x22;target&#x22;:&#x22;concepts/shared-task-queue&#x22;},{&#x22;source&#x22;:&#x22;syntheses/pi-orchestration-architecture&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;syntheses/pi-orchestration-architecture&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;syntheses/pi-orchestration-architecture&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;syntheses/pi-orchestration-architecture&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;target&#x22;:&#x22;entities/commandr&#x22;},{&#x22;source&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;target&#x22;:&#x22;entities/omp&#x22;},{&#x22;source&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;target&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;},{&#x22;source&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;concepts/rules-vs-hooks&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;entities/dangeresque&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;comparisons/spec-driven-frameworks-vs-native&#x22;,&#x22;target&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;},{&#x22;source&#x22;:&#x22;entities/agent-native&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/agent-native&#x22;,&#x22;target&#x22;:&#x22;concepts/tool-design-for-agents&#x22;},{&#x22;source&#x22;:&#x22;entities/agent-native&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;entities/commandr&#x22;,&#x22;target&#x22;:&#x22;syntheses/desktop-control-plane&#x22;},{&#x22;source&#x22;:&#x22;entities/commandr&#x22;,&#x22;target&#x22;:&#x22;entities/agent-native&#x22;},{&#x22;source&#x22;:&#x22;entities/commandr&#x22;,&#x22;target&#x22;:&#x22;entities/omp&#x22;},{&#x22;source&#x22;:&#x22;entities/commandr&#x22;,&#x22;target&#x22;:&#x22;entities/diffviewer&#x22;},{&#x22;source&#x22;:&#x22;entities/commandr&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;entities/commandr&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/commandr&#x22;,&#x22;target&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;},{&#x22;source&#x22;:&#x22;entities/dangeresque&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;entities/dangeresque&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;entities/dangeresque&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;entities/dangeresque&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/dangeresque&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;entities/dangeresque&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;entities/diffviewer&#x22;,&#x22;target&#x22;:&#x22;syntheses/desktop-control-plane&#x22;},{&#x22;source&#x22;:&#x22;entities/diffviewer&#x22;,&#x22;target&#x22;:&#x22;entities/commandr&#x22;},{&#x22;source&#x22;:&#x22;entities/diffviewer&#x22;,&#x22;target&#x22;:&#x22;entities/omp&#x22;},{&#x22;source&#x22;:&#x22;entities/diffviewer&#x22;,&#x22;target&#x22;:&#x22;entities/agent-native&#x22;},{&#x22;source&#x22;:&#x22;entities/diffviewer&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-diff-viewer&#x22;},{&#x22;source&#x22;:&#x22;entities/diffviewer&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/everything-claude-code&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/everything-claude-code&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;entities/omp&#x22;,&#x22;target&#x22;:&#x22;entities/commandr&#x22;},{&#x22;source&#x22;:&#x22;entities/omp&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;entities/omp&#x22;,&#x22;target&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;},{&#x22;source&#x22;:&#x22;entities/omp&#x22;,&#x22;target&#x22;:&#x22;entities/diffviewer&#x22;},{&#x22;source&#x22;:&#x22;entities/omp&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/omp&#x22;,&#x22;target&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;},{&#x22;source&#x22;:&#x22;entities/opencode&#x22;,&#x22;target&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;},{&#x22;source&#x22;:&#x22;entities/opencode&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;entities/opencode&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;entities/omp&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;comparisons/our-stack-vs-omp&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;concepts/model-tier-routing&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;comparisons/claude-code-vs-opencode-plugins&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-self-correction&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;entities/dangeresque&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;}],CUR=&#x22;entities/omp&#x22;,MAXD=3;
const C={concepts:'#8B7CF6',patterns:'#0D9373',systems:'#E0567C',syntheses:'#E2A03F',comparisons:'#3B82F6',entities:'#14B8A6',guides:'#9CA3AF'};
function lid(x){return (x&&x.id!==undefined)?x.id:x;}
const ADJ=new Map(NODES.map(function(n){return [n.id,new Set()];}));
LINKS.forEach(function(l){var s=lid(l.source),t=lid(l.target);if(ADJ.has(s)&&ADJ.has(t)){ADJ.get(s).add(t);ADJ.get(t).add(s);}});
var opt={ns:1.8,lw:0.6,ts:3.5,to:0.75,dp:2,ar:false};
function visible(){
if(!CUR)return {nodes:NODES,links:LINKS};
var dist=new Map([[CUR,0]]),fr=[CUR];
for(var d=1;d<=opt.dp;d++){var nx=[];fr.forEach(function(u){(ADJ.get(u)||[]).forEach(function(v){if(!dist.has(v)){dist.set(v,d);nx.push(v);}});});fr=nx;}
var keep=new Set(dist.keys());
return {nodes:NODES.filter(function(n){return keep.has(n.id);}),links:LINKS.filter(function(l){return keep.has(lid(l.source))&&keep.has(lid(l.target));})};
}
var el=document.getElementById('g');
var G=ForceGraph()(el).backgroundColor('#0f1117').nodeId('id')
.warmupTicks(24).cooldownTicks(70).autoPauseRedraw(true)
.nodeColor(function(n){return C[n.group]||'#9CA3AF';}).nodeLabel('label').nodeVal(function(n){return n.val;})
.linkColor(function(){return 'rgba(255,255,255,0.12)';})
.nodeRelSize(opt.ns).linkWidth(opt.lw)
.linkDirectionalArrowLength(0).linkDirectionalArrowRelPos(1).linkDirectionalArrowColor(function(){return 'rgba(255,255,255,0.4)';})
.nodeCanvasObjectMode(function(){return 'after';})
.nodeCanvasObject(function(n,ctx,scale){var r=opt.ns*Math.sqrt(n.val||1);
if(n.id===CUR){ctx.beginPath();ctx.arc(n.x,n.y,r+1.6,0,6.283);ctx.strokeStyle='#fff';ctx.lineWidth=1.2/scale;ctx.stroke();}
if(opt.to>0&&opt.ts>0){var t=n.label.length>28?n.label.slice(0,26)+'…':n.label;ctx.globalAlpha=opt.to;ctx.font=((n.id===CUR?opt.ts+1:opt.ts))+'px ui-sans-serif,sans-serif';ctx.fillStyle=(n.id===CUR)?'#ffffff':'#aab0c0';ctx.textAlign='center';ctx.textBaseline='top';ctx.fillText(t,n.x,n.y+r+1.5);ctx.globalAlpha=1;}})
.onNodeClick(function(n){if(window.top){window.top.location.href='/'+n.id;}});
G.graphData(visible());G.d3VelocityDecay(0.4);
function fit(){G.zoomToFit(400,20);}
setTimeout(fit,350);setTimeout(fit,1100);
// Stop the render/sim loop while idle so the fixed widget never repaints during
// parent-page scroll; resume only while the pointer is over the widget.
var pt;function pause(){G.pauseAnimation();}function resume(){G.resumeAnimation();}
function idle(ms){clearTimeout(pt);pt=setTimeout(pause,ms);}
document.body.addEventListener('pointerenter',function(){clearTimeout(pt);resume();});
document.body.addEventListener('pointerleave',function(){idle(250);});
addEventListener('resize',function(){resume();G.zoomToFit(0,20);idle(700);});
idle(2000);
function apply(re){resume();G.nodeRelSize(opt.ns).linkWidth(opt.lw).linkDirectionalArrowLength(opt.ar?2.6:0);if(re){G.graphData(visible());setTimeout(fit,450);}idle(re?2200:1400);}
function bind(id,key,fmt,re){var e=document.getElementById(id),o=document.getElementById('v'+id);e.value=opt[key];if(o)o.textContent=fmt(opt[key]);e.addEventListener('input',function(){opt[key]=parseFloat(e.value);if(o)o.textContent=fmt(opt[key]);apply(re);});}
bind('ns','ns',function(v){return v.toFixed(1);},false);
bind('lw','lw',function(v){return v.toFixed(1);},false);
bind('ts','ts',function(v){return v.toFixed(1);},false);
bind('to','to',function(v){return v.toFixed(2);},false);
var dE=document.getElementById('dp'),dO=document.getElementById('vd');dE.max=MAXD;dE.value=opt.dp;dO.textContent=opt.dp;dE.addEventListener('input',function(){opt.dp=parseInt(dE.value,10);dO.textContent=opt.dp;apply(true);});
if(!CUR)document.getElementById('depthRow').style.display='none';
var aE=document.getElementById('ar');aE.checked=opt.ar;aE.addEventListener('change',function(){opt.ar=aE.checked;apply(false);});
document.getElementById('gear').addEventListener('click',function(){document.getElementById('panel').classList.toggle('open');});
var hd=document.getElementById('hd');hd.textContent='⠿  '+(CUR?'Local graph':'Knowledge graph');
// free-form placement: drag by the header. Default is bottom-right (inline style);
// a moved position is saved per parent-origin and restored on every page.
function clampPos(fe,l,t){var TW=(window.top||window),r=fe.getBoundingClientRect();return [Math.min(Math.max(0,l),Math.max(0,TW.innerWidth-r.width)),Math.min(Math.max(0,t),Math.max(0,TW.innerHeight-r.height))];}
function place(fe,l,t){var p=clampPos(fe,l,t);fe.style.left=p[0]+'px';fe.style.top=p[1]+'px';fe.style.right='auto';fe.style.bottom='auto';}
try{var sp=JSON.parse(localStorage.getItem('llmwiki_graph_pos'));if(sp&&window.frameElement)place(window.frameElement,sp.l,sp.t);}catch(e){if(window.console)console.debug('graph: saved position unavailable',e);}
hd.addEventListener('pointerdown',function(e){var fe=window.frameElement;if(!fe)return;var rect=fe.getBoundingClientRect();var sx=e.screenX,sy=e.screenY,L=rect.left,T=rect.top;place(fe,L,T);hd.setPointerCapture(e.pointerId);
function mv(ev){place(fe,L+ev.screenX-sx,T+ev.screenY-sy);}
function up(){if(hd.hasPointerCapture(e.pointerId))hd.releasePointerCapture(e.pointerId);hd.removeEventListener('pointermove',mv);hd.removeEventListener('pointerup',up);try{localStorage.setItem('llmwiki_graph_pos',JSON.stringify({l:parseFloat(fe.style.left),t:parseFloat(fe.style.top)}));}catch(e2){if(window.console)console.debug('graph: could not persist position',e2);}}
hd.addEventListener('pointermove',mv);hd.addEventListener('pointerup',up);e.preventDefault();});
</script></body></html>"
  title="Knowledge graph"
  loading="lazy"
  style={{position:"fixed",right:"18px",bottom:"18px",width:"320px",height:"340px",border:0,borderRadius:"14px",boxShadow:"0 6px 28px rgba(0,0,0,0.38)",zIndex:50,background:"#0f1117"}}
/>
