Personal plugin marketplace for Claude Code, owned by @mirzaakhena.
It contains one fork of the official claude-plugins-official plugin that has been heavily modified (telegram), plus nine original plugins written from scratch. These plugins are designed as a single ecosystem: a Telegram bot as the primary interface, a PTY wrapper as the hand that controls Claude Code, and a set of behavioral skills that govern how the AI communicates.
The official catalog lives in .claude-plugin/marketplace.json. Each plugin has its own README with full details.
| Plugin | Version | What it is |
|---|---|---|
telegram |
0.0.37-mirza.0 | Telegram ↔ Claude Code bridge (upstream fork, heavily modified). Per-project state, 5 MCP tools (reply + buttons, react, edit_message, download_attachment, get_message_by_id), registry-driven bot commands (/context, /version, /new, /switch, /delete soft/hard/all, /rename, /effort, /handoff → forwarded to the handoff-v2 skill, /goal → forwarded to the goal skill, /help, /start), album batching, quoted-message context, conversation logging to SQLite, permission relay, system-outbox for sibling plugins. /rename confirms from "<old>" to "<new>" and rejects names containing spaces (use hyphens, e.g. discuss-mcp); a SessionStart hook injects the live session name into context so the bundled name-session skill can nudge naming of idle sessions (remind once → offer a hyphenated name via buttons → self-apply via pty_send_slash /rename); session-name resolution now reads the wrapper's authoritative name file first (accuracy fix). A UserPromptSubmit hook re-injects ambient Telegram obligations (ack-before-tools, buttons-on-questions, mandatory reply) every turn; a Stop hook blocks once when a Telegram conversation concludes without a reply since the latest inbound, ensuring the AFK user is always answered. New in 0.0.37: every inbound notification is prefixed [protocol: terse-turn] and the MCP instructions teach the AI to answer entirely through reply and end the turn with a single . — a Telegram user is AFK and never reads the transcript, so prose there is duplicated work that keeps costing tokens for the rest of the session. The marker rides on the message, not a session flag, so turns typed directly in the terminal stay verbose. |
pty-controller |
0.0.30 | Claude Code controls itself. The mirza-cc wrapper runs CC inside node-pty; the plugin writes requests to a filesystem inbox, the wrapper injects keystrokes (/clear, /resume, prompt text from agent-bus) — serialized through a FIFO queue + injection gate (min-gap between injections; hard barrier while CC rebuilds post-/clear, so queued keystrokes are never silently dropped). MCP tools: pty_send_slash (SELF-ONLY since 0.0.30 — neighbor autonomy; supports atomic commands batches: one pending file, contiguous enqueue, session-change notification deferred to end of batch; rejects telegram-layer commands like /new with a pointer to the right alternative), pty_status, pty_list_agents. The wrapper also registers the bot in the global agent registry, tracks the live session's id + name in state files, and names a first-run session idle (born READY for handoff). |
agent-bus |
0.0.13 | Bot-to-bot communication between Claude Code instances on the same machine. MCP tools: agent_list, agent_status (session id/name, context % + window size in tokens, model, effort — with stale-snapshot detection against the wrapper's session id; null context = fresh session), agent_send (natural-language prompt, can broadcast; kind:"slash" removed per the 2026-06-07 neighbor-autonomy decision — the peer's own AI decides and executes). One-way with an anti-bounce rule + hop limit. Depends on pty-controller. |
| Plugin | Version | What it is |
|---|---|---|
immediate-reply |
0.0.6 | Instant ack (~1 second) before the first tool call on every Telegram inbound — a mechanical 4-question pre-flight check, plus progress narration for long tasks. |
inline-buttons |
0.0.10 | Self-audit on every Telegram reply: can the answer be picked from a short list? Confirmations and 2–4 option menus get inline-keyboard buttons + an escape button ✏️ Explain manually, with short labels (options narrated as a numbered list in the body, buttons just hold the numbers, body never repeats the button row as text). New in 0.0.10: open-ended questions now get no buttons at all. The old trigger was purely mechanical — "reply ends with ? → buttons, no exceptions" — which fired on questions whose real answer was a paragraph; a tap cannot carry an opinion, and the noise trained the user to ignore the keyboard. Requires telegram ≥ 0.0.9-mirza.0. |
teach-me |
0.0.2 | Teaching mode: build a mental model step by step when the user wants to understand a concept — 10 style elements + an anti-pattern list. |
handoff |
0.0.16 | /handoff (buttons: Now / After this task / Ping pong / File only) — direct bot-to-bot work relay via agent-bus: handoff file → two-way ACK → sender self-reset to an idle session as ONE atomic pty_send_slash batch (sequential fallback on wrapper < 0.0.7); receiver busy-guard runs first (explicit user pick of a busy bot → defer, not reject); ping-pong pair ends when the goal is done or the user cancels; proactive context-threshold trigger via agent_status context_window_size (≥1M tokens→35%, else→75%; model-string fallback), READY accepts null context (fresh session). /handoff-resume removed. |
goal |
0.0.1 | /goal (forwarded to the AI) — AI-authored Claude Code goals. The AI discusses the objective (interviewing if unclear; cancellable), drafts a precise, transcript-verifiable condition (≤240 chars, bounded), confirms with [Ya]/[Tidak]/[Jelaskan manual] buttons, then sets Claude Code's built-in /goal (injected via pty_send_slash) to run autonomously until an independent evaluator confirms it. Send /goal again while one runs to see/stop it. Requires telegram + pty-controller + the mirza-cc wrapper. |
daily-report |
0.0.4 | /daily-report assembles a paste-ready plain-text daily work report for any chat app from git activity, with a locked Yesterday/Today template and anti-fabrication rules. |
bot-conduct |
0.0.10 | Living checklist + working rules for agent bots, organized by lifecycle moment (starting a task / during work / before idle-handoff-done): git worktree (not branch-switching), Plane task in-progress + current cycle (Week N), Agent: <bot-name> commit trailer (mechanically ENFORCED by a PreToolUse hook since 0.0.7), subagent-first, channel discipline, shared-repo three-copy doctrine (see docs/SOP-git-multi-agent.md), everything-pushed + merge-or-record-in-handoff before idle, durable lessons to the vault + vault committed (local-only git). New in 0.0.8: restructured checklist-first (153 → ~70 lines); rationale & full git discipline moved to the skill's references/. |
Telegram (user's phone)
│ DM / commands / button taps
▼
[telegram plugin] ──── meta-commands (/new, /switch, /effort, ...) ───┐
│ <channel> notification │ write inbox
▼ ▼
[ Claude Code session ] ◄── inject keystrokes ── [ mirza-cc wrapper (pty-controller) ]
│ ▲
│ agent_send (prompt/slash) │ peer inbox
└──────────────► [agent-bus] ───────────────────────────┘ → other bots on the same machine
immediate-reply / inline-buttons / teach-me → govern the AI's response STYLE on Telegram
handoff / daily-report → end-of-session & end-of-day rituals
name-session (hook + skill, in telegram) → nudges naming of `idle` sessions
bot-conduct → WORKING rules for agent bots (worktree, commit identity, subagent, git discipline)
reinforcement hooks (telegram + bot-conduct) → mechanically re-surface obligations every turn: ambient reminder (UserPromptSubmit), mandatory reply (Stop), Agent: trailer (PreToolUse)
From any Claude Code session, run:
/plugin marketplace add mirzaakhena/mirza-marketplace
Verify with /plugin marketplace list — mirza-marketplace should appear.
/plugin install telegram@mirza-marketplace
/plugin install pty-controller@mirza-marketplace
/plugin install immediate-reply@mirza-marketplace
...
/reload-plugins
When asked for scope, pick user — one global install, with state staying per-folder automatically. The @mirza-marketplace syntax matters if you also have an official plugin with the same name.
The behavioral skill plugins (immediate-reply, inline-buttons, teach-me, handoff, daily-report, bot-conduct) work right after install — no configuration. Note: a newly enabled skill is not yet registered in the currently running session — restart the session first (see docs/2026-06-06-issue-skill-not-loaded-on-new-session.md).
The telegram plugin is a channel plugin, so it needs extra steps:
A. Configure the bot token. Create a bot via @BotFather (/newbot), copy the token, open a CC session in the target project folder, then:
/telegram:configure 123456789:AAH...
The token is stored in <project>/.claude/channels/telegram/.env (chmod 600, automatically .gitignored). One token per project — other projects need a different bot.
B. Restart with the dev flag. A personal marketplace plugin isn't on Anthropic's allowlist (channels are still a research preview):
claude --dangerously-load-development-channels plugin:telegram@mirza-marketplaceOr — if pty-controller is installed — run it through the wrapper, which already uses that flag by default:
cd plugins/pty-controller/wrapper && npm run wrapperC. Enable the MCP server. A channel plugin's MCP is disabled by default per session. Run /mcp, toggle telegram on.
D. Pair your account. DM the bot on Telegram → you get a 6-character code. In CC:
/telegram:access pair <code>
/telegram:access policy allowlist
Once paired, try sending /context on Telegram — the bot should reply with context window + session info.
Note: one bot token may only have one poller. Two projects with the same token →
409 Conflict.
The Telegram commands /new, /switch, /delete, /rename, /effort and the entire agent-bus plugin require the mirza-cc wrapper to be running. See the pty-controller README for its setup.
Standard workflow:
git clone https://github.com/mirzaakhena/mirza-marketplace.git
cd mirza-marketplace-
Edit the plugin code in
plugins/<name>/. -
Bump the version in
plugins/<name>/.claude-plugin/plugin.json(convention:<semver>-mirza.<N>for forks, plain semver for original plugins).⚠️ package.jsondoes NOT count. Claude Code's marketplace cache resolves the version from.claude-plugin/plugin.jsononly. Bumpingpackage.jsonalone = the cache keeps serving old code and/reload-pluginsbecomes a no-op. SeeCLAUDE.mdfor the full procedure. -
Update the README — a plugin that changes must come with an update to
plugins/<name>/README.md+ this root README (rules inCLAUDE.md). -
Validate the manifest:
claude plugin validate . claude plugin validate plugins/<name>
-
Test — plugins with an MCP server use Bun:
bun testfrom inside the plugin folder. -
Test locally before pushing:
claude plugin marketplace add /absolute/path/to/mirza-marketplace claude --dangerously-load-development-channels plugin:telegram@mirza-marketplace
-
Commit & push to
main. -
Update on the user's side:
/plugin marketplace update mirza-marketplacethen/plugin update <name>(or/reload-plugins).
Design specs & plans are committed alongside the code: repo-level in docs/superpowers/{specs,plans}/, per-plugin in plugins/<name>/docs/.
⚠️ Rewrite in progress (2026-07): an approved plan exists to supersede this plugin ecosystem with a new harness (mirza-harness: hostd daemon + hook-inversion). The plugins here remain the live production system until the phased migration completes. Readdocs/2026-07-03-harness-rewrite-design.md(approved design),docs/2026-07-02-capability-inventory/(529-item acceptance contract), and the "Arah arsitektur target" section ofdocs/2026-07-02-improvement-backlog.mdbefore making large changes to plugins.
The claude-plugins-official repo is updated by Anthropic periodically. To merge upstream changes into the telegram fork:
- Compare
plugins/telegram/against the upstreamexternal_plugins/telegram/(fresh clone or git diff). - Cherry-pick what's relevant — be careful: this fork has diverged significantly (per-project state, meta-commands, messages.db, system-outbox, buttons, etc.). See the list of changes in the telegram plugin README.
- Bump the version, commit, push.
telegramretains Apache-2.0 from upstream (seeplugins/telegram/LICENSE).pty-controlleris released under MIT (seeplugins/pty-controller/LICENSE).- The other plugins do not yet include an explicit license file.
- Mirza — @mirzaakhena