The workflow was passing deleted files to the validation script, which
failed when trying to read them. Add --diff-filter=AMRC to only process
Added, Modified, Renamed, and Copied files.
Change the stripe plugin source from local path (./external_plugins/stripe)
to git-subdir pointing to stripe/ai repo at providers/claude/plugin without
SHA pinning.
- safeName() strips <>[]\r\n; from file_name/title before they hit the
<channel> notification — delimiter chars would let an uploader break
out of the tag or forge meta entries
- download_attachment strips ext/uniqueId to alphanumeric before join()
— defense-in-depth against path traversal (file_unique_id is
Telegram-controlled so this is belt-and-braces)
- /status in a group would leak the sender's pending pairing code to
other group members, who could then pair as that user
- Commands in non-allowlisted groups confirm bot presence and enable spam
- /start now acknowledges dmPolicy === 'disabled' instead of lying
- setMyCommands scoped to private chats so the / menu only shows in DMs
Same patterns as #812/#813 for the discord channel:
- process-level unhandledRejection/uncaughtException handlers
- client.on('error') to log discord.js errors
- mcp.notification().catch() so inbound delivery failures surface
- stdin close / SIGTERM -> client.destroy() + exit (zombie fix)
- .unref() the approval-check interval
- client.login().catch() to log+exit on bad token instead of crashing
Discord is inherently more resilient than telegram (discord.js
auto-reconnects, no 409 equivalent), but these gaps were still there.
Message edits don't trigger push notifications on the user's device.
Update system instructions and edit_message tool description to steer
the assistant toward edit-for-progress + new-reply-on-completion.
Fixes#786
Hardcoded ~/.claude/channels/<name>/ meant only one bot per machine.
Respect TELEGRAM_STATE_DIR / DISCORD_STATE_DIR so users can run
multiple bots with separate tokens and allowlists.
Also fixed README path ('in your project' -> '~/...') to match the code.
Fixes#792
During /mcp reload or when a zombie from a previous session still holds
the polling slot, the new process gets 409 Conflict on its first
getUpdates and dies immediately. Retry with backoff until the slot
frees — typically within a second or two.
Also handles the two-sessions case: the second Claude Code instance
keeps retrying (with a clear message about what's happening) and takes
over when the first one exits.
Fixes#804#794, partial #788 (issue 4)
When the MCP stdio transport closes, the bot kept polling Telegram as
a zombie process — holding the token and causing 409 Conflict for the
next session.
- Listen for stdin end/close and SIGTERM/SIGINT -> bot.stop() + exit
- Force-exit after 2s if bot.stop() stalls on the long-poll timeout
- unref the approval-check interval so it doesn't keep us alive
Fixes#793, partial #788 (issue 3)
The bot would silently stop delivering messages after the first error:
grammy's default handler calls bot.stop() on any middleware throw, and
void bot.start() / void mcp.notification() swallow rejections with no log.
- bot.catch(): log and keep polling on handler errors
- bot.start().catch(): log when polling dies (bad token, 409, network)
- mcp.notification().catch(): log when inbound delivery to Claude fails
- process-level unhandledRejection/uncaughtException as a safety net
Fixes#756#759#761#777#809, partial #788
The bot token is a credential. Tighten perms on load so hand-written
or pre-existing .env files get locked down, and update the configure
skill to chmod after writing. No-op on Windows.
Deep-mode allows bounded local computation but must NOT use WebFetch
or WebSearch. Finding the solution on AoPS is not solving the problem.
Adds explicit NO WEB prompt block and orchestrator self-restraint note.
Found by Ralph's test run (skill solved 5/6 then started fetching
dgrozev.wordpress.com and artofproblemsolving.com for P6).
- Drop /reload-plugins (redundant, you restart with --channels next)
- Fix token save path: .claude/channels/ not ~/.claude/channels/
- Clarify bot only responds once channel is running (pairing step)
Both MCP servers run on Bun, but this wasn't documented. Add a
Prerequisites section with the install command so users don't hit
a missing-runtime error on first setup.
The skill that addresses the Proof-or-Bluff gap: self-verified 85.7% IMO
becomes <5% under human grading. Uses fresh-context verifiers armed with
specific failure patterns (not generic 'check logic').
Validated: 17/18 IMO+Putnam 2025 solved, 0 false positives, 2 novel proofs.
See eval data in anthropic monorepo sandbox/sandbox/ralph/math_skills/.
Remove the three chat bridge plugins from external_plugins/ and their
corresponding entries in marketplace.json.
Co-authored-by: Claude <noreply@anthropic.com>
Adds a sort check as a second step in the existing validate-marketplace
workflow. The script supports --fix to sort in place.
Sorts the existing 86 entries — pure reorder, no content change.
Previously grouped loosely by kind (LSPs first, then internal, then
external); now strictly alphabetical so insertion point is unambiguous.
* Add CI workflow to validate marketplace.json on PRs
Add a GitHub Actions workflow that validates marketplace.json is
well-formed JSON with a plugins array whenever PRs modify it. Includes:
- validate-marketplace.ts: Bun script that parses and validates the JSON
- validate-marketplace.yml: GH Actions workflow triggered on PR changes
- test-marketplace-check.js: Unit tests for the validation logic
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Strengthen marketplace validator and remove orphaned test file
- validate-marketplace.ts: check duplicate names and required fields
(name, description, source) per entry, not just valid JSON
- remove .github/workflows/test-marketplace-check.js: tested a
checkMarketplaceViolations function that doesn't exist in the PR,
and was in workflows/ instead of scripts/
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Tobin South <tobin.south@gmail.com>
Adds marketplace entries for the three channel plugins landing in
external_plugins/ via #735, #736, #738. iMessage (#737) is intentionally
held back from registration.
telegram and discord go under productivity; fakechat goes under
development since it's a localhost testing harness, not an end-user
messaging bridge.
Telegram messaging bridge for Claude Code. Runs a local MCP server that
connects to the Telegram Bot API via a user-created bot token.
Built-in access control: inbound messages are gated by an allowlist
(default: pairing mode), outbound sends are scoped to the same allowlist.
The /telegram:access skill manages pairing, allowlists, and policy.
Ships full source — server.ts runs locally via bun, started by the
.mcp.json command. First external_plugins entry to bundle source rather
than point at a hosted MCP endpoint.
Discord messaging bridge for Claude Code. Runs a local MCP server that
connects to Discord's Gateway via a user-created bot token.
Built-in access control: inbound messages are gated by an allowlist
(default: pairing mode), outbound sends are scoped to the same allowlist.
Guild channels require opt-in and @mention. The /discord:access skill
manages pairing, allowlists, and policy.
Ships full source — server.ts runs locally via bun, started by the
.mcp.json command.
Localhost web chat UI for testing the channel notification flow.
No tokens, no access control, no third-party service. Serves an
iMessage-style UI on localhost; messages posted there arrive as
channel notifications, replies render in the UI.
Useful for developing against the channel protocol without a live
messaging account.
Ships full source — server.ts runs locally via bun, started by the
.mcp.json command.
P0 follow-up for EA-471. Updates plugin-dev teaching materials to stop
recommending the commands/ directory layout for new plugins:
- command-development/SKILL.md: add legacy banner at top pointing to
skills/ format
- create-plugin.md: update scaffolding to create skills/<name>/SKILL.md
instead of commands/; mark commands/ as acceptable legacy alternative;
update all examples, tables, and testing instructions
- example-plugin: migrate example-command to skills/example-command/SKILL.md;
keep commands/example-command.md with a legacy-format note; update README
to reflect new preferred structure
Both formats remain loaded identically — this is a documentation change only.
Refs: anthropics/apps#26827
Co-authored-by: Henry Shi <henrys@anthropic.com>
* fix readme typo
* fix(plugin-dev): add missing .claude-plugin/plugin.json
The plugin-dev plugin was missing its required plugin.json manifest file,
causing the plugin to fail loading. This adds the missing configuration
file following the same format as other official plugins.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add README and setup documentation for Greptile plugin
- Add README.md with setup instructions for getting API key
- Document the GREPTILE_API_KEY environment variable requirement
- Add homepage, author URL, and keywords to plugin.json
- Update description to reflect Greptile as AI code review agent
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add c7 agent
* Update Context7 plugin for v2 API
- Update skill/agent/command to use new query-docs tool (replaces get-library-docs)
- Add query parameter usage for intelligent reranking
- Add version pinning support (e.g., /vercel/next.js/v15.1.8)
- Add tools and model metadata to agent
- Simplify docs to focus on workflow, not parameter details
- Add README.md with usage examples
* Switch Context7 MCP to remote HTTP server
* feat: update tools with better skill/agent format prompt
* fmt
* fix: installation guide
* Change Notion name to lowercase in marketplace.json
According to the SKILLS spec (see https://agentskills.io/specification#:~:text=Max%2064%20characters.%20Lowercase%20letters%2C%20numbers%2C%20and%20hyphens%20only.%20Must%20not%20start%20or%20end%20with%20a%20hyphen.) names should not contain uppercase letters. This prevents loading the marketplace in spec-compliant agents.
Update the name to be in lowercase.
* Fix empty array crash on bash 3.2 in setup-ralph-loop.sh
* Update Vercel plugin to point to vercel-labs/vercel-plugin
Replace the marketplace pointer for the Vercel plugin from
vercel/vercel-deploy-claude-code-plugin to vercel-labs/vercel-plugin.
* vercel-labs to vercel
* docs(ralph-loop): add Windows compatibility section
Retargeted from PR #124 (originally against plugins/ralph-wiggum/,
since renamed). Documents the Git Bash workaround for Windows users
hitting WSL bash resolution issues in the stop hook.
Original author: @stefanzvonar
* add(plugin): terraform — HashiCorp infrastructure-as-code
Adapted from PR #14 by @gautambaghel (HashiCorp).
Original: https://github.com/anthropics/claude-plugins-official/pull/14
* add(plugin): autofix-bot — DeepSource automated code review
Adapted from PR #23 by @jai-deepsource (DeepSource).
Original: https://github.com/anthropics/claude-plugins-official/pull/23
* add(plugin): stagehand — Browserbase browser automation
Adapted from PR #43 by @Kylejeong2 (Browserbase). PR's marketplace.json
had a syntax error (missing '},' before adjacent entry); entry
reconstructed from the diff.
Original: https://github.com/anthropics/claude-plugins-official/pull/43
* add(plugin): atomic-agents — BrainBlend-AI framework
Adapted from PR #46 by @KennyVaneetvelde (BrainBlend-AI).
Original: https://github.com/anthropics/claude-plugins-official/pull/46
* add(plugin): microsoft-docs — official Microsoft documentation MCP
Adapted from PR #55 by @TianqiZhang (Microsoft).
Original: https://github.com/anthropics/claude-plugins-official/pull/55
* add(plugin): bonfire — session-context workflow tooling
Adapted from PR #108 by @vieko (Vercel).
Original: https://github.com/anthropics/claude-plugins-official/pull/108
* Add intercom to marketplace
* Add neon to marketplace
* Remove qodo SHA
* Merge staging into add-plugin/intercom to resolve conflict
* Merge latest staging to resolve conflict
* Remove external_plugins changes from staging
Moved to external-plugins-staging branch for separate review.
---------
Co-authored-by: Han T. <han.tan@shopify.com>
Co-authored-by: Julien Tavernier <jtavernier@Juliens-MacBook-Pro.local>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Daksh Gupta <daksh510@gmail.com>
Co-authored-by: Fahreddin Özcan <ozcanfahrettinn@gmail.com>
Co-authored-by: Matt Kotsenas <Matt.Kotsenas@gmail.com>
Co-authored-by: LuciferDono <pranavj821@gmail.com>