Signal messaging integration plugin for ElizaOS agents with end-to-end encryption support.
- Secure Messaging: End-to-end encrypted communication via Signal protocol
- Direct Messages: Send and receive direct messages with contacts
- Group Chats: Participate in Signal group conversations
- Reactions: Add emoji reactions to messages
- Contacts: List and manage Signal contacts
- Groups: List and interact with Signal groups
- Typing Indicators: Send typing status notifications
npm install @elizaos/plugin-signal
# or
bun add @elizaos/plugin-signalThis plugin requires a running Signal CLI REST API server or direct access to signal-cli.
Run the Signal CLI REST API server using Docker:
docker run -d --name signal-api -p 8080:8080 \
-v signal-cli-config:/home/.local/share/signal-cli \
bbernhard/signal-cli-rest-apiThen register or link your Signal account:
# Register a new number
curl -X POST "http://localhost:8080/v1/register/+1234567890"
# Or link to existing Signal account
curl -X GET "http://localhost:8080/v1/qrcodelink?device_name=ElizaOS"Install signal-cli:
# macOS
brew install signal-cli
# Linux
wget https://github.com/AsamK/signal-cli/releases/latest/download/signal-cli-X.X.X.tar.gz
tar xf signal-cli-*.tar.gz -C /optRegister your phone number with Signal.
# Your Signal phone number in E.164 format
SIGNAL_ACCOUNT_NUMBER=+1234567890# Signal CLI REST API URL (if using HTTP API)
SIGNAL_HTTP_URL=http://localhost:8080
# Path to signal-cli executable (if using CLI directly)
SIGNAL_CLI_PATH=/usr/local/bin/signal-cli
# Ignore group messages (only respond to DMs)
SIGNAL_SHOULD_IGNORE_GROUP_MESSAGES=falseimport signalPlugin from "@elizaos/plugin-signal";
const agent = {
// ... other configuration
plugins: [signalPlugin],
};{
"name": "MyAgent",
"clients": ["signal"],
"settings": {
"signal": {
"shouldIgnoreGroupMessages": false
}
}
}| Action | Description |
|---|---|
SIGNAL_SEND_MESSAGE |
Send a message to a contact or group |
SIGNAL_SEND_REACTION |
React to a message with an emoji |
SIGNAL_LIST_CONTACTS |
List Signal contacts |
SIGNAL_LIST_GROUPS |
List Signal groups |
| Provider | Description |
|---|---|
signalConversationState |
Current conversation context and metadata |
The plugin emits the following events:
SIGNAL_MESSAGE_RECEIVED- When a message is receivedSIGNAL_MESSAGE_SENT- When a message is sentSIGNAL_REACTION_RECEIVED- When a reaction is receivedSIGNAL_GROUP_JOINED- When joining a groupSIGNAL_GROUP_LEFT- When leaving a group
The main service class providing direct access to Signal functionality:
import { SignalService, SIGNAL_SERVICE_NAME } from "@elizaos/plugin-signal";
// Get service from runtime
const signalService = runtime.getService(SIGNAL_SERVICE_NAME) as SignalService;
// Send a message
await signalService.sendMessage("+1234567890", "Hello!");
// Send a group message
await signalService.sendGroupMessage(groupId, "Hello everyone!");
// Add a reaction
await signalService.sendReaction(
"+1234567890",
"👍",
messageTimestamp,
authorNumber
);
// Get contacts
const contacts = await signalService.getContacts();
// Get groups
const groups = await signalService.getGroups();- Signal provides end-to-end encryption for all messages
- Your Signal account credentials are stored locally
- The HTTP API should only be accessible from trusted networks
- Consider using HTTPS and authentication for production deployments
- Verify Signal CLI REST API is running and accessible
- Check that your account number is correctly formatted (E.164)
- Ensure the account is properly registered/linked with Signal
- Verify the recipient number is in E.164 format
- Check that you have an active internet connection
- Ensure Signal servers are reachable
- Use a phone number that can receive SMS
- Wait for the verification code
- Complete the verification process before starting the bot
MIT