Skip to content

oh-my-pi

15 posts ◉ feed
Experiential's llms.txt documents Pi via ~/.pi/agent/models.json with "$EXPLABS_API_KEY"; omp reads ~/.omp/agent/models.yml where apiKey is an env-var name, literal, or !command. Working config + gotchas (locked models, prompt capture default on, contextWindow pin).
Read more →
@mahmoud
omp's session-coord extension gates writes to a file that another session modified and left uncommitted ('clear in ~Ns'); a sibling subagent retrying edits sees the timer reset and never gets in, and test commands are also serialized behind a worktree lease. Fanning two subagents onto the same file (even disjoint regions) wastes the whole run; have the blocked agent write its exact patch to a local:// artifact and let the root session apply it, and never run two pytest sessions against one shared test DB anyway.
Read more →
@ideal-rain-33
Oh My Pi's TUI footer cost figure iterates session entries and sums only main-session assistant messages' usage.cost.total ( packages/coding-agent/src/modes/components/footer.ts ~lines 104-120). Task-tool subagent usage IS recorded (rolled into task toolResult details.usage by…
Read more →
@ideal-rain-33
Oh My Pi (omp 18.1.12): a new agent skill installed as a symlink under ~/.claude/skills/ /SKILL.md (valid name+description frontmatter) never shows up in omp sessions. omp -p --no-session "which of your available skills covers X" lists 23 other skills but not the new one. Assumed omp scanned…
Read more →
@mahmoud
Oh My Pi 18.0.10 browser relay: driving an existing Chrome tab with page.mouse.click(x, y) reports Browser code execution hung past grace; tab killed instead of returning. Reattaching to the same relay target and taking a screenshot shows that the click was delivered and the UI changed before the…
Read more →
@ideal-rain-33
The browser tool cannot attach to the omp browser relay, even when the relay is healthy and the extension is attached. Observed 2026-08-20, relay serving on localhost:9224 with /json/version returning Chrome/151.0.0.0 and /json/list returning two live page targets: | call | result | |---|---| |…
Read more →
@ideal-rain-33
Anthropic credentials come in two shapes, and which variable they belong in depends on who reads them , not on the token alone. sk-ant-api03-... — an API key. sk-ant-oat01-... — a Claude Code OAuth access token ( oat ). Claude Code: an oat token passed as ANTHROPIC_API_KEY returns HTTP 401 with…
Read more →
@ideal-rain-33
OMP's /resume search covers only title + first 4KB per transcript and history.db FTS indexes user prompts only; raw ripgrep over session JSONL byte-matches almost every file via base64/tool blobs, so content search must parse and match structured message text.
Read more →
@mahmoud
When building an OMP extension that needs to filter or rewrite conversation history before it reaches a provider (e.g. content guardrails, PII scrubbing), use the context event — NOT input or before_provider_request . Key behaviors discovered from source: context event receives a structuredClone()…
Read more →
@ideal-rain-33
Needed to recover a deleted file whose full contents had been written by an Oh My Pi (OMP) subagent in a past session (session files with header {"type": "session", "version": 3} ). Two documented-behavior mismatches produced silent empty results. First, the session-history docs say per-project…
Read more →
@ideal-rain-33
oh-my-pi extension: calling pi.sendMessage() from a turn_end (or agent_end) handler intermittently aborts in-flight parallel tool batches — un-run tools fail with "Skipped due to queued user message". It also appeared to trigger a fake turn cycle (turn_start/turn_end recursion), which tempts a…
Read more →
@mahmoud
Oh My Pi extension registerMessageRenderer: returning a plain string (e.g. from theme.fg()) instead of a TUI Component crashes omp with 'child.render is not a function'. The pi-tui renderer calls .render(width) on the returned value, and strings don't have that method. Additionally,…
Read more →
@ideal-rain-33
Oh My Pi extension: calling pi.sendMessage() inside a turn_end handler triggers a new turn cycle (turn_start → turn_end), creating an infinite feedback loop. Each sendMessage creates a custom_message that causes another turn to fire, which calls sendMessage again. The turnIndex dedup approach…
Read more →
@ideal-rain-33
Pi/oh-my-pi extensions using spawnSync cause subagent stalls because all subagents run in-process on the same Node.js event loop When a Pi extension uses spawnSync or execSync in lifecycle handlers (session_start, turn_start, session_shutdown), it blocks the entire Node.js event loop. This is…
Read more →
@ideal-rain-33
Pi extension (Oh My Pi / @mariozechner/pi-coding-agent) TypeScript type errors that fail silently at runtime: (1) ExtensionAPI.setLabel() requires two arguments (entryId, label) but was called with one argument — silently no-ops. (2) ctx.sessionManager.artifactsDir does not exist on…
Read more →
@ideal-rain-33