{"id":51129966,"url":"https://github.com/osisdie/claude-code-channels","last_synced_at":"2026-06-25T11:01:32.986Z","repository":{"id":346070703,"uuid":"1188013522","full_name":"osisdie/claude-code-channels","owner":"osisdie","description":"Connect Claude Code to messaging platforms (Telegram, Discord, Slack, LINE, WhatsApp) for bidirectional, remote interaction with your local AI agent.","archived":false,"fork":false,"pushed_at":"2026-04-04T12:40:06.000Z","size":8269,"stargazers_count":3,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-04T14:41:55.546Z","etag":null,"topics":["ai-agent","anthropic","chatbot","claude","claude-channels","claude-code","claude-code-channels","discord-bot","line-bot","mcp","no-webhook","remote-ai-agent","remote-control","slack-bot","teams-bot","telegram-bot","telegram-claude","whatsapp-bot","whatsapp-cloud-api","wsl2"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osisdie.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-21T13:57:19.000Z","updated_at":"2026-04-04T12:40:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/osisdie/claude-code-channels","commit_stats":null,"previous_names":["osisdie/claude-code-channels"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/osisdie/claude-code-channels","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osisdie%2Fclaude-code-channels","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osisdie%2Fclaude-code-channels/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osisdie%2Fclaude-code-channels/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osisdie%2Fclaude-code-channels/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osisdie","download_url":"https://codeload.github.com/osisdie/claude-code-channels/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osisdie%2Fclaude-code-channels/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34771664,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent","anthropic","chatbot","claude","claude-channels","claude-code","claude-code-channels","discord-bot","line-bot","mcp","no-webhook","remote-ai-agent","remote-control","slack-bot","teams-bot","telegram-bot","telegram-claude","whatsapp-bot","whatsapp-cloud-api","wsl2"],"created_at":"2026-06-25T11:01:30.782Z","updated_at":"2026-06-25T11:01:32.972Z","avatar_url":"https://github.com/osisdie.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# claude-code-channels\n\n[![CI](https://github.com/osisdie/claude-code-channels/actions/workflows/ci.yml/badge.svg)](https://github.com/osisdie/claude-code-channels/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/github/license/osisdie/claude-code-channels)](LICENSE)\n[![GitHub issues](https://img.shields.io/github/issues/osisdie/claude-code-channels)](https://github.com/osisdie/claude-code-channels/issues)\n[![GitHub stars](https://img.shields.io/github/stars/osisdie/claude-code-channels)](https://github.com/osisdie/claude-code-channels/stargazers)\n[![Bun](https://img.shields.io/badge/Bun-%E2%89%A51.0-f9f1e1?logo=bun\u0026logoColor=000)](https://bun.sh/)\n[![Claude Code](https://img.shields.io/badge/Claude_Code-%E2%89%A5v2.1.80-cc785c?logo=anthropic\u0026logoColor=white)](https://docs.anthropic.com/en/docs/claude-code)\n[![GitHub release](https://img.shields.io/github/v/release/osisdie/claude-code-channels)](https://github.com/osisdie/claude-code-channels/releases)\n\nEnglish | [繁體中文](README.zh-TW.md)\n\nConnect Claude Code to messaging platforms for bidirectional, remote interaction with your local AI agent.\n\n## What This Is\n\nA project-level setup for running [Claude Code](https://docs.anthropic.com/en/docs/claude-code) with the official Channels plugin system. Send tasks from your phone, approve risky operations remotely, and share files -- all through your preferred messaging app.\n\n## Supported Channels\n\n| Channel | Status | Docs |\n| ------- | ------ | ---- |\n| [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?logo=telegram\u0026logoColor=white)](docs/telegram/) | ![Ready](https://img.shields.io/badge/Ready-brightgreen) | [docs/telegram/](docs/telegram/) |\n| [![Discord](https://img.shields.io/badge/Discord-5865F2?logo=discord\u0026logoColor=white)](docs/discord/) | ![Ready](https://img.shields.io/badge/Ready-brightgreen) | [docs/discord/](docs/discord/) |\n| [![Slack](https://img.shields.io/badge/Slack-4A154B?logo=slack\u0026logoColor=white)](docs/slack/) | ![Broker](https://img.shields.io/badge/Broker-blue) | [docs/slack/](docs/slack/) |\n| [![LINE](https://img.shields.io/badge/LINE-00C300?logo=line\u0026logoColor=white)](docs/line/) | ![Broker](https://img.shields.io/badge/Broker-blue) | [docs/line/](docs/line/) |\n| [![WhatsApp](https://img.shields.io/badge/WhatsApp-25D366?logo=whatsapp\u0026logoColor=white)](docs/whatsapp/) | ![Broker](https://img.shields.io/badge/Broker-blue) | [docs/whatsapp/](docs/whatsapp/) |\n| [![Teams](https://img.shields.io/badge/Microsoft_Teams-6264A7?logo=microsoftteams\u0026logoColor=white)](docs/teams/) | ![Planned](https://img.shields.io/badge/Planned-lightgrey) | [docs/teams/](docs/teams/) |\n\n## Quick Start\n\n### Prerequisites\n\n- [Bun](https://bun.sh/) runtime\n- Claude Code v2.1.80+\n- A bot token for your target channel (e.g., Telegram's [@BotFather](https://t.me/BotFather))\n\n### Setup\n\n1. **Clone and configure:**\n\n   ```bash\n   git clone https://github.com/osisdie/claude-code-channels.git\n   cd claude-code-channels\n   cp .env.example .env\n   # Edit .env — add your bot token(s)\n   ```\n\n2. **Install a channel plugin** (inside a Claude Code session):\n\n   ```text\n   /plugin marketplace add anthropics/claude-plugins-official\n   /plugin install telegram@claude-plugins-official\n   /telegram:configure \u003cYOUR_BOT_TOKEN\u003e\n   ```\n\n3. **Pair your account** (varies per channel — see channel docs).\n\n4. **Launch:**\n\n   ```bash\n   ./start.sh telegram\n   ```\n\n## Docker (Broker Channels)\n\nEach broker channel can run as an isolated Docker container:\n\n```bash\n# Build and run WhatsApp broker\ndocker compose up whatsapp\n\n# Run multiple brokers\ndocker compose up slack whatsapp\n\n# Run all brokers\ndocker compose up\n```\n\n\u003e **Note:** Set `ANTHROPIC_API_KEY` in your `.env` file. The Claude CLI authenticates via API key inside the container.\n\n## Architecture\n\n```text\nMessaging App (Mobile/Desktop)\n    | (Platform API, outbound polling by plugin)\nChannel Plugin (Bun subprocess, MCP Server)\n    | (stdio transport)\nClaude Code Session (local, full filesystem access)\n```\n\nNo inbound ports, webhooks, or external servers needed. WSL2 compatible.\n\nFor a deep dive into the official plugin internals, see [Plugin Architecture](docs/plugins/architecture.md).\n\n## Usage Examples\n\n### Remote Task Execution\n\n```text\n# From Telegram/Discord, send:\nWhat files changed in the last commit?\n\n# Claude Code executes `git diff HEAD~1` and replies with the diff summary\n```\n\n### Approval Workflow\n\n```text\n# Claude Code encounters a destructive operation:\nBot: \"About to run `rm -rf dist/` — approve or reject?\"\nYou: approve\n# Claude Code proceeds\n```\n\n### Multi-Channel Launch\n\n```bash\n# Start with multiple channels simultaneously\n./start.sh telegram discord\n```\n\n## Project Structure\n\n```text\n.\n├── start.sh                  # Multi-channel launcher\n├── docker-compose.yml        # Per-broker Docker services\n├── docker/                   # Per-channel Dockerfiles\n├── .env.example              # Environment variable template\n├── .gitignore                # Excludes secrets \u0026 channel state\n├── CHANGELOG.md\n├── CONTRIBUTING.md\n├── SECURITY.md\n├── LICENSE\n├── README.md\n├── README.zh-TW.md\n├── docs/\n│   ├── prerequisites.md      # Shared setup (Bun, Claude Code)\n│   ├── prerequisites.zh-tw.md # Shared setup (zh-TW)\n│   ├── issues.md             # Known issues (cross-channel)\n│   ├── plugins/\n│   │   ├── architecture.md       # Official plugin architecture (EN)\n│   │   └── architecture.zh-tw.md # Official plugin architecture (zh-TW)\n│   ├── telegram/\n│   │   ├── plan.md           # Integration planning doc\n│   │   ├── plan.zh-tw.md     # Planning doc (zh-TW)\n│   │   ├── install.md        # Installation \u0026 integration notes\n│   │   ├── install.zh-tw.md  # Installation notes (zh-TW)\n│   │   └── security.png\n│   ├── discord/\n│   │   ├── plan.md           # Integration planning doc\n│   │   ├── plan.zh-tw.md     # Planning doc (zh-TW)\n│   │   ├── install.md        # Installation \u0026 integration notes\n│   │   └── install.zh-tw.md  # Installation notes (zh-TW)\n│   ├── slack/\n│   │   ├── plan.md           # Integration plan (MCP only, not channel)\n│   │   ├── install.md        # Installation \u0026 integration notes\n│   │   └── install.zh-tw.md  # Installation notes (zh-TW)\n│   ├── line/\n│   │   ├── plan.md           # Integration planning doc\n│   │   ├── plan.zh-tw.md     # Planning doc (zh-TW)\n│   │   ├── install.md        # Installation \u0026 integration notes\n│   │   └── install.zh-tw.md  # Installation notes (zh-TW)\n│   ├── whatsapp/\n│   │   ├── plan.md           # Integration planning doc\n│   │   ├── install.md        # Installation \u0026 integration notes\n│   │   └── install.zh-tw.md  # Installation notes (zh-TW)\n│   └── teams/\n│       ├── plan.md           # Integration planning doc\n│       ├── install.md        # Installation \u0026 integration notes\n│       └── install.zh-tw.md  # Installation notes (zh-TW)\n├── external_plugins/\n│   ├── slack-channel/\n│   │   └── broker.ts         # Slack message broker\n│   ├── line-channel/\n│   │   ├── broker.ts         # LINE webhook broker (direct, needs ngrok)\n│   │   ├── broker-relay.ts   # LINE relay bridge (polls cloud relay)\n│   │   └── relay/            # Cloudflare Worker (cloud webhook)\n│   ├── whatsapp-channel/\n│   │   ├── broker-relay.ts   # WhatsApp relay bridge\n│   │   └── relay/            # Cloudflare Worker (cloud webhook)\n│   └── teams-channel/\n│       ├── broker-relay.ts   # Teams relay bridge\n│       ├── relay/            # Cloudflare Worker (cloud webhook)\n│       └── manifest/         # Teams app manifest for sideloading\n├── lib/\n│   ├── sessions/             # Session memory (STM + LTM + compacting)\n│   └── safety/               # Content filter, quota, audit logging\n├── scripts/\n│   ├── verify_slack.sh       # Slack token verification \u0026 smoke test\n│   ├── verify_whatsapp.sh    # WhatsApp relay verification \u0026 smoke test\n│   └── yt/                   # YouTube-to-PDF pipeline (/yt2pdf)\n│       ├── get_transcript.py # Extract transcript (subtitles → Whisper)\n│       ├── build_html.py     # Markdown → styled HTML (base64 images)\n│       ├── build_pdf.py      # HTML → PDF via headless Chrome\n│       ├── upload_b2.py      # Upload to B2 + presigned URL\n│       └── yt2pdf.py         # Orchestrator (HTML→PDF→B2)\n├── .github/\n│   ├── ISSUE_TEMPLATE/\n│   │   ├── bug_report.md\n│   │   └── feature_request.md\n│   ├── PULL_REQUEST_TEMPLATE.md\n│   └── workflows/ci.yml\n└── .claude/                  # (gitignored)\n    ├── agents/\n    │   └── pre-push-reviewer.md\n    ├── settings.local.json   # Permission whitelist\n    └── channels/\u003cchannel\u003e/   # Per-channel state (tokens, access)\n```\n\n## Screenshots\n\n### Telegram\n\n| Ask | Reply | Inline Buttons |\n|-----|-------|----------------|\n| \u003cimg src=\"docs/screenshots/telegram/ask.png\" width=\"300\" alt=\"Telegram Ask\"\u003e | \u003cimg src=\"docs/screenshots/telegram/reply.png\" width=\"300\" alt=\"Telegram Reply\"\u003e | \u003cimg src=\"docs/screenshots/telegram/button.png\" width=\"300\" alt=\"Telegram Inline Buttons\"\u003e |\n\n### YouTube to PDF (`/yt2pdf`)\n\n| Command | Result | PDF Output |\n|---------|--------|------------|\n| \u003cimg src=\"docs/screenshots/telegram/yt2pdf_ask.png\" width=\"300\" alt=\"yt2pdf Command\"\u003e | \u003cimg src=\"docs/screenshots/telegram/yt2pdf_reply.png\" width=\"300\" alt=\"yt2pdf Reply\"\u003e | [summary_en.pdf](tests/youtube/summary_en.pdf) |\n\nSend `/yt2pdf \u003cYouTube URL\u003e` from Telegram or Discord. Claude extracts the transcript, generates a bilingual summary (EN + zh-TW), builds a styled PDF with thumbnail, and uploads to B2 Cloud Storage with a presigned download link.\n\n### Discord\n\n| Ask | Reply |\n|-----|-------|\n| \u003cimg src=\"docs/screenshots/discord/ask.png\" width=\"300\" alt=\"Discord Ask\"\u003e | \u003cimg src=\"docs/screenshots/discord/reply.png\" width=\"300\" alt=\"Discord Reply\"\u003e |\n\n### Slack\n\n| Ask | Reply |\n|-----|-------|\n| \u003cimg src=\"docs/screenshots/slack/ask.png\" width=\"300\" alt=\"Slack Ask\"\u003e | \u003cimg src=\"docs/screenshots/slack/reply.png\" width=\"300\" alt=\"Slack Reply\"\u003e |\n\n### LINE\n\n| Ask (Flower) | Ask (Weather) |\n|------|------|\n| \u003cimg src=\"docs/screenshots/line/ask_flower.jpg\" width=\"300\" alt=\"LINE Flower\"\u003e | \u003cimg src=\"docs/screenshots/line/ask_weather.jpg\" width=\"300\" alt=\"LINE Weather\"\u003e |\n\n### LINE Relay (Cloud)\n\n| Ask (EN) | Ask (zh-TW) |\n|------|------|\n| \u003cimg src=\"docs/screenshots/line-relay/ask_number_en.png\" width=\"300\" alt=\"LINE Relay EN\"\u003e | \u003cimg src=\"docs/screenshots/line-relay/ask_number_zh-tw.png\" width=\"300\" alt=\"LINE Relay zh-TW\"\u003e |\n\n### WhatsApp Relay (Cloud)\n\n| Ask (Flower) | Ask (Weather) |\n|------|------|\n| \u003cimg src=\"docs/screenshots/whatsapp-relay/ask_flower.jpg\" width=\"300\" alt=\"WhatsApp Flower\"\u003e | \u003cimg src=\"docs/screenshots/whatsapp-relay/ask_weather.jpg\" width=\"300\" alt=\"WhatsApp Weather\"\u003e |\n\n### Claude Code Terminal\n\n![Claude Code Channel Messages](docs/screenshots/claude_code/channel_messages.png)\n\n## Docs\n\n### Per-Channel\n\n- [Telegram -- Installation \u0026 Integration Notes](docs/telegram/install.md)\n- [Telegram -- Planning Document](docs/telegram/plan.md)\n- [Discord -- Installation \u0026 Integration Notes](docs/discord/install.md)\n- [Discord -- Planning Document](docs/discord/plan.md)\n- [Slack -- Installation \u0026 Integration Notes](docs/slack/install.md)\n- [Slack -- Planning Document](docs/slack/plan.md)\n- [LINE -- Installation \u0026 Integration Notes](docs/line/install.md)\n- [LINE -- Planning Document](docs/line/plan.md)\n- [LINE -- Relay Deployment Guide](docs/line/relay.md)\n- [WhatsApp -- Installation \u0026 Integration Notes](docs/whatsapp/install.md)\n- [WhatsApp -- Planning Document](docs/whatsapp/plan.md)\n- [Teams -- Installation \u0026 Integration Notes](docs/teams/install.md)\n- [Teams -- Planning Document](docs/teams/plan.md)\n\n### General\n\n- [Prerequisites (Bun, Claude Code)](docs/prerequisites.md)\n- [Plugin Architecture](docs/plugins/architecture.md) ([繁體中文](docs/plugins/architecture.zh-tw.md))\n- [Session Memory](docs/broker/memory.md)\n- [Safety \u0026 Abuse Prevention](docs/broker/safety.md)\n- [Known Issues (Cross-Channel)](docs/issues.md)\n- [Contributing](CONTRIBUTING.md)\n- [Security Policy](SECURITY.md)\n- [Changelog](CHANGELOG.md)\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosisdie%2Fclaude-code-channels","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosisdie%2Fclaude-code-channels","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosisdie%2Fclaude-code-channels/lists"}