3.8 KiB
Honker
Honker is an ACP bridge that lets you drive the Goose coding agent from Signal Messenger.
Send a message to your Signal account, Goose does the work, and the response comes back as a Signal message.
Prerequisites
Honker expects both tools to already be installed and configured on the machine where it runs:
- Goose — installed and configured with an AI provider (
goose configure) - signal-cli — installed and registered/linked to a Signal account
- uv — Python package manager
- Python 3.12+
Quick Start
-
Clone and install
git clone <repo-url> honker cd honker uv sync -
Create a config file
mkdir -p ~/.config/honker cp config.sample.yaml ~/.config/honker/config.yamlEdit
~/.config/honker/config.yamlwith your details:account: "+15551234567" trusted_contacts: - name: "Alice" number: "+15559876543" working_directory: "/home/user/projects" -
Run honker
uv run honkerThat's it. Honker starts signal-cli and Goose, connects them, and waits for messages from your trusted contacts.
Configuration
All configuration lives in ~/.config/honker/config.yaml (or pass --config <path>).
| Option | Default | Description |
|---|---|---|
account |
(required) | Your Signal phone number (e.g. "+15551234567") |
trusted_contacts |
[] |
List of contacts allowed to interact with Goose. Each has a name and number. |
working_directory |
. |
Working directory for Goose sessions. Use an absolute path. |
auto_approve_tools |
false |
When true, Goose runs tools without asking. When false, each tool call prompts you for approval over Signal. |
forward_thoughts |
false |
When true, forwards Goose's chain-of-thought reasoning to Signal. Can be noisy. |
See config.sample.yaml for a complete example.
Usage
Send a regular text message from a trusted contact's Signal account. Honker forwards it to Goose, waits for the response, and sends it back.
Slash Commands
| Command | Description |
|---|---|
/cancel |
Cancel the current in-progress request |
/new |
Close the current session and start a fresh one |
/help |
Show available commands |
Tool Approval
When auto_approve_tools is false (the default), Goose asks for permission before running tools. You'll receive a message like:
🔐 *Permission requested*
shell · rm -rf /tmp/old-stuff
1. allow_always
2. allow_once
3. reject_once
4. reject_always
Reply with a number to choose:
Reply with a number or the option name (e.g. 2 or allow).
Images
You can send images to Goose via Signal — they're forwarded as part of the prompt. Useful for asking about screenshots, diagrams, etc.
Debugging
uv run honker --debug ./logs
This enables verbose logging and writes per-process output to the given directory:
logs/signal-cli.stdout.log/logs/signal-cli.stderr.log
Goose maintains its own logs at ~/.local/state/goose/logs/.
Technical Details
- Honker manages the lifecycle of both Goose and signal-cli rather than expecting them as separate services
- Goose is launched via
goose acp(stdio-based ACP protocol) using the agent-client-protocol Python library - signal-cli runs as a daemon with a Unix socket JSON-RPC interface
- Each trusted contact gets their own Goose session with separate conversation history
- Only one prompt per user is processed at a time — additional messages get a "please wait" reply
License
TBD