clisbot 0.1.53-beta.5 → 0.1.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  <a href="https://www.npmjs.com/package/clisbot"><img src="https://img.shields.io/npm/dm/clisbot?label=downloads&color=22c55e" alt="npm downloads per month" /></a>
15
15
  <a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-d4a017" alt="MIT license" /></a>
16
16
  <img src="https://img.shields.io/badge/CLI-Codex%20%7C%20Claude%20%7C%20Gemini-111827" alt="supported cli tools" />
17
- <img src="https://img.shields.io/badge/Channels-Slack%20%7C%20Telegram-0a66c2" alt="supported channels" />
17
+ <img src="https://img.shields.io/badge/Channels-Slack%20%7C%20Telegram%20%7C%20Zalo-0a66c2" alt="supported channels" />
18
18
  <img src="https://img.shields.io/badge/Runtime-tmux%20backed-16a34a" alt="tmux backed runtime" />
19
19
  <img src="https://img.shields.io/badge/Workflow-AI--native-f59e0b" alt="AI-native workflow" />
20
20
  </p>
@@ -24,145 +24,81 @@
24
24
  </p>
25
25
 
26
26
  # clisbot - Turn your favorite coding CLI into an agentic personal assistant, workplace assistant, coding partner - on the go
27
- Want to use OpenClaw but are struggling because:
27
+ Want to use OpenClaw / Hermes Agent but are struggling because:
28
28
 
29
29
  - API cost is too high, so you end up looking for LLM proxy workarounds
30
- - you have to switch between OpenClaw for daily work and Claude / Codex / Gemini for real coding
30
+ - you have to switch between OpenClaw / Hermes Agent for daily work and Claude / Codex / Gemini for real coding
31
31
  - you want to code on the go and work on the go
32
32
 
33
33
  `clisbot` is the right solution for you.
34
34
 
35
- `clisbot` turns native frontier agent CLIs like Claude Code, Codex, and Gemini CLI into durable Slack and Telegram bots. Each agent runs inside its own tmux session, keeps a real workspace, and can behave like a coding bot, a daily-work assistant, or a team assistant with SOUL, IDENTITY, and MEMORY.
35
+ `clisbot` turns native frontier agent CLIs like Claude Code, Codex, and Gemini CLI into durable chat-native bots across multiple channels. Current channels include Slack, Telegram, Zalo Bot, and Zalo Personal, with more to come. Each agent runs inside its own tmux session, keeps a real workspace, and can behave like a coding bot, a daily-work assistant, or a team assistant with SOUL, IDENTITY, and MEMORY.
36
36
 
37
- It is not just a tmux bridge with chat glued on top. `clisbot` treats Slack and Telegram as real channel surfaces with routing, durable conversation state, pairing, follow-up control, file sending and receiving, and the ability to keep frontier coding agents inside the tools and communication surfaces where teams already work.
37
+ It is not just a tmux bridge with chat glued on top. `clisbot` treats chat platforms as real channel surfaces, including Slack, Telegram, Zalo Bot, and Zalo Personal today, with routing, durable conversation state, pairing, follow-up control, file sending and receiving, and the ability to keep frontier coding agents inside the tools and communication surfaces where teams already work.
38
38
 
39
39
  `clisbot` is also meant to grow into a reusable agent runtime layer that can support many CLI tools, many channels, and many workflow shapes on top of the same durable agent session.
40
40
 
41
- ## Start Here By Goal
42
-
43
- ### I Want A Personal Coding Bot In Telegram Or Slack
44
-
45
- - start with the [Quick Start](#quick-start)
46
- - best fit when you want Codex, Claude, or Gemini available from chat without
47
- giving up a real workspace
48
- - current release value: a much more AI-native control path, where the bot can
49
- increasingly set up `/queue`, loops, schedules, and other recurring work for
50
- you from normal chat instead of forcing you to memorize command syntax first
51
-
52
- ### I Want A Shared Team Bot
53
-
54
- - start with [Quick Start](#quick-start), then read [Surface Access Model](#surface-access-model)
55
- - best fit when you need one bot in a real Slack channel, Telegram group, or
56
- Telegram topic with explicit route and sender control
57
- - current release value: safer shared-surface policy, tighter topic or thread
58
- isolation, per-group sender control, and permission boundaries that let one
59
- bot live in a team group without opening it to everyone there
60
-
61
- ### I Need Operator Control And Debugging
62
-
63
- - start with [Common CLI commands](#common-cli-commands)
64
- - most useful surfaces: `clisbot status`, `clisbot logs`,
65
- `clisbot watch --latest`, `clisbot inspect --latest`, and `clisbot queues`
66
- - current release value: more truthful `sessionId`, lighter runner inventory,
67
- and less confusing restart behavior during updates
68
-
69
- ### I Just Want To Know What Changed Recently
70
-
71
- - start with [Recent Release Highlights](#recent-release-highlights)
72
- - then read [v0.1.52 Release Notes](docs/releases/v0.1.52.md) or the
73
- [v0.1.52 Release Guide](docs/updates/releases/v0.1.52-release-guide.md)
74
-
75
41
  ## Why I Built This
76
42
 
77
43
  I’m Long Luong (Long), Co-founder & CTO of Vexere, Vietnam’s #1 transportation booking platform, where we also build SaaS and inventory distribution infrastructure for transportation operators. As we scale a 300-person company with a 100-member Engineering, Product, and Design team, I’ve been searching for the most practical way to roll out AI-native workflows across the organization.
78
44
 
79
45
  The challenge is not whether AI is useful. It is how to make it work at enterprise scale without creating a fragmented, expensive, or ungovernable stack. In practice, that means solving several hard problems at once: cost control, workflow truthfulness, team accessibility, governance, and the ability to bring frontier AI into the real tools and communication surfaces where work already happens.
80
46
 
81
- `clisbot` is the approach I landed on. Instead of building yet another isolated AI layer, it turns the coding CLIs we already trust into durable, chat-native agents that can work across Slack, Telegram, and real team workflows.
82
-
83
- ## Why clisbot
84
-
85
- - One frontier-agent stack for both daily work and real coding. You do not need one product for assistant work and another for actual engineering work.
86
- - Reuses native CLI subscriptions you already pay for, such as Claude Code, Codex, and Gemini CLI, instead of pushing you toward a separate API-cost-heavy stack.
87
- - Learns from and integrates the two biggest strengths that made OpenClaw popular: memory and native channel integration with deep, channel-specific conversation and presentation capabilities.
88
- - Not just a tmux bridge. Slack and Telegram are treated as real channel surfaces with routing, thread or topic continuity, pairing, follow-up control, and attachment-aware interaction instead of plain text passthrough so you can work from your laptop or on the go without giving up a real coding workspace.
89
- - Team-first by design, with `AGENTS`, `USER`, and `MEMORY` context bootstrapping shaped for shared team reality instead of only personal solo-assistant flows.
90
- - Shared-surface permission control is a first-class feature: a bot can be in a team group but still answer only the specific people you allow there, while sensitive control actions stay behind explicit auth roles and permissions.
91
- - Useful for coding, operations, teamwork, and general assistant work, with fast chat controls such as `!<command>`, `/bash <command>`, `/queue`, `/loop`, `/streaming`, and `/mention`.
92
- - New in the `v0.1.50` to `v0.1.52` stable line: the AI-native control experience is much better, the default runner startup window is now 60 seconds, and stale old startup-delay pins no longer silently keep upgraded installs on shorter timeouts.
93
-
94
- ## Who This Fits Best
95
-
96
- - Anyone who wants a high-agency personal assistant with OpenClaw-style memory,
97
- workspace context, and a skill-oriented operating model that can do far more
98
- than a thin chat wrapper.
99
- - Solo builders who want a real coding assistant in Telegram or Slack, backed
100
- by Codex, Claude, or Gemini, without rebuilding their workflow around a new
101
- web product.
102
- - Team leads who want one shared bot with explicit group or topic safety,
103
- durable context, and attachment-aware chat workflows.
47
+ `clisbot` is the approach I landed on. Instead of building yet another isolated AI layer, it turns the coding CLIs we already trust into durable, chat-native agents that can work across Slack, Telegram, Zalo surfaces, and real team workflows.
104
48
 
105
- ## Surface Access Model
49
+ If `clisbot` helps your workflow, a GitHub star is a simple way to let me know
50
+ it is useful and help more people discover it.
106
51
 
107
- The important current config mental model is:
108
-
109
- - `app`
110
- - `bots`
111
- - `agents`
112
-
113
- Inside each bot:
114
-
115
- - `directMessages` is the one-person surface map
116
- - `groups` is the multi-user surface map
117
- - stored keys use raw provider-local ids plus `*`
118
-
119
- Examples:
120
-
121
- - Slack shared surface: `groups["C1234567890"]`
122
- - Telegram group: `groups["-1001234567890"]`
123
- - Telegram topic: `groups["-1001234567890"].topics["42"]`
124
- - DM wildcard default: `directMessages["*"]`
125
-
126
- Operator CLI ids stay prefixed:
127
-
128
- - `dm:<id>`
129
- - `dm:*`
130
- - `group:<id>`
131
- - `group:*`
132
- - `topic:<chatId>:<topicId>`
133
-
134
- Current invariants:
52
+ ## Quick Start
135
53
 
136
- - Slack `channel:<id>` is compatibility input only, not canonical operator naming
137
- - stored config under one bot uses only raw ids plus `*` inside `directMessages` and `groups`
138
- - `group:*` is the default multi-user sender policy node for one bot and should be updated or disabled, not removed
139
- - `disabled` means silent for everyone on that surface, including owner/admin and pairing guidance
140
- - owner/admin do not bypass `groupPolicy`/`channelPolicy` admission; after a group is admitted and enabled, they bypass sender allowlists, while `blockUsers` still wins
141
- - the deny message intentionally uses one common human-facing term, `group`, for every multi-user surface
54
+ ### AI-Assisted Setup
142
55
 
143
- ## CLI Compatibility Snapshot
56
+ If you already use Codex, Claude Code, or Gemini CLI, open this repo in that
57
+ CLI and paste this short prompt first:
144
58
 
145
- `clisbot` currently works well with Codex, Claude, and Gemini.
59
+ ```text
60
+ Help me clarify and set up clisbot from this GitHub repo: https://github.com/longbkit/clisbot
61
+ ```
146
62
 
147
- | CLI | Current Stability | Short Take |
148
- | ----------| ---------------------| -------------------------------------------------------------------------------------------------------------|
149
- | `codex` | Best today | Strongest default for routed coding work. |
150
- | `claude` | Usable with caveats | Claude can surface its own plan-approval and auto-mode behavior even when launched with bypass-permissions. |
151
- | `gemini` | Fully compatible | Gemini is supported as a first-class runner for routed Slack and Telegram workflows. |
63
+ If you already know what you want, paste this more specific prompt instead and
64
+ fill the placeholders:
152
65
 
153
- CLI-specific operator notes:
66
+ ```text
67
+ Help me clarify and set up clisbot from this GitHub repo: https://github.com/longbkit/clisbot
154
68
 
155
- - [Codex CLI Guide](docs/user-guide/codex-cli.md)
156
- - [Claude CLI Guide](docs/user-guide/claude-cli.md)
157
- - [Gemini CLI Guide](docs/user-guide/gemini-cli.md)
69
+ I want:
70
+ - target channel: <Slack|Telegram|Zalo Bot|Zalo Personal>
71
+ - coding CLI tool: <Codex|Claude Code|Gemini CLI>
72
+ - usage shape: <personal assistant|team assistant>
73
+ ```
158
74
 
159
- ## Quick Start
75
+ For AI agents: use the guide below to help a user install, set up, and onboard
76
+ with `clisbot` with as little friction as possible.
77
+
78
+ 1. Ask only the smallest number of clarify questions needed. In particular,
79
+ clarify:
80
+ - target channel: Slack, Telegram, Zalo Bot, or Zalo Personal
81
+ - coding CLI tool: Codex, Claude Code, or Gemini CLI
82
+ - usage shape: personal assistant or team assistant
83
+ 2. Prefer persisting credentials by default after the first successful test, so
84
+ later restarts can use plain `clisbot start` without retyping tokens.
85
+ 3. Read `README.md` and `docs/user-guide/README.md`, then guide the shortest
86
+ safe setup path. Run the right `clisbot` commands when the environment
87
+ allows it, and verify with status/logs.
88
+ 4. If a step must be done manually, such as creating a bot, setting up a Slack
89
+ app, or logging in to Zalo Personal, explain exactly what the user must do
90
+ and wait for them before continuing.
91
+ 5. If a technical limit prevents running a command, give the exact terminal
92
+ command for the user to run. If an unresolved bug blocks setup, help the user
93
+ report a GitHub issue or submit feedback at
94
+ https://docs.google.com/forms/d/e/1FAIpQLSd7L7mHOo0ea8YXFI4tGnyDIj94ESn4hbbDa5YTbcEKTVOKTA/viewform.
160
95
 
161
96
  Platform support:
162
97
 
163
98
  - Linux and macOS are the supported host environments today.
164
- - Native Windows is not supported yet because `clisbot` currently depends on `tmux` and Bash-based runtime flows.
165
- - If you use Windows, run `clisbot` inside WSL2.
99
+ - If you use Windows, run `clisbot` inside WSL2 because native Windows is not supported yet; `clisbot` currently depends on `tmux` and Bash-based runtime flows.
100
+
101
+ ### Manual Setup
166
102
 
167
103
  Most people should start here:
168
104
 
@@ -185,43 +121,13 @@ Next steps:
185
121
  - `clisbot` also has a smart autopairing path to reduce first-run friction. If
186
122
  you send the bot a DM within the first 30 minutes, you can usually claim the
187
123
  owner role immediately and start using it without a separate pairing round.
188
- - New from the current `v0.1.50` to `v0.1.52` stable line: the AI-native operator experience is much stronger. You
189
- can increasingly ask the bot through chat to explain how to use it, update
190
- itself and summarize what's new, help onboard you, create or add a new bot or
191
- agent, or set up loops and schedules for recurring work instead of relying
192
- only on slash commands.
193
- - Existing configs from any version before `0.1.50` still update directly on first run when you install `v0.1.52`. clisbot writes a backup first under `~/.clisbot/backups/`, then rewrites the config to the current `0.1.50` schema shape.
194
- - Shared Slack channels, Slack groups, Telegram groups, and Telegram topics are a separate gate: normal users need an explicit route such as `group:<id>` or `topic:<chatId>:<topicId>` before the bot will talk there. Legacy Slack `channel:<id>` input still works for compatibility.
195
- - After a shared surface is admitted, per-surface sender control comes from the bot's default shared rule `groups["*"]` plus any route-local `allowUsers` or `blockUsers`.
196
- - With that permission model, a bot can be added to a team group but still be
197
- allowed to answer only some people in that group.
198
- - If the effective shared policy is `disabled`, the bot stays silent there for everyone, including owner/admin.
199
- - If the effective shared policy is `allowlist` and a sender is not allowed, the bot denies before the runner:
200
- - `You are not allowed to use this bot in this group. Ask a bot owner or admin to add you to \`allowUsers\` for this surface.`
201
- - To chat with the bot in a group:
202
- - telegram: Add the bot to the group, then use `/start` there. It will guide
203
- you toward the route you need to add. You can run that command directly or
204
- copy it into a DM with the bot and ask it to do the setup for you if you
205
- are already authorized.
206
- - slack: similar flow, but Slack-native slash command handling is awkward.
207
- Use a leading space such as ` /start`, or use the alias `\start`. The same
208
- workaround applies to other slash commands such as ` /streaming on` or
209
- `\mention`.
210
- - group conversations require a mention by default to avoid abuse, but smart
211
- follow-up stays open for a short window so you do not need to tag the bot
212
- again on every reply. You can also ask the bot to change that mode for you.
213
- - If you want stricter mention behavior, use `/mention` for this conversation only, `/mention channel` for the current channel or group default, or `/mention all` for the current bot default.
214
- - For long running tasks such as coding, turn streaming on with `/streaming on`
215
- and check it with `/streaming status`. In Slack, use a leading space such
216
- as ` /streaming on` or the alias `\streaming on`.
217
- - If you want to add more owner or app admin, grant that principal explicitly with the platform prefix plus the channel-native user id, for example `clisbot auth add-user app --role owner --user telegram:1276408333` or `clisbot auth add-user app --role admin --user slack:U123ABC456`.
218
- - `clisbot auth --help` now covers role scopes, permission sets, and add/remove flows for users and permissions.
219
- - App-level auth and owner-claim semantics in [Authorization And Roles](docs/user-guide/auth-and-roles.md) describe both the current runtime reality and the remaining target-model gaps.
220
124
 
221
125
  Need the step-by-step setup docs instead of the shortest path?
222
126
 
223
127
  - Telegram: [Telegram Bot Setup](docs/user-guide/telegram-setup.md)
224
128
  - Slack: [Slack App Setup](docs/user-guide/slack-setup.md)
129
+ - Zalo Bot: [Zalo Bot Setup](docs/user-guide/zalo-bot-setup.md)
130
+ - Zalo Personal: [Zalo Personal](docs/user-guide/zalo-personal.md)
225
131
  - Release history: [CHANGELOG.md](CHANGELOG.md), [release notes](docs/releases/README.md), [update guide](docs/updates/update-guide.md), [release guides](docs/updates/README.md), and [migration index](docs/migrations/index.md)
226
132
  - Slack app manifest template: [app-manifest.json](templates/slack/default/app-manifest.json)
227
133
  - Slack app manifest guide: [app-manifest-guide.md](templates/slack/default/app-manifest-guide.md)
@@ -235,15 +141,529 @@ What happens next:
235
141
  - fresh bootstrap only enables the channels you name explicitly
236
142
  - after the persisted first run, later restarts can use plain `clisbot start`
237
143
 
144
+ ## Page Index
145
+
146
+ - [Start By Need](#start-by-need)
147
+ - [Supported Channels](#supported-channels)
148
+ - [Who It Is For](#who-it-is-for)
149
+ - [How clisbot Fits](#how-clisbot-fits)
150
+ - [Use Case Map](#use-case-map)
151
+ - [First Setup FAQ](#first-setup-faq)
152
+ - [Routing And Access FAQ](#routing-and-access-faq)
153
+ - [Chat-Native Operator Experience](#chat-native-operator-experience)
154
+ - [Runtime And Workflow FAQ](#runtime-and-workflow-faq)
155
+ - [Troubleshooting By Symptom](#troubleshooting-by-symptom)
156
+ - [Troubleshooting Playbooks](#troubleshooting-playbooks)
157
+ - [Command Cheat Sheet](#command-cheat-sheet)
158
+ - [Related Docs](#related-docs)
159
+
160
+ ## Start By Need
161
+
162
+ | Need | Best first path | Why it fits | Read next |
163
+ | --- | --- | --- | --- |
164
+ | Personal coding assistant in chat | Telegram DM + `codex` | Lowest setup friction, strong routed coding behavior, durable workspace. | [Telegram Bot Setup](docs/user-guide/telegram-setup.md), [Codex CLI Guide](docs/user-guide/codex-cli.md) |
165
+ | Team assistant in a shared room | Slack channel or Telegram group/topic + `codex` | Explicit routes, mention defaults, and sender policy make shared use safer. | [Slack App Setup](docs/user-guide/slack-setup.md), [Routes](docs/user-guide/channels.md) |
166
+ | Claude Code from chat | Any routed surface + `claude` | Keeps Claude-native commands and skills reachable from chat. | [Claude CLI Guide](docs/user-guide/claude-cli.md), [Native CLI Commands](docs/user-guide/native-cli-commands.md) |
167
+ | OpenClaw-style assistant with local memory | Personal or team bot + bootstrapped workspace | `AGENTS.md`, `USER.md`, `MEMORY.md`, pairing, routes, and channel-native UX map well to OpenClaw habits. | [User Guide](docs/user-guide/README.md), [Authorization And Roles](docs/user-guide/auth-and-roles.md) |
168
+ | Hermes-agent-style background workflow | Schedule review of repeated and struggled tasks to create and improve skills. | One chat surface can turn hard recurring work into reusable skills, review loops, and recurring briefs. | [Slash Commands](docs/user-guide/slash-commands.md), [Runtime Operations](docs/user-guide/runtime-operations.md) |
169
+ | Operator rescue and inspection | `clisbot status`, `logs`, `watch`, `runner inspect` | Shows channel health, runtime pid, active runs, and live runner panes. | [Runtime Operations](docs/user-guide/runtime-operations.md), [CLI Commands](docs/user-guide/cli-commands.md) |
170
+ | Zalo automation | Zalo Bot or Zalo Personal | Zalo Bot is official-DM oriented; Zalo Personal supports local personal-account DM and group workflows while staying silent until users or groups are allowlisted. | [Zalo Bot Setup](docs/user-guide/zalo-bot-setup.md), [Zalo Personal](docs/user-guide/zalo-personal.md) |
171
+
172
+ ## Supported Channels
173
+
174
+ Current user-facing channel guides:
175
+
176
+ - [Slack App Setup](docs/user-guide/slack-setup.md)
177
+ - [Telegram Bot Setup](docs/user-guide/telegram-setup.md)
178
+ - [Zalo Bot Setup](docs/user-guide/zalo-bot-setup.md)
179
+ - [Zalo Personal](docs/user-guide/zalo-personal.md)
180
+
181
+ | Channel | Best fit | Supported surfaces | Routing shape | Status |
182
+ | --- | --- | --- | --- | --- |
183
+ | Slack | Team channels, private groups, workplace assistant flows. | DM, public/private channel, thread continuity. | `dm:<userId>`, `group:<channelId>`, `group:*` | Stable primary channel |
184
+ | Telegram | Personal bot, mobile coding, groups, topic-isolated team workflows. | DM, group, forum topic. | `dm:<userId>`, `group:<chatId>`, `topic:<chatId>:<topicId>` | Stable primary channel |
185
+ | Zalo Bot | Official Zalo bot DM flows and Vietnam-market experiments. | DM-focused today. | `dm:<user-id>`, `dm:*` | Alpha; polling-first |
186
+ | Zalo Personal | Local personal-account automation. | DM and group, silent by default until users or groups are allowlisted. | `dm:<user-id>`, `dm:*`, `group:<group-id>` | Supported local channel |
187
+
188
+ Simple capability map:
189
+
190
+ | Capability | Slack | Telegram | Zalo Bot | Zalo Personal |
191
+ | --- | --- | --- | --- | --- |
192
+ | Direct messages | Yes | Yes | Yes | Yes |
193
+ | Shared rooms | Channels and groups | Groups | No current group model | Groups |
194
+ | Child conversation isolation | Threads | Forum topics | No | No topic/thread model |
195
+ | Pairing / first access flow | Yes | Yes | Yes | Opt-in; default silent |
196
+ | Route allowlists | Yes | Yes | DM allowlists | DM and group allowlists |
197
+ | Chat-native queue/loop use | Yes | Yes | Yes, DM-oriented | Yes, route-scoped |
198
+ | Message send CLI | Yes | Yes | Yes, text and URL-backed photo path | Yes, text and file/URL media path |
199
+ | Inbound attachments | Supported through routed attachments | Supported through routed attachments | Images/stickers to `.attachments/` | Images and grouped image handling |
200
+ | Best default runner | `codex` | `codex` | `codex` | `codex` |
201
+
202
+ Use the channel guide that matches the target surface. Slack and Telegram are
203
+ the most stable public user experience today; Zalo Bot and Zalo Personal are
204
+ the right fit when the target market or test surface specifically needs Zalo,
205
+ with the safety notes in the channel guide close at hand.
206
+
207
+ ## Who It Is For
208
+
209
+ | Audience | Common goal | Recommended shape | Main risk to manage |
210
+ | --- | --- | --- | --- |
211
+ | Solo builder | Code from phone or chat without losing a real repo workspace. | `--bot-type personal`, Telegram DM, `codex`. | Native CLI auth or missing host dependencies. |
212
+ | Office worker | Use a frontier agent for business work, marketing, research, writing, planning, reporting, and follow-up without living in a terminal or separate AI app. | `--bot-type personal`, the channel you already use most, `codex` or your preferred CLI. | Giving the bot too broad a workspace before you have clear habits and permissions. |
213
+ | Team member | Bring an assistant into the work channel where decisions, files, and follow-ups already happen. | `--bot-type team`, shared room route, mention required, queue/loop for follow-up. | Confusing a shared assistant with a private assistant; route and sender policy should be explicit. |
214
+ | Business, marketing, or operations team | Turn recurring reports, campaign briefs, customer or market research, document updates, reviews, reminders, and cross-functional requests into chat-native workflows. | Slack, Telegram, Zalo Bot, or Zalo Personal depending on the team's real channel; queues and loops for repeated work. | Scheduling with the wrong timezone, sender identity, or target channel. |
215
+ | Engineering lead | Put an assistant in a team channel without opening it to everyone. | `--bot-type team`, shared route allowlist, mention required. | Route admission and sender policy confusion. |
216
+ | AI workflow operator | Run repeated reviews, status checks, and follow-up work. | Chat-native requests backed by `/queue`, `/loop`, `clisbot queues`, and `clisbot loops`. | Loops or queues created with the wrong sender, target, or timezone. |
217
+ | Claude-heavy team | Keep existing Claude Code command and skill habits. | `claude` runner, native command pass-through, streaming on for long tasks. | Claude plan approval and auto-mode behavior may still appear. |
218
+ | OpenClaw / Hermes Agent user | Keep channel-native assistant ergonomics, memory, background work, and skill evolution while using frontier coding CLIs. | Routed chat surfaces, memory files, workspace bootstrap, scheduled skill review loops. | Assuming every OpenClaw or Hermes behavior maps one-to-one. |
219
+ | Platform builder | Evaluate clisbot as a local agent runtime layer. | Multiple agents, explicit routes, runtime inspection, queue/loop primitives. | Blurring channel, control, agents, and runner ownership. |
220
+
221
+ ## How clisbot Fits
222
+
223
+ `clisbot` turns native CLI agents such as Codex, Claude Code, and Gemini CLI
224
+ into durable Slack, Telegram, and Zalo-accessible bots. Each agent runs in a
225
+ real workspace through a tmux-backed runner, while channels own chat-native
226
+ presentation, routing, pairing, file handling, and follow-up behavior.
227
+
228
+ The main problem it solves is not just "send terminal text to chat." It gives
229
+ operators a safer way to expose expensive, subscription-backed coding agents to
230
+ real communication surfaces without rebuilding every workflow around an API-only
231
+ assistant product.
232
+
233
+ Key fit:
234
+
235
+ - Use Codex when you want the safest default for routed coding work.
236
+ - Use Claude when Claude Code itself is the priority and you accept more
237
+ operator supervision on long tasks.
238
+ - Use Gemini when Gemini auth is already clean and you specifically want Gemini.
239
+ - Use clisbot as a lower-cost replacement for most OpenClaw-style assistant
240
+ workflows when the goal is memory, workspace continuity, pairing,
241
+ channel-native UX, and routed chat access to powerful agents.
242
+ - Use clisbot for Hermes-agent-style background workflow when you want durable
243
+ queue and loop primitives plus skill creation and skill improvement inside a
244
+ real coding-agent workspace.
245
+ - Use chat-native operation first: ask the bot to create loops, add routes,
246
+ update clisbot, summarize release changes, or inspect its own runtime. Slash
247
+ commands and CLI commands are still available as explicit control surfaces and
248
+ reliable fallbacks.
249
+
250
+ ## Use Case Map
251
+
252
+ | Use case | Typical prompt | Useful controls | Notes |
253
+ | --- | --- | --- | --- |
254
+ | Quick coding task | "Fix the failing test and send me the diff." | `/streaming on`, `/watch every 30s`, `/stop` | Start with Codex unless another CLI is required. |
255
+ | Code review loop | "After this implementation, queue a code review against architecture and fix the issues." | Bot-created queue, `/queue`, `clisbot queues list` | Queue keeps steps sequential instead of steering the current run. |
256
+ | Team group assistant | "@bot summarize this incident thread" | `routes add`, `routes add-allow-user`, `/mention` | Keep mention required in shared groups by default. |
257
+ | Recurring operations brief | "Create a weekday 09:00 loop that checks CI and summarizes risk." | Bot-created loop, `/loop status`, `/loop cancel <id>` | Verify timezone in the creation response. |
258
+ | Native Claude skill | "`/code-review`" | Native command pass-through | In Slack, send a leading space if Slack intercepts `/...`. |
259
+ | Personal memory assistant | "Remember this project rule and update the workspace docs." | Bootstrapped `AGENTS.md`, `USER.md`, `MEMORY.md` | Keep private memory out of shared contexts. |
260
+ | Mobile coding companion | "Continue the repo task from my phone." | `/attach`, `/detach`, `/watch`, `/new` | The workspace stays on the machine; chat is the control surface. |
261
+ | Bot self-update | "Update clisbot, follow the update guide, then summarize what changed." | Bot checks `clisbot update --help`, operator auth, `clisbot status` | The bot can perform the routine update path when it has permission. |
262
+ | Zalo local automation | "Allow this Zalo user or group to use the work bot." | `dm:*` allowUsers or exact `group:<id>` routes | Keep Zalo Personal silent except for intentionally allowlisted users or groups. |
263
+
264
+ ## First Setup FAQ
265
+
266
+ ### Which CLI should I choose first?
267
+
268
+ Choose `codex` for the safest general routed coding experience. It currently
269
+ has the strongest default operator stability in clisbot.
270
+
271
+ Choose `claude` when your team already depends on Claude Code, Claude-native
272
+ commands, or Claude-specific skills. Turn streaming on for longer tasks so you
273
+ can see if Claude is waiting at a plan approval step.
274
+
275
+ Choose `gemini` when Gemini is already authenticated in the runtime environment
276
+ and you specifically want Gemini. If Gemini opens OAuth or setup screens, fix
277
+ Gemini auth directly first.
278
+
279
+ Related pages: [Codex CLI Guide](docs/user-guide/codex-cli.md), [Claude CLI Guide](docs/user-guide/claude-cli.md),
280
+ [Gemini CLI Guide](docs/user-guide/gemini-cli.md).
281
+
282
+ ### Should I start with Telegram or Slack?
283
+
284
+ Use Telegram when you want the simplest personal bot path. Use Slack when the
285
+ workflow is team-channel first. Telegram topics and Slack threads both work well
286
+ as isolated conversation surfaces once routes are explicit.
287
+
288
+ Related pages: [Telegram Bot Setup](docs/user-guide/telegram-setup.md), [Slack App Setup](docs/user-guide/slack-setup.md).
289
+
290
+ ### What is the difference between personal and team bot type?
291
+
292
+ `--bot-type personal` creates a default assistant shaped for one human. It is a
293
+ good default for Telegram DM or a private assistant.
294
+
295
+ `--bot-type team` creates a shared assistant shape for a team, group, channel, or
296
+ topic workflow. It is a good default for Slack channel use.
297
+
298
+ ### Why does the first run require both `--cli` and `--bot-type`?
299
+
300
+ A fresh config starts with no agents. `--cli` chooses the runner family, and
301
+ `--bot-type` chooses the workspace/bootstrap shape for the first `default`
302
+ agent.
303
+
304
+ Example:
305
+
306
+ ```bash
307
+ clisbot start --cli codex --bot-type personal --telegram-bot-token <token> --persist
308
+ ```
309
+
310
+ ### Is clisbot an OpenClaw replacement?
311
+
312
+ For most OpenClaw-style workflows, yes. clisbot is intended to be a better
313
+ replacement when you want the same assistant shape: memory, workspace
314
+ continuity, pairing, channel-native routing, and chat access from Slack,
315
+ Telegram, or Zalo.
316
+
317
+ The main difference is the execution model. OpenClaw-style systems usually point
318
+ you toward API-backed agents. clisbot runs frontier coding CLIs such as Codex,
319
+ Claude Code, and Gemini CLI as durable agents behind chat surfaces. That can be
320
+ much cheaper for many users because it reuses the CLI subscriptions they already
321
+ pay for instead of forcing every useful workflow through API-metered usage.
322
+
323
+ It is also stronger for coding-native work. The same bot can act as a daily
324
+ assistant, workplace assistant, and team assistant, but when the task becomes
325
+ "edit the repo, run tests, improve docs, create a skill, or fix the workflow,"
326
+ it is already sitting inside the native coding-agent environment where those
327
+ tasks are strongest.
328
+
329
+ ### Is clisbot a Hermes agent?
330
+
331
+ It can cover most Hermes-agent-style use cases, but it reaches them through
332
+ durable coding agents instead of a separate agent product boundary.
333
+
334
+ Hermes-style self-evolution maps naturally to clisbot because an agent can keep
335
+ working in a real workspace, use `/queue` for sequential follow-up, use `/loop`
336
+ for daily or weekly review, and update its own operating files, docs, tools, or
337
+ skills after hard tasks. If a task exposes a repeated weakness, you can ask the
338
+ agent to create a new skill or improve an existing one, then reuse that skill in
339
+ future work. Daily and weekly loops can do the same thing as a deliberate
340
+ maintenance rhythm.
341
+
342
+ The practical positioning is: clisbot is both an assistant and a native coding
343
+ agent surface. It can handle general office-worker workflows through chat,
344
+ files, memory, and tools, while still being unusually strong when the work
345
+ requires code, repo edits, tests, automation scripts, or skill evolution.
346
+
347
+ ## Routing And Access FAQ
348
+
349
+ ### Why does the bot answer in DM but not in a group?
350
+
351
+ DMs and shared surfaces are gated separately. Fresh configs do not automatically
352
+ admit Slack channels, Telegram groups, Telegram topics, or Zalo Personal groups.
353
+ Add an explicit route:
354
+
355
+ ```bash
356
+ clisbot routes add --channel telegram group:<chatId> --bot default
357
+ clisbot routes add --channel telegram topic:<chatId>:<topicId> --bot default
358
+ clisbot routes add --channel slack group:<channelId> --bot default
359
+ ```
360
+
361
+ Use `/whoami` in the target surface to discover ids where supported.
362
+
363
+ ### What does `group:*` mean?
364
+
365
+ `group:*` is the default multi-user sender policy node under one bot. It is not
366
+ the same thing as admitting every group. Exact shared routes still decide which
367
+ groups, topics, or channels are admitted when the bot's shared admission policy
368
+ is `allowlist`.
369
+
370
+ ### Why does the deny message say "group" in Slack channels or Telegram topics?
371
+
372
+ The deny text intentionally uses one common human-facing word for multi-user
373
+ surfaces. Internally, provider-specific surfaces still map to canonical route
374
+ concepts such as `group` and `topic`.
375
+
376
+ ### Why does the bot require a mention in groups?
377
+
378
+ Shared surfaces default toward safer behavior. Mention-required routes reduce
379
+ accidental bot activation in busy rooms. Use `/mention`, `/mention channel`, or
380
+ `/mention all` to tighten mention behavior, or `routes set-require-mention` when
381
+ you intentionally want a route to listen without mention.
382
+
383
+ ### How do I let only selected people use the bot in a shared surface?
384
+
385
+ Add the route, keep or set its policy to `allowlist`, then add allowed users:
386
+
387
+ ```bash
388
+ clisbot routes add --channel telegram group:<chatId> --bot default --policy allowlist
389
+ clisbot routes add-allow-user --channel telegram group:<chatId> --bot default --user <userId>
390
+ ```
391
+
392
+ Surface policy decides who may reach the bot. Auth roles decide what they may do
393
+ after they get in.
394
+
395
+ Related page: [Authorization And Roles](docs/user-guide/auth-and-roles.md).
396
+
397
+ ## Chat-Native Operator Experience
398
+
399
+ ### Do I need to memorize slash commands and CLI commands?
400
+
401
+ No. The preferred product experience is chat-native: ask the bot what you want,
402
+ and let it inspect the relevant help, run the right `clisbot` command, and
403
+ report the result.
404
+
405
+ Good prompts:
406
+
407
+ ```text
408
+ Create a loop every weekday at 09:00 that checks CI and summarizes risk here.
409
+ Queue a code review after the current implementation finishes, then run tests.
410
+ Add this Telegram topic to the default bot if I am allowed to manage routes.
411
+ Update clisbot, follow the update guide, restart safely, and summarize what changed.
412
+ ```
413
+
414
+ Slash commands such as `/loop`, `/queue`, `/watch`, and `/status` still matter.
415
+ They are the precise chat control surface for users who already know the command
416
+ they want. The CLI remains the explicit operator surface and fallback when you
417
+ need exact, scriptable control.
418
+
419
+ ### How does bot-native configuration stay safe?
420
+
421
+ clisbot is designed so the bot can help configure itself without treating every
422
+ chat message as permission to mutate protected state.
423
+
424
+ The important guardrails are:
425
+
426
+ - surface routes decide where the bot may answer at all
427
+ - auth roles and permissions decide whether a sender may manage routes, queues,
428
+ loops, runtime operations, or protected resources
429
+ - the agent prompt tells the bot to use `clisbot` CLI help for configuration,
430
+ update, loop, queue, and route requests instead of inventing commands
431
+ - sensitive actions should be preceded by a read-only permission check such as
432
+ `clisbot auth get-permissions --sender <principal> --agent <agentId> --json`
433
+ - runtime monitoring, `status`, `logs`, `watch`, `/attach`, `/stop`, and
434
+ `stop --hard` give operators recovery paths if a native CLI or runner gets
435
+ stuck
436
+
437
+ That is the intended balance: you can operate clisbot by chatting with it, while
438
+ configuration changes still pass through explicit command surfaces, auth checks,
439
+ durable state, and observable recovery mechanisms.
440
+
441
+ ## Runtime And Workflow FAQ
442
+
443
+ ### What should I use when a run is taking a long time?
444
+
445
+ Use `/attach` to resume live updates in the current thread. Use
446
+ `/watch every 30s` for periodic updates. Use `/detach` when you want the run to
447
+ continue quietly and still post the final result.
448
+
449
+ Use `/stop` only when you want to interrupt the current run.
450
+
451
+ ### What is the difference between queue and steer?
452
+
453
+ `/queue <message>` stores a prompt behind the current run and executes it later
454
+ in order. Use it for review-after-code, test-after-fix, or deliberate
455
+ multi-step work.
456
+
457
+ `/steer <message>` injects a prompt into the active run now. Use it when the
458
+ current run is going in the wrong direction and must be corrected immediately.
459
+
460
+ ### When should I create a loop?
461
+
462
+ Use loops for repeated or scheduled work. The easiest path is to ask the bot to
463
+ create the loop in plain language:
464
+
465
+ ```text
466
+ Create a loop every weekday at 09:00 that summarizes open operational risks here.
467
+ Run this review prompt 3 times, one after another, until the issues are fixed.
468
+ Check CI every 2 hours and summarize only actionable failures.
469
+ ```
470
+
471
+ The bot should inspect the live loop help when needed, create the loop through
472
+ the clisbot control surface, and report the resolved timezone and cancel
473
+ command. Direct `/loop ...` commands still work when you want exact syntax.
474
+
475
+ Loops are durable and session-scoped. Check loop state by asking the bot, with
476
+ `/loop status`, or with `clisbot loops status`. Cancel stale loops before
477
+ creating replacements.
478
+
479
+ ### Why did a queued or looped prompt not run immediately?
480
+
481
+ Managed loops are skip-if-busy, and queues wait for the current logical run to
482
+ settle. This avoids corrupting the active conversation or piling unrelated
483
+ prompts into one run.
484
+
485
+ ### How do native CLI commands work?
486
+
487
+ clisbot reserves a small set of control commands such as `/status`, `/stop`,
488
+ `/queue`, and `/loop`. Other slash commands are forwarded unchanged to the
489
+ underlying CLI. That is why Claude-native commands like `/code-review` and
490
+ Codex-native habits such as `/review` or `$code-review` can still work.
491
+
492
+ Related page: [Native CLI Commands](docs/user-guide/native-cli-commands.md).
493
+
494
+ ## Troubleshooting By Symptom
495
+
496
+ | Symptom | First check | Likely cause | Fix |
497
+ | --- | --- | --- | --- |
498
+ | `clisbot start` says no agents are configured | `clisbot start --help` | Fresh config has no agent yet. | Start with both `--cli` and `--bot-type`. |
499
+ | Token refs show `missing` | `clisbot status` | Env var is not visible to the runtime. | Pass token again, persist it, or restart from a shell with the env exported. |
500
+ | Channel stays `starting` | `clisbot logs` | Credential, network, auth, or provider startup failure. | Fix the provider error shown in logs, then restart. |
501
+ | Bot answers in DM but not group | `/whoami` in group/topic | Missing shared route or mention requirement. | Add `group:<id>` or `topic:<chatId>:<topicId>` route. |
502
+ | Message accepted but no answer arrives | `clisbot watch --latest --lines 100` | Runner is blocked, unauthenticated, or waiting at a prompt. | Fix the native CLI state in the workspace, then restart or `/new`. |
503
+ | Native CLI runner does not answer | `codex`, `claude`, or `gemini` directly in terminal | The underlying coding CLI is not installed, authenticated, trusted, or able to run on this machine. | Fix the native CLI first; clisbot only works after the CLI can answer normally. |
504
+ | Channel or runtime feels stuck | `clisbot status` and `clisbot logs` | Channel worker, detached runtime, or tmux runner state is stale. | Try `clisbot restart`; if that is not enough, run `clisbot stop --hard` then `clisbot start`. |
505
+ | Claude appears stuck | `/streaming on` and `/watch every 30s` | Claude plan approval or auto-mode behavior. | Send `/nudge` if it is waiting for default confirmation. |
506
+ | Gemini startup blocks | `clisbot logs` | Gemini OAuth or setup screen. | Authenticate Gemini directly or provide a headless auth path. |
507
+ | Codex reports missing env var | `clisbot watch --latest` | Detached runtime did not inherit your shell env. | Restart clisbot from a shell with the env, or configure the service env. |
508
+ | Slack slash command does not reach clisbot | Slack client behavior | Slack intercepts leading `/...`. | Send a leading space, for example ` /status`, or use `\status`. |
509
+ | Old behavior survives restart | `clisbot runner list` | Stale tmux runner or old environment. | Use `clisbot stop --hard`, then start again. |
510
+ | Update or restart seems stuck | `clisbot status` | Worker already exited or monitor is in transition. | Check status first; then run `clisbot start` if runtime is down. |
511
+
512
+ ## Troubleshooting Playbooks
513
+
514
+ ### Check The Native CLI First
515
+
516
+ When clisbot accepts a message but the agent does not answer, first separate
517
+ clisbot from the underlying coding CLI.
518
+
519
+ 1. Open a terminal on the same machine.
520
+ 2. Go to the workspace you expect clisbot to use, usually
521
+ `~/.clisbot/workspaces/default`.
522
+ 3. Start the configured CLI directly:
523
+
524
+ ```bash
525
+ codex
526
+ claude
527
+ gemini
528
+ ```
529
+
530
+ 4. Say `hi` and confirm the CLI can answer.
531
+ 5. If the CLI cannot start or reply, fix its install, login, trust prompt,
532
+ model access, or local dependency issue first. clisbot cannot make a broken
533
+ native CLI work; it can only run and route a CLI that already works on the
534
+ machine.
535
+
536
+ ### Reset A Stuck Channel Or Runtime
537
+
538
+ If the native CLI works in terminal but the chat channel is still stuck, reset
539
+ the clisbot runtime boundary.
540
+
541
+ 1. Try the normal restart first:
542
+
543
+ ```bash
544
+ clisbot restart
545
+ ```
546
+
547
+ 2. If stale tmux sessions or old channel state still survive, hard-stop all
548
+ clisbot tmux sessions and start fresh:
549
+
550
+ ```bash
551
+ clisbot stop --hard
552
+ clisbot start
553
+ ```
554
+
555
+ 3. After the restart, run `clisbot status` and send one small test message from
556
+ the target channel.
557
+
558
+ ### Bot Does Not Start
559
+
560
+ 1. Run `clisbot status`.
561
+ 2. Run `clisbot logs`.
562
+ 3. Confirm token refs are present and the channel is enabled.
563
+ 4. If this is the first run, include both `--cli` and `--bot-type`.
564
+ 5. If a normal restart is not enough, run `clisbot stop --hard`, then start
565
+ again from a shell with the correct environment.
566
+
567
+ ### Bot Does Not Reply In A Routed Surface
568
+
569
+ 1. Send `/whoami` in the surface.
570
+ 2. Confirm the exact route exists with `clisbot routes list --channel <channel>`.
571
+ 3. Confirm sender policy does not block the user.
572
+ 4. Confirm the message mentions the bot when `requireMention` is true.
573
+ 5. Run `clisbot watch --latest --lines 100` after one test message to inspect
574
+ the runner pane.
575
+
576
+ ### Runner Looks Stuck
577
+
578
+ 1. Run `clisbot runner list`.
579
+ 2. Run `clisbot runner inspect --latest`.
580
+ 3. Use `clisbot watch --latest --lines 100` to see the live pane.
581
+ 4. Open the workspace directly, usually `~/.clisbot/workspaces/default`.
582
+ 5. Start the native CLI there and clear auth, trust, or dependency prompts.
583
+ 6. Use `/nudge`, `/stop`, or `/new` depending on whether the run is waiting,
584
+ wrong, or needs a fresh conversation.
585
+
586
+ ### Access Control Is Confusing
587
+
588
+ 1. Separate the two questions:
589
+ - route policy: may this sender reach this surface?
590
+ - auth role: what may this sender do after admission?
591
+ 2. Use `clisbot routes get --channel <channel> <route-id> --bot <bot>`.
592
+ 3. Use:
593
+
594
+ ```bash
595
+ clisbot auth get-permissions --sender <principal> --agent <agentId> --json
596
+ ```
597
+
598
+ 4. Remember that `disabled` wins over owner/admin, and `blockUsers` still wins.
599
+
600
+ ### Queue Or Loop Behavior Is Surprising
601
+
602
+ 1. Check the current session with `/status`.
603
+ 2. List pending queue items with `/queue list` or `clisbot queues list`.
604
+ 3. Check loops with `/loop status` or `clisbot loops status`.
605
+ 4. Confirm the loop timezone in the creation response.
606
+ 5. Cancel stale loops before creating replacement schedules.
607
+
608
+ ## Command Cheat Sheet
609
+
610
+ | Job | Command |
611
+ | --- | --- |
612
+ | Start first Telegram personal bot | `clisbot start --cli codex --bot-type personal --telegram-bot-token <token> --persist` |
613
+ | Start first Slack team bot | `clisbot start --cli codex --bot-type team --slack-app-token <xapp> --slack-bot-token <xoxb> --persist` |
614
+ | Check runtime health | `clisbot status` |
615
+ | Read recent logs | `clisbot logs` |
616
+ | Inspect live runner output | `clisbot watch --latest --lines 100` |
617
+ | Add Telegram group route | `clisbot routes add --channel telegram group:<chatId> --bot default` |
618
+ | Add Telegram topic route | `clisbot routes add --channel telegram topic:<chatId>:<topicId> --bot default` |
619
+ | Add Slack channel route | `clisbot routes add --channel slack group:<channelId> --bot default` |
620
+ | Approve DM pairing | `clisbot pairing approve <channel> <code>` |
621
+ | Hard reset runtime sessions | `clisbot stop --hard` |
622
+ | Show update instructions | `clisbot update --help` |
623
+
624
+ ## Related Docs
625
+
626
+ - [User Guide](docs/user-guide/README.md)
627
+ - [CLI Commands](docs/user-guide/cli-commands.md)
628
+ - [Runtime Operations](docs/user-guide/runtime-operations.md)
629
+ - [Routes](docs/user-guide/channels.md)
630
+ - [Surface Access Model](docs/user-guide/surface-access-model.md)
631
+ - [Bots And Credentials](docs/user-guide/bots-and-credentials.md)
632
+ - [Authorization And Roles](docs/user-guide/auth-and-roles.md)
633
+ - [Slash Commands](docs/user-guide/slash-commands.md)
634
+ - [Agent Progress Replies](docs/user-guide/agent-progress-replies.md)
635
+ - [Telegram Bot Setup](docs/user-guide/telegram-setup.md)
636
+ - [Slack App Setup](docs/user-guide/slack-setup.md)
637
+ - [Zalo Bot Setup](docs/user-guide/zalo-bot-setup.md)
638
+ - [Zalo Personal](docs/user-guide/zalo-personal.md)
639
+
640
+
641
+ ## CLI Compatibility Snapshot
642
+
643
+ `clisbot` currently works well with Codex, Claude, and Gemini.
644
+
645
+ | CLI | Current Stability | Short Take |
646
+ | ----------| ---------------------| -------------------------------------------------------------------------------------------------------------|
647
+ | `codex` | Best today | Strongest default for routed coding work. |
648
+ | `claude` | Usable with caveats | Claude can surface its own plan-approval and auto-mode behavior even when launched with bypass-permissions. |
649
+ | `gemini` | Fully compatible | Gemini is supported as a first-class runner for routed chat-native workflows. |
650
+
651
+ CLI-specific operator notes:
652
+
653
+ - [Codex CLI Guide](docs/user-guide/codex-cli.md)
654
+ - [Claude CLI Guide](docs/user-guide/claude-cli.md)
655
+ - [Gemini CLI Guide](docs/user-guide/gemini-cli.md)
656
+
238
657
  ## Recent Release Highlights
239
658
 
659
+ - `v0.1.53`: refreshes the main README and localized user guides, adds Zalo Bot QR onboarding and Zalo Personal media guidance, fixes queue/loop/message-tool edge cases, tightens Slack/Telegram/Zalo channel behavior, and adds admin-only sensitive channel permissions for contact, group, and channel-native actions.
240
660
  - `v0.1.52`: clarifies shared-route setup so `routes add ...` clearly means “use the agent currently assigned to that bot by default,” and prunes stale short `startupDelayMs` overrides so upgraded installs can actually inherit the newer 60-second startup default.
241
661
  - `v0.1.51`: raises the default runner startup window to 60 seconds across the
242
662
  standard CLI families and the shared runner fallback, so slower fresh launches
243
663
  are less likely to fail before the first prompt can be submitted.
244
664
  - `v0.1.50`: a much more AI-native operator experience, where you can
245
665
  increasingly talk to the bot to manage itself; plus safer personal and team
246
- bots in real Slack and Telegram groups, automatic direct updates from older
666
+ bots in real shared chat surfaces, automatic direct updates from older
247
667
  installs, durable queue control, clearer session continuity truth, more
248
668
  reliable scheduled loops, stronger trust/restart behavior, and stricter
249
669
  streaming/session isolation.
@@ -272,80 +692,17 @@ Read the full notes here:
272
692
 
273
693
  - [CHANGELOG.md](CHANGELOG.md)
274
694
  - [Release Notes Index](docs/releases/README.md)
695
+ - [v0.1.53 Release Notes](docs/releases/v0.1.53.md)
275
696
  - [v0.1.52 Release Notes](docs/releases/v0.1.52.md)
276
697
  - [v0.1.51 Release Notes](docs/releases/v0.1.51.md)
277
698
  - [v0.1.50 Release Notes](docs/releases/v0.1.50.md)
278
699
  - [v0.1.43 Release Notes](docs/releases/v0.1.43.md)
279
700
  - [v0.1.39 Release Notes](docs/releases/v0.1.39.md)
280
701
 
281
- If you prefer Slack first:
282
-
283
- ```bash
284
- clisbot start \
285
- --cli codex \
286
- --bot-type team \
287
- --slack-app-token SLACK_APP_TOKEN \
288
- --slack-bot-token SLACK_BOT_TOKEN
289
- ```
290
-
291
- Short alias:
292
-
293
- ```bash
294
- clis start --cli codex --bot-type personal --telegram-bot-token <your-telegram-bot-token>
295
- ```
296
-
297
- Local repo path:
298
-
299
- ```bash
300
- bun install
301
- bun run start --cli codex --bot-type personal --telegram-bot-token <your-telegram-bot-token> --persist
302
- ```
303
-
304
- Repo-local `bun run start|stop|restart|status|logs|init|pairing` is pinned by `.env` to `CLISBOT_HOME=~/.clisbot-dev`, so local testing does not accidentally reuse your main `~/.clisbot` runtime.
305
-
306
- Update note for existing installs:
307
-
308
- - Older installs before `v0.1.50` now update directly on first run with a
309
- backup written first, so most people can update and restart without a manual
310
- migration pass.
311
- - `v0.1.52` keeps that direct-upgrade path and does not introduce a new config
312
- schema bump; it also cleans up stale short startup-delay overrides that would
313
- otherwise keep some upgraded installs on older timeout behavior.
314
- - After you are on the `v0.1.50` schema line, future upgrades should feel much
315
- more AI-native:
316
- in many cases you can simply ask the bot to update `clisbot` to the latest
317
- version, and it can follow the update guide, perform the upgrade flow, then
318
- brief you on what changed.
319
- - If you still want an agent to inspect your current config before updating,
320
- ask Codex or Claude in this repo to review it first.
321
- - The manual package upgrade path is now simpler:
322
-
323
- ```bash
324
- npm install -g clisbot && clisbot restart
325
- clisbot --version
326
- ```
327
-
328
- First conversation path:
329
-
330
- - send a DM to the bot in Slack or Telegram
331
- - if that principal is already app `owner` or app `admin`, pairing is bypassed and the bot should answer normally
332
- - otherwise, `clisbot` defaults DMs to pairing mode and replies with a pairing code plus approval command
333
-
334
- Approve it with:
335
-
336
- ```bash
337
- clisbot pairing approve slack <CODE>
338
- clisbot pairing approve telegram <CODE>
339
- ```
340
-
341
- Fresh config starts with no configured agents, so first-run `clisbot start` requires both `--cli` and `--bot-type` before it creates the first `default` agent.
342
- Fresh config also starts with no preconfigured Slack channels or Telegram groups or topics. Add those routes manually in `~/.clisbot/clisbot.json`.
343
- `clisbot start` requires explicit channel token input before it bootstraps anything. You can pass raw values, env names such as `MY_TELEGRAM_BOT_TOKEN`, or placeholders such as `'${MY_TELEGRAM_BOT_TOKEN}'`.
344
- If you want a separate dev instance beside your main bot, see the [Development Guide](docs/development/README.md).
345
702
 
346
703
  ## Showcase
347
704
 
348
- The goal is a real chat-native agent surface, not a terminal transcript mirror: threads, topics, follow-up behavior, and file-aware workflows should feel native to Slack and Telegram.
705
+ The goal is a real chat-native agent surface, not a terminal transcript mirror: threads, topics, follow-up behavior, and file-aware workflows should feel native to each supported channel surface.
349
706
 
350
707
  Slack
351
708
 
@@ -367,173 +724,6 @@ Strong vendor investment in security and safety does not make frontier agentic C
367
724
 
368
725
  `clisbot` would not exist without the ideas, momentum, and practical inspiration created by OpenClaw. Many configuration, routing, and workspace concepts here were learned from studying OpenClaw, then adapted to `clisbot`'s own direction. Respect and thanks to the OpenClaw project and community.
369
726
 
370
- ## Setup Guide
371
-
372
- The easiest setup flow is still:
373
-
374
- 1. Install `clisbot`.
375
- 2. Run the quick start command above.
376
- 3. DM the bot; approve pairing unless that principal is already app `owner` or app `admin`.
377
- 4. Only move into advanced config after the first successful run.
378
-
379
- If you want the repo-guided setup path:
380
-
381
- 1. Clone this repo.
382
- 2. Open Claude Code, Codex, or Gemini CLI in this repo.
383
- 3. Ask it to help you set up `clisbot`.
384
-
385
- The docs in this repo are kept current, including the [User Guide](docs/user-guide/README.md), so the agent should have enough context to walk you through setup, configuration, and troubleshooting directly inside the repo.
386
- If anything goes wrong, the fastest rescue loop is usually `clisbot logs`,
387
- `clisbot status`, `clisbot restart`, or if needed `clisbot stop --hard`
388
- followed by `clisbot start`.
389
- Also open the coding CLI directly inside the bot workspace, usually
390
- `~/.clisbot/workspaces/default`, and make sure that CLI already works there.
391
- That is one of the strongest end-to-end checks for bot health.
392
-
393
- If you prefer to configure everything yourself:
394
-
395
- 1. Read the official config template in [config/clisbot.json.template](config/clisbot.json.template).
396
- 2. If you need the archived released snapshot for migration review, compare it with [config/clisbot.v0.1.43.json.template](config/clisbot.v0.1.43.json.template).
397
- 3. Copy the official template to `~/.clisbot/clisbot.json` and adjust bots, routes, agents, workspaces, and policies for your environment.
398
- 4. Add agents through the CLI so tool defaults, startup options, and bootstrap templates stay consistent.
399
- 5. Optionally move stable channel secrets into env vars or canonical credential files after your first successful run.
400
-
401
- Channel route setup is manual by design:
402
-
403
- - fresh config does not auto-add Slack channels
404
- - fresh config does not auto-add Telegram groups or topics
405
- - add only the exact channel, group, topic, or DM routing you want to expose
406
- - default bot credential setup lives in [docs/user-guide/bots-and-credentials.md](docs/user-guide/bots-and-credentials.md)
407
-
408
- Advanced agent management:
409
-
410
- - most users should stay on `clisbot start --cli ... --bot-type ...` and let first-run create the default agent
411
- - if you need more than one agent, custom bot defaults, or manual route setup flows, use the `clisbot agents ...`, `clisbot bots ...`, and `clisbot routes ...` commands described in [docs/user-guide/README.md](docs/user-guide/README.md)
412
- - README intentionally keeps that low-level surface out of the main onboarding path because the public first-run model is `--bot-type personal|team`, not internal template-mode naming
413
- - fresh bot config still points at the `default` agent; if your first useful agent uses another id, update the fallback with `clisbot bots set-agent ...` or override it on a route with `clisbot routes set-agent ...`
414
-
415
- Env-backed setup is still supported when you want config to reference an env name instead of persisting a credential file:
416
-
417
- ```bash
418
- clisbot start \
419
- --cli codex \
420
- --bot-type personal \
421
- --slack-app-token CUSTOM_SLACK_APP_TOKEN \
422
- --slack-bot-token CUSTOM_SLACK_BOT_TOKEN
423
- ```
424
-
425
- - these flags are written into `~/.clisbot/clisbot.json` as `${ENV_NAME}` placeholders
426
- - you can pass either `CUSTOM_SLACK_APP_TOKEN` or `'${CUSTOM_SLACK_APP_TOKEN}'`
427
- - use this path when you want config to point at env variable names you chose yourself
428
- - keep env export details in [docs/user-guide/bots-and-credentials.md](docs/user-guide/bots-and-credentials.md) instead of front-loading them into quick start
429
-
430
- ## Troubleshooting
431
-
432
- If the quick start does not work, check these in order:
433
-
434
- - If setup feels unclear, open Claude Code, Codex, or Gemini CLI in this repo and ask it to help using the local docs.
435
- - If anything looks wrong, start with `clisbot logs`, `clisbot status`,
436
- `clisbot restart`, or if needed `clisbot stop --hard` followed by
437
- `clisbot start`.
438
- - If config behavior is confusing, inspect [config/clisbot.json.template](config/clisbot.json.template) first, then compare it with [docs/user-guide/README.md](docs/user-guide/README.md).
439
- - If `clisbot start` says no agents are configured, prefer `clisbot start --cli codex --bot-type personal --telegram-bot-token <your-telegram-bot-token>`.
440
- - If `clisbot start` prints token refs as `missing`, either pass the token explicitly on the command line or switch to env-backed setup described in [docs/user-guide/bots-and-credentials.md](docs/user-guide/bots-and-credentials.md).
441
- - If `clisbot status` shows `bootstrap=...:missing` or `bootstrap=...:not-bootstrapped`, follow the advanced agent bootstrap steps in [docs/user-guide/README.md](docs/user-guide/README.md).
442
- - Trust is usually handled automatically by the bot, but if trust or startup
443
- behavior still looks wrong, go to the workspace and launch the underlying CLI
444
- there directly, for example `cd ~/.clisbot/workspaces/default` and start
445
- `codex`, `claude`, or `gemini` yourself. If the CLI cannot start cleanly in
446
- that workspace, the bot will not be healthy either.
447
- - If Gemini startup says it is waiting for manual authorization, authenticate Gemini directly first or provide a headless auth path such as `GEMINI_API_KEY` or Vertex AI credentials; `clisbot` now treats that screen as a startup blocker instead of a healthy ready session.
448
- - If Codex warns that `bubblewrap` is missing on Linux, install `bubblewrap` in the runtime environment.
449
- - If the bot does not answer, check `clisbot status` first. Healthy channels should show `connection=active`; if a channel stays `starting`, inspect `clisbot logs`.
450
- - If a routed message was accepted but no reply arrives, send one test message
451
- and immediately run `clisbot watch --latest --lines 100` in a terminal. This
452
- shows the live tmux runner pane and usually reveals missing CLI auth, trust
453
- prompts, stuck startup, or model/provider errors.
454
- - If Codex works in your normal terminal but the routed runner shows `Missing environment variable: CODEX_CLIPROXYAPI_KEY`, remember that `clisbot` runs Codex from a detached background process and tmux session. Start or restart `clisbot` from a shell where `echo $CODEX_CLIPROXYAPI_KEY` prints a value, or export the key in the environment used by your service manager. Existing tmux runner sessions keep their old environment, so recycle them after fixing env.
455
- - If runtime startup still fails, run `clisbot logs` and inspect the recent log tail that `clisbot` now prints automatically on startup failure.
456
- - If `clisbot restart` warns that stop timed out during an update, run `clisbot status` once. Current releases should continue cleanly when status already shows the worker exited; only treat it as a real bug if restart leaves the runtime down.
457
- - If a normal restart is not enough, use `clisbot stop --hard` to stop the runtime and kill all tmux runner sessions on the configured clisbot socket, then start again from a shell with the correct environment.
458
- - If you need the full command list, run `clisbot --help`.
459
- - If you need step-by-step operator docs, start with [docs/user-guide/README.md](docs/user-guide/README.md).
460
- - If Slack thread behavior feels too eager, use `/followup pause` or `/followup mention-only`.
461
- - If Slack slash commands conflict with Slack-native command handling, add a leading space, for example ` /bash ls -la`.
462
-
463
- ## Common CLI commands
464
-
465
- Most users only need a small set of commands at first:
466
-
467
- - `clisbot start`: start the bot runtime and create the default first-run setup when needed.
468
- - `clisbot restart`: restart the runtime cleanly; use this first when the bot stops responding.
469
- - `clisbot stop`: stop the runtime cleanly before updates, config changes, or maintenance.
470
- - `clisbot stop --hard`: stop the runtime and kill all tmux runner sessions on the configured clisbot socket; use this when stale runner panes, old environment variables, or stuck sessions survive a normal restart.
471
- - `clisbot status`: check whether the runtime, channels, and active sessions look healthy.
472
- - `clisbot logs`: inspect recent runtime logs when startup, routing, or replies look wrong.
473
- - `clisbot runner list`: list the live tmux-backed runner sessions and see what is active.
474
- - `clisbot inspect --latest`: capture the current pane state of the newest
475
- admitted session once.
476
- - `clisbot watch --latest --lines 100`: jump straight into the newest admitted
477
- live session with enough context to debug a just-submitted message.
478
- - `clisbot watch --index 2`: follow the second most recent admitted session
479
- without needing to copy a tmux session name first.
480
- - `clisbot queues list`: inspect pending durable queued prompts across the app.
481
- - `clisbot queues create --channel telegram --target group:-1001234567890 --topic-id 4335 --sender telegram:1276408333 <prompt>`: create one durable same-session queued prompt, capped by `control.queue.maxPendingItemsPerSession` (default `20`).
482
-
483
- Full operator command reference:
484
-
485
- - [CLI Commands Guide](docs/user-guide/cli-commands.md)
486
-
487
- If you are running from the repo instead of the global package:
488
-
489
- - `bun run dev`
490
- - `bun run start`
491
- - `bun run restart`
492
- - `bun run stop`
493
- - `bun run typecheck`
494
- - `bun run test`
495
- - `bun run check`
496
-
497
- ## In Chat
498
-
499
- `clisbot` supports a small set of chat-native commands for thread control and workflow acceleration inside Slack and Telegram.
500
-
501
- Native coding-CLI command compatibility:
502
-
503
- - `clisbot` only intercepts its own reserved chat commands
504
- - any other native Claude, Codex, or Gemini command text is forwarded to the underlying CLI unchanged
505
- - operator guide: [Native CLI Commands](docs/user-guide/native-cli-commands.md)
506
-
507
- Slack note:
508
-
509
- - To stop Slack from interpreting a slash command as a native Slack slash command, prefix it with a space.
510
- - Example: ` /bash ls -la`
511
- - Bash shorthand also works: `!ls -la`
512
-
513
- Common commands:
514
-
515
- - `/start`: show onboarding or route-status help for the current conversation.
516
- - `/help`: show the available clisbot conversation commands.
517
- - `/stop`: interrupt the current running turn.
518
- - `/streaming on`, `/streaming off`, `/streaming status`: turn live progress on when you want to follow long coding work, then turn it back off when you only want final answers; in Slack, use ` /streaming on` or `\streaming on` when Slack grabs the raw slash command.
519
- - `/followup status`, `/followup auto`, `/followup mention-only`, `/followup pause`, `/followup resume`: control whether the bot keeps naturally following the thread, stays quiet, or requires an explicit mention again; fast shorthands include `/mention`, `/pause`, and `/resume`.
520
- - `/queue <message>`: queue the next prompt behind the current run so the bot can finish one thing, then keep going automatically without you babysitting every step.
521
- - `/loop <schedule or count> <message>`: turn one instruction into repeated work, from recurring automation to brute-force progress like `/loop 3 tiếp đi em` when you want the AI to keep pushing instead of stopping early.
522
-
523
- Why `/queue` and `/loop` matter:
524
-
525
- - `/queue` is a very simple workflow primitive: stack the next prompts now, let the bot run them one by one later.
526
- - `/loop` is the force multiplier: use it for recurring review/reporting, or just to keep the AI moving through multi-step coding work with less laziness and fewer early stops.
527
-
528
- Examples:
529
-
530
- - `/queue tiếp đi em`
531
- - `/queue code review theo architecture, guideline và fix, test`
532
- - `/loop 3 tiếp đi em`
533
-
534
- Detailed slash-command guide:
535
-
536
- - [Slash Commands](docs/user-guide/slash-commands.md)
537
727
 
538
728
  ## Docs
539
729
 
@@ -550,32 +740,17 @@ Detailed slash-command guide:
550
740
 
551
741
  ## Roadmap
552
742
 
553
- - Add more native CLIs, starting with a stronger Claude, Codex, and Gemini launch trio.
554
- - Add more channels, starting from Slack and Telegram, then moving toward Zalo and other expansion surfaces.
555
- - Add better workflow building blocks such as heartbeat, cron-style jobs, and stronger loop automation.
556
- - Explore structured output, ACP, and native SDK integrations where they improve truthfulness or operator control.
557
- - Explore more stable native messaging paths beyond tmux-pane capture over time.
743
+ Current shipped foundation:
558
744
 
559
- ## Current Focus
745
+ - Native CLI runners: Codex, Claude Code, and Gemini CLI.
746
+ - Channels: Telegram, Slack, Zalo Bot, and Zalo Personal.
747
+ - Workflow primitives: durable queues and loops are stable enough for real chat-native operations work.
560
748
 
561
- `clisbot` is growing toward a broader agent runtime layer:
749
+ Next focus:
562
750
 
563
- - more CLI tool support beyond Claude Code, Codex, and Gemini CLI
564
- - more communication channels beyond Slack and Telegram
565
- - simple workflow building blocks such as cron jobs, heartbeat jobs, and loops
566
- - durable agent sessions, workspaces, follow-up policy, commands, attachments, and operator controls that stay reusable across all those surfaces
567
- - stability and security stay at the top of the project focus; if you find an
568
- issue in either area, please report it
569
-
570
- tmux is still the current stability boundary. One agent maps to one durable runner session in one workspace, and every CLI, channel, or workflow layer should route onto that durable runtime instead of recreating the agent from scratch.
571
-
572
- ## Completed
573
-
574
- - [x] Multiple Codex, Claude, and Gemini sessions with streaming on/off support.
575
- - [x] Stale tmux session cleanup and session resume.
576
- - [x] OpenClaw-compatible configuration system.
577
- - [x] Slack channel support with streaming and attachments, smart follow mode
578
- - [x] Telegram channel support with streaming and attachments
751
+ - Standardize auto-skill creation and improvement, similar to the Hermes agent pattern: repeated or struggled tasks should become reusable skills over daily and weekly review loops.
752
+ - Add the next channel wave: Discord and WhatsApp Personal unofficial.
753
+ - Keep improving runtime safety, recovery, and channel-native operator experience around the durable tmux runner boundary.
579
754
 
580
755
  ## AI-Native Workflow
581
756
 
@@ -587,6 +762,19 @@ This repo also serves as a small example of an AI-native engineering workflow:
587
762
  - end-to-end validation expectations to close the feedback loop for AI agents
588
763
  - workflow docs for shortest-review-first artifacts, repeated review loops, and task-readiness shaping in [docs/workflow/README.md](docs/workflow/README.md)
589
764
 
765
+ ## Bug Report
766
+
767
+ The preferred way to report bugs is to create an issue in this GitHub repo.
768
+ You can also report through this
769
+ [Google Form](https://docs.google.com/forms/d/e/1FAIpQLSd7L7mHOo0ea8YXFI4tGnyDIj94ESn4hbbDa5YTbcEKTVOKTA/viewform).
770
+ Please include:
771
+
772
+ - your clisbot version
773
+ - channel and runner used
774
+ - what you expected
775
+ - what happened instead
776
+ - relevant `clisbot status` or `clisbot logs` output with secrets removed
777
+
590
778
  ## Contributing
591
779
 
592
780
  Merge requests are welcome.