@stibbons/pi-opensuperwhisper

Answer pi and oh-my-pi agents from the OpenSuperWhisper panel on macOS

Packages

Package details

extension

Install @stibbons/pi-opensuperwhisper from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@stibbons/pi-opensuperwhisper
Package
@stibbons/pi-opensuperwhisper
Version
0.2.0
Published
Oct 30, 2026
Downloads
452/mo · 260/wk
Author
dvelopment
License
MIT
Types
extension
Size
27.8 KB
Dependencies
0 dependencies · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./src/index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-opensuperwhisper

Answer pi and oh-my-pi agents from the OpenSuperWhisper panel on macOS.

When a run is finished and waiting for you, OpenSuperWhisper's Agents panel opens with the agent's last message. Dictate (or type) your reply there. It shows up in the session as a normal user message and starts the next run. You don't have to go back to the terminal. On oh-my-pi, questions the agent asks with its ask tool open in the panel too.

Install

pi:

pi install npm:@stibbons/pi-opensuperwhisper

oh-my-pi:

omp plugin install @stibbons/pi-opensuperwhisper

There's nothing to configure. Turn the panel on or off in OpenSuperWhisper's own settings.

Requirements

  • macOS with OpenSuperWhisper running. On any other platform the extension does nothing.
  • The "Claude Code" agent kind must be enabled in OpenSuperWhisper. OpenSuperWhisper doesn't know pi or oh-my-pi yet, so the extension identifies itself as Claude Code. For the same reason the panel labels these requests "Claude Code". This is temporary until OpenSuperWhisper gets its own pi agent kind.
  • The interactive terminal UI. In print, json and rpc modes the extension does nothing.

How it behaves

  • Panel opens when the run is fully settled: on pi after agent_settled, on oh-my-pi after a terminal agent_end once nothing else is queued. It doesn't open while the agent will still continue on its own (retries, compaction, queued follow-ups), after you abort a run with Esc or Ctrl+C, after a run that ended in an error, in oh-my-pi subagent sessions, or when the last message has no visible text. The panel shows only the message's text, without thinking or tool calls.
  • Your reply is sent as the next user message, without the panel's "The user answered by voice…" prefix.
  • "Let it stop", or the panel timing out, leaves the agent idle with no side effects.
  • The terminal always wins. Typing in the terminal, starting a new run, switching or resuming sessions, or quitting cancels the panel request. Exactly one run happens, even if a panel reply arrives at the same moment.
  • oh-my-pi ask questions open in the panel and in the terminal dialog at the same time. Whichever you answer first wins: a panel answer closes the terminal dialog and reaches the agent exactly as if you had picked it there (single choice, multi-select or free text); answering in the terminal closes the panel. Dismissing the panel, or letting it time out, leaves the terminal dialog open. Questions from subagents, and calls with two identical question texts, stay terminal-only.
  • pi has no ask tool. For structured questions on pi, install a question plugin such as @mazli/pi-ask-user-question (pi install npm:@mazli/pi-ask-user-question). Its questions are answered in the terminal and don't open in the panel: pi gives extensions no ctx.invokeTool, so this extension can't run another extension's question tool and the panel side by side.
  • Fails open. If OpenSuperWhisper isn't running, its files are missing or stale, or anything goes wrong, the extension does nothing and logs nothing. It never blocks the agent or the terminal.
  • No network. The extension only talks to the local OpenSuperWhisper app.

How it works

The extension uses OpenSuperWhisper's own Claude Code integration path. It finds the running app through ~/Library/Application Support/fr.my-monkey.opensuperwhisper/agents/ (app.pid, app.executable), then runs <app> agent-hook stop with a Claude Code–style Stop request on stdin and CLAUDE_PROJECT_DIR set. If you answer, the app prints the reply on stdout. Cancelling a request kills that process, and the app closes the panel within about a second.

For oh-my-pi's ask tool, the extension registers its own ask (same description and parameters) when a session starts. Each call runs the native ask through ctx.invokeTool and, at the same time, <app> agent-hook question with the questions as a Claude Code AskUserQuestion request. The first answer wins and the other side is cancelled.

Known cost: because the extension replaces the built-in ask, oh-my-pi shows ask calls in the transcript like any other extension tool instead of with its built-in renderer. The interactive question dialog is unchanged.

Development

The package ships TypeScript source; there's no build step. pi loads it through jiti, oh-my-pi through Bun.

bun install
bun test           # behaviour tests against a fake agent-hook script
bun run typecheck  # tsc --noEmit

Try it against the real app from a checkout:

pi -e ./src/index.ts
omp -e ./src/index.ts

See docs/WHAT.md for the design and docs/WHY.md for the motivation.

License

MIT