# mas —— 多 agent 协作青春版（任务表 + 文件锁 + 待办）

一句话：**派活前占位，干完放锁，要人拍板的事写进待办。**
不做 SQLite 状态机、预算熔断、契约编译、双 Reviewer JSON 比对、指纹聚类——那些等真需要再说。

## 用法

```bash
mtask claim <任务id> --title "干什么" --files "a,b,c" --agent <谁> [--phase 4]
   # 声明所有权。要碰的文件/目录和某个活跃任务有交集 → 直接拒绝，并要求改边界或等它放锁。
   # 目录级声明会盖住其下所有文件（今晚踩的坑就是目录级重叠）。
mtask check --files "x"            # 只查冲突、不占位（拿不准时先问一句）
mtask status                       # 活跃任务 + 待人工拍板的事
mtask release <任务id> [--state done|review|blocked] [--note "..."]
mtask precheck --repo <仓库路径>    # 派活前必跑：该仓库未提交改动 + 与活跃任务的重叠告警
mtask limit [N]                    # 看/设并发上限（默认 1；超限时 claim 直接拒绝，exit 3）
mtask todo add "..." --task <任务id>
mtask todo list [--pending-only]
mtask todo done <T编号>
```

## 数据

- 状态：`/root/mas/state/tasks.json`、`todos.json`
- 流水：`/root/mas/state/log.jsonl`（每次占位/放锁/待办变更一行，够用了再谈结构化日志）
- 并发：`state/lock` 用 flock 串行化，两个 agent 同时写不会写坏
- **并发上限**：`state/config.json`（默认 `max_workers=1`，对齐手册 0.3 的起步期值；改它用 `mtask limit N`）
  —— 判决在 `claim` 里：活跃任务数 ≥ 上限即拒绝，`--force` 可越权但会记进日志

## 约定（比工具重要）

1. **派活前**：领导先 `mtask precheck --repo <仓库>`，再把每个子任务的 `--files` 写进 brief。
2. **开工前**：子代理自己 `mtask claim`，被拒就停手回来找领导（不要硬上）。
3. **收工后**：`mtask release <id> --note "推了哪个 commit"`。
4. 需要人拍板的事**不要留在对话里**：`mtask todo add`，由 cron 每天 9:00 汇总提醒（有待办才推）。
5. **并发**：默认只允许 1 个活跃任务（`mtask` 硬拒）。要开 2 个，先 `mtask limit 2` 并把理由写进状态文档 ——
   放开条件（连续 3 次派发零冲突）在手册 0.3 节。

## 还没做（真需要再加）

按任务独立 worktree、预算熔断、契约类型层校验、失败指纹聚类、双 Reviewer 判定、Checkpoint 审批 UI。
