任务栈与队列管理器Skill tasks

任务栈与队列管理器是一个用于知识管理和自动化工作流系统的核心技能模块。它提供统一视图来管理人工任务栈(ops/tasks.md)和自动化管道队列(ops/queue/),支持任务添加、完成、丢弃、重新排序、状态查看等功能。该技能实现了人机协作的工作优先级管理,将用户手动设置的任务与系统自动生成的待处理任务整合显示,帮助用户高效管理待办事项和工作流程。关键词:任务管理、队列状态、工作流自动化、知识管理、优先级排序、待办事项、管道处理、Markdown任务栈、YAML队列、人机协作。

DevOps 0 次安装 0 次浏览 更新于 2/28/2026

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步 — 在任何处理之前)

读取这些文件以配置特定领域行为:

  1. ops/derivation-manifest.md — 词汇映射

    • 使用 vocabulary.notes 作为笔记文件夹名称
    • 使用 vocabulary.note / vocabulary.note_plural 引用笔记类型
    • 使用 vocabulary.topic_map 引用MOC(内容地图)
    • 使用 vocabulary.cmd_reflect / vocabulary.cmd_reweave / vocabulary.cmd_verify 作为阶段命令名称
  2. ops/config.yaml — 管道链模式、自动化设置

如果不存在派生文件,则使用通用术语。


立即执行

目标:$ARGUMENTS

解析操作:

  • 无参数或 status:显示任务栈 + 队列状态(组合视图)
  • add [description]:向任务栈添加任务
  • done [task-number]:将任务标记为已完成
  • drop [task-number]:移除任务(不标记完成)
  • reorder [number] [position]:将任务移动到栈中的不同位置
  • discoveries:仅显示“发现”部分

立即开始。 执行请求的操作。


理念

两个系统,一个视图。

任务栈(ops/tasks.md)和管道队列(ops/queue/queue.yamlops/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:移动到“已完成”

  1. 从“当前”部分移除该项目
  2. 添加到“已完成”部分,并附上今天的日期:
    - [x] {描述} ({YYYY-MM-DD})
    
  3. 重新编号剩余的“当前”项目(如果显示使用数字)

步骤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:重新排序

  1. 从位置 [number] 移除任务
  2. 插入到位置 [position]
  3. 重新编号剩余项目

步骤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,则最后写入者获胜。文件足够小,冲突不太可能发生,但如果检测到,则报告:“任务栈可能已被另一个会话修改。请检查。”

发现提升

当用户想要将发现转换为任务时:

  1. 显示发现
  2. 请求确认和优先级位置
  3. 添加到“当前”部分
  4. 从“发现”部分移除

这是一个手动工作流程 — 发现不会自动提升。