claude-nb 0.4.0 → 0.5.43

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.
Files changed (74) hide show
  1. package/Makefile +8 -2
  2. package/README.md +262 -55
  3. package/VERSION +1 -1
  4. package/bin/_pip_entry.py +1 -1
  5. package/bin/board +119 -34
  6. package/bin/check-changelog +98 -0
  7. package/bin/check-npm-package +89 -0
  8. package/bin/check-readme-sync +69 -0
  9. package/bin/cnb +150 -38
  10. package/bin/configure-godaddy-pages-dns +203 -0
  11. package/bin/dispatcher +25 -11
  12. package/bin/doctor +55 -6
  13. package/bin/init +70 -9
  14. package/bin/notify +278 -0
  15. package/bin/registry +8 -23
  16. package/bin/secret-scan +165 -0
  17. package/bin/shutdown +68 -0
  18. package/bin/sync-version +131 -0
  19. package/lib/board_admin.py +18 -24
  20. package/lib/board_bbs.py +28 -19
  21. package/lib/board_bug.py +11 -22
  22. package/lib/board_db.py +37 -6
  23. package/lib/board_lock.py +16 -12
  24. package/lib/board_mail.py +212 -0
  25. package/lib/board_mailbox.py +41 -4
  26. package/lib/board_msg.py +88 -25
  27. package/lib/board_own.py +288 -0
  28. package/lib/board_pending.py +236 -0
  29. package/lib/board_pulse.py +14 -0
  30. package/lib/board_task.py +45 -17
  31. package/lib/board_tui.py +37 -23
  32. package/lib/board_view.py +113 -57
  33. package/lib/board_vote.py +12 -15
  34. package/lib/build_lock.py +9 -9
  35. package/lib/cli.py +3 -3
  36. package/lib/common.py +67 -7
  37. package/lib/concerns/__init__.py +4 -1
  38. package/lib/concerns/coral.py +1 -1
  39. package/lib/concerns/digest_scheduler.py +128 -0
  40. package/lib/concerns/file_watcher.py +84 -69
  41. package/lib/concerns/health.py +1 -1
  42. package/lib/concerns/helpers.py +17 -37
  43. package/lib/concerns/notification_push.py +178 -0
  44. package/lib/concerns/notifications.py +58 -3
  45. package/lib/concerns/nudge_coordinator.py +148 -0
  46. package/lib/digest.py +142 -0
  47. package/lib/github_issues_sync.py +173 -0
  48. package/lib/global_registry.py +183 -0
  49. package/lib/health.py +2 -2
  50. package/lib/inject.py +23 -15
  51. package/lib/migrate.py +8 -4
  52. package/lib/monitor.py +33 -13
  53. package/lib/notification_config.py +121 -0
  54. package/lib/notification_delivery.py +95 -0
  55. package/lib/panel.py +6 -2
  56. package/lib/resources.py +6 -3
  57. package/lib/shift_report.py +223 -0
  58. package/lib/shutdown.py +198 -0
  59. package/lib/swarm.py +43 -35
  60. package/lib/swarm_backend.py +63 -29
  61. package/lib/theme_profiles.py +89 -0
  62. package/lib/tmux_utils.py +52 -0
  63. package/lib/token_usage.py +148 -0
  64. package/migrations/004_heartbeat.sql +1 -0
  65. package/migrations/005_notification_log.sql +12 -0
  66. package/migrations/006_pending_actions.sql +15 -0
  67. package/migrations/007_mail.sql +15 -0
  68. package/migrations/008_ownership.sql +10 -0
  69. package/package.json +38 -4
  70. package/pyproject.toml +3 -2
  71. package/registry/0005-ritchie.json +12 -0
  72. package/registry/README.md +9 -0
  73. package/registry/pubkeys.json +83 -3
  74. package/schema.sql +54 -1
package/Makefile CHANGED
@@ -8,13 +8,13 @@ SCRIPTS = bin/cnb bin/board bin/swarm bin/dispatcher bin/dispatcher-watchdog bin
8
8
  # All python sources (bin + lib)
9
9
  PY_SOURCES = bin/board bin/swarm bin/dispatcher bin/dispatcher-watchdog bin/init lib/ tests/
10
10
 
11
- .PHONY: all install uninstall test lint typecheck format check ci clean version
11
+ .PHONY: all install uninstall test lint typecheck format check ci clean version sync-version check-version
12
12
 
13
13
  all: check
14
14
 
15
15
  check: lint test
16
16
 
17
- ci: lint typecheck test
17
+ ci: lint typecheck test check-version
18
18
 
19
19
  lint:
20
20
  @echo "=== ruff ==="
@@ -56,5 +56,11 @@ clean:
56
56
  find . -type d -name '*.egg-info' -exec rm -rf {} + 2>/dev/null || true
57
57
  rm -rf dist/ build/ .mypy_cache/ .ruff_cache/
58
58
 
59
+ sync-version:
60
+ python3 bin/sync-version
61
+
62
+ check-version:
63
+ python3 bin/sync-version --check
64
+
59
65
  version:
60
66
  @echo $(VERSION)
package/README.md CHANGED
@@ -1,100 +1,307 @@
1
+ <!-- README_SYNC: sections must match README_zh.md — run bin/check-readme-sync -->
2
+
3
+ [中文版](README_zh.md)
4
+
1
5
  # claude-nb
2
6
 
3
- Multi-agent coordination framework for Claude Code sessions.
7
+ [![CI](https://github.com/ApolloZhangOnGithub/cnb/actions/workflows/ci.yml/badge.svg)](https://github.com/ApolloZhangOnGithub/cnb/actions/workflows/ci.yml)
8
+ [![npm](https://img.shields.io/npm/v/claude-nb?label=npm)](https://www.npmjs.com/package/claude-nb)
9
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-3776AB)](pyproject.toml)
10
+ [![Docs](https://img.shields.io/badge/docs-c--n--b.space-14865d)](https://c-n-b.space/)
11
+ [![License](https://img.shields.io/badge/license-OpenAll--1.0-444)](LICENSE)
12
+
13
+ **Project ownership for LLM teams.**
14
+
15
+ `cnb` is local-first organizational infrastructure for long-lived Claude Code and Codex teams. It gives AI coding sessions a shared board, durable ownership, handoff records, and operational checks so a restarted session does not become a new hire with no memory.
16
+
17
+ ```bash
18
+ npm install -g claude-nb
19
+ ```
20
+
21
+ | Surface | Current shape |
22
+ |---------|---------------|
23
+ | Runtime | Local tmux sessions, SQLite board, dispatcher, filesystem reports |
24
+ | Engines | Claude Code by default; Codex supported through the npm peer CLI |
25
+ | State | Board database, ownership map, issue mirror, daily/shift reports |
26
+ | Distribution | Public npm package `claude-nb`, Python 3.11+ internals |
27
+ | Documentation | README short path, durable docs in [`docs/`](docs/), public site at [`c-n-b.space`](https://c-n-b.space/) |
28
+
29
+ Every multi-agent tool solves "how to run multiple agents." cnb solves what happens after — how to make them **manageable** across sessions, shifts, and team changes.
30
+
31
+ LLM sessions are stateless. Every restart is a new hire who knows nothing. Without organizational infrastructure, you get temporary workers who split tasks, finish, and forget. cnb gives them **permanent module ownership**: lisa-su owns the notification system across 11 commits and 3 restarts. When a bug surfaces, you don't re-explain the module to a blank session — you find the owner's daily report and pick up where they left off.
32
+
33
+ This is not about speed or context isolation. Those are side effects. The core problem is: [42% of multi-agent failures are specification and system design issues](https://arxiv.org/abs/2503.13657) — role ambiguity, task misinterpretation, poor decomposition (Cemri et al., NeurIPS 2025 Spotlight). Not capability — organization. cnb is organizational infrastructure for AI teams.
34
+
35
+ <!-- section:start-here -->
36
+ ## Start here
37
+
38
+ | Need | Path |
39
+ |------|------|
40
+ | Install the CLI | `npm install -g claude-nb` |
41
+ | Understand the model | [How cnb fits in](#how-cnb-fits-in), [Glossary](#glossary), [Ownership autonomy](docs/design-ownership-autonomy.md) |
42
+ | Start a team | [Quick start](#quick-start), then `cnb` inside a project |
43
+ | Inspect a real run | [Silicon Valley Battle](instances/silicon_vally_battle/) |
44
+ | Publish or verify package metadata | [Package publishing](docs/package-publishing.md) |
45
+ | Contribute safely | [Contributing](CONTRIBUTING.md), [Security](SECURITY.md), [Roadmap](ROADMAP.md) |
46
+
47
+ <!-- section:status -->
48
+ ## Project status
49
+
50
+ cnb is no longer a single-script experiment, but it is still an active local-first system that expects a trusted workstation and human supervision.
4
51
 
5
- Spawn a team of Claude Code instances that communicate, delegate tasks, and collaborate through a shared board — all orchestrated from your terminal.
52
+ | Area | Current state | Evidence |
53
+ |------|---------------|----------|
54
+ | CLI packaging | npm entrypoint wraps the Python CLI | [`package.json`](package.json), [`pyproject.toml`](pyproject.toml), [`bin/cnb`](bin/cnb) |
55
+ | Board runtime | SQLite schema, migrations, task/inbox/status/ownership commands | [`schema.sql`](schema.sql), [`migrations/`](migrations/), [`lib/board_*.py`](lib/) |
56
+ | Quality gates | ruff, mypy, pytest, version sync, changelog, CodeQL, and secret scanning | [`.github/workflows/ci.yml`](.github/workflows/ci.yml), [`Makefile`](Makefile) |
57
+ | Governance | issue-first workflow, ownership rules, Co-Authored-By policy | [`CONTRIBUTING.md`](CONTRIBUTING.md), [`ROADMAP.md`](ROADMAP.md), [`registry/`](registry/) |
58
+ | Docs | bilingual README, durable product docs, and public GitHub Pages site | [`README_zh.md`](README_zh.md), [`docs/`](docs/), [`site/`](site/) |
59
+ | Boundaries | local-first, high-permission options, human-supervised automation | [`SECURITY.md`](SECURITY.md), [FAQ](#faq) |
6
60
 
61
+ <!-- section:why -->
62
+ ## How cnb fits in
63
+
64
+ There are many great tools in this space, each with a different focus:
65
+
66
+ - **Claude Squad, amux, ittybitty** — session management: launching, isolating, and monitoring parallel agents. Polished UX, git worktree isolation, agent-agnostic support.
67
+ - **Codex, cloud agents** — one task per sandbox, excellent for isolated jobs.
68
+ - **cnb** — organizational layer: persistent module ownership, cross-session continuity, accountability, handoff protocols.
69
+
70
+ These are complementary. You could use Claude Squad for session management and cnb for team coordination on top. Or use Codex for one-off tasks and cnb for sustained multi-session development.
71
+
72
+ cnb's specific focus is what happens **between** sessions — when a tongxue restarts with no memory, how does it pick up where the last one left off? Daily reports, shift directories, bug tracker with SLA, Co-Authored-By enforcement, and shutdown protocols are all designed for this.
73
+
74
+ **Where cnb is headed:** Today, a module owner still needs a human to say "go check your issues" or "push your code." The goal is for owners to be fully autonomous within their domain — auto-detecting relevant issues, verifying their own work against CI, creating PRs, and responding to failures. Not "unattended agents doing random tasks" but "responsible owners who don't need to be told to do their job." See [ROADMAP.md](ROADMAP.md).
75
+
76
+ <!-- section:glossary -->
77
+ ## Glossary
78
+
79
+ | Term | Meaning |
80
+ |------|---------|
81
+ | **tongxue** (同学) | Literally "classmate" in Chinese. Each Claude Code instance in a cnb team is called a tongxue — not an "agent", not a "worker". The word implies peers learning and building together, which is how cnb sessions actually operate: they coordinate as equals through a shared message board, not through a master-slave hierarchy. |
82
+ | **lead tongxue** | The tongxue whose terminal faces the user. It delegates work and relays results, but has no special privileges on the board. |
83
+ | **board** | The shared SQLite database (`.claudes/board.db`) where tongxue exchange messages, track tasks, and report status. |
84
+ | **dispatcher** | A background process that monitors tongxue health and nudges idle ones. |
85
+
86
+ <!-- section:install -->
7
87
  ## Install
8
88
 
9
89
  ```bash
10
90
  npm install -g claude-nb
11
91
  ```
12
92
 
13
- Requires: Python 3.11+, tmux, Claude Code CLI.
93
+ The canonical public package is [`claude-nb`](https://www.npmjs.com/package/claude-nb) on npmjs.com. GitHub Packages may also show the scoped mirror `@apollozhangongithub/cnb`; npmjs remains the supported install path. See [Package publishing](docs/package-publishing.md) for release and visibility rules.
14
94
 
95
+ The npm dependency count only covers JavaScript packages. cnb has no required JavaScript library dependencies, but it does have runtime requirements:
96
+
97
+ - Node.js 18+ for the npm entrypoint
98
+ - Python 3.11+ and the Python package dependency `cryptography>=41.0`
99
+ - tmux and git
100
+ - at least one agent CLI: Claude Code CLI (`@anthropic-ai/claude-code`) or Codex CLI (`@openai/codex`)
101
+
102
+ Run `cnb doctor` after install to check the local machine.
103
+
104
+ <!-- section:quickstart -->
15
105
  ## Quick start
16
106
 
17
107
  ```bash
18
- cnb # 2 agents, AI-legends theme
19
- cnb 5 # 5 agents
20
- cnb pokemon # 2 agents, Pokemon theme
21
- cnb 5 pokemon # 5 agents, Pokemon theme
108
+ cd your-project
109
+ cnb
22
110
  ```
23
111
 
24
- Themes: `ai` `animal` `food` `lang` `music` `myth` `pokemon` `space`
112
+ This initializes the project (creates `.claudes/` with SQLite DB and config), launches a team of tongxue in tmux, starts a dispatcher, and drops you into the lead tongxue's Claude Code session.
113
+
114
+ The lead tongxue talks to the user directly. Background tongxue work independently and report back through the board.
115
+
116
+ <!-- section:docs -->
117
+ ## Docs
118
+
119
+ The README is the short path. Longer-lived documentation lives under [`docs/`](docs/):
120
+
121
+ - [Ownership autonomy](docs/design-ownership-autonomy.md) — why cnb treats long-lived module ownership as the core unit of work.
122
+ - [Tongxue avatar generation](docs/avatar-generation.md) — safe provider choices and prompt rules for AI-generated tongxue avatars.
123
+ - [Package publishing](docs/package-publishing.md) — npm release, dist-tags, and GitHub Packages visibility rules.
124
+ - [Public website](https://c-n-b.space/) — first-visit product entry and documentation links.
25
125
 
26
- ## How it works
126
+ <!-- section:slash-commands -->
127
+ ## Slash commands
27
128
 
28
- `cnb` launches multiple Claude Code sessions in tmux, each with a unique identity. Agents coordinate via:
129
+ Inside the lead tongxue's Claude Code session:
29
130
 
30
- - **Board** shared message bus (inbox, broadcast, direct messages)
31
- - **Tasks** — distributed task queue with status tracking
32
- - **Encrypted mailbox**X25519 sealed-box private messaging via GitHub Release assets
33
- - **Governance** proposals, voting, and consensus (supermajority / simple majority)
34
- - **Registry** append-only identity chain (immutable agent records + milestones)
131
+ | Command | What it does |
132
+ |---------|-------------|
133
+ | `/cnb-overview` | Team dashboard who's doing what, who's stuck, who's idle |
134
+ | `/cnb-watch <name>` | Peek at what a specific tongxue is working on |
135
+ | `/cnb-progress` | Recent progress summary new messages, completed tasks |
136
+ | `/cnb-history` | Full message log |
137
+ | `/cnb-update` | Update cnb to latest version |
138
+ | `/cnb-help` | List all `/cnb-*` commands |
35
139
 
36
- ## Commands
140
+ <!-- section:demo -->
141
+ ## Demo
142
+
143
+ **[Silicon Valley Battle](instances/silicon_vally_battle/)** — 10 AI leaders (LeCun, Lisa Su, Musk, Hinton, Dario…) debate Python vs Rust, draft an AI constitution, and try to manipulate each other through the board. 886 messages in 3 hours, all coordination through cnb.
144
+
145
+ Start with the [highlights](instances/silicon_vally_battle/HIGHLIGHTS.md) — sutskever tries to pit lecun against lisa-su, both see through it in 5 minutes, then the real debate starts.
146
+
147
+ <!-- section:board-commands -->
148
+ ## Board commands
149
+
150
+ Tongxue coordinate through board commands (injected into each tongxue's system prompt automatically):
37
151
 
38
152
  ```bash
39
- cnb status # team dashboard
40
- cnb board [...] # message / task / admin commands
41
- cnb swarm [...] # manage background agents
42
- cnb doctor # health check
153
+ cnb board --as <name> inbox # check messages
154
+ cnb board --as <name> send <to> "msg" # direct message
155
+ cnb board --as <name> send all "msg" # broadcast
156
+ cnb board --as <name> ack # clear inbox
157
+ cnb board --as <name> status "desc" # update status
158
+ cnb board --as <name> task add "desc" # add task
159
+ cnb board --as <name> task done # finish current task (auto-verify + auto-PR)
160
+ cnb board --as <name> own claim <path> # claim module ownership
161
+ cnb board --as <name> own map # show all ownership
162
+ cnb board --as <name> scan # scan issues/CI for owners
163
+ cnb board --as <name> view # team dashboard
43
164
  ```
44
165
 
45
- ### Board commands (used by agents)
166
+ <!-- section:management -->
167
+ ## Management
46
168
 
47
169
  ```bash
48
- board --as <name> inbox # check unread messages
49
- board --as <name> send <to> "msg" # send message (or "all" to broadcast)
50
- board --as <name> ack # clear inbox
51
- board --as <name> status "desc" # update current status
52
- board --as <name> task add "desc" # add task
53
- board --as <name> task done # finish current task
54
- board --as <name> seal <to> "msg" # send encrypted message
55
- board --as <name> unseal # read encrypted inbox
56
- board --as <name> propose "content" # create governance proposal
57
- board --as <name> vote <#> SUPPORT "reason"
170
+ cnb ps # tongxue status dashboard
171
+ cnb logs <name> # message history
172
+ cnb exec <name> "msg" # send a message to a tongxue
173
+ cnb stop <name> # stop a tongxue
174
+ cnb doctor # health check
58
175
  ```
59
176
 
60
- ## Agent identity chain
177
+ <!-- section:issues -->
178
+ ## Issues
61
179
 
62
- Every agent gets a permanent on-chain identity. Lower block number = earlier = OG.
180
+ All GitHub issues are auto-synced to [`issues/`](issues/) by a GitHub Action — on every issue event and every 6 hours. This means any Claude session (including claude.ai web chat, which has no CLI tools) can read project issues by just reading files.
63
181
 
64
- ```bash
65
- registry list # all registered agents
66
- registry verify-chain # verify chain integrity
67
- ```
182
+ <!-- section:token-efficiency -->
183
+ ## Token efficiency
184
+
185
+ cnb's coordination layer runs **outside** the LLM context window. This is a deliberate architectural choice.
186
+
187
+ **What costs zero tokens:**
188
+ - All board commands (`inbox`, `send`, `status`, `task`) are shell commands hitting SQLite — no LLM calls
189
+ - Messages between tongxue travel through the database, not through context windows
190
+ - The dispatcher monitors health via tmux/process inspection, not by querying the LLM
191
+ - Daily reports, shift directories, bug tracker — all filesystem/DB operations
68
192
 
69
- Current chain:
193
+ **What costs tokens:**
194
+ - ~300 tokens of system prompt injection per tongxue (the board command reference in CLAUDE.md)
195
+ - Each tongxue reads its own inbox (~50-200 tokens per check, depending on message count)
196
+ - Lead tongxue summarizes progress to the user (normal conversation)
70
197
 
71
- <!-- chain:start -->
72
- | Block | Name | Type | Hash |
73
- |-------|------|------|------|
74
- | #0 | claude-nb | project | — |
75
- | #1 | Claude Meridian | agent | `82a167d` |
76
- | #2 | Claude Forge | agent | `4a3c92e` |
77
- | #3 | Claude Lead | agent | `e665a7e` |
78
- | #4 | encrypted-mailbox-live | milestone | `fcaf497` |
79
- <!-- chain:end -->
198
+ **Comparison with alternative approaches:**
80
199
 
200
+ | Approach | Coordination cost |
201
+ |----------|------------------|
202
+ | Shared context window (stuffing all agent output into one prompt) | O(n²) — every agent reads every other agent's full output |
203
+ | LLM-routed messages (using the model to decide who to message) | Every routing decision is an LLM call |
204
+ | **cnb** | O(1) — shell commands + SQLite queries, LLM only sees its own inbox |
205
+
206
+ A 6-tongxue team running for a full shift typically spends <2% of total tokens on coordination overhead. The remaining 98% goes to actual coding work. The key insight: coordination is a database problem, not a language model problem.
207
+
208
+ <!-- section:architecture -->
81
209
  ## Architecture
82
210
 
83
- - **SQLite (WAL mode)** all state lives in `board.db`
84
- - **tmux** — one pane per agent, multiplexed
85
- - **Dispatcher** monitors health, nudges idle agents, manages lifecycle
86
- - **No server** everything is local, file-based, zero network dependencies (except GitHub for encrypted mailbox delivery)
211
+ | Layer | Responsibility | Implementation |
212
+ |-------|----------------|----------------|
213
+ | CLI entrypoints | User commands, package launch, health checks | [`bin/`](bin/), [`lib/cli.py`](lib/cli.py) |
214
+ | Board | Inbox, broadcast, direct messages, tasks, status, pending actions | [`lib/board_*.py`](lib/), [`schema.sql`](schema.sql) |
215
+ | Ownership | Path ownership, owner lookup, verification, scan routing | [`lib/board_own.py`](lib/board_own.py), [`migrations/008_ownership.sql`](migrations/008_ownership.sql) |
216
+ | Runtime | One local session per tongxue, dispatcher nudges, process health | [`lib/swarm.py`](lib/swarm.py), [`lib/concerns/`](lib/concerns/) |
217
+ | Persistence | SQLite WAL database plus filesystem reports and issue mirrors | `.claudes/`, [`issues/`](issues/), shift/daily docs |
218
+ | Integrations | npm packaging, GitHub issue mirror, GitHub Packages mirror, notification delivery | [`.github/workflows/`](.github/workflows/), [`lib/notification_delivery.py`](lib/notification_delivery.py), [`docs/package-publishing.md`](docs/package-publishing.md) |
219
+
220
+ <!-- section:repository-map -->
221
+ ## Repository map
222
+
223
+ | Path | Purpose |
224
+ |------|---------|
225
+ | [`bin/`](bin/) | Executable entrypoints and release/consistency helper scripts |
226
+ | [`lib/`](lib/) | Python implementation for board, swarm, ownership, notifications, registry, and health |
227
+ | [`migrations/`](migrations/) + [`schema.sql`](schema.sql) | SQLite schema evolution |
228
+ | [`tests/`](tests/) | Unit and integration coverage for runtime behavior |
229
+ | [`docs/`](docs/) | Durable product, package, and ownership docs |
230
+ | [`site/`](site/) | GitHub Pages project site source |
231
+ | [`issues/`](issues/) | GitHub issue mirror for CLI-less agent sessions |
232
+ | [`registry/`](registry/) | Contributor/tongxue registry and chain guard |
233
+ | [`instances/`](instances/) | Demo project snapshots that are safe to inspect |
234
+
235
+ <!-- section:team -->
236
+ ## Team
237
+
238
+ | 同学 | 负责 |
239
+ |------|------|
240
+ | lead | 项目负责人、团队协调 |
241
+ | musk | 安全隔离 (#31) |
242
+ | lisa-su | 通知推送 (#33) |
243
+ | forge | 待办队列 (#34)、邮件系统 (#32)、全局管理 (#42) |
244
+ | tester | 测试加固、质量保障 |
245
+ | sutskever | 架构重构 (#26) |
246
+
247
+ <!-- section:contribution-wall -->
248
+ ## Broad Contribution Wall
249
+
250
+ GitHub's native Contributors panel only counts commits. cnb also treats issue work, PR review, checks, board ownership, and visible GitHub App actions as contribution signals. The wall below is the first broad-contribution view; implementation notes live in [Contribution wall](docs/contribution-wall.md).
251
+
252
+ <p>
253
+ <a href="https://github.com/ApolloZhangOnGithub/cnb/issues/65#issuecomment-4414136928" title="musk: GitHub App identity verified through issue activity and a guarded commit">
254
+ <img src="https://avatars.githubusercontent.com/u/283269623?s=96&v=4" width="48" height="48" alt="cnb-workspace-musk[bot]" />
255
+ </a>
256
+ </p>
257
+
258
+ <!-- section:faq -->
259
+ ## FAQ
260
+
261
+ **Q: How does cnb compare to Claude Squad / amux / ittybitty?**
262
+
263
+ Different focus. Those are session managers — great at launching, isolating, and monitoring parallel agents. cnb is an organizational layer on top: module ownership, daily reports, accountability, handoff protocols. They're complementary; you could use a session manager for the tmux layer and cnb for team coordination.
264
+
265
+ **Q: How does cnb compare to Codex?**
266
+
267
+ Different category. Codex runs isolated tasks in cloud sandboxes. cnb coordinates persistent local teams across sessions. Use Codex for one-off jobs, cnb when you need continuity and ownership across restarts.
268
+
269
+ **Q: How does cnb compare to OpenClaw?**
270
+
271
+ Completely different projects. OpenClaw is a personal AI assistant across 20+ messaging platforms (WhatsApp, Telegram, Slack, etc.). cnb is a multi-agent coordination framework specifically for Claude Code development teams. No overlap.
272
+
273
+ **Q: Can cnb run without a human watching?**
274
+
275
+ Not yet. Today, the lead tongxue needs a human to drive it. But this is the active development direction — see [ROADMAP.md](ROADMAP.md) Phase 2. The goal is for module owners to autonomously detect issues, verify their work, and deliver PRs without being told.
276
+
277
+ **Q: Is cnb token-efficient?**
278
+
279
+ Yes. All coordination (messages, tasks, status) runs through shell commands + SQLite, not LLM calls. A 6-tongxue team spends <2% of tokens on coordination. See [Token efficiency](#token-efficiency).
280
+
281
+ <!-- section:contributing -->
282
+ ## Contributing
283
+
284
+ Before writing code, read [CONTRIBUTING.md](CONTRIBUTING.md) — it covers the issue workflow, versioning rules, naming conventions, security policy, and feature ownership model.
285
+
286
+ Key points:
287
+ - Every change starts with an issue
288
+ - Every commit bumps VERSION (patch versions are fine)
289
+ - 同学 (tongxue) not "agent" in all user-facing text
290
+ - `ruff` + `mypy` + `pytest` must pass before push
291
+ - README changes must update both `README.md` and `README_zh.md` — run `bin/check-readme-sync` to verify
87
292
 
293
+ <!-- section:name -->
88
294
  ## The name
89
295
 
90
- The command **cnb** stands for **C**laude **N**orma **B**etty — named after [Claude Shannon](https://en.wikipedia.org/wiki/Claude_Shannon) and the two remarkable women in his life.
296
+ **cnb** = **C**laude **N**orma **B**etty — after [Claude Shannon](https://en.wikipedia.org/wiki/Claude_Shannon) and the two remarkable women in his life.
91
297
 
92
- **[Norma Levor](https://en.wikipedia.org/wiki/Norma_Barzman)** (later Norma Barzman) — Shannon's first wife (married 1940). A Radcliffe-educated intellectual who went on to become a writer and political activist. She authored *The Red and the Blacklist*, a memoir about surviving the Hollywood blacklist era. A woman of conviction who lived boldly across continents.
298
+ **[Norma Levor](https://en.wikipedia.org/wiki/Norma_Barzman)** (later Norma Barzman) — Shannon's first wife (1940). Writer, political activist, author of *The Red and the Blacklist*.
93
299
 
94
- **[Betty Shannon](https://en.wikipedia.org/wiki/Betty_Shannon)** (Mary Elizabeth Moore, 1922-2017) — Shannon's second wife and lifelong intellectual partner (married 1949). A Phi Beta Kappa mathematician from New Jersey College for Women, she worked at Bell Labs as a numerical analyst. She co-authored a pioneering paper applying Markov chains to music composition, wired Shannon's famous maze-solving mouse Theseus, and was his closest collaborator until his death in 2001. An unsung genius in her own right.
300
+ **[Betty Shannon](https://en.wikipedia.org/wiki/Betty_Shannon)** (19222017) — Shannon's second wife and lifelong collaborator. Mathematician at Bell Labs, co-authored work on Markov chains in music, wired the maze-solving mouse Theseus. An unsung genius.
95
301
 
96
302
  Not 吹牛逼.
97
303
 
304
+ <!-- section:license -->
98
305
  ## License
99
306
 
100
- MIT
307
+ OpenAll-1.0
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.43
package/bin/_pip_entry.py CHANGED
@@ -15,7 +15,7 @@ def main() -> None:
15
15
  bash_script = claudes_home / "bin" / "claudes-code"
16
16
 
17
17
  if bash_script.exists():
18
- os.execvp("bash", ["bash", str(bash_script)] + sys.argv[1:])
18
+ os.execvp("bash", ["bash", str(bash_script), *sys.argv[1:]])
19
19
 
20
20
  print(f"FATAL: {bash_script} not found", file=sys.stderr)
21
21
  raise SystemExit(1)