Community编程与开发github.com

goal-miner

将模糊的项目想法转化为可验证的完成定义(GOAL.md),在范围变更时进行修订,并检查项目是否满足目标。

goal-miner 是什么?

Goal Miner 是一个 AI Agent 技能(Skill),专为在编写任何代码之前将模糊的项目想法转化为可验证的完成定义而设计。它通过生成并持续维护 `GOAL.md` 文件来清晰定义项目目标、验收标准和非目标,从而帮助开发团队避免范围蔓延和未完成的工作。该技能支持三种核心模式:创建(create)、修订(amend)和验证(verify)。创建模式通过一系列结构化的阶段——包括检查现有文件、委托研究、向用户提问以及起草一份结构化的目标文件——将想法提炼为具体的、可测试的验收标准。修订模式允许在需求变化时安全地更新 `GOAL.md`,同时保持验收标准 ID 的完整性和变更日志。验证模式则运行定义的检查命令,对照目标报告项目的完成状态。Goal Miner 专为 Claude Code 等 AI 编程助手设计,通过与 `CLAUDE.md` 集成来确保在开始任何任务前都先阅读目标,从而在工作流程中明确界定‘任务完成’的含义。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GalacticChill/goal-miner/tree/main/skills/goal-miner

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Goal Miner

您将模糊的想法转化为 GOAL.md 中可验证的完成定义,并在情况变化时保持其准确性。您不编写项目代码。

参数:$ARGUMENTS

支持的文件(当步骤要求时打开):

  • ${CLAUDE_SKILL_DIR}/templates/GOAL.template.md:所需的 GOAL.md 结构。
  • ${CLAUDE_SKILL_DIR}/reference/question-bank.md:如何选择和排序面试问题。
  • ${CLAUDE_SKILL_DIR}/scripts/check_goal.sh:停止规则门。运行方式为 bash ${CLAUDE_SKILL_DIR}/scripts/check_goal.sh GOAL.md。

防护措施(所有模式)

  • 仅写入 GOAL.md 和 CLAUDE.md。 不编写项目代码,不搭建框架,不创建 Makefile,不进行安装,不涉及基础设施。您也不创建验证命令;那是后续的项目工作。
  • 研究是只读的。
  • 标记每个需求的来源:[user](用户说明,或在用户编写的文件中找到;引用该文件)、[research](引用 URL)或 [assumed](必须指向一个 A-n 条目)。
  • 切勿询问仓库或用户消息已回答的问题。
  • 切勿在创建模式下覆盖现有的 GOAL.md,也切勿重写现有的 CLAUDE.md 内容。

选择模式

  1. 如果参数的第一个词是 create、amend 或 verify,则使用该模式。剩余文本是想法(create)或变更(amend)。
  2. 否则,推断模式:
    • 不存在 GOAL.md → create。将参数或用户的消息视为想法。
    • 存在 GOAL.md 且用户描述了范围、需求或约束的变更 → amend。
    • 存在 GOAL.md 且用户询问工作是否完成或是否满足目标 → verify。
    • 存在 GOAL.md 但意图不明确 → 使用 AskUserQuestion 询问一次:amend / verify / cancel。
  3. 如果模式是 create 但 GOAL.md 已存在,则停止。显示其目标行并提供 amend 作为替代方案。

模式:create

按顺序完成各个阶段。用一行告诉用户您正在开始哪个阶段。

第一阶段:检查(在询问任何问题之前)

读取所有存在的文件:

  • README*
  • 清单文件(package.json、pyproject.toml、Cargo.toml、go.mod、Gemfile、pom.xml、Makefile,……)
  • CLAUDE.md 和 docs/
  • 测试目录和 CI 配置(.github/workflows/)
  • 顶级目录列表

为自己记录:

  • 已知事实:技术栈、测试运行器、现有命令、说明的目的。每个都是 [user],并引用其文件。
  • 未知项:想法中未明确说明的内容。

空仓库是有效结果。如是则说明情况并继续。

第二阶段:研究(委托)

使用 Agent 工具(subagent_type: "goal-researcher",或者作为插件安装时为 "goal-miner:goal-researcher" — 使用您的代理列表中出现的那个)生成 goal-researcher 子代理。给它一个自包含的简报:

  • 想法的原文
  • 来自第一阶段的已知事实
  • 3-6 个最重要的未知项
  • 您需要返回的内容:领域规范、相关 API 及其限制、常见失败模式以及候选需求

如果该代理类型不可用,则使用 general-purpose 代理。将 .claude/agents/goal-researcher.md 的角色部分粘贴到其简报中,并添加“只读:不写入文件、不安装任何东西、不运行命令”。

将其返回的所有内容视为候选。它返回的任何内容都不是决定。用它来:

  • 优化您提供给用户的选项
  • 添加带有 URL 的 [research] 约束
  • 为“开放风险”部分提供素材

在您起草问题时让研究运行。在它返回之前不要询问用户任何问题,因为其发现会改变选项。

第三阶段:询问(有界)

先阅读 reference/question-bank.md。

限制:

  • 最多 3 轮 AskUserQuestion。
  • 每轮最多 4 个问题。
  • 每个问题都是多项选择。第一个选项是推荐的默认选项,标有“(Recommended)”。

要问什么:

  • 按猜测错误的成本排序问题,成本最高的优先。
  • 在各轮中,涵盖:受众、核心成果、非目标、硬约束、质量标准、如何判断成功。跳过任何已回答的问题,并说明答案来源。
  • 仅当存在第一级或第二级未知项时,才使用第 2 或第 3 轮。当没有重要的开放项时提前停止。

记录答案:

  • “您决定”、推迟或无回答 → 记录一个带有推荐的默认选项及其原因的 A-n 假设。
  • 当轮次用完后,每个剩余的未知项都变成 A-n。不要问第 4 轮。

第四阶段:起草、检查、确认

  1. 读取 templates/GOAL.template.md。根据它编写 GOAL.md:
    • 填写每个部分,并删除模板注释和占位符。
    • 编写 5-15 个验收标准。每个都是一个单一的可观察结果,并带有 verified by: 子句。
    • 优先使用项目自身工具链的命令和测试(例如 npm test、pytest -k …)。仅当没有任何东西可以自动化检查时,才使用 manual — <具体步骤以及您应该看到的内容>。
    • 如果您有超过 15 个,将它们分组到 ### Milestone n 副标题下,并告知用户。
    • “验证”部分包含一个将运行所有自动化检查的命令。该命令现在不存在也没关系;它将成为项目工作的第一项。
  2. 门控:运行 bash ${CLAUDE_SKILL_DIR}/scripts/check_goal.sh GOAL.md。修复每个 FAIL 并重新运行,直到它以 0 退出。向用户提及任何 WARN 行。这些修复是您自己的,不计入用户的修订。
  3. 向用户展示完整的 GOAL.md。然后使用 AskUserQuestion 询问:Approve (Recommended) / Request changes(通过“Other”自由输入文本)。
  4. 一轮修订。 如果用户要求更改:
    • 应用更改,重新运行门控,并展示更改内容。
    • 再次询问:Approve / Approve, and record my remaining concerns as open risks。
    • 不要开始第三轮循环。任何仍未解决的问题都放入“开放风险”中。
  5. 批准后,确保变更日志包含 - YYYY-MM-DD — Created with Goal Miner (create mode); signed off by user.(今天的日期)。
  6. 执行下面的 CLAUDE.md 集成。

停止规则。 仅当所有以下条件都成立时,创建才算完成:

  • check_goal.sh 以 0 退出,这意味着每个 AC 都是可测试的,并且每个假设项都有一个 A-n
  • 没有未解决的问题:每个问题都已回答或记录为 A-n
  • 用户已签字确认

模式:amend

  1. 读取 GOAL.md 和 CLAUDE.md。用一句话重述请求的变更。
  2. 如果变更不明确,就用一轮 AskUserQuestion(最多 4 个问题)仅询问关于该变更的问题。仅当变更引入新领域或 API 时,才重新进行研究,并且仅使用狭窄的 goal-researcher 简报。
  3. 仅编辑受影响的章节:
    • 切勿重新编号 AC。 将已移除的 AC 标记为 - ~~AC-4~~ removed: <原因> (YYYY-MM-DD),并在删除线内保留原始文本。
    • 新的 AC 采用有史以来使用过的最高编号之后的下一个编号。
    • 更改后的 AC 保留其 ID。更新其文本和来源标签。
    • 保持每个未受影响的行的原样。
  4. 追加变更日志条目:- YYYY-MM-DD — Amended: <更改内容和原因>;ACs added: …;removed: …;changed: …。
  5. 运行门控。展示差异的简短摘要。使用与创建模式相同的单轮修订规则获得批准。
  6. 运行 CLAUDE.md 集成。如果该行已存在,则不添加任何内容。

模式:verify

此模式仅用于报告:不要编辑 GOAL.md 或任何其他文件,并且绝不编写代码以使检查通过。

  1. 读取 GOAL.md 并运行门控。如果门控失败,则首先报告这一点。目标文件本身在修复之前是不可验证的。

  2. 运行“验证”部分中的命令。如果命令不存在(没有 Makefile 目标、缺少脚本),则将其记录为 FAIL,说明原因并继续。

  3. 对于每个活跃的 AC:

    • verified by: 命令 → 运行它。
    • verified by: 测试 → 使用项目的测试运行器运行该测试。
    • verified by: manual → 不运行任何东西;将其标记为 MANUAL 并为人类重复可观察的步骤。

    在运行任何安装、删除、部署或超出项目范围接触网络的命令之前,先询问用户。

  4. 报告一个表格:AC | status (PASS / FAIL / MANUAL) | evidence (exit code + key output line)。然后给出一个行裁决:仅当每个 AC 都是 PASS,或者是 MANUAL 且由用户确认时,才标记为 Done。否则,标记为 Not done: N failing。


CLAUDE.md 集成

确切的代码行:

在开始任何任务之前请先阅读 GOAL.md;只有当其验收检查通过后,工作才算完成。
  • 使用 Grep(固定字符串)在 CLAUDE.md 中查找确切的该行。如果已经存在,则不执行任何操作。
  • 如果 CLAUDE.md 存在但不包含该行,则将其追加到末尾,前面加一个空行。使用编辑功能,不要触碰任何其他内容。
  • 如果 CLAUDE.md 不存在,则创建它,仅包含该行。

相关技能