name: tasks description: 查看和管理任务栈与处理队列。显示待处理工作、活动任务、已完成项目和队列状态。触发命令:“/tasks”、“show tasks”、“what’s pending”、“task list”、“queue status”。 version: “1.0” generated_from: “arscontexta-v1.6” user-invocable: true context: fork model: sonnet allowed-tools: Read, Write, Edit, Grep, Glob, Bash argument-hint: “[add|done|drop|reorder|status] [description|number] — 管理任务栈和查看队列”
运行时配置(第0步 — 在任何处理之前)
读取这些文件以配置特定领域行为:
-
ops/derivation-manifest.md— 词汇映射- 使用
vocabulary.notes作为笔记文件夹名称 - 使用
vocabulary.note/vocabulary.note_plural引用笔记类型 - 使用
vocabulary.topic_map引用MOC(内容地图) - 使用
vocabulary.cmd_reflect/vocabulary.cmd_reweave/vocabulary.cmd_verify作为阶段命令名称
- 使用
-
ops/config.yaml— 管道链模式、自动化设置
如果不存在派生文件,则使用通用术语。
立即执行
目标:$ARGUMENTS
解析操作:
- 无参数或
status:显示任务栈 + 队列状态(组合视图) add [description]:向任务栈添加任务done [task-number]:将任务标记为已完成drop [task-number]:移除任务(不标记完成)reorder [number] [position]:将任务移动到栈中的不同位置discoveries:仅显示“发现”部分
立即开始。 执行请求的操作。
理念
两个系统,一个视图。
任务栈(ops/tasks.md)和管道队列(ops/queue/queue.yaml 或 ops/queue/queue.json)服务于不同目的:
| 系统 | 目的 | 管理者 | 更新者 |
|---|---|---|---|
| 任务栈 | 人工优先级 — 您想要处理的工作 | 您(通过 /tasks) | 手动:/tasks add, /tasks done |
| 管道队列 | 自动化处理状态 — 系统需要处理的内容 | 管道技能 | 自动:/reduce, /ralph, /reflect |
/tasks 同时显示两者,因此您始终拥有所有待处理工作的统一视图。任务栈是您的工作记忆。管道队列是系统的工作记忆。它们共同回答:“我接下来应该做什么?”
操作
/tasks(或 /tasks status)
同时显示人工任务栈和自动化队列。
步骤1:读取任务栈
# 读取 ops/tasks.md
cat ops/tasks.md 2>/dev/null
将任务栈解析为以下部分:
- 当前(或活动):标记为
- [ ]的项目 - 已完成:标记为
- [x]的项目 - 发现:工作中记录的发现(纯文本,无复选框)
如果 ops/tasks.md 不存在,则说明:“未找到任务栈。运行 /tasks add [description] 创建一个。”
步骤2:读取队列状态
# 检查队列文件(YAML 或 JSON)
if [[ -f "ops/queue/queue.yaml" ]]; then
QUEUE_FILE="ops/queue/queue.yaml"
PENDING_TASKS=$(grep -c 'status: pending' "$QUEUE_FILE" 2>/dev/null || echo 0)
DONE_TASKS=$(grep -c 'status: done' "$QUEUE_FILE" 2>/dev/null || echo 0)
elif [[ -f "ops/queue/queue.json" ]]; then
QUEUE_FILE="ops/queue/queue.json"
PENDING_TASKS=$(grep -c '"status": "pending"' "$QUEUE_FILE" 2>/dev/null || echo 0)
DONE_TASKS=$(grep -c '"status": "done"' "$QUEUE_FILE" 2>/dev/null || echo 0)
else
QUEUE_FILE=""
PENDING_TASKS=0
DONE_TASKS=0
fi
如果队列文件存在,提取待处理任务的详细信息:
- 任务ID
- 当前阶段
- 目标(笔记标题)
- 批次名称
步骤3:检查可归档批次
当批次中所有任务的 status 都为 done 时,该批次可归档:
# 对于队列中的每个唯一批次,检查是否所有任务都已完成
if [[ -n "$QUEUE_FILE" ]]; then
# 提取唯一批次名称
# 检查每个批次:所有任务都完成了吗?
# 报告可归档批次
fi
步骤4:呈现组合视图
--=={ tasks }==--
任务栈 (ops/tasks.md)
=========================
当前:
1. [ ] {任务描述}
2. [ ] {任务描述}
3. [ ] {任务描述}
已完成:
- [x] {任务描述} (2026-02-10)
- [x] {任务描述} (2026-02-08)
发现:
- {工作中记录的发现}
管道队列
==============
待处理:{数量} 个任务
- {任务ID}: {当前阶段} — {目标标题} (批次: {批次})
- {任务ID}: {当前阶段} — {目标标题} (批次: {批次})
...
已完成:{数量} 个任务
可归档批次:{所有任务都完成的批次名称列表}
摘要:任务栈中有 {当前总数} 个任务,管道中有 {队列待处理数} 个任务
解释说明:
| 条件 | 说明 |
|---|---|
| 任务栈为空 | “任务栈为空。使用 /tasks add [description] 添加任务,或使用 /next 获取建议。” |
| 管道有待处理任务 | “管道有 {N} 个待处理任务。运行 /ralph 进行处理。” |
| 存在可归档批次 | “批次 ‘{name}’ 已准备归档。运行 /archive-batch {name}。” |
| 两者都为空 | “一切就绪。使用 /next 查找下一步工作。” |
/tasks add [description]
向任务栈添加新任务。
步骤1:读取当前 ops/tasks.md
如果文件不存在,则使用标准结构创建:
# 任务栈
## 当前
## 已完成
## 发现
步骤2:添加到“当前”部分
将新任务作为复选框项目追加到“当前”部分的末尾:
- [ ] {描述}
步骤3:写入更新后的文件
使用 Edit 工具将新项目插入到“当前”部分的末尾,保留现有内容。
步骤4:报告
已添加到任务栈:{描述}
位置:第 #{N} 个,共 {总数} 个
任务栈现在有 {总数} 个当前任务。
/tasks done [number]
将任务标记为已完成。
步骤1:读取当前 ops/tasks.md
解析“当前”部分以找到第 N 个任务。
步骤2:验证
如果数字超出范围(< 1 或 > 当前任务数量):
错误:任务 #{number} 不存在。当前任务:1-{max}。
步骤3:移动到“已完成”
- 从“当前”部分移除该项目
- 添加到“已完成”部分,并附上今天的日期:
- [x] {描述} ({YYYY-MM-DD}) - 重新编号剩余的“当前”项目(如果显示使用数字)
步骤4:写入更新后的文件
步骤5:报告
已完成:{描述}
剩余:{N} 个当前任务。
与 /next 集成: 如果完成的任务是最高优先级的项目,则建议:“最高优先级任务已完成。运行 /next 获取下一个推荐。”
/tasks drop [number]
移除任务(不标记完成)。
步骤1:读取当前 ops/tasks.md
解析“当前”部分以找到第 N 个任务。
步骤2:验证
与 /tasks done 相同的范围检查。
步骤3:从“当前”中移除
完全移除该项目。不要移动到“已完成”。
步骤4:写入更新后的文件
步骤5:报告
已丢弃:{描述}
剩余:{N} 个当前任务。
/tasks reorder [number] [position]
将任务移动到栈中的不同位置。
步骤1:读取当前 ops/tasks.md
解析所有“当前”项目。
步骤2:验证
[number](源)和 [position](目标)都必须在范围内。
步骤3:重新排序
- 从位置 [number] 移除任务
- 插入到位置 [position]
- 重新编号剩余项目
步骤4:写入更新后的文件
步骤5:报告
已移动:{描述}
从位置 #{number} 到 #{position}
当前栈:
1. [ ] {任务 1}
2. [ ] {任务 2}
...
/tasks discoveries
仅显示 ops/tasks.md 中的“发现”部分。
发现(稍后处理):
- {发现 1}
- {发现 2}
...
[如果为空:“未捕获发现。发现是在工作中记录的,
以便在未来的会话中处理。”]
发现是在管道工作期间捕获的(例如,/reduce 记录连接机会,/reflect 注意到拆分候选)。它们在此处累积,直到用户决定将其转换为任务或丢弃。
队列集成
任务栈(ops/tasks.md)和管道队列共存,但服务于不同的受众:
| 方面 | 任务栈 | 管道队列 |
|---|---|---|
| 文件 | ops/tasks.md | ops/queue/queue.yaml(或 .json) |
| 格式 | Markdown 清单 | 带阶段跟踪的 YAML/JSON |
| 管理者 | 用户通过 /tasks | 管道技能自动 |
| 读取者 | /next(优先级 #1) | /ralph(阶段路由) |
| 目的 | 人工优先级 | 自动化处理状态 |
/next 首先读取任务栈。 如果栈中有项目,/next 从栈中推荐(用户设置的优先级覆盖自动化推荐)。如果栈为空,/next 评估队列状态和知识库健康状况以建议操作。
生成管道工作的技能会更新两者:
/reduce向队列添加任务,并在 tasks.md 中记录发现/seed向队列添加提取任务/architect可能向任务栈添加实施任务
任务栈格式规范
任务栈是一个简单的 Markdown 清单,从第一天起就始终存在。格式:
# 任务栈
## 当前
- [ ] 第一优先级任务
- [ ] 第二优先级任务
- [ ] 第三优先级任务
## 已完成
- [x] 已完成的任务 (2026-02-10)
- [x] 更早的任务 (2026-02-08)
## 发现
- 在 /reduce 期间发现的 [[笔记 A]] 和 [[笔记 B]] 之间的有趣连接
- MOC [[主题]] 可能需要拆分(在 /reflect 期间观察到 40+ 条笔记)
当前 按优先级排序。位置 1 是最高优先级。/tasks reorder 调整位置。
已完成 按完成日期排序(最近的在前面)。提供已完成工作的历史记录。
发现 是无序的。项目在管道工作期间累积。用户将其转换为“当前”任务或丢弃。
边缘情况
无 ops/tasks.md
在第一次 /tasks add 时创建空部分。对于 /tasks status,报告:“未找到任务栈。使用 /tasks add [description] 创建一个。”
无队列文件
在状态显示中完全跳过“管道队列”部分。不显示错误。
任务编号超出范围
报告错误并给出有效范围:“任务 #{N} 不存在。当前任务:1-{max}。”
任务栈为空(“当前”部分为空)
任务栈 (ops/tasks.md)
=========================
当前:
(空)
使用 `/tasks add [description]` 添加任务,
或使用 `/next` 获取自动化建议。
无 ops/derivation-manifest.md
使用通用词汇。所有操作同样有效。
并发修改
如果多个代理同时修改 ops/tasks.md,则最后写入者获胜。文件足够小,冲突不太可能发生,但如果检测到,则报告:“任务栈可能已被另一个会话修改。请检查。”
发现提升
当用户想要将发现转换为任务时:
- 显示发现
- 请求确认和优先级位置
- 添加到“当前”部分
- 从“发现”部分移除
这是一个手动工作流程 — 发现不会自动提升。