How it works
termux-channel implements the channel capability contract. Any plugin that needs to communicate with you can use it as the transport layer.
Agent sends a message
A plugin calls send_message with expects_reply=True. The provider generates a short correlation ID and delivers the message as a phone notification with a Reply button.
You tap Reply
Android Direct Reply lets you type your response right in the notification shade. The reply is curled back to the desktop over Tailscale.
Agent gets the response
The agent calls get_reply which blocks until your reply arrives or times out. Correlation IDs handle multiplexing when multiple agents ask questions.
Features
Correlation IDs
Each message gets a short hex ID prepended. Multiple agents can have outstanding questions on the same phone. Replies are matched by ID.
Blocking replies
get_reply blocks until the response arrives or times out. No polling loops, no wasted tool calls. One call, one result.
Capability provider
Implements the channel contract. Works with approval-channel for human-in-the-loop workflows, or any plugin that needs to reach a person.
Architecture
Desktop Phone (Termux)
termux-channel MCP
send_message() ──HTTP POST──> phone-channel (8788)
> termux-notification
with Reply button
reply server (8790)
<──curl──────────────────── button action
writes to pending store curls $REPLY back
get_reply()
reads pending store > returns reply
Install
Requires Tailscale on both devices and phone-channel running in Termux on your Android phone.
claude plugin marketplace add softwaresoftware-dev/softwaresoftware-plugins
claude plugin install softwaresoftware@softwaresoftware-plugins
claude
/softwaresoftware:install termux-channel
/termux-channel:setup