Skip to main content
Glama

feature-tracker-mcp

一个与项目无关的功能与决策追踪器,专为一个人同时指挥多个 AI 编码会话并成为瓶颈的场景而构建。

它要解决的问题不是"追踪功能"。而是:你有多个轨道线同时进行,每个会话对其他会话一无所知,决策不断涌现,而阅读所有内容成了你的工作。这些决策大多平凡且可委托。少数真正属于你。如今没有任何机制把它们区分开来,所以你只能全部阅读。

这就是那个机制。

目录

角色

角色

职责

Claude

编写代码

ChatGPT

管理工作 — 功能、子功能、排序、需要缓解的风险

只回答关键问题:架构、花费、任何不可逆的事项

这个分工的意义在于,第二行目前是人的工作,而其中几乎不需要人来承担。

形态

flowchart TD
    Ideate["/ideate — dialog"] -->|features as they are invented| DB[("project database")]
    Session["coding session (Claude)"] -->|every substantive turn| Capture{"implies a feature,<br/>guardrail, schema change<br/>or risk?"}
    Capture -->|yes, and not a duplicate| DB
    Capture -->|no| Session
    DB --> PM["ChatGPT as manager"]
    PM -->|next task, in priority order| Session
    PM -->|mundane decisions| PM
    PM -->|architectural · install · spend| Gate[["gate queue"]]
    Gate -->|approve / alter / reject| You([You])
    You -->|proceed| Session
    DB --> Table["/tracker-table · /standup"]
    Table --> You

两个属性起了作用:数据库是状态,所以没有任何东西依赖模型记住;门会阻塞,所以"是的,继续"是一个机制,而不是你必须恰好在场才能接住的消息。

现状

诚实的划分,因为本文档的其余部分描述了一个只部分构建的系统。

当前可用 — 8 个 MCP 工具,已针对真实数据库完成端到端验证:

工具

作用

feature_propose

记录功能、护栏、模式变更、风险或缓解。若类别不存在则创建,原子分配 id,除非强制否则拒绝疑似重复

feature_list

已追踪项,优先级最低的在前,可按状态、类别和种类筛选

feature_update

更改状态、标题、正文或优先级;每次更改都落入历史记录

feature_history

追加式记录:什么改变了、何时、由谁、针对哪个提交

gate_raise

将会话不能独自做出的决策排队 — 架构、安装、花费、不可逆

gate_list

等待人类的决策。只读

gate_decide

批准或拒绝,解除提出该决策的会话的阻塞

tracker_status

按状态和类别计数、待处理的门,以及读取了哪个树

**已定义但未构建:**下一节中的每个斜杠命令、持续捕获、执行循环,以及将 markdown 追踪器从数据库重新渲染出来的生成器。

已针对真实项目验证。 从现有的 387 行 markdown 追踪器导入了 75 个功能,每个 id 都保留 — DIP-16GLG-1UA-11 以及其余仍然可以解析,因为它们被引用在提交消息和工作树名称中,重新分配它们会使那段历史变成孤儿。类别计数器已推进到超过导入的最高 id,因此已经使用中的 id 不会被再次分配。

动词

每个都是一个技能,所以每个也是一个斜杠命令。这些尚未构建 — 它们是上面工具之上的预期界面。

动词

作用

/ideate

启动功能生成循环。一个对话框,在功能被发明时将其写下来

/track-start <category>

按优先级顺序驱动一个类别的功能完成到完成

/standup

跨轨道状态:什么已移动、什么已过时、什么被阻塞

/tracker-table

每个已追踪项:id、类别、标题、状态、优先级、最后移动时间

/tracker-history

追加式记录,按功能或按会话

/gates

等待你的待批准项

/pause

在当前回合后停止并总结

/standup/tracker-table/gates 是只读的,永远不会消耗工作回合。

模式

构思。 一个对话框,其副产品是填充好的待办列表。功能被发明时立即被数据库,每个都呈现给你同意或修改 — 没有静默落地。这是队列被填满的方式。

执行。 一个类别的功能按优先级顺序一个接一个地被驱动到完成。ChatGPT 选择下一个功能,向编码会话简报,审查返回的内容,然后要么接受它,要么再次发送。

持续捕获。 平凡的部分,也是列表保持真实的原因。每次实质性回合 — 在任何会话中 — 都会被检查它暗示了什么:新表、护栏、CHECK 约束、需要缓解的风险、没人命名的子功能。每个都变成提议的行。替代方案就是今天发生的事情:它被提到一次,滚动消失,然后被昂贵地重新发现。

捕获运行在改变文件或得出结论的回合上。大多数回合不暗示任何东西,对所有回合都运行它,你就会得到一个没人读的待办列表。

脊柱:每个项目一个数据库

每个项目获得自己的 Postgres 数据库,在首次使用时创建,并从项目的 git 远程命名(因此每个项目的每个工作树和每个克隆都同意同一个追踪器)。

存放

category

功能记录时自动创建。拥有 id 计数器

feature

id、类别、标题、正文、种类、状态、优先级

feature_event

追加式。每次更改,带有操作者、git 提交、分支、树的时间戳

gate

审批队列:种类、问题、成本、状态、决策

kindfeatureguardrailschemariskmitigation 之一。status 运行 proposed → agreed → in_progress → done,或 dropped

Id 由数据库原子分配。 这不是细节 — 它是对一类真实、反复出现的 bug 的修复。两个会话独立读取文件,看到下一个空闲数字并都取走它,会产生重复的迁移 016 和冲突的 issue 编号。在事务内递增的计数器使这在结构上不可能。

每个事件都记录 git 提交、分支和树。 针对已被重写的提交提出的功能,与针对 HEAD 提出的功能是不同的声明,在没有戳记的情况下,以后谁都无法分辨区别。

类别

类别取代了"轨道"的非正式概念,并在功能记录时生成,而不是预先配置。在新类别下提议功能会创建它,带有自己的 id 前缀和计数器 — 因此 DIP-17GLG-1 共存,既不会碰撞,也不需要集中管理。

门:审批队列

门是工作会话不能独自做出的决策。

种类

示例

architectural

"这需要一个新的扩展 — 安装它?"

install

新依赖、新服务

spend

"这次训练运行花费 $40。继续?"

irreversible

数据丢失、强制推送、任何不可恢复的

提出门阻塞提出它的会话。门在一个地方排队,你批准、修改或拒绝,然后会话恢复。这就是把*"这会花费 $40,你同意吗?"*从你必须留意观察的消息变成等待的队列项。

计数与收敛

进度报告为两个运动,绝不是比率

3/14  ->  5/16     +2 agreed, +2 surfaced

分子是共识,衡量收敛。分母增长是健康的 — 新项目意味着发现了真实的分歧,这些分歧一直存在,只是未被说出来。

一个百分比会颠倒这一点。12/16 -> 12/20 读作 75% -> 60%,是下降,但没有任何回归,只是命名了两个真正的问题。单一比率恰恰惩罚了系统存在所期望产生的行为,所以它永远不会被显示。

停止条件

状态

测试

报告为

完成

分子达到分母

共识

停滞

分子两轮未移动,无论分母如何

停滞,未收敛

回归

分子下降 — 重新打开

大声标记

已暂停

你暂停了它,或预算耗尽

已暂停,可恢复

停滞仅根据分子判断。项目浮出水面而没有任何共识,是原地打转,将其报告为进展是浪费一个下午的最快方式。

检查点、暂停与摘要

每两轮循环停止并报告:

NEEDS YOU (1)
  · Is the target "one dollar per Track" or "one opportunity live"?
    Not a fact — it is what you are optimising.

HANDLED (6 of 7 tracks)      +2 agreed, +2 surfaced
  filter-decide   uncommitted migration 020 — no collision with other tracks
  layer-lift      6 behind main, clean rebase available
  ...

你可以在任何时刻说暂停,立即获得摘要,无需等待检查点。没有任何东西在你允许之外无人值守运行 — 自主性从两轮开始,并且只有在赢得信任之后才会延长。

为什么不在 git 中

这个追踪器以前是一个 markdown 文件。在最近的一周里,它从并发 worktree 中占用了 115 个提交,历史记录包含手工解决的编号冲突。在人类写入速率下,版本控制下的单个文件已经是争用点;添加来自多个会话的自动化每轮写入,会使其更糟。

因此数据库是权威的,markdown 变成生成的输出,按需重新生成并排除在版本控制之外。

要刻意接受的后果:git 历史曾经是审计追踪。feature_event 取代了它——仅追加,带有操作者和提交的印记——而这种取代是必需,而非可有可无。否则,你就是用合并冲突换来了失忆。

任何将 markdown 文件指定为权威来源的项目级指令,都必须在同一变更中重写。会话会遵守这些指令;如果有一条指令仍指向旧文件,它们就会继续写入一个没人读的东西。

什么会破坏它

提案泛滥。 跨多个轨道的每轮捕获可能生成数百行低价值行,然后你读到的就是积压日志而不是对话记录——同样的问题换了件衣服。标准很明确:只记录那些否则会丢失的、可操作的、并且尚未被覆盖的内容。去重是强制性的,因为两个会话独立注意到同一个缺失约束是常态,而不是边缘情况。

读错了树。 worktree 是一个独立的检出。把会话指向错误的 worktree,它会自信地报告你的文件缺失、你的更改未完成——而且这种报告读起来像是对代码的发现,而不是配置错误。每个操作都会记录它读取的树,因此不匹配在任何人对它采取行动之前就是可见的。

一个叙述而非计算的管理器。 计数是从数据库计算出来的,无法对不真实的事情说得头头是道。模型写的摘要可以。当两者不一致时,表格胜出。

自主性跑赢了注意力。 当没有人阅读时,累积错误最快变得代价高昂。门禁和检查点就是为此存在的,默认间隔被刻意设得很短。

构建顺序

  1. categoryfeaturefeature_eventgate;按项目创建数据库;原子 ID 分配

  2. MCP 工具:propose、list、update、table、history、gate raise/list/decide

  3. 持续捕获,带有标准和去重,以及同意或修改审查队列

  4. /standup 跨轨道,包括未提交的工作——仅凭提交会漏掉工作真正所在的地方

  5. 门禁阻断会话

  6. /ideate

  7. 执行循环按优先级顺序驱动一个 category 完成

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.

  • Adaptive plan/build/review cycles for AI coding assistants, persisted across sessions.

  • Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/spe-investigator/feature-tracker-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server