Community编程与开发github.com

amberpixels/ship

f10 ship 技能 - 根据项目的流程执行任务:实现,然后根据项目声明执行(审查、提交、PR/MR、部署);按需获取和规划,然后端到端运行流程。当用户说 "/f10:ship [<task-id | plan-file.md | description>]" 时使用。

ship 是什么?

该技能定义了一个名为 `f10:ship` 的 AI 代理自动化流水线,用于端到端交付软件任务。它管理一个完整的生命周期:解析用户输入(任务 ID、描述或计划文件),通过获取、规划、实现和提交步骤,然后根据项目配置的条件执行诸如创建拉取请求、审查、合并和部署等交付步骤。其核心价值在于自动化遵循项目特定“流程”的繁琐部分,这些流程在 `project.md` 中定义,允许平台(如 Cursor、Claude Code)无缝地将任务从概念推进到生产就绪状态。该技能还处理复杂的场景,如依赖任务(追赶保护)、速度调整和尖峰实验,其中代码在给出答案后被丢弃。它集成了报告、徽章和状态管理,提供关于进度的清晰反馈,并遵守用户定义的约束,例如仅在被授权时才推送代码。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/amberpixels/f10/tree/HEAD/skills/ship

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

在你喜欢的 AI 中提问

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

文档

f10 · ship

运行此技能 即 为用户明确授权推送并打开或刷新此任务的 PR(pr 步骤),满足全局“除非被要求,否则绝不推送/打开 PR”规则(仅针对该 PR),并发布 resolve 的 +reply,将 resolve 的修复推送到该 PR,发布 review 的 f10 review ack,以及流程中 CI 审查的 f10 review trigger(当审查部分声明了手动方式如何读取时)和 resolve 的 f10 review settle,对于 pr 之后的 judge 条目,推送追赶保护的集成及其自身的更改到该 PR,并发布其状态和评论,以及发布运行的回报告评论和任务状态(报告回)。 部署有其自己的确认(deploy 步骤)。

参数

  • --help:执行 ${CLAUDE_PLUGIN_ROOT}/modes/help.md 并停止;以下内容不适用。
  • --dry-run:执行 ${CLAUDE_PLUGIN_ROOT}/modes/dry-run.md 而非运行任何实际操作,并停止。它会报告其余参数将运行哪些步骤。
  • --driven:执行 ${CLAUDE_PLUGIN_ROOT}/modes/driven.md;以下所有内容仍然运行。
  • 一个作为单词的流程名称(/f10:ship direct: fix typo …;f10 start --local 发送 /f10:ship local: <id>,--flow <name> 发送 <name>:),或以用户自己的话命名:运行该流程。 否则,流程由 frontmatter 的 flow_by_area 根据任务区域映射(来自 fetch brief 的区域,否则来自计划的 Areas 行),否则为 default。 两个区域映射到不同流程:可交付物的区域获胜,如同角色一样,brief 会命名另一个区域。 区域映射是项目的选择,而非你的:切勿自行选择其他流程,尽管对于微小的工作你可以建议一个。 在第一步骤之前,在一行中命名流程选择的区域和流程名称。
  • --pace <name>:仅本次运行以此速度运行流程(速度,下方);如未指定,则使用分支记录的速度,否则使用项目或用户的 pace:。
  • <plan.md>:一个计划文件;使用它运行流程。
  • <task-id>(项目 ID 格式 / ID / 网址),或由 + 连接的任务包(ABC-1+ABC-2,以主任务为键):首先执行 ${CLAUDE_PLUGIN_ROOT}/modes/forward.md,然后再加载任何内容;如果它转发任务则停止。 否则运行 fetch 步骤,然后查找 <storage root>/plans/<TASK-ID>.md(包的主任务)(如果确切名称不匹配,则在 plans 目录中全局搜索)。 找到:重用该文件,绝不询问;带有计划文件的任务永远不会再次规划,重新规划需手动执行 /f10:plan <id>。 未找到:在 stale_after 条件下,fetch 会先判断旧任务,并可能在没有计划或流程条目之前结束运行(steering 中的 anyway 可跳过此判断);然后,当流程以 plan 开头时运行 plan 步骤(使用 flow_by_area 时,start 和 drive 将规划留给 ship);无计划 流程(下方)从不运行规划步骤,并且 fetch 的 brief 成为内联计划。 然后运行流程。
  • <description>:自由文本;执行 capture、fetch 和 plan 步骤,然后运行流程。
  • 无参数(仅标志或流程词不算参数;描述是自由文本,见上文):当前对话中已有的任务(刚刚保存的计划、已获取的任务),否则为分支的任务,即 f10 task current 打印的 ID。 在一行中说明你获取了哪个任务以及来自何处,然后像 <task-id> 一样运行它,包括转发模式,以便重用已保存的计划。 f10 task current 退出码非零:用一行文字请求一个任务并等待(driven:询问,根据 modes/driven.md)。
  • 主题之外的额外文本是 steering。 resume at <entry>(由 f10 drive 在追赶解决停止后发送)从该入口开始流程,并视之前的入口为已完成;(entry <n>) 选择徽章流水线中第 n 个入口,其中流程两次命名该入口。 徽章移动到该位置:在 pipeline 之后,一次调用对之前的每个入口依次运行 set ship running,然后在入口自身上运行。

运行

  1. 首先运行 f10-load-project.sh,每次调用此技能时,根据输入命名所需步骤:capture fetch plan 用于描述,fetch plan 用于任务 ID,对于计划文件则无。 流程在其打印的 project.md 中声明;无计划的流程会加载 plan 但从不运行它。
  2. 按照“参数”项中给出的顺序执行这些步骤。
  3. 在每步即将运行前,通过一次调用加载每个流程入口及其徽章:f10-state.sh set ship running <entry>; f10-load-project.sh <step>,并根据加载内容执行步骤。 review 条目加载 review resolve,而 pr 条目加载 pr handoff,除非其 handoff off 拨号已设置,因为 pr 步骤运行 handoff;追赶保护(下方)在它保护的每个入口的加载中添加 catchup。

流程 是 frontmatter 的 flows:,名称到其有序条目的映射,一个列表或一个字符串,按空格或箭头分割(plan judge implement cleanup:comments,prose pr review:ci deploy:staging);若未声明则为 default: plan implement pr。 f10 flow 列出它们以及选择每个流程的条件。

速度 调整所选流程(docs/project-setup.md → 速度)。 一旦选择流程,运行 f10 flow <name> [--pace <name>],仅当参数提供了 --pace 时才传递它,并按它打印的顺序运行条目,而不是 frontmatter 的列表。 它每行打印一个条目。 标记为 skipped 的条目不运行:用一行说明,并将其排除在徽章的 pipeline 之外。 条目后的拨号与条目一起传递给其步骤:rounds 和 depth 传递给 review,marker 和 handoff 传递给 pr;judge 的 effort 仅在 judge 生成代理时适用(--blind),其配置文件来自 f10 agents judge,并在参数给出时携带 --pace <name>;内联 judge 在任务代理的配置文件上运行。 速度跳过前导的 plan 会使运行变为无计划,如同没有 plan 的流程一样。 finish 行表示运行结束于速度本应合并的开放 PR:ship 从不合并它,报告的 Next: 命名为 /f10:finish <id> --merge,除非 drive 完成任务(modes/driven.md)。 没有速度时,列表是声明的流程,并带有一个可选的、已解决的 CI 审查(ci?)。 f10 flow 版本过旧无法接受名称会导致失败:运行声明的流程,并用一行说明未应用速度。

条目是一个步骤,或 step:arg:泛型步骤加上其覆盖,或项目定义的步骤,参数传递给它(review:local 或 review:ci 设置审查的 by(谁审查),review:host 在宿主自身的代码审查上运行本地审查,review:local+ci 将两者合并为一轮审查和一次解决,review:local+ci? 仅在 CI 审查可以运行时运行它,并且 f10 flow <name> 在 ship 看到条目之前解决 ?,cleanup:<targets> 清理目标,它们始终获得完整通行,而裸 cleanup 在新增代码行数少于 200 的差异上运行轻量级清理,deploy:<env> 环境)。 运行从前导 plan 之后的条目开始,前导 plan 仅在无计划文件的任务中运行。 resolve 从不命名:review 条目运行它。 judge 条目按位置进行判断:implement 之前是 plan judge(主题 plan <id>),其黄色裁决原地修改计划文件且不编写代码;之后是 change judge,它自行构建黄色裁决的更改,按照 judge 步骤在 pr 之前和之后所述的路由进行。 pr 条目打开分支的 PR,或当已有开放 PR 时刷新它,因此流程可以在审查或 judge 之后再次命名 pr 以使描述保持最新。 没有前导 plan 的流程是 无计划的:它不写入计划文件,而是使用聊天中的内联计划作为替代,除非存在已保存的计划。 旧键(pipelines、planless、drive_chain)仍可读取,并在发出 f10 init --migrate 的警告后转换为流程,旧的条目格式 review (local) 也是如此。 自由文本输入也跳过 capture 和 fetch,因此运行没有任务 ID。 任务 ID 运行 fetch 并使运行与 ID(徽章、报告、分支、审查目录)保持关联,并在获取后标记 f10-state.sh set plan skipped,除非它重用已保存的计划(prior,下文)。 其内联计划说明 fetch 确定的类型,包含 bug 的复现步骤和根本原因,重构的不变性或尖峰的问题各占一行,并列出其默认值上的任何差距。 对于任务 ID,内联计划还会像 plan 步骤一样编写更改的意图(f10 lore add intent --change <change> -m <what and why>,docs/lore.md);现有的意图或添加失败,在报告中将占一行,而非失败的步骤。 装运物 是最后一个交付条目的(conventions/context.md → 装运物):其行是该步骤声明的行,项目定义的步骤在其覆盖的 Shipment: 行上;其后的 judge、demo 或 handoff 条目添加行,绝不替换。 demo 条目如果无内容可展示,则在一行内跳过(demo 步骤),这是不添加行的正常结束。

尖峰在 implement 之后结束,无论流程如何:Kind: spike 计划回答一个问题,其代码永远不会离开机器。 implement 之后的步骤不运行(无清理、提交、推送、pr、审查、judge 或 deploy);装运物是尖峰报告。 最终报告以其关闭结束:f10 finish <id>,该命令存档计划和报告,丢弃实验代码并移除工作树、分支和工作区;--keep 保留实验,提交在 kept/ 分支上。 Driven 尖峰不需要报告中的关闭:f10 drive 在 ship 之后关闭它。 在主检出中,在 f10 finish 之前按报告命名的路径丢弃实验代码,f10 finish 拒绝脏的主检出。 其回报告(下方)包含问题、答案和建议;仅在 visibility: public 下命名尖峰报告的路径,因为 stealth 模式将 .f10/ 路径排除在跟踪之外。 类型在流程开始前从计划中已知,或从无计划运行的内联计划中已知,因此徽章声明 f10-state.sh pipeline implement,干运行打印在 implement 处截断的路径。

追赶保护 在三类条目之前引入基础,如 catchup 步骤的 作为保护 所述;在 catchup: off 下,它从不集成,且其加载将 catchup 排除在外,但对于无代码的基础,以下问题仍会运行。 追赶绝不是流程条目。

  • 在 implement 之前,仅当 f10 start --after 或 f10 finish 在分支上记录了基础时(f10-after-branch 或 f10-landed);否则 f10 pr catchup --guard implement 打印 method: skip。 尚无代码的基础是保护的 code: none 行,f10 drive 通过该规则释放依赖任务,适用于本地持有或仅存在于 origin 的基础。在集成之前,询问一次(AskUserQuestion)等待,或按计划的假设继续。 等待以阻塞状态结束运行(f10-state.sh set ship blocked implement,并附带命名基础任务的 note)。 继续则根据计划文件记录的基础任务的计划进行构建,如果计划文件缺失则无后备方案。 Driven 模式下,不询问任何问题,ship 也绝不继续:`f10-state.sh set ship blocked implement; f10-state.sh wait ; f10-state.sh note

相关技能