agentcomms

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 7, 2026 License: MIT

README ΒΆ

AgentComms

Go CI Go Lint Go SAST Go Report Card Docs Visualization License

An MCP plugin that enables voice calls and chat messaging for AI coding assistants. Start a task, walk away. Your phone rings when the AI is done, stuck, or needs a decision. Or get notified via Discord, Telegram, or WhatsApp.

Supports: Claude Code, AWS Kiro CLI, Gemini CLI

Built with the plexusone stack - showcasing a complete voice and chat AI architecture in Go.

Features

  • πŸ“ž Phone Calls: Real voice calls to your phone via Twilio
  • πŸ’¬ Chat Messaging: Send messages via Discord, Telegram, or WhatsApp
  • πŸ”„ Multi-turn Conversations: Back-and-forth discussions, not just one-way notifications
  • ⚑ Smart Triggers: Hooks that suggest calling/messaging when you're stuck or done with work
  • πŸ”€ Mix and Match: Use voice, chat, or both based on your needs

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           agentcomms                                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  MCP Tools (via mcpkit)                                                   β”‚
β”‚  β”œβ”€β”€ Voice Tools                                                          β”‚
β”‚  β”‚   β”œβ”€β”€ initiate_call  - Start a new call to the user                    β”‚
β”‚  β”‚   β”œβ”€β”€ continue_call  - Continue conversation on active call            β”‚
β”‚  β”‚   β”œβ”€β”€ speak_to_user  - Speak without waiting for response              β”‚
β”‚  β”‚   └── end_call       - End the call with optional goodbye              β”‚
β”‚  └── Chat Tools                                                           β”‚
β”‚      β”œβ”€β”€ send_message   - Send message via Discord/Telegram/WhatsApp      β”‚
β”‚      β”œβ”€β”€ list_channels  - List available chat channels                    β”‚
β”‚      └── get_messages   - Get recent messages from a channel              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Managers                                                                 β”‚
β”‚  β”œβ”€β”€ Voice Manager - Orchestrates calls, TTS, STT                         β”‚
β”‚  └── Chat Manager  - Routes messages across chat providers                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  omnivoice (voice abstraction layer)                                      β”‚
β”‚  β”œβ”€β”€ tts.Provider       - Text-to-Speech interface                        β”‚
β”‚  β”œβ”€β”€ stt.Provider       - Speech-to-Text interface                        β”‚
β”‚  β”œβ”€β”€ transport.Transport - Audio streaming interface                      β”‚
β”‚  └── callsystem.CallSystem - Phone call management interface              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  omnichat (chat abstraction layer)                                        β”‚
β”‚  β”œβ”€β”€ provider.Provider  - Chat provider interface                         β”‚
β”‚  └── provider.Router    - Message routing and handling                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Provider Implementations                                                 β”‚
β”‚  β”œβ”€β”€ Voice: ElevenLabs, Deepgram, OpenAI, Twilio                          β”‚
β”‚  └── Chat:  Discord, Telegram, WhatsApp                                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  mcpkit                                                                   β”‚
β”‚  - MCP server with HTTP/SSE transport                                     β”‚
β”‚  - Built-in ngrok integration for public webhooks                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The plexusone Stack

This project demonstrates the plexusone voice and chat AI stack:

Package Role Description
omnivoice Voice Abstraction Batteries-included TTS/STT with registry-based provider lookup
omnichat Chat Abstraction Provider-agnostic chat messaging interface
elevenlabs-go Voice Provider ElevenLabs streaming TTS and STT
omnivoice-deepgram Voice Provider Deepgram streaming TTS and STT
omnivoice-openai Voice Provider OpenAI TTS and STT
omnivoice-twilio Phone Provider Twilio transport and call system
mcpkit Server MCP server runtime with ngrok and multiple transport modes

Installation

Prerequisites
  • Go 1.25+
  • For voice: Twilio account + ngrok account
  • For chat: Discord/Telegram bot token (optional)
Build
cd /path/to/agentcomms
go mod tidy
go build -o agentcomms ./cmd/agentcomms

Configuration

Environment Variables
# ===== Voice (optional) =====

# Twilio credentials
export AGENTCOMMS_PHONE_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AGENTCOMMS_PHONE_AUTH_TOKEN=your_auth_token
export AGENTCOMMS_PHONE_NUMBER=+15551234567      # Your Twilio number
export AGENTCOMMS_USER_PHONE_NUMBER=+15559876543  # Your personal phone

# Voice provider selection (default: elevenlabs for TTS, deepgram for STT)
export AGENTCOMMS_TTS_PROVIDER=elevenlabs  # "elevenlabs", "deepgram", or "openai"
export AGENTCOMMS_STT_PROVIDER=deepgram    # "elevenlabs", "deepgram", or "openai"

# API keys (based on selected providers)
export AGENTCOMMS_ELEVENLABS_API_KEY=your_elevenlabs_key  # or ELEVENLABS_API_KEY
export AGENTCOMMS_DEEPGRAM_API_KEY=your_deepgram_key      # or DEEPGRAM_API_KEY
export AGENTCOMMS_OPENAI_API_KEY=your_openai_key          # or OPENAI_API_KEY

# ngrok (required for voice)
export NGROK_AUTHTOKEN=your_ngrok_authtoken

# Optional voice settings
export AGENTCOMMS_TTS_VOICE=Rachel           # ElevenLabs voice
export AGENTCOMMS_TTS_MODEL=eleven_turbo_v2_5
export AGENTCOMMS_STT_MODEL=nova-2
export AGENTCOMMS_STT_LANGUAGE=en-US

# ===== Chat (optional) =====

# Discord
export AGENTCOMMS_DISCORD_ENABLED=true
export AGENTCOMMS_DISCORD_TOKEN=your_discord_bot_token  # or DISCORD_TOKEN
export AGENTCOMMS_DISCORD_GUILD_ID=optional_guild_id

# Telegram
export AGENTCOMMS_TELEGRAM_ENABLED=true
export AGENTCOMMS_TELEGRAM_TOKEN=your_telegram_bot_token  # or TELEGRAM_BOT_TOKEN

# WhatsApp
export AGENTCOMMS_WHATSAPP_ENABLED=true
export AGENTCOMMS_WHATSAPP_DB_PATH=./whatsapp.db

# ===== Server =====
export AGENTCOMMS_PORT=3333
export AGENTCOMMS_NGROK_DOMAIN=myapp.ngrok.io  # Optional custom domain
Legacy Environment Variables

For backwards compatibility, AGENTCALL_* variables are also supported with AGENTCOMMS_* taking precedence.

Usage

Running the Server
./agentcomms

Output:

Starting agentcomms MCP server...
Using plexusone stack:
  - omnivoice (voice abstraction)
  - omnichat (chat abstraction)
  - mcpkit (MCP server)
Voice providers: tts=elevenlabs stt=deepgram
Chat providers: [discord telegram]
MCP server ready
  Local:  http://localhost:3333/mcp
  Public: https://abc123.ngrok.io/mcp
Multi-Tool Support

agentcomms supports multiple AI coding assistants. Generate configuration files for your preferred tool:

# Generate for a specific tool
go run ./cmd/generate-plugin claude .   # Claude Code
go run ./cmd/generate-plugin kiro .     # AWS Kiro CLI
go run ./cmd/generate-plugin gemini .   # Gemini CLI

# Generate for all tools
go run ./cmd/generate-plugin all ./plugins
Claude Code Integration

Option 1: Use generated plugin files

go run ./cmd/generate-plugin claude .

This creates:

  • .claude-plugin/plugin.json - Plugin manifest
  • skills/phone-input/SKILL.md - Voice calling skill
  • skills/chat-messaging/SKILL.md - Chat messaging skill
  • commands/call.md - /call slash command
  • commands/message.md - /message slash command
  • .claude/settings.json - Lifecycle hooks

Option 2: Manual MCP configuration

Add to ~/.claude/settings.json or .claude/settings.json:

{
  "mcpServers": {
    "agentcomms": {
      "command": "/path/to/agentcomms",
      "env": {
        "AGENTCOMMS_PHONE_ACCOUNT_SID": "ACxxx",
        "AGENTCOMMS_PHONE_AUTH_TOKEN": "xxx",
        "AGENTCOMMS_PHONE_NUMBER": "+15551234567",
        "AGENTCOMMS_USER_PHONE_NUMBER": "+15559876543",
        "NGROK_AUTHTOKEN": "xxx",
        "AGENTCOMMS_DISCORD_ENABLED": "true",
        "AGENTCOMMS_DISCORD_TOKEN": "xxx"
      }
    }
  }
}

MCP Tools

Voice Tools
initiate_call

Start a new call to the user.

{
  "message": "Hey! I finished implementing the feature. Want me to walk you through it?"
}

Returns:

{
  "call_id": "call-1-1234567890",
  "response": "Sure, go ahead and explain what you built."
}
continue_call

Continue an active call with another message.

{
  "call_id": "call-1-1234567890",
  "message": "I added authentication using JWT. Should I also add refresh tokens?"
}
speak_to_user

Speak without waiting for a response (useful for status updates).

{
  "call_id": "call-1-1234567890",
  "message": "Let me search for that in the codebase. Give me a moment..."
}
end_call

End the call with an optional goodbye message.

{
  "call_id": "call-1-1234567890",
  "message": "Perfect! I'll get started on that. Talk soon!"
}
Chat Tools
send_message

Send a message to a chat channel.

{
  "provider": "discord",
  "chat_id": "123456789",
  "message": "I've finished the PR! Here's the link: https://github.com/..."
}
list_channels

List available chat channels and their status.

{}

Returns:

{
  "channels": [
    {"provider_name": "discord", "status": "connected"},
    {"provider_name": "telegram", "status": "connected"}
  ]
}
get_messages

Get recent messages from a chat conversation.

{
  "provider": "telegram",
  "chat_id": "987654321",
  "limit": 5
}

Use Cases

Phone calls are ideal for:

  • Reporting significant task completion
  • Requesting urgent clarification when blocked
  • Discussing complex decisions
  • Walking through code changes
  • Multi-step processes needing back-and-forth

Chat messaging is ideal for:

  • Asynchronous status updates
  • Sharing links, code, or formatted content
  • Non-urgent notifications
  • Follow-up summaries

Development

Project Structure
agentcomms/
β”œβ”€β”€ cmd/
β”‚   β”œβ”€β”€ agentcomms/
β”‚   β”‚   └── main.go          # Entry point
β”‚   β”œβ”€β”€ generate-plugin/
β”‚   β”‚   └── main.go          # Plugin generator
β”‚   └── publish/
β”‚       └── main.go          # Marketplace publisher
β”œβ”€β”€ pkg/
β”‚   β”œβ”€β”€ voice/
β”‚   β”‚   └── manager.go       # Voice call orchestration
β”‚   β”œβ”€β”€ chat/
β”‚   β”‚   └── manager.go       # Chat message routing
β”‚   β”œβ”€β”€ config/
β”‚   β”‚   └── config.go        # Configuration
β”‚   └── tools/
β”‚       └── tools.go         # MCP tool definitions
β”œβ”€β”€ go.mod
└── README.md
Dependencies
  • github.com/plexusone/omnivoice - Batteries-included voice abstraction
  • github.com/plexusone/omnichat - Chat messaging abstraction
  • github.com/plexusone/omnivoice-twilio - Twilio transport and call system
  • github.com/plexusone/mcpkit - MCP server runtime
  • github.com/modelcontextprotocol/go-sdk - MCP protocol SDK

Cost Estimate

Service Cost
Twilio outbound calls ~$0.014/min
Twilio phone number ~$1.15/month
ElevenLabs TTS $0.30/1K chars ($0.03/min of speech)
ElevenLabs STT ~$0.10/min (Scribe)
Deepgram TTS ~$0.015/1K chars
Deepgram STT ~$0.0043/min (Nova-2)
Discord/Telegram Free
ngrok (free tier) $0

License

MIT

Credits

Inspired by ZeframLou/call-me (TypeScript).

Built with the plexusone stack:

Directories ΒΆ

Path Synopsis
cmd
agentcomms command
Package main is the entry point for the agentcomms MCP server.
Package main is the entry point for the agentcomms MCP server.
generate-plugin command
Package main generates AI assistant integration files using assistantkit bundle.
Package main generates AI assistant integration files using assistantkit bundle.
publish command
Package main publishes the agentcomms plugin to the Claude Code marketplace.
Package main publishes the agentcomms plugin to the Claude Code marketplace.
pkg
chat
Package chat provides chat channel integration using omnichat.
Package chat provides chat channel integration using omnichat.
config
Package config provides configuration management for agentcomms.
Package config provides configuration management for agentcomms.
tools
Package tools defines the MCP tools for agentcomms.
Package tools defines the MCP tools for agentcomms.
voice
Package voice orchestrates voice calls using the omnivoice stack.
Package voice orchestrates voice calls using the omnivoice stack.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL