关于 nelson
nelson 是用于组织编码任务的 Claude 技能,将任务整理为航令、评估和作战计划。它通过结构化任务文件与阶段跟踪,引导工作执行和交接。
主要功能
- 01初始化任务并记录结构化状态
- 02制定目标、范围与约束
- 03执行评估和作战计划流程
- 04跟踪阶段并恢复任务
适用场景
- 01为编码任务设定可衡量目标
- 02规划多步骤或多 Agent 工作
- 03根据已保存的交接数据恢复任务
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aspegio/ nelson --skill nelson安装后在 Claude Code 中输入/nelson确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/action-stations.mdcommendations.mdcrew-roles.mdgoal-alignment.mdmodel-selection.mdroyal-marines.mdsquadron-composition.mdreferences/admiralty-templates/battle-plan.mdcaptains-log.mdcrew-briefing.mddamage-report.mdestimate.mdmarine-deployment-brief.mdquarterdeck-report.mdred-cell-review.mdsailing-orders.mdship-manifest.mdturnover-brief.mdreferences/damage-control/circuit-breakers.mdcomms-failure.mdcrew-overrun.mdescalation.mdhull-integrity.mdman-overboard.mdpartial-rollback.mdrelief-on-station.mdscuttle-and-reform.mdsession-hygiene.mdsession-resumption.mdreferences/standing-orders/admiral-at-the-helm.md详细介绍
Nelson
python3 "${CLAUDE_PLUGIN_ROOT}/skills/nelson/scripts/nelson-data.py" status
为用户的任务执行此工作流。
采用 Nelson 的船长们的行文风格:简洁、优雅、自信。不要使用 18 世纪的文风,而要像一位尊重读者时间的军官那样清晰表达。该技能的语气为海军上将的表达树立范例。
1. 下达航行命令
- 检查用户的任务说明是否存在歧义。如果结果、范围或约束不明确,请先向用户询问清楚,再起草航行命令。
- 为
outcome、metric和deadline各写一句话。 - 设定约束:Token 预算、可靠性下限、合规规则和禁止采取的行动。
- 明确说明不在范围内的内容。
- 明确说明停止标准和必须交接的材料。
当用户未提供结构时,你必须阅读 references/admiralty-templates/sailing-orders.md 并使用航行命令模板。
航行命令摘要示例:
Outcome: Refactor auth module to use JWT tokens
Metric: All 47 auth tests pass, no new dependencies
Deadline: This session
Constraints: Do not modify the public API surface
Out of scope: Migration script for existing sessions
建立任务目录:
- **新会话:**运行
nelson-data.py init(参见下文“结构化数据采集”)。目录创建由此脚本负责:它会生成一个 8 位十六进制 SESSION_ID,在.nelson/missions/{YYYY-MM-DD_HHMMSS}_{SESSION_ID}/下创建damage-reports/和turnover-briefs/子目录,写入sailing-orders.json、mission-log.json和fleet-status.json,将.nelson/.active-{SESSION_ID}写为会话标记,并将任务目录路径输出到 stdout。将该路径记录为{mission-dir},供本任务后续使用。SESSION_ID 是目录名中最后一个下划线后的部分。如果需要指定 SESSION_ID(例如用于测试或恢复已知 ID),请传入--session-id <8-hex>。 - **恢复会话:**首先运行
python3 .claude/skills/nelson/scripts/nelson-data.py recover --missions-dir .nelson/missions,尝试自动恢复。如果找到包含交接包的活跃任务,请使用结构化恢复简报直接恢复任务。否则,如果你知道 SESSION_ID,请读取.nelson/.active-{SESSION_ID}以恢复任务路径。将该路径设为{mission-dir}。如果无法确定 SESSION_ID(例如完整重启后),请列出.nelson/missions/,并向用户展示选项供其选择。将所选目录设为{mission-dir}。按照references/damage-control/session-resumption.md恢复状态(优先使用 JSON 文件,必要时再使用舰桥报告中的文字)。**重新确立持续目标:**使用--resume/--continue时会自动恢复/goal,但在新会话中不会;因此,如果当前没有活跃目标(使用不带参数的/goal检查),且sailing-orders.json中记录了goal_condition,请按照references/goal-alignment.md重新设定该目标。
所有任务材料——船长日志、舰桥报告、损害报告和交接简报——均写入 {mission-dir}。
**结构化数据采集:**运行技能目录中的 nelson-data.py 脚本(例如 python3 .claude/skills/nelson/scripts/nelson-data.py init --outcome "..." --metric "..." --deadline "...")。如果已全局安装,脚本可能位于 ~/.claude/skills/nelson/scripts/。init 会以原子方式创建任务目录、初始 JSON 文件(sailing-orders.json、mission-log.json、fleet-status.json,初始阶段为 SAILING_ORDERS)以及 .nelson/.active-{SESSION_ID} 标记。完整参数列表请参见 references/structured-data.md。
**阶段推进:**完成结构化数据采集后,将任务阶段从 SAILING_ORDERS 推进至 ESTIMATE:
python3 .claude/skills/nelson/scripts/nelson-phase.py advance --mission-dir {mission-dir}
**会话整理:**按照 references/damage-control/session-hygiene.md 执行会话整理。恢复中断的会话时跳过此步骤。
**持续目标(可选):**对于长期自主运行、无头(-p)、定时执行或 ultracode 任务——这类任务的失败模式是过早停止——可提议设置 Claude Code /goal,避免会话在任务真正完成前停止。请根据航行命令编写目标,不要手动起草:
python3 .claude/skills/nelson/scripts/nelson-data.py goal-condition \
--mission-dir {mission-dir} --record
展示打印出的 /goal ... 行供用户设置。如果用户在调用 Nelson 前已经设置了 /goal,请勿替换它——使用单独的 /goal 读出该目标,使航行指令与之保持一致,并且仅在获得用户同意后重新发布组合后的目标。对于由用户逐轮掌舵的短时交互任务,请跳过此步骤。设置目标前,你必须先阅读 references/goal-alignment.md——评估器仅依据对话记录判断条件,因此必须在聊天中呈现完成证据(这会影响第 8 步中的 Stand Down)。
**Estimate 选择加入:**继续之前,询问用户:
“我可以先执行 The Estimate,再起草 Battle Plan 吗?我建议本次任务采用此步骤——[简要说明理由]。”
给出诚恳的建议。对于范围明确、仅涉及单个子系统的简单任务,可不执行 Estimate。对于复杂、含糊或涉及多个系统的任务,建议执行。如果用户接受,请继续执行第 2 步。如果用户拒绝,请记录该决定并跳至第 3 步:
python3 .claude/skills/nelson/scripts/nelson-data.py skip-estimate \
--mission-dir {mission-dir} --reason "[one-line rationale]"
python3 .claude/skills/nelson/scripts/nelson-phase.py advance --mission-dir {mission-dir}
python3 .claude/skills/nelson/scripts/nelson-phase.py advance --mission-dir {mission-dir}
第一次 advance 会从 SAILING_ORDERS 转到 ESTIMATE。第二次 advance 会从 ESTIMATE 转到 BATTLE_PLAN;退出验证器会接受此转换,因为 skip-estimate 已在 sailing-orders.json 中记录用户选择退出的决定。
2. 进行估算
阅读 references/the-estimate.md,了解完整的思考过程,并使用 references/admiralty-templates/estimate.md 作为框架。通过回答七个问题,将任务简报转化为值得执行的计划:
- 侦察 — 地形如何?我们要处理什么?
- 意图 — 我们真正想实现什么?为什么?
- 效果 — 要实现意图,必须发生哪些变化?
- 地形 — 每项效果会落实到代码库的什么位置?
- 力量 — 我们需要哪些 Agent、模型和上下文?
- 协调 — 哪些工作彼此依赖?哪些可以并行进行?
- 管控 — 质量关卡和干预点在哪里?
Q1 会调度 Explore 子 Agent。 根据航行命令拟定侦察简报,派遣一个或多个 Explore Agent 进入代码库;将他们的发现综合到侦察部分。Q1 必须遵守 references/the-estimate.md 中的 Explorer 规范(多次有针对性的调度、结构化摘要、不提供原始文件内容)。
**Q2–Q3 和 Q4–Q7 分别通过两次独立的子 Agent 调度委派,**确保 Q2–Q7 的推理不会占用海军上将的上下文。第一次调度(Estimate-Drafter)在 Q1 之后、Checkpoint 2 之前,产出指挥官意图和效果;第二次调度(Estimate-Planner)在 Checkpoint 2 批准意图和效果之后,产出地形、力量、协调和管控。两个子 Agent 均继承海军上将的模型;估算阶段不受节省成本的模型选择规则限制。简报内容和调度模板见 references/the-estimate.md。
分析工作前后各设一个检查点。 Q1 之后,向用户展示发现并征求其修正或重新界定。Q3 之后,在规划“如何”之前,向用户展示意图和效果,征求实质性批准。Q4–Q7 根据已批准的效果推进,属于海军上将的专业判断 — 无需打断用户,直接完成。仅当以下三个条件全部满足时,才将两个检查点合并为一次最终审查:航行命令明确说明了结果、指标和截止日期;Q1 没有发现意外情况;工作只涉及一个子系统。完整的检查点规范见 references/the-estimate.md。
§3 中的每项效果都必须包含指挥官指导(如何执行)和验收标准(完成时必须满足什么条件)。这些标准会传递给舰长,并在收队时验证;舰长针对每项标准选择验证方法(测试、类型检查、lint、审查、视觉检查)。
将估算写入 {mission-dir}/estimate.md,每个问题对应一个 H2 章节。仅当某个章节变得过于冗长时,才拆分为 {mission-dir}/estimate/0N-name.md。
**阶段推进:**用户批准最终估算后,将阶段从 ESTIMATE 推进至 BATTLE_PLAN:
python3 .claude/skills/nelson/scripts/nelson-phase.py advance --mission-dir {mission-dir}
3. 起草作战计划
完成估算后,作战计划会继承分析结果:地形、力量、协调和管控都已确定。作战计划阶段负责实际执行 — 将已批准的效果转化为任务分配。如果跳过了估算阶段,海军上将在此阶段内完成分析。
**保持范围不变:**如果航行命令要求扩展、拓展或修改现有功能,每项任务都必须修改现有实现,而不是创建并行或替代实现。在每项任务的简报中填写 Modification targets 字段,列出侦察时确认的具体函数、环境变量和配置。如果修改现有内容即可满足效果,却规划了新增文件、函数或环境变量,则属于规划错误。
- 将 Estimate(§3)中的每项效果转化为一个或多个任务。每项任务必须严格限定在其父级效果的范围内——不得引入该效果未要求的工作。如果跳过了 Estimate,则直接根据 Sailing Orders 推导任务。
- 将指挥官意图段落(Estimate §2)附加到每份舰长简报之前,让每艘船都在对目标有共同理解的基础上启航。
- 将父级效果的验收标准继承到每项任务。舰长负责为每项标准选择验证方法。
- 从 Estimate 继承地形(文件所有权)、协调(依赖关系)、兵力(舰长配置、模型类别)和控制(行动站层级)。如果跳过了 Estimate,则在此步骤补充这些内容。
- 如果节省成本是优先事项,也要考虑任务输入——避免多个 Agent 各自将相同的大型输入载入上下文。
- 对每项任务,根据
references/crew-roles.md中的 crew-or-direct 决策树注明预期的船员配置。如果集结了船员,列出船员角色及其子任务和顺序。如果舰长直接实施(0 名船员),注明“舰长直接实施。”如果舰长预计需要海军陆战队支援,注明海军陆战队人数上限(最多 2 人)。 - 对每项任务,明确标注
admiralty-action-required: yes或no。 - 除非任务明确要求多任务处理,否则每个 Agent 同一时间只能处理一项进行中的任务。
请参阅 references/admiralty-templates/battle-plan.md,了解每份舰长简报的架构;并参阅 references/admiralty-templates/ship-manifest.md,了解舰船清单。
工作流适用性检查: 如果任务涉及大量分支、可重复编排、全代码库分析、大范围迁移、审计或交叉核查需求,必须阅读 references/workflow-doctrine.md,并判断应采用 workflow 还是 hybrid-workflow。对于工作流模式,在作战计划中添加精简的工作流章程,说明执行原语、适用性、阶段、人工审核关卡、验证约定、成本防护措施和回退模式。对于非工作流模式,添加一行:Workflow suitability: not selected because ...。第 2/3 站的工作流任务默认采用 hybrid-workflow,因为人工审批应安排在不同的工作流运行之间,而不是在某次运行中途任意暂停。
作战计划关卡——常设命令检查: 在以书面形式回答以下每个问题并落实任何触发的常设命令补救措施之前,绝不能最终确定任务分配。请展示推理过程——仅回答是或否并不足够。
becalmed-fleet.md:本任务是否应采用单会话而非多 Agent?如果是,跳过第 4 步——单会话无需组建分队。light-squadron.md:任务数是否等于独立工作单元数,还是任务拆分不足?split-keel.md:每项任务是否都拥有专属文件,且互不冲突?(此项将在第 4 步自动验证。)unclassified-engagement.md:每项任务是否都有风险等级?all-hands-on-deck.md:每项任务是否只配置了其工作实际需要的角色?skeleton-crew.md:是否有任务只配置 1 名船员来处理本应由舰长直接完成的原子任务?crew-without-canvas.md:每个 Agent 是否都有任务范围方面的实际依据?captain-at-the-capstan.md:对于每项配置了船员的任务,舰长是否负责协调而非实施?press-ganged-navigator.md:红队导航员是否被分配了实施工作?admiral-at-the-helm.md:作战计划是否将任何实施工作(允许的只读整合除外)分配给了海军上将?wrong-ensign.md:计划采用的协调工具是否与所选执行模式相匹配?pulling-the-oar.md:对于涉及派遣子 Agent 的任务,失败恢复方案是否为修正简报后重新派遣,而不是将工作吸收到高级上下文中? 如果任何答案触发了常设命令,你必须执行纠正措施,并在继续之前重新回答问题。对于此关卡未涵盖的情况,请参阅下方的常设命令表。
保存拟定的计划。 在继续执行步骤 4 之前,使用 references/admiralty-templates/battle-plan.md 中的模板,将完整的作战计划写入 {mission-dir}/battle-plan.md。逐字包含 Estimate §2 中的指挥官意图、按模板格式编写的每项任务简报,以及常设命令检查的答案。这是一个安全的压缩点——海军上将状态现已完整保存到磁盘。
结构化数据采集: 任务注册需要指定负责人,而负责人将在步骤 4 中分配。此步骤不调用任何 nelson-data.py 脚本。
4. 组建舰队
- 根据
references/squadron-composition.md选择执行模式。如果用户明确指定了模式,则使用该模式——用户偏好优先于决策矩阵。single-session:任务按顺序执行、复杂度较低,或涉及大量同一文件编辑时使用。subagents:任务可并行执行且完全独立,并且只向海军上将汇报时使用。agent-team:舰长需要共享任务列表、进行点对点消息沟通或协调交付物,或需要 4 名及以上舰长时使用。workflow:针对大规模扇出、可重复审查、广泛迁移、审计或交叉核验研究,运行一个自主动态工作流。hybrid-workflow:由 Nelson 把关的工作流阶段序列,各阶段之间需要人工审批。
模式与工具一致性关卡: 在分配舰船之前,查看 references/tool-mapping.md,确认工具用法与所选模式一致:
subagents模式: 舰长不得使用TaskCreate、TaskList、TaskGet、TaskUpdate或SendMessage(type="message")。舰长只能通过Agent工具的返回值汇报。海军上将使用TaskCreate/TaskUpdate/TaskList在会话任务列表中跟踪进度(仅用于可见性——舰长无法看到这些任务)。agent-team模式: 不要使用带有subagent_type的Agent来生成舰长(水兵仍使用subagent_type)。先使用TeamCreate,然后使用带有team_name+name的Agent。通过TaskList和SendMessage协调。single-session模式: 海军上将在依次完成各项任务时,使用TaskCreate、TaskUpdate、TaskList和TaskGet跟踪进度。workflow模式: 将工作流视为舰队资产,而非常规舰长。Nelson v1 会生成工作流章程/提示词和遥测计划;它不会直接调用工作流 API,也不会生成可运行的.claude/workflows/*.js。hybrid-workflow模式: 将每个工作流阶段视为独立的舰队资产。在计划好的关卡处停止并呈现结果,只有在获得明确批准后,才启动下一次工作流运行。
任务列表可见性: 选择执行模式后,为作战计划中的每项任务创建一个 TaskCreate 条目,让任务进度显示在 Claude Code 任务列表中(Ctrl+T)。这适用于所有执行模式——这是海军上将级别的可见性跟踪,不是 Agent 间协调。在 workflow 和 hybrid-workflow 模式下,如果工作流阶段或关卡是跟踪的操作单位,也要为它们创建可见性条目。
对于每项任务:
subject:作战计划中的任务名称(祈使形式,例如“重构身份验证模块”)description:一行交付物说明activeForm:界面旋转指示器中显示的现在进行时形式(例如“正在重构身份验证模块”)
所有任务初始状态均为 pending。随着任务推进,将更新任务负责人和状态。在 single-session 模式下(该模式通常会跳过步骤 4),海军上将仍须在继续执行步骤 5 之前创建这些条目。
- 根据任务权重,从
references/crew-roles.md中为每项任务指定一名舰长和舰名(一般任务用护卫舰,高风险任务用驱逐舰,小型任务用巡逻舰,关键路径任务用旗舰,研究任务用潜艇)。 - 完成舰船编制:确认每项任务的船员角色,或注明“舰长直接实施。”
- 对中等/高威胁任务,增加
1 red-cell navigator。中队级 Agent(海军上将、舰长、红队导航员)不得超过 10 个。船员不计入此限制。 - 如果航行命令优先考虑节省成本,请在分配模型前加载
references/model-selection.md。对所有Agent工具调用应用基于权重的模型选择,并为分配到 haiku 的 Agent 添加 haiku 简报增强内容。
SQUADRON FORMATION ORDERS
Mode: [single-session | subagents | agent-team | workflow | hybrid-workflow]
Captain count: [N]
Ships:
[Ship name] — [vessel type] — [one-line task summary]
Crew: [roles, or "Captain implements directly"]
[repeat for each ship]
[Red-cell navigator — HMS X, if present]
对于 workflow 和 hybrid-workflow,请包含:
WORKFLOW CHARTER
Execution primitive: [workflow | hybrid-workflow]
Suitability: [why dynamic workflow orchestration is justified]
Phases: [probe / full run / stage names]
Human gates: [approval points, especially for hybrid-workflow]
Verification contract: [how accepted, rejected, and uncertain findings are handled]
Cost guardrail: [Sounding-the-Channel probe, scope cap, token/time stop]
Fallback mode: [agent-team | single-session]
如果任何任务标记为 admiralty-action-required: yes,请在等待批准前追加:
ADMIRALTY ACTION LIST — Actions required from Admiralty
1. [Task name]
action: [what you must do]
timing: [before task starts | after task completes]
unblocks: [task name or stand-down]
Actions marked `timing: before task starts` require your sign-off before the relevant captain is spawned.
在用户批准前,不得启动任何 Agent、创建任何任务,也不得运行任何 workflow / hybrid-workflow。如果用户要求修改,请修订并重新展示,然后再继续。
注意: 对于无头模式和 CI 调用,请使用
nelson-data.py headless --auto-approve,它会合并步骤 1-3 并跳过交互式审批环节。详情请参阅references/structured-data.md。
结构化数据采集: 编队获批后,使用组合式 form 命令(推荐)或以下单独命令。
推荐 — 组合式 form 命令: 编写一个包含任务和中队定义的计划 JSON 文件,然后运行单条命令:
python3 .claude/skills/nelson/scripts/nelson-data.py form \
--mission-dir {mission-dir} \
--plan {mission-dir}/plan-input.json \
--mode [mode]
此命令会一次性注册所有任务、记录中队、计算 DAG 指标并运行冲突扫描。有关计划 JSON 架构和输出格式,请参阅 references/structured-data.md。
替代方案 — 单独命令:
- 对每项任务运行
python3 .claude/skills/nelson/scripts/nelson-data.py task --mission-dir {mission-dir} --id N --name "..." --owner "..." ...(编队已确定负责人)。有关任务参数,请参阅references/structured-data.md。 - 运行
python3 .claude/skills/nelson/scripts/nelson-data.py plan-approved --mission-dir {mission-dir},最终确定作战计划并计算 DAG 指标。 - 运行
python3 .claude/skills/nelson/scripts/nelson-phase.py advance --mission-dir {mission-dir},从 BATTLE_PLAN 推进至 FORMATION(验证所有任务均已设置岗位等级)。 - 运行
python3 .claude/skills/nelson/scripts/nelson-data.py squadron --mission-dir {mission-dir} --admiral "..." --admiral-model [model] --captain "name:class:model:task_id" ... --mode [mode],记录中队组成。每名舰长都要重复指定--captain。完整参数列表请参阅references/structured-data.md。 - 运行
python3 .claude/skills/nelson/scripts/nelson_conflict_scan.py --plan {mission-dir}/battle-plan.json,验证不存在文件所有权冲突。如果发现冲突,必须先解决冲突并更新作战计划,然后才能继续。 - 运行
python3 .claude/skills/nelson/scripts/nelson-phase.py advance --mission-dir {mission-dir},从 FORMATION 推进至 PERMISSION。
继续步骤 5 前: 确认航行命令已存在、所有任务均有负责人和交付物,并且每项任务都已设置行动岗位等级。
船员简报: 启动和分配任务是两个步骤。首先,使用 Agent 工具启动每名舰长,并在其提示词中加入 references/admiralty-templates/crew-briefing.md 中的船员简报。然后,使用 TaskUpdate 将工作分配给已有任务条目。队友不会继承负责人的对话上下文——他们从空白上下文开始,因此需要明确的任务背景。有关各模式的完整参数详情,请参阅 references/tool-mapping.md。
任务状态更新: 编队完成后,更新此步骤中先前创建的任务列表条目:
agent-team模式: 随着各舰长被派出,使用TaskUpdate将owner设置为各舰长的姓名,并将status设置为in_progress。团队共享的任务列表现在同时用于信息可见和协调。subagents模式: 每派出一位舰长,就使用TaskUpdate将status设置为in_progress。由海军上将直接跟踪这些任务。single-session模式: 海军上将开始每项任务时,使用TaskUpdate将status设置为in_progress。workflow模式: 使用TaskUpdate将工作流运行或阶段标记为in_progress,并记录workflow_run_started。hybrid-workflow模式: 使用TaskUpdate仅将当前获批的工作流阶段标记为in_progress;后续阶段在通过人工关卡前保持pending。
编辑权限: 派出任何任务涉及编辑文件的 Agent 时,在 Agent 工具调用中设置 mode: "acceptEdits"。如果省略此项,可能会发生权限竞争状况,导致 Agent 在首次编辑时无声停滞。如有疑问,请包含此项。
交接简报: 舰船因上下文耗尽而换班时,会使用 python3 .claude/skills/nelson/scripts/nelson-data.py handoff ... 编写一份类型化交接数据包(参见 references/structured-data.md)。也可以使用 references/admiralty-templates/turnover-brief.md 编写可选的文字简报。完整流程请参见 references/damage-control/relief-on-station.md。
5. 获准启航
展示与许可关卡:
- 如果启用了
becalmed-fleet.md,向用户展示完整作战计划。 - 如果未启用
becalmed-fleet.md,向用户展示完整分舰队编组。也应提供在步骤 3 中起草的作战计划供审阅。 - 如果选择了
workflow或hybrid-workflow,展示工作流章程、验证约定、成本限制、回退模式和下一个人工关卡。 - 必须等待用户明确许可后才能继续。
workflow和hybrid-workflow模式在每次启动前都需要明确批准;对于hybrid-workflow,阶段之间也要重复此关卡。
阶段推进: 获得用户许可后,记录事件并推进:
python3 .claude/skills/nelson/scripts/nelson-data.py event \
--mission-dir {mission-dir} --type permission_granted --checkpoint 0
python3 .claude/skills/nelson/scripts/nelson-phase.py advance --mission-dir {mission-dir}
这会将任务从 PERMISSION 转入 UNDERWAY,从而解锁 Agent 派出和任务创建。
6. 执行值更节奏
空闲通知规则(立即执行——不要延至检查点): 每当收到舰船发来的空闲通知时,先询问以下三个问题,再做其他任何事情:
- 此舰船的任务是否已标记为完成?
- 是否有任何剩余的待处理任务依赖此舰船的输出?
- 仅限
agent-team模式: 海军上将是否已收到并处理此舰船的结果?
如果任务已完成且没有待处理任务依赖它,则按照 references/standing-orders/paid-off.md 执行关闭流程。在 agent-team 模式下,海军上将在发送 shutdown_request 前必须确认已收到舰长的结果——如果尚未收到,请通过 SendMessage 获取,或读取输出文件。在 subagents 模式下,结果会由 Agent 工具同步返回,因此无需额外确认。不要等到下一个检查点周期。收到空闲通知时,立即检查当前的 TaskList 状态;每条通知都要根据当前状态独立评估。即使其他舰船仍在运行,也适用此规则。
关闭尝试上限: 如果舰船未确认 shutdown_request,不要无限重试。对同一 Agent 失败 3 次后,放弃关闭尝试,在舰长日志中记录失败,然后继续任务。如果 TeamDelete 因卡住的 Agent 而受阻,可以手动清理——流程请参见 references/damage-control/man-overboard.md。
- 让舰队司令专注于协调和解除阻碍。
- 舰队司令决定中队的士气。肯定进展,认可出色工作,并在压力下保持乐观。
- **检查点节奏门槛:**处理第三项任务完成情况之前,MUST 先写一份甲板检查点报告。分派新工作或处理下一项任务完成情况之前,确认距上次检查点不超过 2 项任务完成情况。发生上下文压缩时,甲板报告是唯一的恢复依据——报告过时会导致协调状态丢失。
- 每完成 1-2 项任务、舰长报告阻碍,或舰长在输出尚未核实的情况下进入空闲状态后,运行一次甲板检查点:
- 通过检查
TaskList中任务的状态来更新进度:pending、in_progress、completed。 - 使用
TaskUpdate将已完成任务的status设为completed。在subagents和single-session模式下,舰队司令直接更新会话任务列表;在agent-team模式下,由舰长或舰队司令更新共享任务列表。 - 找出阻碍并确定具体的下一步行动。
- 使用
SendMessage为舰长解除阻碍,或调整其工作方式。 - 确认每名船员都有正在执行的子任务;标记空闲船员或角色不匹配的情况。
- 检查是否有海军陆战队员正在执行部署;确认他们已返回且其输出已纳入工作成果。
- 安全措施:如果两次检查点之间漏掉了任何一艘已有已完成任务的空闲舰船,请立即按
references/standing-orders/paid-off.md执行停役程序,再继续。 - 根据令牌/时间预算跟踪消耗情况。
- 对于
workflow和hybrid-workflow,如有数据,请记录工作流遥测信息:阶段、已完成 Agent 数/总数、令牌消耗、已用时间、失败的 Agent、已采纳的发现、已拒绝的发现、尚不确定的发现,以及下一道关卡。根据情况使用workflow_probe_completed、workflow_run_completed或workflow_run_stopped事件。 - 检查船体完整性:收集所有舰船的损伤报告,更新中队战备状态板,并按
references/damage-control/hull-integrity.md采取行动。舰队司令也必须在每个检查点检查自身的船体完整性。每艘舰船都必须在每个检查点将损伤报告写入{mission-dir}/damage-reports/{ship-name}.json,并使用references/admiralty-templates/damage-report.md中的架构——即使船体状态为 Green,也不得跳过。 - 常设命令扫描:针对以下每条命令,询问“自上次检查点以来,是否出现过这种情况?”如果是,立即采取纠正措施——不得延后。
admiral-at-the-helm.md:舰队司令是否偏离职责,开始处理实现工作(允许的只读重组工作除外)?drifting-anchorage.md:是否有任务范围超出航行命令?是否有舰长创建并行实现、重复函数或新的环境变量,而不是扩展现有代码?captain-at-the-capstan.md:是否有舰长开始亲自实现,而不是协调船员?pressed-crew.md:是否有船员被分配了职责范围之外的工作?press-ganged-navigator.md:红队导航员是否被分配了实现工作?all-hands-on-deck.md:是否有舰船集结了空闲或无正当理由的船员角色?battalion-ashore.md:是否有舰长让海军陆战队员承担船员工作或持续性任务?wrong-ensign.md:舰队司令或任何舰长是否使用了与当前执行模式不匹配的工具?pulling-the-oar.md:是否有任何高级 Agent(舰队司令或舰长)接手失败的子 Agent 分派任务,而不是修正任务说明并重新分派?
- 将甲板报告写入磁盘:每个检查点都使用
references/admiralty-templates/quarterdeck-report.md,将报告写入{mission-dir}/quarterdeck-report.md。即使船体状态为 Green,也不得跳过——上下文压缩随时可能发生,磁盘上的报告是唯一的恢复依据。写入前,如果{mission-dir}中已存在quarterdeck-report.md,请查找所有匹配 glob 模式quarterdeck-report-[0-9]*.md的文件,将 N 定为找到的最大编号加 1(如果没有则为 0),将现有文件重命名为quarterdeck-report-N.md,然后写入新报告。这样既能让最新报告保留在规范路径,也能保留历史记录。 - **结构化数据采集:**运行
python3 .claude/skills/nelson/scripts/nelson-data.py checkpoint --mission-dir {mission-dir} --pending N --in-progress N --completed N ...,并提供当前进度、预算、船体状态和决策数据。在检查点之间,对于状态变更(任务完成、阻碍、船体阈值跨越、违反常设命令),运行python3 .claude/skills/nelson/scripts/nelson-data.py event --mission-dir {mission-dir} --type <event_type> ...。事件类型和参数请参阅references/structured-data.md。 - 检查
TaskList中描述以[AWAITING-ADMIRALTY]:开头的任务。如果存在,立即将请求提交给海军部——不得攒到下一个检查点再处理。 - 将作战计划与
TaskList交叉核对:对于作战计划中标记为admiralty-action-required: yes且状态显示为completed的任务,确认甲板日志中有记录海军部签核的条目。如果没有此类条目,向海军部报告并请求人工核实——该任务可能在未执行预期人工步骤的情况下就已完成。
- 通过检查
- 如果任务偏离任务指标,请尽早重新界定范围。
- 任务遇到困难时,请参阅下方的损害管制表,了解恢复和升级处理流程。 示例甲板值勤报告:
Status: 3/5 tasks complete, 1 blocked, 1 in progress
Blocker: HMS Resolute waiting on API schema from HMS Swift
Action: Redirect HMS Swift to prioritise schema export
Budget: ~40% tokens consumed, on track
Hull: All ships green
协调工具请参阅 references/tool-mapping.md,报告模板请参阅 references/admiralty-templates/quarterdeck-report.md,损伤报告格式请参阅 references/admiralty-templates/damage-report.md。使用 references/commendations.md 了解表彰信号和分级纠正措施。如果海军上将正在执行实现工作,或任务偏离了范围,请查阅下方的常设命令表。
7. 各就各位
- 你必须阅读并应用
references/action-stations.md中的各级战斗岗位要求。 - 标记任务完成前,必须要求提供验证证据:
- 测试或验证输出。
- 失败模式和回滚说明。
- 对中等及以上战斗岗位等级进行红队审查。
- 对于
workflow和hybrid-workflow,在接受工作流输出前,必须要求提供作战计划中的验证约定。接受的发现必须附有承诺的证据;被拒绝或不确定的发现必须单独列出;此外,战斗岗位等级为 2 及以上的输出仍须按照references/action-stations.md接受对抗性审查或人工确认。 - 在以下情况下触发质量检查:
- 任务完成时。
- Agent 空闲但输出尚未验证时。
- 最终综合之前。
- 对于有船员参与的任务,请验证船员输出是否符合角色边界(如果发现违反角色要求的情况,请参阅
references/crew-roles.md和下方的常设命令表)。 - 海军陆战队部署遵循
references/royal-marines.md中的战斗岗位等级规则。部署 2 级及以上战斗岗位的海军陆战队成员须经海军上将批准。部署海军陆战队成员时,舰长须使用references/admiralty-templates/marine-deployment-brief.md。
红队审查模板请参阅 references/admiralty-templates/red-cell-review.md。如果任务未指定等级,或红队被指派实现工作,请查阅下方的常设命令表。
8. 结束待命并记录行动
- 停止或归档所有 Agent 会话,包括 crew。
- 将舰长日志写入
{mission-dir}/captains-log.md。日志必须写入磁盘——仅在聊天中输出不符合此要求。舰长日志应包含:- 决策及其理由。
- 差异或产物。
- 验证证据。
- 未解决的风险和后续事项。
- 战报表彰:列出表现出色的 Agent 名称及其贡献。
- 记录可供未来任务复用的模式和失败案例。
舰长日志模板参见 references/admiralty-templates/captains-log.md,战报表彰标准参见 references/commendations.md。
结构化数据采集: 编写舰长日志之前,运行 python3 .claude/skills/nelson/scripts/nelson-data.py stand-down --mission-dir {mission-dir} --outcome-achieved --actual-outcome "..." --metric-result "...",以采集结构化任务摘要。完整参数列表参见 references/structured-data.md。
任务列表清理: 确认所有任务列表条目都反映最终状态。对于仍处于 in_progress 状态的任务,如果已完成,则标记为 completed;否则在舰长日志中注明未完成事项。这样可确保 Claude Code 任务列表准确显示最终摘要。
会话状态清理: 删除 .nelson/.active-{SESSION_ID},移除会话状态文件。
任务完成关卡: 在 {mission-dir}/captains-log.md 已存在于磁盘上并确认可读之前,绝不能宣布任务完成。如果上下文压力较大,可写一份精简日志并注明哪些部分有所删减——但文件必须存在。绝不可跳过第 8 步。
清除当前目标: 如果有活动的 /goal,其评估器只能看到本次对话——因此请在聊天中说明完成证据,让目标自动清除:成功指标结果(与航行命令中的指标一致)、captains-log.md 已写入(注明路径),以及已记录结束待命。如果任务成功,不要让用户运行 /goal clear——评估器看到这些证据后会自动清除目标。只有在任务被放弃时:运行 scuttle-and-reform,在聊天中说明阻碍原因,并通过 nelson-data.py event 记录 goal_cleared 事件。参见 references/goal-alignment.md。
GitHub Star 提示(仅首次,且仅在成功时): 通过任务完成关卡后,询问用户是否愿意为 Nelson 仓库点 Star(规范仓库标识为 harrymunro/nelson)。运行以下全部三项预检;如果任何一项输出 SKIP,则静默跳过提示并结束待命。
gh auth status &>/dev/null && echo "GH_OK" || echo "SKIP_NO_GH"
python3 - <<'PY'
import json, os
path = os.path.expanduser('~/.nelson/prefs.json')
prefs = {}
if os.path.exists(path):
try:
with open(path, encoding='utf-8') as f:
loaded = json.load(f)
if isinstance(loaded, dict):
prefs = loaded
except Exception:
prefs = {}
print("SKIP_ALREADY_ASKED" if prefs.get('star_asked') is True else "PREFS_OK")
PY
python3 - <<'PY'
import json, os, sys
mission_dir = os.environ.get('MISSION_DIR', '{mission-dir}')
sd_path = os.path.join(mission_dir, 'stand-down.json')
try:
with open(sd_path, encoding='utf-8') as f:
sd = json.load(f)
print("OUTCOME_OK" if sd.get('outcome_achieved') is True else "SKIP_OUTCOME_NOT_ACHIEVED")
except Exception:
print("SKIP_NO_STAND_DOWN")
PY
将 {mission-dir} 替换为实际任务目录路径(或先导出 MISSION_DIR)。如果三行均为 GH_OK、PREFS_OK、OUTCOME_OK,则调用 AskUserQuestion,并使用:
- 问题:“Nelson 帮你完成了这项任务。你愿意在 GitHub 上为该仓库点 Star 吗?”
- Star Nelson — “帮助项目发展。”
- 以后再说 — “暂时跳过(不会再询问)。”
如果选择 Star Nelson,运行 gh api -X PUT /user/starred/harrymunro/nelson(幂等操作——无论仓库是否已点 Star,都会返回 204)。如果调用失败,输出 Couldn't reach GitHub — try 'gh api -X PUT /user/starred/harrymunro/nelson' manually. 并继续。绝不要让此步骤阻碍结束待命。
无论用户选择哪项(包括自定义的“其他”回复),都要在 ~/.nelson/prefs.json 中设置 star_asked: true,同时保留任何现有键:
python3 - <<'PY'
import json, os
path = os.path.expanduser('~/.nelson/prefs.json')
os.makedirs(os.path.dirname(path), exist_ok=True)
try:
with open(path, encoding='utf-8') as f:
prefs = json.load(f)
if not isinstance(prefs, dict):
prefs = {}
except Exception:
prefs = {}
prefs['star_asked'] = True
with open(path, 'w', encoding='utf-8') as f:
json.dump(prefs, f, indent=2)
f.write('\n')
PY
所有 Nelson 项目中,每位用户只会被询问一次。无论选择哪项,都会永久关闭此提示。
常设命令
根据具体情况查阅相应的常设命令。该库可通过实证扩展:参见 scripts/nelson_data_patterns.py,了解如何从任务模式中挖掘新的候选命令并提交人工审核的晋升工作流。
| 情况 | 常设命令 |
|---|---|
| 选择单会话还是多 Agent | references/standing-orders/becalmed-fleet.md |
| 任务拆分不足,分配的舰长少于任务独立性所需数量 | references/standing-orders/light-squadron.md |
| 决定是否再增加一个 Agent | references/standing-orders/crew-without-canvas.md |
| 在作战计划中为 Agent 分配文件 | references/standing-orders/split-keel.md |
| 任务范围偏离航行命令 | references/standing-orders/drifting-anchorage.md |
| 海军上将亲自实施而非协调(允许的只读整合除外) | references/standing-orders/admiral-at-the-helm.md |
| 将工作分配给红队领航员 | references/standing-orders/press-ganged-navigator.md |
| 任务未进行风险等级分类便开始执行 | references/standing-orders/unclassified-engagement.md |
| 舰长亲自实施而非协调船员 | references/standing-orders/captain-at-the-capstan.md |
| 不顾任务需求,为每个角色都安排船员 | references/standing-orders/all-hands-on-deck.md |
| 为原子任务派出一名船员 | references/standing-orders/skeleton-crew.md |
| 将船员安排到职责范围之外的工作 | references/standing-orders/pressed-crew.md |
| 舰长派海军陆战队执行船员工作或持续性任务 | references/standing-orders/battalion-ashore.md |
| 舰长已完成自主工作,需要人类采取行动才能继续 | references/standing-orders/awaiting-admiralty.md |
| Agent 已完成任务,依赖关系图中已无剩余工作 | references/standing-orders/paid-off.md |
| 在错误的执行模式下使用工具 | references/standing-orders/wrong-ensign.md |
| 高级人员接手失败子 Agent 的工作,而不是修正任务说明 | references/standing-orders/pulling-the-oar.md |
损害管制
根据具体情况查阅相应的处置规程。
| 情况 | 处置规程 |
|---|---|
| Agent 无响应、陷入循环或未产出有用内容 | references/damage-control/man-overboard.md |
| 会话中断(上下文限制、崩溃、超时) | references/damage-control/session-resumption.md |
| 发现已完成的任务有误,但其他任务正常 | references/damage-control/partial-rollback.md |
| 任务注定无法成功,继续执行只会浪费预算 | references/damage-control/scuttle-and-reform.md |
| 问题超出当前权限或需要澄清 | references/damage-control/escalation.md |
| 船员消耗的 Token 或时间明显过多 | references/damage-control/crew-overrun.md |
| 船只的上下文窗口已耗尽,需要替换 | references/damage-control/relief-on-station.md |
| 船只的上下文窗口即将达到限制 | references/damage-control/hull-integrity.md |
| 自动预算、船体和空闲警报达到阈值 | references/damage-control/circuit-breakers.md |
| 在会话开始时准备任务目录 | references/damage-control/session-hygiene.md |
| Agent 团队通信故障(Agent ID 丢失、消息总线中断) | references/damage-control/comms-failure.md |
海军上将原则
- 在任何海军上将的压缩摘要中加入这条指示:重新阅读任务目录路径下的舰桥报告,以找回
{mission-dir}。如果不知道该路径,且知道 SESSION_ID,则读取.nelson/.active-{SESSION_ID};否则列出.nelson/missions/,并向用户展示选项供其选择。然后重新阅读references/standing-orders/admiral-at-the-helm.md,确认你处于协调角色。 - 在任何阶段边界(第 1、2、3、4 步之后,以及第 6 步中的每个舰桥检查点)都可以安全地执行
/compact。狭窄的不安全窗口位于第 5 步内部——从用户批准之后,到海军上将执行permission_granted/推进阶段/启动 Agent 这一轮为止。 - 优先考虑任务吞吐量,而非平均分配工作。
- 与其等待尚未明确的阻碍,不如优先替换停滞的 Agent。
- 肯定出色表现;激励会在多个任务中持续累积。
- 协调消息应有针对性且简洁。
- 尽早提出不确定之处,并给出选项和一项建议。