单用户 → 单机 → 文件系统 → CLI 驱动
- 所有数据在
~/.clawteam/(团队配置、任务、消息) - 所有 agent 必须在同一台机器
- 纯文件 I/O,零依赖
目标: 让消息通信层可插拔,不改上层接口。
架构变化:
现在:
MailboxManager → 直接读写文件
Phase 1:
MailboxManager → Transport(接口)
├── FileTransport (默认,当前行为)
└── (未来: RedisTransport, ...)
具体任务:
| 任务 | 描述 | 建议 |
|---|---|---|
| 定义 Transport 接口 | send(), receive(), peek(), peek_count(), broadcast() |
人员 A |
| 重构 FileTransport | 把 mailbox.py 当前的文件操作抽成 FileTransport 类 |
人员 A |
| 重构 MailboxManager | 通过 CLAWTEAM_TRANSPORT=file 选择 backend |
人员 A |
| TaskStore 抽象 | 同样抽出 FileTaskStore,预留接口 |
人员 B |
| 测试 | 确保重构后行为不变 | 人员 B |
交付物:
clawteam/transport/
├── __init__.py
├── base.py # Transport 抽象基类
└── file.py # FileTransport (当前行为)
clawteam/store/
├── __init__.py
├── base.py # TaskStore 抽象基类
└── file.py # FileTaskStore (当前行为)
验收: 所有现有命令行为不变,CLAWTEAM_TRANSPORT=file 为默认值。
目标: 支持跨机器消息通信。
架构变化:
机器A (leader) ─── RedisTransport ──┐
├── Redis Server
机器B (worker) ─── RedisTransport ──┘
团队配置 / 任务 → 仍然用文件(或共享文件系统)
消息通信 → Redis (高频,实时)
具体任务:
| 任务 | 描述 | 建议 |
|---|---|---|
| RedisTransport 实现 | LPUSH/RPOP 实现 send/receive |
人员 A |
| 连接管理 | URL 配置、连接池、断线重连 | 人员 A |
| 配置方式 | CLAWTEAM_TRANSPORT=redis + CLAWTEAM_REDIS_URL=redis://... |
人员 B |
| broadcast 实现 | 需要知道团队成员列表 → 依赖 TeamManager | 人员 B |
| 混合模式 | 消息走 Redis,配置/任务走文件 | 人员 B |
| 集成测试 | 两台机器(或两个 container)实际跑通 | 一起 |
新增依赖: redis (pypi),可选安装 pip install clawteam[redis]
验收:
# 机器 A
export CLAWTEAM_TRANSPORT=redis
export CLAWTEAM_REDIS_URL=redis://192.168.1.100:6379
clawteam team spawn-team dev-team -n leader
clawteam spawn tmux claude --team dev-team -n worker1 --task "..."
# 机器 B
export CLAWTEAM_TRANSPORT=redis
export CLAWTEAM_REDIS_URL=redis://192.168.1.100:6379
clawteam inbox receive dev-team --agent worker1
# => 收到消息 ✅目标: 团队配置和任务也能跨机器共享。
Phase 2 只解决了消息跨机器,但团队配置(config.json)和任务(task-*.json)还在本地文件。
两种路线(选一个):
# 所有机器挂载同一个 NFS
export CLAWTEAM_DATA_DIR=/mnt/shared/clawteam
# 零代码改动,直接可用最简单,但依赖网络文件系统基础设施。
消息 → Redis (Phase 2 已做)
配置 → Redis Hash
任务 → Redis Hash
所有状态都在 Redis,文件系统只做本地缓存
具体任务 (路线 B):
| 任务 | 描述 | 建议 |
|---|---|---|
| RedisTeamStore | 团队配置存 Redis Hash | 人员 A |
| RedisTaskStore | 任务存 Redis Hash | 人员 B |
| 数据迁移工具 | clawteam migrate file-to-redis |
一起 |
| 统一配置 | CLAWTEAM_BACKEND=redis 一个变量搞定所有 |
一起 |
验收: 两台机器共享同一个团队、同一个任务板、同一个消息队列。
目标: 不同人的 agent 组成一个团队。
新增能力:
| 能力 | 描述 |
|---|---|
| 用户身份 | 区分"谁的 agent"(不只是 agent name) |
| 权限模型 | 谁能创建团队、谁能加入、谁能看任务 |
| 命名空间 | user1/worker1 vs user2/worker1 |
| Token 认证 | 连接 Redis 时验证身份 |
用户 A 的 Claude Code ──┐
├── Redis ── Team: project-x
用户 B 的 Claude Code ──┘
用户 A 的 agent 和用户 B 的 agent 在同一个团队里协作
目标: 浏览器看板,替代终端 Rich 渲染。
clawteam board serve --port 8080
- 实时看板(WebSocket 推送)
- 多团队概览
- 任务拖拽
- 消息历史
v0.2 → 单机文件系统,能用
v0.3 (现在) → Config 系统 + 多用户协作 + Web UI (已完成,跨机器用 SSHFS)
v0.4+ → 可选: Transport 抽象层 / Redis (如需超出 SSHFS 的场景)
- Config 系统:
clawteam config show/set/get/health - 多用户协作:
CLAWTEAM_USER/clawteam config set user,(user, name) 复合唯一性 - Web UI:
clawteam board serve,SSE 实时推送,深色主题看板 - 跨机器方案:SSHFS/云盘 +
CLAWTEAM_DATA_DIR,零代码改动
两人并行的最佳分工模式:
Phase 1: 人员 A — Transport 抽象 + FileTransport
人员 B — Store 抽象 + FileTaskStore + 测试
Phase 2: 人员 A — RedisTransport 核心实现
人员 B — 配置系统 + broadcast + 集成测试
Phase 3: 人员 A — RedisTeamStore
人员 B — RedisTaskStore + 迁移工具
接口定义(Phase 1)要先一起对齐,后面就可以各做各的。