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 消耗 ![Coding Control Tower — 实时任务控制中心:会话折叠面板、待处理队列、多 provider 使用量](https://static.pigsec.cn/wp-content/uploads/repos/cas/78/7829188d574888c710f8886aae0a78505d0cf92fb8f1bce4c48f12aa636758d8.png) ## 我们为何开发此工具 在 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, 逆向工具