@elizaos/plugin-tunnel
v2.0.0-beta.1
Published
Tunnel plugin for elizaOS — local Tailscale CLI backend (serve/funnel). Pair with @elizaos/plugin-elizacloud for the hosted headscale backend.
Downloads
93
Readme
@elizaos/plugin-tunnel
Local Tailscale-CLI tunnel backend for elizaOS.
Registers serviceType = "tunnel" and exposes:
TUNNELaction — dispatcher withopparameter-enum (start | stop | status). LegacyTAILSCALE-prefixed action names are kept as similes.TUNNEL_STATEprovider — reads the active service'sgetStatus()into model state.LocalTunnelService— wrapstailscale serve/tailscale funnel.
Coexistence
plugin-tunnel, @elizaos/plugin-elizacloud (hosted headscale + reverse proxy), and @elizaos/plugin-ngrok all register under serviceType="tunnel". First active wins — each plugin's init only registers if its credentials are present and the slot is free.
character.plugins = [
'@elizaos/plugin-elizacloud', // wins if ELIZAOS_CLOUD_API_KEY set
'@elizaos/plugin-tunnel', // falls back to local tailscale CLI
'@elizaos/plugin-ngrok', // last-resort, if NGROK_AUTHTOKEN set
];Setup
- Install Tailscale:
brew install tailscale(or download). - Authenticate the device once:
- Against the public Tailscale tailnet:
tailscale up - Or against a self-hosted headscale:
tailscale up --login-server=https://headscale.example.com
- Against the public Tailscale tailnet:
- Optional:
TUNNEL_FUNNEL=trueto expose publicly via Tailscale Funnel.
Config
| Env var | Default | Notes |
|---|---|---|
| TUNNEL_TAGS | tag:eliza-tunnel | Comma-separated ACL tags (informational; user authenticates separately) |
| TUNNEL_FUNNEL | false | When true, uses tailscale funnel instead of tailscale serve |
| TUNNEL_DEFAULT_PORT | 3000 | Used when no port is extracted from the user's message |
TAILSCALE_* aliases are accepted for one release window.
