💡
Status
Six packages shipped (~4.2k LOC core). Priority is high-value, low-coupling features that fit the Extension API cleanly.
Full feature comparison of oh-my-pi (omp) vs piex, grounded in the pi Extension API—identify extractable candidates and set priorities.
Label legend
Each feature is tagged on two axes:
| Axis | Tag | Meaning | Exclusive |
| L1 | 🆕 New capability | Pi lacks it; piex introduces it | ✅ |
| L1 | ➕ Enhancement | Pi has a base; piex significantly upgrades/replaces | ✅ |
| L1 | 🔧 Platform adapt | Pure engineering bridge; semantics unchanged | ✅ |
| L2 | 📈 Metric-driven | Value is measurable (accuracy, tokens, latency, success) | ❌ |
| L2 | ✨ UX-driven | Interaction / presentation (errors, progress, layout) | ❌ |
L1 tags are exclusive (exactly one). L2 tags are optional and stack with L1.
Progress overview
P0 — done
| # | Package | L1 | L2 | Feature | Source | LOC |
| 1 | hashline | ➕ Enhancement | 📈 metrics (accuracy↑ tokens↓) | hashline edit (overrides edit) | omp | 318 |
| 2 | dap | 🆕 New | — | DAP debug — 14 adapters | omp | 2154 |
| 3 | lsp | 🆕 New | — | LSP — ~50 default servers | omp | 1069 |
| 4 | plan | 🆕 New | ✨ UX (step approval, tool lock) | Plan Mode (/plan + workflow) | omp | 348 |
| 5 | review | 🆕 New | — | Code review (/review + tool, light) | omp | 330 |
| 6 |
init |
🆕 New |
✨ UX |
/init guided AGENTS.md create/improve (prompt-only package) |
OpenCode |
— |
| 7 | theme-dark-terminal | 🆕 New | ✨ UX | Dark high-contrast terminal theme | opencode-themes | — |
7+ packages migrated (incl. xai-oauth), ~4219 LOC of core. Multi-agent review is TBD (needs subagent).
Distribution
| L1 | Tier 1 | Tier 2 | Tier 3 | Done | Total |
| 🆕 New | 10 | 11 | 9 | 4 | 34 |
| ➕ Enhancement | 7 | 5 | 1 | 1 | 14 |
| 🔧 Platform | 0 | 0 | 0 | 1 | 1 |
| Total | 17 | 16 | 10 | 6 | 49 |
OMP migration analysis
Tier 1 — high feasibility (native Extension API, high independence)
| # | Candidate | Feature | L1 | L2 | Description |
| 6 | todo | Todo tool + /todo | 🆕 | ✨ structured tasks | Agent-callable todos: CRUD, phases, done/drop |
| 7 | conflict | Conflict resolution | 🆕 | 📈 fewer merge errors | conflict://N scheme, @ours/@theirs/@base markers |
| 8 | ast-grep | AST structural search | 🆕 | 📈 more precise than regex | 50+ tree-sitter grammars via ast-grep-core |
| 9 | ast-edit | AST structural edit | 🆕 | 📈 precise edit, fewer tokens | rewrite → preview → accept |
| 10 | glob | File find | ➕ | — | Glob path search, gitignore-aware (Pi has find) |
| 11 | ask | Structured questions | 🆕 | ✨ structured picks | Option picker via interactive UI |
| 12 | eval | Eval runtime | 🆕 | 📈 persistent env | Shared Python/JS prelude environment |
| 13 | web-search | Web search | 🆕 | ✨ structured + cites | Multi-provider (25 backends) |
| 14 | export | Session export | ➕ | — | HTML export with tool cards (Pi has base /export) |
| 15 | share | Encrypted share | ➕ | — | Encrypted share server (Pi has /share Gist) |
| 16 | dump | Session transcript | 🆕 | — | Plaintext transcript + LLM request JSON |
| 17 | context | Context usage report | ➕ | — | Context distribution (Pi: /session + ctx.getContextUsage()) |
| 18 | tools | Tool visibility | ➕ | — | List visible/available tools (Pi: getActiveTools()) |
| 19 | usage | Usage stats | ➕ | — | Per-provider tokens/limits/reset (Pi tracks tokens) |
| 20 | learning | Rule learning | 🆕 | 📈 auto rules | Extract patterns → project rules |
| 21 | resolution | resolve/apply | 🆕 | — | Pair with ast-edit: proposed → accept/discard |
| 22 | changelog | Changelog viewer | ➕ | — | omp/piex changelog (Pi has /changelog) |
Tier 2 — medium (more adapt work, or partial Pi surface)
| # | Candidate | Feature | L1 | L2 | Description |
| 23 | browser | Browser control | 🆕 | — | Puppeteer Chromium + stealth |
| 24 | gh | GitHub integration | 🆕 | — | gh CLI wrap: repo, PR, issues, code search |
| 25 | ssh | Remote SSH | 🆕 | — | One-shot remote commands |
| 26 | commit | Atomic commit split | 🆕 | 📈 fewer bad commits | Working tree → split → dependency order |
| 27 | checkpoint | Checkpoint / rewind | 🆕 | ✨ safer exploration | Checkpoint + rewind with summary |
| 28 | compact | Context compact | ➕ | — | Manual compact (summary/chunk/manual); Pi has /compact |
| 29 | shake | Content trim | 🆕 | — | Drop tool results / large blobs from context |
| 30 | memory | Hindsight memory | 🆕 | 📈 cross-session | retain/recall/reflect + /memory; SQLite/embedding |
| 31 | image-gen | Image generation | 🆕 | — | Gemini/GPT/xAI image models |
| 32 | inspect-image | Image analysis | 🆕 | — | Vision model on local images |
| 33 | tts | Text-to-speech | 🆕 | — | xAI Grok Voice TTS |
| 34 | btw | Side questions | 🆕 | — | Ephemeral Q&A with current context, not written to session |
| 35 | settings | Settings UI | ➕ | — | Open settings picker; Pi has /settings |
| 36 | branch | Branch picker | ➕ | — | Session tree, branch, fork; Pi has /fork//clone//tree |
| 37 | model | Model switch | ➕ | — | Runtime model / fast mode; Pi has /model//scoped-models |
| 38 | ext-dashboard | Extension control | 🆕 | — | Extension/agent panel; Pi has install/list/remove CLI only |
Tier 3 — high complexity (deep omp coupling)
| # | Candidate | Feature | L1 | Why hard |
| 39 | subagent | Parallel sub-agents | ➕ | Needs omp task orchestrator, worktree isolation, output-manager. Pi has basic createAgentSession() only |
| 40 | advisor | Dual-model advisor | 🆕 | Parallel model sessions + turn injection; no multi-model Extension API |
| 41 | collab | Real-time collab | 🆕 | Relay protocol, WebSocket, participant sync |
| 42 | marketplace | Plugin marketplace | 🆕 | Marketplace manager + catalog |
| 43 | goal | Goal mode | 🆕 | Persistent autonomous goals + token budget |
| 44 | vibe | Vibe mode | 🆕 | Continuous fast/good worker sessions |
| 45 | loop | Loop mode | 🆕 | Auto re-submit prompt each yield |
| 46 | internal-schemes | Internal URL schemes | 🆕 | pr://, issue://, skill://, … need deep tool integration |
| 47 | config-inheritance | Config auto-inherit | 🆕 | Read from .cursor/.claude/.gemini etc. |
| 48 | force | Force tool choice | 🆕 | /force:<tool-name> for next turn |
Priority recommendations
P0 — do now (high value, low complexity)
| Priority | Package | L1 | L2 | Rationale |
| P0-1 | todo | 🆕 | ✨ | Everyday task management; pure tool registration; ~1 day |
| P0-2 | conflict | 🆕 | 📈 | Frequent git pain; clean scheme registration |
| P0-3 | ask | 🆕 | ✨ | Structured picks beat free-form questions; Pi has ctx.ui.select/confirm |
| Priority | Package | L1 | L2 | Rationale |
| P1-1 | ast-grep | 🆕 | 📈 | AST search > regex; needs CLI or native binding |
| P1-2 | ast-edit | 🆕 | 📈 | Pairs with ast-grep |
| P1-3 | web-search | 🆕 | ✨ | Multi-backend; can start with 1–2 free backends |
| P1-4 | gh | 🆕 | — | GitHub via gh CLI or Octokit |
| P1-5 | eval | 🆕 | 📈 | Persistent Python/JS; security careful |
| P1-6 | memory | 🆕 | 📈 | Hindsight; SQLite/embedding |
P2 — medium / long term
| Priority | Package | L1 | L2 | Rationale |
| P2-1 | browser | 🆕 | — | Puppeteer + stealth; heavy but independent |
| P2-2 | commit | 🆕 | 📈 | Atomic commit analysis needs deep diff understanding |
| P2-3 | checkpoint | 🆕 | ✨ | Needs session state management |
| P2-4 | ssh | 🆕 | — | Needs SSH client capability |
| P2-5 | subagent | ➕ | — | Wait for richer Pi Extension API |
Unprioritized (Pi already has a base; marginal value TBD)
| Package | L1 | Pi baseline | Extra value |
| glob | ➕ | find | gitignore awareness |
| export | ➕ | /export (HTML/JSONL) | tool-card render, agent-callable |
| share | ➕ | /share (Gist) | encrypted share server |
| dump | 🆕 | — | plaintext transcript to clipboard |
| context | ➕ | /session | detailed distribution |
| tools | ➕ | getActiveTools() | slash exposure |
| usage | ➕ | token tracking | per-provider breakdown |
| learning | 🆕 | — | auto rule learning |
| resolution | 🆕 | — | pairs with ast-edit |
| changelog | ➕ | /changelog | delta TBD |
| compact | ➕ | /compact | alternate strategies |
| shake | 🆕 | — | content trim |
| btw | 🆕 | — | side questions |
| settings | ➕ | /settings | differentiated UI |
| branch | ➕ | /fork//clone//tree | better nav |
| model | ➕ | /model//scoped-models | better UX |
| ext-dashboard | 🆕 | — | extension control panel |
Done vs upstream deltas
hashline
| omp | piex | Delta |
| Built-in edit is hashline | pi.registerTool({ name: "edit", ... }) override | ✅ equivalent |
| Node native fs | polyfill: Bun.file() → readFileSync | ⚠️ Node polyfill (127 LOC) |
dap
| omp | piex | Delta |
| 14 adapters | 14 adapters | ✅ |
| Bun.spawn() | child_process.spawn() | ⚠️ 3 sites |
| Bun.sleep() | setTimeout promise | ⚠️ 1 site |
lsp
| omp | piex | Delta |
| ~50 default servers | ~50 default servers | ✅ |
| multi-file layout | single-file slim (570 + 499 JSON) | ⚠️ ~60% less code |
| native highlight + TUI | pure JSON-RPC | ⚠️ highlight omitted |
plan
| omp | piex | Delta |
| full-screen plan-review-overlay | select("Execute/Stay/Refine") | ⚠️ simplified |
| Plan TOC sidebar | none | ⚠️ omitted |
| sub-agent plan pass | none | ⚠️ omitted |
review
| omp | piex | Delta |
| multi-agent parallel review | single-agent direct review | ⚠️ light strategy A |
| TUI overlay findings | text output | ⚠️ no TUI overlay |
| 4 review modes | 4 modes | ✅ |
| Diff parse + noise filter | full port | ✅ |
Architecture comparison
| Dimension | omp | pi | piex |
| Runtime | Bun (TS + Rust) | Node.js (TS) | Node.js (TS) |
| Tool registration | built-in | built-in + Extension API | pure Extension API |
| Slash commands | built-in + file discovery | 22 built-ins + Extension API | pure Extension API |
| TUI | own (pi-tui) | own TUI | inherits Pi TUI |
| Models | ModelRegistry (40+ providers) | 40+ built-in providers | inherits Pi models |
| Session | SessionManager + persistence | JSONL + session tree | inherits Pi session |
| Sub-agents | full task orchestrator | basic API | TBD |
| Extensibility | Plugin + Skill + Rule | Extension + Package + Skill | pure Extension Package |
| Internal schemes | 12 URL schemes | none | none |
| Rust native | 4 crates ~55k LOC | via hashline indirectly | via Pi indirectly |
Methodology
Priority rests on three factors:
- Extension API fit: can it be done with registerTool / registerCommand / on event / ctx.ui?
- Dependency isolation: does it need omp internals (SessionManager / ModelRegistry / own TUI)?
- User value: real daily workflow lift
Tier definitions:
- Tier 1: API fit + low coupling → extract and ship
- Tier 2: API fit + medium coupling → adapter needed, feasible
- Tier 3: API gap or high coupling → wait for Pi, or drop
When is Pi “equivalent”?
| Pi surface | Rule |
| Same-named tool/command | compare capability; same name ≠ equivalent |
| Same name, different impl | “Enhancement”; note Pi baseline |
| API exposed but not toolized | “Enhancement” (data without UX) |
| Fully missing | “New capability” |
Next
Still to migrate (from oh-my-pi)
- Plan review overlay (full-screen TUI approval)
- Plan TOC sidebar
- Multi-agent review (parallel sub-agents)
To explore (other agents)
- Claude Code interaction patterns
- OpenCode extension mechanisms
- Other strong agent features
Per-package details live in each package’s README.md.