Tidal Echo plugin
A Claude Code channel plugin and phone PWA: a private chat with an agent session through your own server, no chat service
- 340 ★ on the repository
- Last commit
- AGPL-3.0
Broad access
Why this level
- Anyone who knows `RELAY_SECRET` sends messages straight into an agent session with access to the computer's files and commands
- The `--dangerously-load-development-channels` flag and the auto-confirm scripts remove the standard dialog protection
- A public relay on a VPS stores the whole chat in SQLite
Install
- Works in
Manual install
{"mcpServers": {"companion": {"command": "bun", "args": ["run", "--cwd", "/абсолютный/путь/companion-channel", "--silent", "start"]}}}Bring up the relay first and put the key in `~/.claude/channels/companion/.env`. Bun is required.
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- Anyone who knows `RELAY_SECRET` sends messages straight into an agent session with access to the computer's files and commands
- The `--dangerously-load-development-channels` flag and the auto-confirm scripts remove the standard dialog protection
- A public relay on a VPS stores the whole chat in SQLite
This is third-party code. Review the repository files before installing.
What it does
Tidal Echo links a phone to a Claude Code session running on a computer. The repository has three parts: `backend/` (a FastAPI relay with SQLite that fans messages out over SSE), `web/` (a single-page HTML PWA installed on the home screen) and `channel/` (a Claude Code plugin on Bun and MCP). A message from the phone appears in the session as a `<channel>` block, the agent replies by calling the `reply` tool, and the answer reaches the phone as a chat message. A single shared secret, `RELAY_SECRET`, protects access: there are no user accounts and no third-party hosting, messages pass only through your server. MiniMax voice and Web Push are optional and switch off with empty settings. Any model with an OpenAI-compatible API can replace Claude Code: the `examples/bridge_any_llm.py` script swaps the AI side. The `examples/api_loop.py` script keeps a resident agent on the server with a fallback model chain, images and attachments, MCP tools over stdio or streamable-http and a system prompt file that reloads without a restart.
Who it is for. People who message their own Claude Code session from a phone and keep the chat only on their own server.
Good fit when
- A Claude Code session runs on a home computer and you want answers on a phone with push
- The chat with the AI lives only on your VPS, with no third-party chat hosting
- Claude Code is swapped for GPT, DeepSeek or Gemini: the client stays and the AI side moves to `bridge_any_llm.py`
- The server needs a resident agent with MCP tools and attachments: `api_loop.py` does that
Not a fit when
- You need a ready cloud service: you will have to set up a relay, nginx, a systemd service and an HTTPS domain
- Several people use the chat: the system is built for one user and one key
- Unattended launch is unacceptable: Claude Code with the `--dangerously-load-development-channels` flag asks for confirmation at every start
- You only need a chat with a model over API without Claude Code: ready-made clients will do
Example request
Deploy Tidal Echo following AGENTS.md: the relay on my VPS, the PWA on my domain, the plugin in Claude Code, and test the chain with a message from the phoneLimitations
- The system is built for one user with one `RELAY_SECRET`, there are no user accounts.
- The PWA needs a domain with HTTPS: without it installation, the service worker and Web Push do not work.
- Claude Code starts with the `--dangerously-load-development-channels server:companion` flag, and every start shows a confirmation dialog. For an automatic answer the repository ships scripts for tmux and Windows.
- The documentation is in Chinese, the last commit is from September 2026.
How to disable. Close the Claude Code session started with `--dangerously-load-development-channels` and remove the companion key from `.mcp.json`. Stop the relay service with `systemctl disable --now companion-relay`, then delete `~/.claude/channels/companion/.env` and the SQLite database on the server.
FAQ
How do I connect Tidal Echo to Claude Code?
Copy the `channel/` folder to your computer, write `RELAY_SECRET` into `~/.claude/channels/companion/.env`, register the companion server in `.mcp.json` with the `bun` command and start `claude --dangerously-load-development-channels server:companion`. Details are in `channel/DEPLOY.md`.
Can I use another model instead of Claude?
Yes. The frontend and relay stay, and the `examples/bridge_any_llm.py` script replaces the AI side for any OpenAI-compatible API.
Do I need my own server?
Yes. The relay and the PWA go on your VPS with an HTTPS domain: without it PWA installation, the service worker and Web Push do not work.
Do voice and push notifications work?
Yes, as optional features: MiniMax voice and lock-screen Web Push switch on in settings. With empty settings the chat works without them.
Can I connect MCP tools?
Through `examples/api_loop.py`: the server-side agent connects MCP servers over stdio or streamable-http and shows each call step in the chat.
Discussion
No questions or reviews yet.
Related
PluginsA bridge server and mobile app that opens your computer's Claude Code and Codex sessions as a chat on your phone
A Claude Code plugin that phones you when the agent has finished, is stuck, or needs a decision
Direct messages, groups and a durable inbox for AI agents on your own server, free within Cloudflare limits
A bridge linking WeChat, WeCom or Telegram with local Codex, Claude Code, OpenCode and Pi so the agent can be driven from a phone.
A local mesh for coding agents: Claude Code, Codex, OpenCode and Pi exchange questions across projects and machines
Agent-Native Agent
Agent-Native Agent (ANA)
A Claude Code plugin and self-hosted app: a dashboard and chat with a coding agent that rewrites the app while you use it
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| Tidal Echo (this card) | no | 340 | ||
| Claude Code WeChat Channel | no | OAuth | 311 | a channel through WeChat, while Tidal Echo has its own relay and PWA on your server |
| Claude Code VKontakte Channel | no | 2 | a channel through a VKontakte community, while Tidal Echo routes the chat through your server |
README in short
The README, in Chinese, explains the three-part scheme, the full deployment order (relay, PWA, plugin), the option of using the frontend with your own backend and the protocol: three required API endpoints and optional ones. A separate section covers the server API loop.