Repository navigation
ChannelGate 0.6.0
ChannelGate 0.6.0: secrets never sit in a channel's container any more, and containers reach the network only through the gateway.
Highlights
- Every channel container runs with
--network nonebehind its own egress proxy. Allow network is now enforced, not advisory: with it off, only the engine APIs and the channel's selected MCP servers are reachable. Private, loopback and metadata addresses are always refused. - Secrets and logins are placeholders.
- Known tokens (GitHub, Vercel, Supabase, Make, Composio) and variables with Allowed domains are swapped for the real value in flight, only on their servers.
- The Claude and Codex logins reach containers as placeholders too.
- Remote MCP credentials stay in the daemon. SSH sessions run on the same placeholders.
- Every variable is hidden by default, and an admin approves each new server once. The first time a program sends a hidden variable somewhere new, the proxy refuses that one request and posts an admin-only card in the thread. Passwords, connection strings, signing keys and configuration values stay readable automatically. Model APIs never receive a swapped value.
- Variables UI. Slack and the admin page say Variables. Adding one asks only "It's a secret" plus optional Allowed domains, and the admin page lists them in a table.
- Fixes.
- Codex Read-mode channels run commands again.
- A non-admin turn is read-only while an Admin channel mounts the operator home.
- The in-container browser works behind the proxy.
- The Claude model pickers show exact versions.
- Codex usage metrics are switched off.
- Also included: keyed paging and
count_rowsfor channel database reads, a Slack Settings Automations page, the Files / Variables / Settings menu on every reply, and retries of transient remote-MCP dials.
Full list: CHANGELOG.md.
Upgrade
Run scripts/update.sh (or the Enterprise automatic updater) from 0.5.7.
- Image rebuild: the runtime image is spec 1.6.1 (bubblewrap, per-channel
/tmpvolumes). The updater (Settings → Update, orscripts/update.sh) rebuilds the default image automatically. Runnpm run build:imageby hand only if the update reports that the image build failed, or if the host uses a custom image. - Migration: migration 30 (
egress_grants) applies automatically. - Existing containers are recreated once.
- Variables without a rule become hidden, so each asks once per server it is used on.
set_secret_mode readableor Allowed domains change that.
Evidence
- Release evidence workflow: https://github.com/makeitfutureDev/channelgate/actions/runs/36421072994
- Release PR with the gate results: #115