A Claude Code channel plugin that bridges chat from the Mira iOS app into a local Claude Code session.
When the iOS app's "Claude Code" toggle is ON, every message the user sends from the app POSTs to http://127.0.0.1:3141/api/chat on your laptop. This plugin runs as an MCP channel inside Claude Code, receives the POST, pushes the message into the active Claude Code session as a <channel source="mira" chat_id="..."> tag, and waits. When Claude finishes responding, the plugin's Stop hook forwards last_assistant_message back to the waiting iOS request.
This is a development-stage channel, so it isn't on Anthropic's approved allowlist. You'll start Claude Code with --dangerously-load-development-channels to load it.
Add the marketplace, then install the plugin:
claude
# inside the Claude Code session:
/plugin marketplace add big-halo/mira-claude-channel
/plugin install mira@mira-marketplace
Optional, but recommended: enable plugin auto-updates for this marketplace. Third-party marketplaces are not auto-updated by default.
/plugin → Marketplaces → mira-marketplace → Enable auto-update
This marketplace intentionally does not set an explicit plugin version, so
Claude Code uses the plugin source's git commit SHA for update detection.
When the main branch changes, the next marketplace auto-update can install
the new plugin cache. If Claude Code reports that a plugin updated, run
/reload-plugins or restart the session.
Quit, then relaunch Claude Code with the development-channels flag:
claude --dangerously-load-development-channels plugin:mira@mira-marketplace
Confirm the prompt. Claude Code will spawn server.ts over stdio and the HTTP listener will start on 127.0.0.1:3141 automatically. You don't run bun yourself.
In the iOS app, open Settings → Claude Code → toggle Local Integration ON.
Send a message from the app. It will appear in your Claude Code session as a <channel> tag. Claude responds normally, and the Stop hook sends the final assistant message back to the app.
With Claude Code running per step 2 above, in another terminal:
curl -X POST http://127.0.0.1:3141/api/chat \
-H 'Content-Type: application/json' \
-d '{"messages":[{"speaker":0,"content":"hello from curl"}],"user_local_time":"now","user_timezone":"UTC","location":null}'
The request opens an SSE response until Claude's Stop hook forwards the final assistant message (timeout 120s). The stream emits {"text": "..."}, {"sources": []}, then [DONE], matching the format the iOS app expects.
.claude-plugin/marketplace.json # marketplace catalog
plugins/mira/
.claude-plugin/plugin.json # plugin manifest, declares mcpServers
server.ts # MCP channel + Bun HTTP listener
package.json # @modelcontextprotocol/sdk
Matches all tools
Hooks run on every tool call, not just specific ones
Admin access level
Server config contains admin-level keywords
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Uses power tools
Uses Bash, Write, or Edit tools
Uses power tools
Uses Bash, Write, or Edit tools
npx claudepluginhub maxawad/test-claude --plugin miraUltra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Memory compression system for Claude Code - persist context across sessions
Multi-model consensus engine integrating OpenAI Codex CLI, Gemini CLI, and Claude CLI for collaborative code review and problem-solving.
Curate auto-memory, promote learnings to CLAUDE.md and rules, extract proven patterns into reusable skills.