mohan-n-swamy/coding-control-tower
GitHub: mohan-n-swamy/coding-control-tower
一款本地只读的开发者任务看板工具,专为并行运行多个 AI coding agent 的场景设计,自动追踪会话状态、待处理事项和 token 消耗。
Stars: 1 | Forks: 0
# Coding Control Tower
**为并行运行多个 AI coding agent 的开发者提供的任务控制中心。** 一个本地页面,
当你回到办公桌时,它只回答四个最关键的问题:
1. **当前正在运行什么?** — 每一个活跃的 Claude Code / Codex 会话,其记录更新的瞬间
2. **什么在等着我处理?** — 静静停留在某个问题上的 agent,附带实际的问题和可直接复制粘贴的跳转命令
3. **每个项目停在了哪里,下一步是什么?** — 基于源码的恢复包,而非凭空猜测
4. **今天的开销是多少?** — 在同一个区块中汇总所有 provider 的 token 消耗

## 我们为何开发此工具
在 tmux 标签页中同时运行六个 agent 会话存在一个 tmux 自身无法解决的可视化
问题:其中一半正在运行,一个在半小时前崩溃了,还有一个已经等了
40 分钟,只为了回答一个你压根没看到的问题。现有的 Dashboard 追踪的是
PR 或任务 —— 它们衡量的是习惯,而非现状。本控制塔读取的是**你的工具
已经产生的“废气”**(会话记录、PR 正文、git repos),因此完全
无需维护:不需要打标签,不依赖云,不收集 telemetry,也不增加任何写作负担。当
某个信号无法从数据源核实时,Dashboard 会如实说明,而不会
凭空捏造 —— 这条诚实原则塑造了每一个面板。
## 核心功能
- **NOW board(当前状态面板)** — 将每一个活跃会话显示为可折叠的行(项目 · agent · model
· 存续时间)。展开任意一行:它正在处理什么、停在了哪里、下一步操作、
已用时间、cwd —— 以及一个 ⧉ 可复制的 `cd && claude --resume `,
即使终端崩溃也能使用。
- **NEEDS YOU queue(待处理队列)** — 因未回答问题而受阻的会话(从
记录中检测出:存在未记录回答的阻塞式 tool call,保留 24 小时,确保
崩溃的终端不会将其隐藏)。显示具体问题、等待时长和恢复
命令。我们将“零误报”视为发布的重要标准。
- **随处可见的恢复包** — 每个项目卡片(无论是活跃还是休眠)的末尾都带有
可复制粘贴的恢复包,可直接交给任何 agent:如果仓库中存在 `STATUS.md` 则优先提供,
否则将根据上一次会话总结生成恢复包。
- **闭环机制** — `coding-control-tower wrapup` 会在会话结束时记录焦点 / 下一步 /
阻塞项(使用 `--park` 标记为挂起状态)。内置了开箱即用的 Claude
Code skill 模板(`docs/skills/wrap-up.md`),这样你的 agent 就能在
无需你手动输入的情况下正确关闭会话。
- **MODEL USAGE · TODAY(今日模型使用量)** — 在数据源有记录的情况下提供准确的 token 计数,
估算值标以 `~`,若检测到 provider 但
无法测量则显示“not tracked”。绝不暗中捏造。
- **真实可信的分类** — ACTIVE / LIVE / DORMANT / ARCHIVE 如实反映状态;
空闲但近期有活动的项目保持可见,只有真正 untouched 的项目才会被归档
(阈值可配置)。
- **PR 契约卡片** — 每个 PR 会将其正文的清单显示为任务进度条,
附带其自身声称的进度和验证徽章。仅凭 Merge 状态绝不等同于
“已交付” —— 这要求在 PR 正文中包含明确的 Outcome 部分。
## 安装
使用 Homebrew:
```
brew install mohan-n-swamy/tap/coding-control-tower
```
使用 pip(或 pipx)直接从 GitHub 安装:
```
pipx install git+https://github.com/mohan-n-swamy/coding-control-tower.git@v0.3.0
# 或
python -m pip install --user git+https://github.com/mohan-n-swamy/coding-control-tower.git@v0.3.0
```
然后进行配置并运行:
```
coding-control-tower init
coding-control-tower
```
设置向导会询问你的用户名、项目文件夹,以及是否使用 GitHub。
稍后可以通过 `coding-control-tower config set name "Alex"` 更改显示名称。
## 关闭会话
当你停止工作时,记录项目的当前进度 —— Dashboard 会将其转化为
恢复包:
```
coding-control-tower wrapup --focus "hardened retry queue" \
--next "pin RNG seed in test_backoff_jitter" --blockers ""
```
当你打算很快继续处理时,添加 `--park`(会显示为 `[parked]`)。你可以在
仓库内的任何位置运行它;如果省略参数,将触发交互式提示。Agent
也可以为你关闭会话:将 `docs/skills/wrap-up.md` 复制到你的 Claude Code
项目的 `.claude/skills/` 目录中,或者让 Codex 运行同样的命令即可。
## 适配器
```
# my_adapter.py — 整个接口
def collect(config) -> dict:
return {
# today's token usage rows to merge into MODEL USAGE
"usage_models": [{"provider": "X", "model": "m", "tin": 0, "tout": 0, "approx": True}],
# per-project "where it stands" overlays (project id -> fields)
"wrapups": {"my-project": {"focus": "…", "next": "…", "blockers": "…"}},
}
```
目前仅存在这两个通道。发生故障的适配器会优雅降级为缺失状态,并显示在
`adapterErrors` 中 —— 它永远不会导致扫描崩溃。估算的数值必须标记为
`approx`;UI 会使用 `~` 来渲染它们。
## 兼容不同环境
- macOS、Linux 和 Windows 的路径格式
- 任意项目文件夹布局;支持可配置深度的递归 git 发现
- 当存在 `~/.claude`(或 `CLAUDE_CONFIG_DIR`)时,激活 Claude Code 适配器
- 当存在 `~/.codex`(或 `CODEX_HOME`)时,激活 Codex 适配器
- 通过已认证的 `gh` 获取可选的 GitHub PR 历史
- 无需云服务、账号、数据库、Node.js 或 telemetry
缺失的适配器会以可见的方式降级。即使没有
Claude、Codex 或 GitHub,项目文件夹依然具有参考价值。
## 命令
```
coding-control-tower init configure owner and folders
coding-control-tower scan, open, and keep dashboard fresh
coding-control-tower scan write one local snapshot
coding-control-tower scan --refresh-github
coding-control-tower serve --no-open serve without opening a browser
coding-control-tower wrapup close the session: focus / next / blockers (--park)
coding-control-tower doctor inspect adapters and configuration
coding-control-tower config show configuration
coding-control-tower config set name Alex
```
Dashboard 仅绑定到 `127.0.0.1`。Snapshot 和 config 使用操作系统标准的
application-data 文件夹。GitHub 缓存最多每 15 分钟刷新一次。
服务器每 30 秒重新扫描一次本地数据源。
## 事实依据规则
- 优先显示活跃项目;其余项目按最近观察到的活动顺序排列。
- 会话工作内容通过观察到的 working directory 进行映射。缺乏证据的保持为 `Unassigned`。
- 未知的独立会话绝不会混入同一个混合集合中。
- 只有在带有明确的 `PR #N` 引用时,本地工作内容才会归入相应的 PR 下。
- 失败的工作流绝不会显示为已构建。
- 仅凭 Merge 状态绝不能作为交付声明。交付文本要求在 PR 正文中具有明确命名为
`Outcome`、`Delivered`、`Deploy state` 或 `Done proof` 的章节。
## 隐私
Coding Control Tower 是只读的。它永远不会代你执行命令 ——
恢复按钮仅仅是复制文本,仅此而已。它不会读取 Codex 的提示正文、发送
telemetry、修改仓库、Merge PR 或部署代码。在写入本地状态之前,它会屏蔽常见的 token
格式。路径和工作标题仅保留在本地
机器上,并且仅在本地 Dashboard 中可见。
有关报告漏洞,请参阅 [SECURITY.md](SECURITY.md)。
## 开发
```
python -m unittest discover -s tests -v
python -m pip install --no-deps .
coding-control-tower init --non-interactive --name Test --project-root "$PWD" --no-github
coding-control-tower scan
```
采用 MIT 许可协议。
标签:Blue Team, 逆向工具