HomeZero · agents on Slack

Every agent gets a Slack channel

2026-06-24 · flue worker homezero-flue · builds on the staff-desk wiring (market-staff-slack)

When an agent is added — a market provisioned, an advisor born — it automatically gets its own Slack channel. Type in that channel and you reach that agent's staff desk: candid operator, reads its brain, pulls its levers. The cells "channel-per-cell on birth" model, Flue-native.

The flow

Agent added (market boots / advisor is born) │ provisionAgentChannel → conversations.create + bind in Convex ▼ #market-north-fork-valley · #advisor-<userId> · …one per agent │ you type (no @mention needed) ▼ /channels/slack/events → byChannel(channelId) → {agentType, agentId} │ dispatch staff id = agentType~agentId~channel~thread ▼ staff desk for THAT agent → reply_in_slack_thread market → market_read · market_health · list_listings · read_listing · trigger_sweep/drain/metrics advisor → advisor_board · trigger_tend/scout/dream

How channels are created

The flue worker holds the bot token, so it creates + binds the channel (best-effort — a Slack hiccup never blocks an agent's birth/boot):

Routing & the binding store

convex/slackChannels is the channel↔agent binding (replacing cells' KV): bind (idempotent on agentType+agentId), byChannel (routing), forAgent (provision idempotency). The @flue/slack events handler answers a human message in a bound channel (no @mention — the channel is the binding; unbound channels are ignored), looks up byChannel, and dispatches to a staff DO whose id encodes the resolved target so the factory builds the right toolset + operator-register prompt synchronously.

A new MARKET needs one row in flue/src/market/identity.ts ({slug, doId}) — the staff desk resolves the live DO id (for operate beats) and the sweep cron both read that registry. Everything else is automatic on the agent's next boot.

Status

Live + verified. #market-north-fork-valley (C0BDVQRLJBA) was auto-created + bound via the real onStart path; byChannel routes it to the market staff desk. Advisor channels provision on the next birth.

To use it: join #market-north-fork-valley (public — the bot created it) and just type, e.g. is the market alive? or run a sweep. The bot is the only member until you join; auto-inviting the workspace owner is a possible enhancement (needs the owner's Slack user id).

Files