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.
- package/Makefile +8 -2
- package/README.md +262 -55
- package/VERSION +1 -1
- package/bin/_pip_entry.py +1 -1
- package/bin/board +119 -34
- package/bin/check-changelog +98 -0
- package/bin/check-npm-package +89 -0
- package/bin/check-readme-sync +69 -0
- package/bin/cnb +150 -38
- package/bin/configure-godaddy-pages-dns +203 -0
- package/bin/dispatcher +25 -11
- package/bin/doctor +55 -6
- package/bin/init +70 -9
- package/bin/notify +278 -0
- package/bin/registry +8 -23
- package/bin/secret-scan +165 -0
- package/bin/shutdown +68 -0
- package/bin/sync-version +131 -0
- package/lib/board_admin.py +18 -24
- package/lib/board_bbs.py +28 -19
- package/lib/board_bug.py +11 -22
- package/lib/board_db.py +37 -6
- package/lib/board_lock.py +16 -12
- package/lib/board_mail.py +212 -0
- package/lib/board_mailbox.py +41 -4
- package/lib/board_msg.py +88 -25
- package/lib/board_own.py +288 -0
- package/lib/board_pending.py +236 -0
- package/lib/board_pulse.py +14 -0
- package/lib/board_task.py +45 -17
- package/lib/board_tui.py +37 -23
- package/lib/board_view.py +113 -57
- package/lib/board_vote.py +12 -15
- package/lib/build_lock.py +9 -9
- package/lib/cli.py +3 -3
- package/lib/common.py +67 -7
- package/lib/concerns/__init__.py +4 -1
- package/lib/concerns/coral.py +1 -1
- package/lib/concerns/digest_scheduler.py +128 -0
- package/lib/concerns/file_watcher.py +84 -69
- package/lib/concerns/health.py +1 -1
- package/lib/concerns/helpers.py +17 -37
- package/lib/concerns/notification_push.py +178 -0
- package/lib/concerns/notifications.py +58 -3
- package/lib/concerns/nudge_coordinator.py +148 -0
- package/lib/digest.py +142 -0
- package/lib/github_issues_sync.py +173 -0
- package/lib/global_registry.py +183 -0
- package/lib/health.py +2 -2
- package/lib/inject.py +23 -15
- package/lib/migrate.py +8 -4
- package/lib/monitor.py +33 -13
- package/lib/notification_config.py +121 -0
- package/lib/notification_delivery.py +95 -0
- package/lib/panel.py +6 -2
- package/lib/resources.py +6 -3
- package/lib/shift_report.py +223 -0
- package/lib/shutdown.py +198 -0
- package/lib/swarm.py +43 -35
- package/lib/swarm_backend.py +63 -29
- package/lib/theme_profiles.py +89 -0
- package/lib/tmux_utils.py +52 -0
- package/lib/token_usage.py +148 -0
- package/migrations/004_heartbeat.sql +1 -0
- package/migrations/005_notification_log.sql +12 -0
- package/migrations/006_pending_actions.sql +15 -0
- package/migrations/007_mail.sql +15 -0
- package/migrations/008_ownership.sql +10 -0
- package/package.json +38 -4
- package/pyproject.toml +3 -2
- package/registry/0005-ritchie.json +12 -0
- package/registry/README.md +9 -0
- package/registry/pubkeys.json +83 -3
- 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
|
-
|
|
7
|
+
[](https://github.com/ApolloZhangOnGithub/cnb/actions/workflows/ci.yml)
|
|
8
|
+
[](https://www.npmjs.com/package/claude-nb)
|
|
9
|
+
[](pyproject.toml)
|
|
10
|
+
[](https://c-n-b.space/)
|
|
11
|
+
[](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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
19
|
-
cnb
|
|
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
|
-
|
|
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
|
-
|
|
126
|
+
<!-- section:slash-commands -->
|
|
127
|
+
## Slash commands
|
|
27
128
|
|
|
28
|
-
|
|
129
|
+
Inside the lead tongxue's Claude Code session:
|
|
29
130
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
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
|
-
|
|
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
|
|
40
|
-
cnb board
|
|
41
|
-
cnb
|
|
42
|
-
cnb
|
|
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
|
-
|
|
166
|
+
<!-- section:management -->
|
|
167
|
+
## Management
|
|
46
168
|
|
|
47
169
|
```bash
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
177
|
+
<!-- section:issues -->
|
|
178
|
+
## Issues
|
|
61
179
|
|
|
62
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
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 (
|
|
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)** (
|
|
300
|
+
**[Betty Shannon](https://en.wikipedia.org/wiki/Betty_Shannon)** (1922–2017) — 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
|
-
|
|
307
|
+
OpenAll-1.0
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
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)
|
|
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)
|