Compare commits

..

19 Commits

Author SHA1 Message Date
Bryan Thompson
bf492fac6d Rename azure-skills to azure per developer request 2026-04-16 10:01:28 -05:00
Daisy S. Hollman
48aa435178 fix(discord): use cached author.id when DMChannel.recipientId is null (#1365)
DMChannel.recipientId can be null when client.channels.fetch() returns
a DM channel with a cold cache. The inbound gate correctly uses
msg.author.id, but fetchAllowedChannel relied on recipientId, so
replies to allowlisted DMs intermittently failed with "channel not
allowlisted" after session restart.

Maintain a channelId→userId map populated during inbound handling and
fall back to it when recipientId is null.

Fixes anthropics/claude-code#40576
Fixes anthropics/claude-code#41647

🏠 Remote-Dev: homespace
2026-04-14 14:46:42 -07:00
Noah Zweben
7e401edac7 fix(telegram): retry polling on all transient errors, not just 409 (#1397)
A single ETIMEDOUT/ECONNRESET/DNS failure during long-polling rejected
bot.start(); the catch block returned and polling stopped permanently.
The MCP server process stayed alive (stdin keeps it running), so outbound
reply/react tools kept working — but the bot was deaf to inbound messages
until a full restart. Users see 'typing...' then nothing, indistinguishable
from the harness-side gate bug.

Now all errors retry with the same capped backoff (max 15s). attempt resets
to 0 in onStart so backoff doesn't accumulate across a long-running session.

Co-authored-by: Claude <noreply@anthropic.com>
2026-04-14 12:47:13 -07:00
Bryan Thompson
7f3389d21f Merge pull request #1403 from anthropics/add-dataverse-v2
Add dataverse plugin
2026-04-14 11:59:10 -05:00
Bryan Thompson
560b7e0d38 Merge pull request #1402 from anthropics/add-azure-skills-v2
Add azure-skills plugin
2026-04-14 11:57:51 -05:00
Bryan Thompson
903a6aba48 Merge pull request #1409 from anthropics/add-shopify-ai-toolkit
Add shopify-ai-toolkit plugin
2026-04-14 11:57:45 -05:00
Bryan Thompson
dcd86cd6f9 Add shopify-ai-toolkit plugin 2026-04-14 11:54:28 -05:00
Bryan Thompson
985075c567 Merge pull request #1414 from anthropics/add-bigdata-com
Add bigdata-com plugin
2026-04-14 11:53:33 -05:00
Bryan Thompson
39353b5b42 Merge pull request #1413 from anthropics/update-plugin/nimble-remove-sha
Update nimble plugin: remove SHA pin
2026-04-14 11:53:30 -05:00
Bryan Thompson
507462e2fb Merge pull request #1408 from anthropics/add-shopify
Add shopify plugin
2026-04-14 11:53:25 -05:00
Bryan Thompson
d6fa70eb1a Merge pull request #1407 from anthropics/update-sonarqube
Update sonarqube plugin — rename, author, description
2026-04-14 11:53:20 -05:00
Bryan Thompson
8145923edc Remove SHA pin from azure-skills entry 2026-04-14 11:51:46 -05:00
Bryan Thompson
2b666914e6 Remove SHA pin from dataverse entry 2026-04-14 11:51:40 -05:00
Bryan Thompson
e8fb9898a6 Fix sort order: move shopify before skill-creator 2026-04-14 11:39:57 -05:00
Bryan Thompson
c28404f818 Add bigdata-com plugin 2026-04-14 11:29:03 -05:00
Bryan Thompson
622ef85323 Add shopify plugin 2026-04-14 07:52:48 -05:00
Bryan Thompson
173bd29be3 Update sonarqube plugin entry — rename, author, description 2026-04-14 07:39:11 -05:00
Bryan Thompson
0de7a91403 Add dataverse plugin 2026-04-13 18:00:49 -05:00
Bryan Thompson
c5b7657350 Add azure-skills plugin 2026-04-13 18:00:31 -05:00
4 changed files with 117 additions and 47 deletions

View File

@@ -9,7 +9,7 @@
"plugins": [
{
"name": "adlc",
"description": "Agentforce Agent Development Life Cycle author, discover, scaffold, deploy, test, and optimize .agent files",
"description": "Agentforce Agent Development Life Cycle \u2014 author, discover, scaffold, deploy, test, and optimize .agent files",
"category": "development",
"source": {
"source": "url",
@@ -63,7 +63,7 @@
},
{
"name": "aikido",
"description": "Aikido Security scanning for Claude Code SAST, secrets, and IaC vulnerability detection powered by the Aikido MCP server.",
"description": "Aikido Security scanning for Claude Code \u2014 SAST, secrets, and IaC vulnerability detection powered by the Aikido MCP server.",
"source": {
"source": "url",
"url": "https://github.com/AikidoSec/aikido-claude-plugin.git",
@@ -90,7 +90,7 @@
"url": "https://github.com/amplitude/mcp-marketplace.git",
"sha": "be54ccb66b10593721dd3a31e47b2db20ea02d2f"
},
"description": "Use Amplitude as an expert analyst instrument Amplitude, discover product opportunities, analyze charts, create dashboards, manage experiments, and understand users and accounts.",
"description": "Use Amplitude as an expert analyst \u2014 instrument Amplitude, discover product opportunities, analyze charts, create dashboards, manage experiments, and understand users and accounts.",
"category": "monitoring",
"homepage": "https://github.com/amplitude/mcp-marketplace"
},
@@ -168,6 +168,16 @@
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
{
"name": "azure",
"description": "Transform Claude into an Azure expert. This plugin integrates the Azure MCP server and specialized Azure skills to move beyond generic advice. It enables Claude to perform real-world tasks: listing resources, validating deployments, diagnosing infrastructure issues, and optimizing costs across 50+ Azure services.",
"category": "deployment",
"source": {
"source": "url",
"url": "https://github.com/microsoft/azure-skills.git"
},
"homepage": "https://github.com/microsoft/azure-skills"
},
{
"name": "azure-cosmos-db-assistant",
"source": {
@@ -175,7 +185,7 @@
"url": "https://github.com/AzureCosmosDB/cosmosdb-claude-code-plugin.git",
"sha": "56e6da0cae93cdee8bcfa5e624ecdd9a0a483181"
},
"description": "Expert assistant for Azure Cosmos DB data modeling, query optimization, performance tuning, and best practices.",
"description": "Expert assistant for Azure Cosmos DB \u2014 data modeling, query optimization, performance tuning, and best practices.",
"category": "database",
"homepage": "https://github.com/AzureCosmosDB/cosmosdb-claude-code-plugin"
},
@@ -190,9 +200,24 @@
},
"homepage": "https://docs.base44.com"
},
{
"name": "bigdata-com",
"description": "Official Bigdata.com plugin providing financial research, analytics, and intelligence tools powered by Bigdata MCP.",
"author": {
"name": "RavenPack"
},
"category": "database",
"source": {
"source": "git-subdir",
"url": "Bigdata-com/bigdata-plugins-marketplace",
"path": "plugins/bigdata-com",
"ref": "main"
},
"homepage": "https://docs.bigdata.com"
},
{
"name": "box",
"description": "Work with your Box content directly from Claude Code search files, organize folders, collaborate with your team, and use Box AI to answer questions, summarize documents, and extract data without leaving your workflow.",
"description": "Work with your Box content directly from Claude Code \u2014 search files, organize folders, collaborate with your team, and use Box AI to answer questions, summarize documents, and extract data without leaving your workflow.",
"category": "productivity",
"source": {
"source": "url",
@@ -319,7 +344,7 @@
},
{
"name": "cockroachdb",
"description": "CockroachDB plugin for Claude Code explore schemas, write optimized SQL, debug queries, and manage distributed database clusters directly from your AI coding agent.",
"description": "CockroachDB plugin for Claude Code \u2014 explore schemas, write optimized SQL, debug queries, and manage distributed database clusters directly from your AI coding agent.",
"source": {
"source": "url",
"url": "https://github.com/cockroachdb/claude-plugin.git",
@@ -351,7 +376,7 @@
},
{
"name": "coderabbit",
"description": "Your code review partner. CodeRabbit provides external validation using a specialized AI architecture and 40+ integrated static analyzersoffering a different perspective that catches bugs, security vulnerabilities, logic errors, and edge cases. Context-aware analysis via AST parsing and codegraph relationships. Automatically incorporates CLAUDE.md and project coding guidelines into reviews. Useful after writing or modifying code, before commits, when implementing complex or security-sensitive logic, or when a second opinion would increase confidence in the changes. Returns specific findings with suggested fixes that can be applied immediately. Free to use.",
"description": "Your code review partner. CodeRabbit provides external validation using a specialized AI architecture and 40+ integrated static analyzers\u2014offering a different perspective that catches bugs, security vulnerabilities, logic errors, and edge cases. Context-aware analysis via AST parsing and codegraph relationships. Automatically incorporates CLAUDE.md and project coding guidelines into reviews. Useful after writing or modifying code, before commits, when implementing complex or security-sensitive logic, or when a second opinion would increase confidence in the changes. Returns specific findings with suggested fixes that can be applied immediately. Free to use.",
"category": "productivity",
"source": {
"source": "url",
@@ -421,6 +446,18 @@
},
"homepage": "https://github.com/astronomer/agents"
},
{
"name": "dataverse",
"description": "Agent skills for building on, analyzing, and managing Microsoft Dataverse \u2014 with Dataverse MCP, PAC CLI, and Python SDK.",
"category": "database",
"source": {
"source": "git-subdir",
"url": "https://github.com/microsoft/Dataverse-skills.git",
"path": ".github/plugins/dataverse",
"ref": "main"
},
"homepage": "https://github.com/microsoft/Dataverse-skills"
},
{
"name": "deploy-on-aws",
"description": "Deploy applications to AWS with architecture recommendations, cost estimates, and IaC deployment.",
@@ -441,7 +478,7 @@
},
{
"name": "elixir-ls-lsp",
"description": "Elixir language server (ElixirLS) for Claude Code provides code intelligence and diagnostics for .ex, .exs, and .heex files.",
"description": "Elixir language server (ElixirLS) for Claude Code \u2014 provides code intelligence and diagnostics for .ex, .exs, and .heex files.",
"source": {
"source": "url",
"url": "https://github.com/MikaelFangel/claude-elixir-ls-lsp.git",
@@ -630,7 +667,7 @@
},
{
"name": "helius",
"description": "Build on Solana with Helius live blockchain tools, expert coding patterns, and autonomous account signup",
"description": "Build on Solana with Helius \u2014 live blockchain tools, expert coding patterns, and autonomous account signup",
"source": {
"source": "git-subdir",
"url": "helius-labs/core-ai",
@@ -863,7 +900,7 @@
},
{
"name": "netlify-skills",
"description": "Netlify platform skills for Claude Code functions, edge functions, blobs, database, image CDN, forms, config, CLI, frameworks, caching, AI gateway, and deployment.",
"description": "Netlify platform skills for Claude Code \u2014 functions, edge functions, blobs, database, image CDN, forms, config, CLI, frameworks, caching, AI gateway, and deployment.",
"category": "development",
"source": {
"source": "url",
@@ -883,7 +920,7 @@
},
{
"name": "nimble",
"description": "Nimble web data toolkit search, extract, map, crawl the web and work with structured data agents",
"description": "Nimble web data toolkit \u2014 search, extract, map, crawl the web and work with structured data agents",
"source": {
"source": "url",
"url": "https://github.com/Nimbleway/agent-skills.git"
@@ -902,7 +939,7 @@
},
{
"name": "opsera-devsecops",
"description": "Opsera DevSecOps Agent AI-powered architecture analysis, security scanning, compliance auditing, and SQL security for your codebase. Free trial included.",
"description": "Opsera DevSecOps Agent \u2014 AI-powered architecture analysis, security scanning, compliance auditing, and SQL security for your codebase. Free trial included.",
"source": {
"source": "url",
"url": "https://github.com/opsera-agents/opsera-devsecops.git",
@@ -912,7 +949,7 @@
},
{
"name": "optibot",
"description": "AI code review that catches production-breaking bugs, business logic issues, and security vulnerabilities directly in Claude Code.",
"description": "AI code review that catches production-breaking bugs, business logic issues, and security vulnerabilities \u2014 directly in Claude Code.",
"source": {
"source": "url",
"url": "https://github.com/Optimal-AI/optibot-skill.git",
@@ -977,7 +1014,7 @@
},
{
"name": "playground",
"description": "Creates interactive HTML playgrounds self-contained single-file explorers with visual controls, live preview, and prompt output with copy button. Includes templates for design playgrounds, data explorers, concept maps, and document critique.",
"description": "Creates interactive HTML playgrounds \u2014 self-contained single-file explorers with visual controls, live preview, and prompt output with copy button. Includes templates for design playgrounds, data explorers, concept maps, and document critique.",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
@@ -1058,7 +1095,7 @@
},
{
"name": "product-tracking-skills",
"description": "AI agent skills that make SaaS products data-ready for product analytics from codebase scan to tracking plan to working instrumentation code.",
"description": "AI agent skills that make SaaS products data-ready for product analytics \u2014 from codebase scan to tracking plan to working instrumentation code.",
"source": {
"source": "url",
"url": "https://github.com/Accoil/product-tracking-skills.git",
@@ -1104,7 +1141,7 @@
},
{
"name": "qodo-skills",
"description": "Qodo Skills provides a curated library of reusable AI agent capabilities that extend Claude's functionality for software development workflows. Each skill is designed to integrate seamlessly into your development process, enabling tasks like code quality checks, automated testing, security scanning, and compliance validation. Skills operate across your entire SDLCfrom IDE to CI/CDensuring consistent standards and catching issues early.",
"description": "Qodo Skills provides a curated library of reusable AI agent capabilities that extend Claude's functionality for software development workflows. Each skill is designed to integrate seamlessly into your development process, enabling tasks like code quality checks, automated testing, security scanning, and compliance validation. Skills operate across your entire SDLC\u2014from IDE to CI/CD\u2014ensuring consistent standards and catching issues early.",
"category": "development",
"source": {
"source": "url",
@@ -1228,7 +1265,7 @@
},
{
"name": "searchfit-seo",
"description": "Free AI-powered SEO toolkit audit websites, plan content strategy, optimize pages, generate schema markup, cluster keywords, and track AI visibility. Works with any website or codebase.",
"description": "Free AI-powered SEO toolkit \u2014 audit websites, plan content strategy, optimize pages, generate schema markup, cluster keywords, and track AI visibility. Works with any website or codebase.",
"source": {
"source": "url",
"url": "https://github.com/searchfit/searchfit-seo.git",
@@ -1280,7 +1317,7 @@
},
{
"name": "session-report",
"description": "Generate an explorable HTML report of Claude Code session usage tokens, cache efficiency, subagents, skills, and the most expensive prompts from local ~/.claude/projects transcripts.",
"description": "Generate an explorable HTML report of Claude Code session usage \u2014 tokens, cache efficiency, subagents, skills, and the most expensive prompts \u2014 from local ~/.claude/projects transcripts.",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
@@ -1289,6 +1326,32 @@
"category": "productivity",
"homepage": "https://github.com/anthropics/claude-plugins-official/tree/main/plugins/session-report"
},
{
"name": "shopify",
"description": "Shopify developer tools for Claude Code \u2014 search Shopify docs, generate and validate GraphQL, Liquid, and UI extension code",
"author": {
"name": "Shopify"
},
"category": "development",
"source": {
"source": "url",
"url": "https://github.com/Shopify/shopify-plugins.git"
},
"homepage": "https://shopify.dev/docs/apps/build/devmcp"
},
{
"name": "shopify-ai-toolkit",
"description": "Shopify's AI Toolkit provides 18 development skills for building on the Shopify platform, covering documentation search, API schema access, GraphQL and Liquid code validation, Hydrogen storefronts, Polaris UI extensions, store management via CLI, and onboarding guidance for both developers and merchants.",
"author": {
"name": "Shopify"
},
"category": "development",
"source": {
"source": "url",
"url": "https://github.com/Shopify/Shopify-AI-Toolkit.git"
},
"homepage": "https://shopify.dev"
},
{
"name": "skill-creator",
"description": "Create new skills, improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, or benchmark skill performance with variance analysis.",
@@ -1311,14 +1374,17 @@
"homepage": "https://github.com/slackapi/slack-mcp-plugin/tree/main"
},
{
"name": "sonarqube-agent-plugins",
"description": "Integrate SonarQube code quality and security analysis into Claude Code: namespaced slash commands, a guided skill to setup the SonarQube CLI, and a startup check for CLI wiring. MCP server registration and secrets-scanning hooks are installed by the SonarQube CLI as part of setup.",
"name": "sonarqube",
"description": "Automatically enforce SonarQube code quality and security in the agent coding loop \u2014 7,000+ rules, secrets scanning, agentic analysis, and quality gates across 40+ languages. PostToolUse hooks run analysis after every file edit. Pre-tool secrets scanning prevents 450+ patterns from reaching the LLM. Slash commands give on-demand access to quality gate status, coverage, duplication, and dependency risks. Includes SonarQube CLI, MCP Server, skills, hooks, and slash commands.",
"author": {
"name": "SonarSource"
},
"category": "security",
"source": {
"source": "url",
"url": "https://github.com/SonarSource/sonarqube-agent-plugins.git"
},
"homepage": "https://github.com/SonarSource/sonarqube-agent-plugins"
"homepage": "https://www.sonarsource.com"
},
{
"name": "sonatype-guide",
@@ -1343,7 +1409,7 @@
},
{
"name": "spotify-ads-api",
"description": "Manage Spotify ad campaigns with natural language. Create campaigns, ad sets, ads, pull reports, and handle OAuth all through conversation.",
"description": "Manage Spotify ad campaigns with natural language. Create campaigns, ad sets, ads, pull reports, and handle OAuth \u2014 all through conversation.",
"category": "productivity",
"source": {
"source": "url",

View File

@@ -222,6 +222,8 @@ type GateResult =
const recentSentIds = new Set<string>()
const RECENT_SENT_CAP = 200
const dmChannelUsers = new Map<string, string>()
function noteSent(id: string): void {
recentSentIds.add(id)
if (recentSentIds.size > RECENT_SENT_CAP) {
@@ -404,7 +406,8 @@ async function fetchAllowedChannel(id: string) {
const ch = await fetchTextChannel(id)
const access = loadAccess()
if (ch.type === ChannelType.DM) {
if (access.allowFrom.includes(ch.recipientId)) return ch
const userId = ch.recipientId ?? dmChannelUsers.get(id)
if (userId && access.allowFrom.includes(userId)) return ch
} else {
const key = ch.isThread() ? ch.parentId ?? ch.id : ch.id
if (key in access.groups) return ch
@@ -823,6 +826,10 @@ async function handleInbound(msg: Message): Promise<void> {
const chat_id = msg.channelId
if (msg.channel.type === ChannelType.DM) {
dmChannelUsers.set(chat_id, msg.author.id)
}
// Permission-reply intercept: if this looks like "yes xxxxx" for a
// pending permission request, emit the structured event instead of
// relaying as chat. The sender is already gate()-approved at this point

View File

@@ -1,7 +1,7 @@
{
"name": "telegram",
"description": "Telegram channel for Claude Code \u2014 messaging bridge with built-in access control. Manage pairing, allowlists, and policy via /telegram:access.",
"version": "0.0.5",
"version": "0.0.6",
"keywords": [
"telegram",
"messaging",

View File

@@ -985,14 +985,17 @@ bot.catch(err => {
process.stderr.write(`telegram channel: handler error (polling continues): ${err.error}\n`)
})
// 409 Conflict = another getUpdates consumer is still active (zombie from a
// previous session, or a second Claude Code instance). Retry with backoff
// until the slot frees up instead of crashing on the first rejection.
// Retry polling with backoff on any error. Previously only 409 was retried —
// a single ETIMEDOUT/ECONNRESET/DNS failure rejected bot.start(), the catch
// returned, and polling stopped permanently while the process stayed alive
// (MCP stdin keeps it running). Outbound tools kept working but the bot was
// deaf to inbound messages until a full restart.
void (async () => {
for (let attempt = 1; ; attempt++) {
try {
await bot.start({
onStart: info => {
attempt = 0
botUsername = info.username
process.stderr.write(`telegram channel: polling as @${info.username}\n`)
void bot.api.setMyCommands(
@@ -1008,28 +1011,22 @@ void (async () => {
return // bot.stop() was called — clean exit from the loop
} catch (err) {
if (shuttingDown) return
if (err instanceof GrammyError && err.error_code === 409) {
if (attempt >= 8) {
process.stderr.write(
`telegram channel: 409 Conflict persists after ${attempt} attempts — ` +
`another poller is holding the bot token (stray 'bun server.ts' process or a second session). Exiting.\n`,
)
return
}
const delay = Math.min(1000 * attempt, 15000)
const detail = attempt === 1
? ' — another instance is polling (zombie session, or a second Claude Code running?)'
: ''
process.stderr.write(
`telegram channel: 409 Conflict${detail}, retrying in ${delay / 1000}s\n`,
)
await new Promise(r => setTimeout(r, delay))
continue
}
// bot.stop() mid-setup rejects with grammy's "Aborted delay" — expected, not an error.
if (err instanceof Error && err.message === 'Aborted delay') return
process.stderr.write(`telegram channel: polling failed: ${err}\n`)
return
const is409 = err instanceof GrammyError && err.error_code === 409
if (is409 && attempt >= 8) {
process.stderr.write(
`telegram channel: 409 Conflict persists after ${attempt} attempts — ` +
`another poller is holding the bot token (stray 'bun server.ts' process or a second session). Exiting.\n`,
)
return
}
const delay = Math.min(1000 * attempt, 15000)
const detail = is409
? `409 Conflict${attempt === 1 ? ' — another instance is polling (zombie session, or a second Claude Code running?)' : ''}`
: `polling error: ${err}`
process.stderr.write(`telegram channel: ${detail}, retrying in ${delay / 1000}s\n`)
await new Promise(r => setTimeout(r, delay))
}
}
})()