name: st
description: 在仓库提交的JSONL文件(.step/st-plan.jsonl)中管理持久任务计划,使状态能在回合/会话间存活并在git中可审查。当用户要求"使用 $st"、“恢复计划”、“导出/导入计划状态”、“检查点里程碑”、“跟踪依赖/阻塞工作”、“显示就绪的下一个任务”、“在磁盘上保持共享TODO状态”、“比较和对比 $st vs 计划文件”,或当工作有3个以上依赖步骤且临时update_plan不够持久时使用。
st
概述
在仓库中维护一个持久的计划文件(默认:.step/st-plan.jsonl),使用原地 JSONL v3 持久化,具有双车道:
event车道用于变更checkpoint车道用于定期全状态快照
计划项使用类型化依赖边(deps: [{id,type}])加上notes和comments,并通过show/read视图确定性渲染。
工作流
- 解析仓库根目录和计划路径。
- 如果运行有3个以上依赖步骤、可能跨越回合,或已使用
update_plan,在编辑前采用$st作为持久的真理来源。 - 如果缺失,使用
scripts/st_plan.py init初始化计划存储。 - 使用
scripts/st_plan.py show(或通过ready/blocked的聚焦视图)重新水化当前状态。 - 通过脚本子命令(
add,set-status,set-deps,set-notes,add-comment,remove,import-plan)应用计划变更;不要手动编辑现有的JSONL行。 - 每个变更命令后,消耗发出的
update_plan: {...}负载并在同一回合发布update_plan。 - 当需要时,使用
emit-update-plan从持久状态重新生成负载。 - 当需要跨会话交接时,导出/导入快照。
命令
从目标仓库根目录运行命令。
CODEX_SKILLS_HOME="${CODEX_HOME:-$HOME/.codex}"
CLAUDE_SKILLS_HOME="${CLAUDE_HOME:-$HOME/.claude}"
ST_PLAN="$CODEX_SKILLS_HOME/skills/st/scripts/st_plan.py"
[ -f "$ST_PLAN" ] || ST_PLAN="$CLAUDE_SKILLS_HOME/skills/st/scripts/st_plan.py"
ST_QUERY="$CODEX_SKILLS_HOME/skills/st/scripts/st_query_fast.sh"
[ -f "$ST_QUERY" ] || ST_QUERY="$CLAUDE_SKILLS_HOME/skills/st/scripts/st_query_fast.sh"
uv run "$ST_PLAN" init --file .step/st-plan.jsonl
uv run "$ST_PLAN" add --file .step/st-plan.jsonl --id st-001 --step "重现失败测试" --deps ""
uv run "$ST_PLAN" add --file .step/st-plan.jsonl --id st-002 --step "修补核心逻辑" --deps "st-001"
uv run "$ST_PLAN" set-status --file .step/st-plan.jsonl --id st-001 --status in_progress
uv run "$ST_PLAN" set-deps --file .step/st-plan.jsonl --id st-002 --deps "st-001:blocks,st-003:blocks"
uv run "$ST_PLAN" set-notes --file .step/st-plan.jsonl --id st-002 --notes "需要基准证据"
uv run "$ST_PLAN" add-comment --file .step/st-plan.jsonl --id st-002 --text "暂停直到CI清理" --author tk
uv run "$ST_PLAN" ready --file .step/st-plan.jsonl --format markdown
uv run "$ST_PLAN" blocked --file .step/st-plan.jsonl --format json
uv run "$ST_PLAN" show --file .step/st-plan.jsonl --format markdown
uv run "$ST_PLAN" emit-update-plan --file .step/st-plan.jsonl
uv run "$ST_PLAN" export --file .step/st-plan.jsonl --output .step/st-plan.snapshot.json
uv run "$ST_PLAN" import-plan --file .step/st-plan.jsonl --input .step/st-plan.snapshot.json --replace
操作规则
- 除非明确使用
--allow-multiple-in-progress,否则保持恰好一个in_progress项。 - 在每个项的
deps数组中跟踪先决条件;依赖是规范JSONL模式的一部分。 - 将CLI依赖解析为逗号分隔的
id或id:type令牌;缺失类型规范化为blocks,类型必须为kebab-case。 - 要求依赖完整性:
- 依赖ID必须存在于当前计划中,
- 无自依赖,
- 无依赖循环。
- 仅当所有依赖都为
completed时,才允许in_progress和completed。 - 写入前规范化用户状态术语:
open,queued->pendingactive,doing->in_progressdone,closed->completed
- 变更命令(
add,set-status,set-deps,set-notes,add-comment,remove,import-plan)在持久写入后自动打印update_plan:负载行。 - 锁边车策略:在git仓库内时,变更命令需要锁文件(
<plan-file>.lock,例如.step/st-plan.jsonl.lock)被git忽略;在第一次变更前添加到.gitignore。 - 变更原子重写JSONL文件(
temp+fsync+os.replace)并在当前seq水印处压缩为规范replace事件加检查点快照。 import-plan --replace在同一原地写入模型中原子重置状态。- 更喜欢简洁、稳定的项ID(
st-001,st-002, …)。 - 更喜欢
show --format markdown用于执行:它将步骤分组为Ready,Waiting on Dependencies,In Progress, 和终端/手动桶。
快速查询助手(jq + rg)
- 使用
scripts/st_query_fast.sh针对大日志进行低延迟只读查询。 - 需要
PATH上的jq和rg。 - 示例:
"$ST_QUERY" --file .step/st-plan.jsonl ready"$ST_QUERY" --file .step/st-plan.jsonl blocked"$ST_QUERY" --file .step/st-plan.jsonl show"$ST_QUERY" --file .step/st-plan.jsonl show st-002
同步检查清单($st -> update_plan)
- 每个
$st变更后(add,set-status,set-deps,set-notes,add-comment,remove,import-plan),解析发出的update_plan: {...}行并在同一回合发布update_plan。 - 如果没有可用的发出负载(例如在
init或shell管道后),运行:uv run "$ST_PLAN" emit-update-plan --file .step/st-plan.jsonl
- 在
update_plan中保持来自$st的项排序。 - 映射状态:
in_progress->in_progresscompleted->completedpending,blocked,deferred,canceled->pending
- 仅将依赖边保留在
$st中(deps);不要在update_plan中编码依赖。 - 如果项有
dep_state=waiting_on_deps,永远不要在update_plan中将该步骤发布为in_progress。 - 在变更
$st的回合的最终响应前,通过比较重新检查无漂移:uv run "$ST_PLAN" show --file .step/st-plan.jsonl --format json- 最新的发出
update_plan负载。
验证
- 运行轻量级CLI健全性检查:
uv run "$ST_PLAN" --helpuv run "$ST_PLAN" emit-update-plan --file .step/st-plan.jsonluv run "$ST_PLAN" show --file .step/st-plan.jsonl --format json
参考文献
- 阅读
references/jsonl-format.md了解事件模式、状态/依赖状态词汇和快照导入/导出形状。