{"slug": "show-hn-linkgravity-chat-and-voice-bridge-for-ai-coding-agents", "title": "Show HN: LinkGravity – chat and voice bridge for AI coding agents", "summary": "LinkGravity, a new open-source bot interface for the Antigravity agentic AI system, lets users run AI coding agents from Discord, Telegram, or Slack with chat-based approval buttons, voice interaction on Discord, and multi-modal file attachments. The tool, which requires Node.js 18+, Python 3.10+, and the Antigravity CLI, translates CLI prompts into chat UI components and supports multiple sessions as threads with auto-naming. It aims to bring agentic coding workflows into team chat platforms, with setup guides for each messenger.", "body_md": "A Discord, Telegram, and Slack bot interface for the Antigravity agentic AI system. It translates Antigravity CLI prompts into chat UI components and provides voice interaction capabilities.\n\n**Sessions as Threads:** Each`agy`\n\nconversation lives in its own thread, so several can run side by side and stay readable later. Threads get named from what you actually talked about instead of staying`Session-XXXX`\n\n.**Approval Flow:** Command and tool-call approvals become interactive chat buttons. Chained shell commands are approved individually, and any approval can be scoped to auto-allow that command or tool going forward - something plain`agy`\n\ndoesn't do.**Voice Interaction:** Talk to the agent from a Discord voice channel and hear its replies. Say your wake word to get its attention, so side conversation in the channel doesn't set it off.**Multi-Modal Input:** Attach files for the AI to read, including audio, which gets transcribed to text automatically.**Same Agent as Your Terminal:** Reads the`agy`\n\nsetup already on the machine, so sessions started from chat use the same models and settings you use locally.\n\n| Discord | Telegram | Slack | |\n|---|---|---|---|\n| Sessions | Threads | Flat | Threads |\n| Voice | ✓ | ✗ | ✗ |\n| Approval buttons | ✓ | ✓ | ✓ |\n| File attachments | ✓ | ✓ | ✓ |\n| Session title auto-rename | ✓ | ✗ | ✓ |\n| DMs | ✓ | ✓ | ✓ |\n| Group | ✓ | ✗ | ✓ |\n\n- Node.js >= 18\n- Python >= 3.10\n- Antigravity CLI installed on this machine\n- A messenger bot token, and at least one server/channel to allow it in - Discord, Telegram, and Slack are all supported, and you can enable more than one at once\n\nIn the [Discord Developer Portal](https://discord.com/developers/applications):\n\n**New Application**, name it, then go to** Bot**in the left sidebar.- Under\n**Privileged Gateway Intents**, enable** Message Content Intent**- required, since the bot reads message text/attachments. - Click\n**Reset Token** to reveal the bot token, and copy it - this is what goes into`lgy setup`\n\n's`discord_token`\n\n. - Go to\n**OAuth2 > URL Generator** in the sidebar. Under**Scopes**, check** bot**and** applications.commands**. Under the** Bot Permissions**box that appears below, check:- Send Messages, Send Messages in Threads, Create Public Threads\n- Read Message History, Attach Files, Embed Links, Add Reactions\n- Connect, Speak (for voice channel support)\n\n- Copy the\n**Generated URL** at the bottom of that page, open it in a browser, and invite the bot to your server.\n\nMessage [@BotFather](https://t.me/BotFather) on Telegram, send `/newbot`\n\n, and follow the prompts to get a bot token. No further permission setup is needed - Telegram sessions are 1 chat = 1 session, so just message your bot directly (or add it to a group) and run `/new`\n\n.\n\nSlack has more moving parts than the others - two separate tokens, and a few settings pages that gate each other. Going in this order avoids re-doing steps:\n\n- Go to\n[api.slack.com/apps](https://api.slack.com/apps)>**Create New App**>** From scratch**, name it, and pick your workspace. **Socket Mode**(left sidebar) > toggle it on. This avoids needing a public HTTP endpoint. Slack will prompt you to generate an app-level token here - name it anything, add the`connections:write`\n\nscope, and**Generate**. Copy this token (starts with`xapp-`\n\n) - this is`slack_app_token`\n\n.- If it doesn't prompt you, go to\n**Basic Information > App-Level Tokens > Generate Token and Scopes** instead.\n\n- If it doesn't prompt you, go to\n**OAuth & Permissions**(left sidebar) > scroll to** Scopes > Bot Token Scopes**(not** User Token Scopes**- that's a different section further up the page, for a different token, and is not used here).** Add an OAuth Scope**for each of:`chat:write`\n\n,`channels:history`\n\n,`groups:history`\n\n,`im:history`\n\n,`mpim:history`\n\n,`reactions:write`\n\n,`files:read`\n\n,`files:write`\n\n.- Scroll to the top of that same page >\n**Install to Workspace**>** Allow**. This generates the token under** OAuth Tokens > Bot User OAuth Token**, starting with`xoxb-`\n\n. Copy that one - this is`slack_bot_token`\n\n.- It's easy to grab the wrong token here - the page also shows a\n**User OAuth Token**(`xoxp-...`\n\n) further down, which is a different thing and won't work for this bot.\n\n- It's easy to grab the wrong token here - the page also shows a\n**App Home**(left sidebar) > under** Show Tabs**, turn on** Messages Tab**, then check** Allow users to send Slash commands and messages from the messages tab**- this is what lets you DM the bot at all. (If this section looks greyed out, it's because step 3 hasn't been saved/installed yet - go back and do that first.)**Event Subscriptions**(left sidebar) > toggle** Enable Events**on > under** Subscribe to bot events**, add`message.channels`\n\n,`message.groups`\n\n,`message.im`\n\n, and`message.mpim`\n\n>**Save Changes**.** Slash Commands**(left sidebar) >** Create New Command**, four times, for`/new`\n\n,`/model`\n\n,`/credit`\n\n, and`/permissions`\n\n(any description/hint text is fine - only the command name matters).- Back on\n**OAuth & Permissions**, since scopes/events changed after the initial install, click** Reinstall to Workspace**to push those changes live. Any time you change scopes or events later, you'll need to repeat this step. - In Slack itself, for any\n**channel**(not DM) you want the bot usable in, run`/invite @<your bot's name>`\n\nthere first - the bot can't post in a channel it hasn't been added to.\n\n```\nnpm install -g linkgravity\n```\n\nSets up its own Python environment automatically - no manual `pip install`\n\nneeded.\n\nRun the configuration wizard once to pick which platform(s) to enable and set their tokens, allowed users, and other settings:\n\n```\nlgy setup\n```\n\nThis writes to `~/.gemini/linkgravity/lgy.json`\n\n, outside the package directory, so `npm update`\n\n/reinstall never touches it. You can re-run `lgy setup`\n\nany time to change settings later - each field keeps its current value if you leave it empty. Discord, Telegram, and Slack can all be turned on independently; the bot runs whichever ones are enabled in a single shared process.\n\nFor Discord, during setup you'll be asked for one or more servers to allow, and optionally specific channels within each:\n\n- Leave the channel list empty for a server →\n**the whole server** is allowed - any channel can start a session. - List specific channel IDs for a server →\n**only those channels** in that server are allowed.\n\nTelegram and Slack have no server/channel gating yet - every chat/channel you message the bot from can start a session, subject to the allowed-users list you set during setup.\n\nA new session is started with the ** /new** slash command - never just by typing a message. On Discord and Slack,\n\n`/new`\n\nworks both in a regular channel and from inside an existing thread; on Telegram, it applies to whichever chat you send it in.\n\n```\nlgy start      # Start the bot as a background daemon via PM2\nlgy stop       # Stop it\nlgy restart    # Restart it\nlgy logs       # View live logs - add -f to follow, --tail N for more lines\nlgy enable     # Register the bot to auto-start on system boot\nlgy disable    # Remove it from system boot\nlgy            # Interactive menu - same commands, picked from a list\nnpm i\n```\n\nThat's it - it wires up [Ruff](https://docs.astral.sh/ruff/) for Python and [Prettier](https://prettier.io/) for Node, plus git hooks that lint/format on commit and enforce [Conventional Commits](https://www.conventionalcommits.org/) commit messages.\n\n```\nLOG_LEVEL=DEBUG lgy start\n```\n\nUse `lgy logs -t`\n\nto include timestamps.\n\nThis bot gives an AI agent broad access to the machine it runs on - **that's inherent to what it does, so don't expose it publicly or run it somewhere you don't fully trust its users.**\n\n- The allowed-users list for each platform, set via\n`lgy setup`\n\n, is your primary access control - always set it. - Tool calls, including shell commands, go through an approval flow by default; treat anyone on an allowed-users list as having effectively full control of this machine.\n- Your bot tokens and other settings live in\n`~/.gemini/linkgravity/lgy.json`\n\n, outside this repo/package directory - never commit or share that file.", "url": "https://wpnews.pro/news/show-hn-linkgravity-chat-and-voice-bridge-for-ai-coding-agents", "canonical_source": "https://github.com/dev-sseul/linkgravity", "published_at": "2026-08-14 11:28:38+00:00", "updated_at": "2026-08-14 11:41:10.673634+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-products"], "entities": ["LinkGravity", "Antigravity", "Discord", "Telegram", "Slack"], "alternates": {"html": "https://wpnews.pro/news/show-hn-linkgravity-chat-and-voice-bridge-for-ai-coding-agents", "markdown": "https://wpnews.pro/news/show-hn-linkgravity-chat-and-voice-bridge-for-ai-coding-agents.md", "text": "https://wpnews.pro/news/show-hn-linkgravity-chat-and-voice-bridge-for-ai-coding-agents.txt", "jsonld": "https://wpnews.pro/news/show-hn-linkgravity-chat-and-voice-bridge-for-ai-coding-agents.jsonld"}}