gemini-discord
Discord bridge for Gemini CLI / ACP agent workflows
Open source Open in the app JSON README (API)
About
Discord bridge for Gemini CLI / ACP agent workflows
Details
- Kind
- Plugins
- Topic
- AI, RAG & memory
- Publisher
- yamato-main
- Origin
- gemini
- Category
- ferramentas
- Version
- 0.1.1
- Stars
- 4
- Forks
- 3
- Last push
- 2026-06-19T14:52:59Z
- Repository state
- ativo
- Language
- TypeScript
- License
- MIT
- Added
- 2026-08-30 14:13:39
- Updated
- 2026-08-30 14:13:39
- Origin id
yamato-main/gemini-discord
README
# gemini-discord Discord bridge for Gemini CLI / ACP agent workflows. [](LICENSE) [](https://github.com/google-gemini/gemini-cli) [](https://modelcontextprotocol.io) [](https://discord.js.org) [](https://nodejs.org) `gemini-discord` connects your Discord app to [Gemini CLI](https://github.com/google-gemini/gemini-cli), providing a chat interface for your agent. Using the CLI's native **Agent Client Protocol (ACP)** mode, it lets you manage sessions, automate tasks, and interact with your agent via Discord DMs or server channels. Send a task from your phone. Your agent picks it up, works in the same workspace, and replies in the same channel. Sessions stay warm. Credentials stay local. Authority stays with one Discord user ID you control. This extension leverages native multimodal capabilities of Gemini models, allowing you to send images, video, audio, PDFs, and source files directly through the Discord interface for immediate, in-context interpretation by the agent. --- ## Discord Bot Setup You need a bot application before installing: 1. Create an application at [discord.com/developers/applications](https://discord.com/developers/applications). 2. Go to **Bot** → Reset Token → copy it. This is `DISCORD_BOT_TOKEN`. 3. Enable **Message Content Intent** (required) and **Server Members Intent** (required by default; requested unless `DISCORD_ENABLE_SERVER_MEMBERS_INTENT` is set to `false`). Ensure both are toggled ON in the Developer Portal under the **Bot** tab. 4. Go to **OAuth2 → URL Generator**. Scopes: `bot`, `applications.commands`. Minimum permissions: View Channels, Read Message History, Send Messages, Attach Files, Use Slash Commands, Add Reactions. 5. Open the generated URL to invite the bot to your server. 6. Enable Developer Mode in Discord (Settings → Advanced), then right-click your username and copy your User ID. This is `DISCORD_BOSS_USER_ID`. --- ## Install Requires [Gemini CLI](https://github.com/google-gemini/gemini-cli), Node.js 22+, and a Discord bot token. For this bridge workflow, authenticate Gemini CLI with non-interactive credentials that the daemon can pass to child processes: ```bash export GEMINI_API_KEY="YOUR_API_KEY" ``` Vertex AI is also supported through Gemini CLI's `GOOGLE_GENAI_USE_VERTEXAI`, `GOOGLE_API_KEY`, `GOOGLE_CLOUD_PROJECT`, and `GOOGLE_CLOUD_LOCATION` environment variables. Browser OAuth is not recommended for unattended bridge sessions. ```bash gemini extensions install https://github.com/Yamato-main/gemini-discord ``` The installer prompts for Discord setup values and Gemini auth values. `GEMINI_API_KEY` is recommended for unattended bridge sessions; Vertex AI users can leave it blank and set the Vertex variables instead. Restart Gemini CLI and the bot should come online. | Prompt | What it is | | --- | --- | | Discord Bot Token | From the Discord Developer Portal | | Boss User ID | Your stable numeric Discord user ID — the only ID with full authority | | Server ID | The server where the bot is installed | | Gemini API Key | Recommended API-key auth for Gemini CLI child processes | | Vertex AI settings | Optional `GOOGLE_GENAI_USE_VERTEXAI`, `GOOGLE_API_KEY`, `GOOGLE_CLOUD_PROJECT`, and `GOOGLE_CLOUD_LOCATION` values | Legacy owner and admin routing IDs are auto-derived from Boss User ID unless overridden in [advanced configuration](docs/configuration.md). If startup fails, see [docs/troubleshooting.md](docs/troubleshooting.md). --- ## Updating Configuration To rotate credentials or update setup values: ```bash gemini extensions config gemini-discord ``` For local development: ```bash npm run setup ``` --- ## What it can do **From Discord, you can:** - Chat with your agent in any channel, thread, or DM - Send attachments — images, video, audio, PDFs, text, Markdown, JSON, source files — and the agent receives them in-session - Trigger scheduled tasks and cron jobs - Search local media files and post them back when authorized **Your agent gains Discord tools:** | Tool | Actions | | --- | --- | | `discord_message` | Send, reply, create native Discord threads, edit, delete, react, fetch reactions, pin, unpin | | `discord_admin` | Status, restart, reset sessions, discover channels/users, set presence, kick, timeout | | `discord_history` | Read recent exchanges and archived sessions | | `discord_cron` | Schedule and manage reminders and recurring jobs | | `discord_find_media` | Search host machine media and post to Discord | **Slash commands:** | Command | Description | | --- | --- | | `/new` | Fresh session for the current channel | | `/model` | Switch the Gemini CLI model or alias. Defaults to `auto`; custom `GEMINI_AVAILABLE_MODELS` values only affect autocomplete suggestions. | | `/status` | Daemon health and runtime info | | `/pool` | Process pool state (boss only) | | `/kill` | Kill a pooled process (boss only) | | `/workflow` | Create and start a monitored workflow thread for a task (boss only) | | `/ping` | Round-trip latency | **Slash command visibility model:** - Global slash commands are registered only for bot DMs. They use Discord's `BotDM` interaction context and guild-install integration type so public global commands do not appear across every server channel. - Guild slash commands are registered separately for each guild where the bot is installed. Guild payloads intentionally omit global `contexts` and `integration_types`; Discord scopes those commands to that guild install. - Discord command visibility is not treated as authorization. The daemon still checks `DISCORD_BOSS_USER_ID`, owner IDs, and allowed users at interaction time. - Privileged commands such as `/model`, `/pool`, `/kill`, and `/workflow` remain boss-gated even if Discord shows the command to someone else because of guild command permissions or server UI state. --- ## Permissions Two roles: `BOSS` and `GUEST`. **Boss** authority is granted only by `DISCORD_BOSS_USER_ID` — never by username, display name, role, server owner status, or any other Discord metadata. If that value is missing or malformed, privileged actions fail closed. **Guests** are globally disabled by default. Human users in `DISCORD_ALLOWED_USER_IDS` can chat in allowed channels even when `DISCORD_ENABLE_GUESTS=false`; other human users can chat only when `DISCORD_ENABLE_GUESTS=true`. When available, simple public Google Search may be allowed for guests. Guest attachment processing, including image viewing, is disabled by default and can be enabled with `DISCORD_ENABLE_GUEST_ATTACHMENTS=true`; boss attachment processing is unaffected. Guests cannot use MCP tools, shell access, filesystem access, history, discovery, cron, admin, moderation, or outbound Discord actions. Peer bots remain separate and must be listed in `DISCORD_ALLOWED_AGENT_IDS`. Server replies require an explicit mention by default; set `RESPOND_TO_REPLIES=true` only if you want direct replies to bot messages to trigger responses. All message sends require an explicit target. If a target can't be proven, the action fails — there is no fallback channel. Credentials and runtime state stay local. Do not commit `.env`, `.gemini-discord/`, logs, databases, tokens, or real Discord IDs. --- ## Configuration Most users only need the install prompts. Full reference via [docs/configuration.md](docs/configuration.md). | Prompt | Purpose | | --- | --- | | Discord Bot Token | Lets the bridge connect to Discord | | Boss User ID | The only Discord user ID with full authority | | Server ID | Server where the bot is installed | | Gemini API Key | Recommended API-key auth for Gemini CLI child processes | | Vertex AI settings | Optional Vertex AI auth for Gemini CLI child processes | Update these later with: ```bash gemini extensions config gemini-discord ``` **Agent instructions:** This extension does not ship a `GEMINI.md`. Keep your agent instructions in `~/.gemini/GEMINI.md`. The bridge adds only transport context — message metadata, channel/thread/DM scope, attachment refs, and permission metadata. --- ## Development ```bash git clone https://github.com/Yamato-main/gemini-discord cd gemini-discord npm ci && npm run setup && npm run build ``` Install a local path: ```bash gemini extensions install /absolute/path/to/gemini-discord ``` ```bash npm run typecheck # Type-check npm run version:check # Verify package, manifest, lockfile, and runtime version fields npm run version:bump -- 0.1.2 npm test # Run tests npm run dev:daemon # Daemon in dev mode npm run start:daemon # Start daemon npm run start:server # Start MCP server npm run install-service # Install as system service ``` Before releasing: follow [RELEASE.md](RELEASE.md). Run `npm ci`, `npm run version:check`, `npm run typecheck`, `npm run build`, and `npm test`; commit `dist/`; keep `.env` and `.gemini-discord/` untracked; use placeholder IDs in examples; add the `gemini-cli-extension` GitHub topic. ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md). ## License [MIT](LICENSE)