Session & Topic Model
The key to understanding botmux is figuring out "which session a given message lands in" — confusions like "why does every @ feel like a fresh start that lost my context" and "how does a new group pull in history" all trace back to this.
Applies to: when you're unsure which session a message went to, want to control new-vs-reused sessions, or are configuring in-group permissions.
Three group shapes
When “show a status card while a task runs” is off,
/t <text>still produces a visible topic reply first so Lark expands the thread immediately; reactions are only progress indicators.
On-call groups & chat-scope groups
- On-call group:
/oncall bind <path>anchors the entire group to a single project directory, skips repository selection, and any member of the group can ask and get an answer just by @-mentioning the bot. See On-Call Mode. - chat-scope group:
/group <group name>creates a new group in one step, with the entire group acting as a single independent session.
Session state machine
The status indicator at the top of the streaming card:
- 🟡 Starting — the worker is spinning up the CLI process
- 🔵 Working — the CLI is thinking/executing, output refreshing in real time
- 🟢 Ready — the CLI is idle, waiting for your next message
Each reply creates a new streaming card; the previous card freezes at its final state, making it easy to review history.
The four names of a session
"I renamed it — why didn't the name change in Lark?" A session carries four name layers at once, and each is independent:
botmux session rename is the new in-session primitive from this batch:
- It works only inside a session; the session id is read solely from the session environment, and it takes no
--session-id-style argument — you cannot rename someone else's session. - Recommended title shape is "type | subject", e.g.
Debug | payment-link timeout(thebotmux-session-renameskill). - It changes only the botmux/Dashboard title: the Lark group name is untouched (that's
botmux chat rename), and the Lark omt topic name cannot be changed by the platform.
Permission model (three tiers)
This tiered model lets you confidently add the bot to an on-call group: everyone can ask, but only admins can change session state, and an external member clicking by mistake won't mess up the session. For the full layer model (quota, expiry, "being added ≠ authorized", block list, grant request cards) see Permissions & Access.
Common confusions
- "Every @ feels like starting over, losing context": in a topic group, different topics are different sessions — what feels like a follow-up actually opened a new topic = a new session. To keep going, reply in the same topic; to truly reuse one session, see below.
- A new group / topic can't pull in earlier chat: a new session starts clean by default. To have it read group history, just say "look at the earlier chat history" (the bot needs group-message read permission, see FAQ).
- Switch the underlying CLI while keeping context: not possible today — there's no lossless hot-swap across CLIs; native session history isn't translated into another CLI. To switch CLIs, start a new bot / session and have the old bot emit a handoff summary. (
/relaymoves the same session to another group without changing the CLI;/adoptattaches an existing local tmux/zellij / resumable session into Lark, also without changing the CLI.)
Next: permission details in Permissions & Access and the FAQ; the mention policy in Mention Policy; moving a session to another group in Relay.
