overseer

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Agent Coordination with Overseer

基于Overseer的Agent协作

Core Principle: Tickets, Not Todos

核心原则:使用工单而非待办事项

Overseer tasks are tickets - structured artifacts with comprehensive context:
  • Description: One-line summary (issue title)
  • Context: Full background, requirements, approach (issue body)
  • Result: Implementation details, decisions, outcomes (PR description)
Think: "Would someone understand the what, why, and how from this task alone AND what success looks like?"
Overseer任务是工单——具备完整上下文的结构化工件:
  • 描述:单行摘要(对应议题标题)
  • 上下文:完整背景、需求、实现方案(对应议题正文)
  • 成果:实现细节、决策内容、最终结果(对应PR描述)
思考:仅通过该任务,他人能否理解工作内容、原因、实现方式以及成功的标准?

Task IDs are Ephemeral

任务ID是临时的

Never reference task IDs in external artifacts (commits, PRs, docs). Task IDs like
task_01JQAZ...
become meaningless once tasks complete. Describe the work itself, not the task that tracked it.
切勿在外部工件(提交记录、PR、文档)中引用任务ID。类似
task_01JQAZ...
的任务ID在任务完成后就失去意义。请描述工作本身,而非跟踪该工作的任务。

Overseer vs OpenCode's TodoWrite

Overseer 与 OpenCode的TodoWrite对比

OverseerTodoWrite
PersistenceSQLite databaseSession-only
ContextRich (description + context + result)Basic
Hierarchy3-level (milestone -> task -> subtask)Flat
Use Overseer for persistent work. Use TodoWrite for ephemeral in-session tracking only.
特性OverseerTodoWrite
持久性基于SQLite数据库仅会话内有效
上下文丰富(描述+上下文+成果)基础版
层级结构三级(里程碑 -> 任务 -> 子任务)扁平化
Overseer适用于需要持久化的工作。TodoWrite仅适用于会话内的临时跟踪。

When to Use Overseer

何时使用Overseer

Use Overseer when:
  • Breaking down complexity into subtasks
  • Work spans multiple sessions
  • Context needs to persist for handoffs
  • Recording decisions for future reference
Skip Overseer when:
  • Work is a single atomic action
  • Everything fits in one message exchange
  • Overhead exceeds value
  • TodoWrite is sufficient
在以下场景使用Overseer:
  • 将复杂工作拆分为子任务
  • 工作跨多个会话进行
  • 需要保留上下文以进行工作交接
  • 记录决策以供未来参考
以下场景无需使用Overseer:
  • 工作为单一原子操作
  • 所有内容可在一次消息交互中完成
  • 操作成本超过其价值
  • 使用TodoWrite已足够

Finding Work

查找工作任务

javascript
// Get next ready task with full context (recommended for work sessions)
const task = await tasks.nextReady(milestoneId); // TaskWithContext | null
if (!task) {
  console.log("No ready tasks");
  return;
}

// Get all ready tasks (for progress overview)
const readyTasks = await tasks.list({ ready: true }); // Task[]
Use
nextReady()
when starting work - returns
TaskWithContext | null
(deepest ready leaf with full context chain + inherited learnings). Use
list({ ready: true })
for status/progress checks - returns
Task[]
without context chain.
javascript
// Get next ready task with full context (recommended for work sessions)
const task = await tasks.nextReady(milestoneId); // TaskWithContext | null
if (!task) {
  console.log("No ready tasks");
  return;
}

// Get all ready tasks (for progress overview)
const readyTasks = await tasks.list({ ready: true }); // Task[]
开始工作时使用
nextReady()
- 返回
TaskWithContext | null
(具备完整上下文链和继承经验的最深层就绪子任务)。 检查状态/进度时使用
list({ ready: true })
- 返回无上下文链的
Task[]

Basic Workflow

基础工作流

javascript
// 1. Get next ready task (returns TaskWithContext | null)
const task = await tasks.nextReady();
if (!task) return "No ready tasks";

// 2. Review context (available on TaskWithContext)
console.log(task.context.own);       // This task's context
console.log(task.context.parent);    // Parent's context (if depth > 0)
console.log(task.context.milestone); // Root milestone context (if depth > 1)
console.log(task.learnings.own);     // Learnings attached to this task (bubbled from children)

// 3. Start work (VCS required - creates bookmark, records start commit)
await tasks.start(task.id);

// 4. Implement...

// 5. Complete with learnings (VCS required - commits changes, bubbles learnings to parent)
await tasks.complete(task.id, {
  result: "Implemented login endpoint with JWT tokens",
  learnings: ["bcrypt rounds should be 12 for production"]
});

// Alternative: Cancel if abandoning (does NOT satisfy blockers)
await tasks.cancel(task.id);

// 6. Archive finished tasks to hide from default list
await tasks.archive(task.id);
See @file references/workflow.md for detailed workflow guidance.
javascript
// 1. Get next ready task (returns TaskWithContext | null)
const task = await tasks.nextReady();
if (!task) return "No ready tasks";

// 2. Review context (available on TaskWithContext)
console.log(task.context.own);       // This task's context
console.log(task.context.parent);    // Parent's context (if depth > 0)
console.log(task.context.milestone); // Root milestone context (if depth > 1)
console.log(task.learnings.own);     // Learnings attached to this task (bubbled from children)

// 3. Start work (VCS required - creates bookmark, records start commit)
await tasks.start(task.id);

// 4. Implement...

// 5. Complete with learnings (VCS required - commits changes, bubbles learnings to parent)
await tasks.complete(task.id, {
  result: "Implemented login endpoint with JWT tokens",
  learnings: ["bcrypt rounds should be 12 for production"]
});

// Alternative: Cancel if abandoning (does NOT satisfy blockers)
await tasks.cancel(task.id);

// 6. Archive finished tasks to hide from default list
await tasks.archive(task.id);
请查看@file references/workflow.md获取详细工作流指导。

Understanding Task Context

理解任务上下文

Tasks have progressive context - inherited from ancestors:
javascript
const task = await tasks.get(taskId); // Returns TaskWithContext
// task.context.own      - this task's context (always present)
// task.context.parent   - parent task's context (if depth > 0)
// task.context.milestone - root milestone's context (if depth > 1)

// Task's own learnings (bubbled from completed children)
// task.learnings.own - learnings attached to this task
任务具备渐进式上下文——从父级继承:
javascript
const task = await tasks.get(taskId); // Returns TaskWithContext
// task.context.own      - this task's context (always present)
// task.context.parent   - parent task's context (if depth > 0)
// task.context.milestone - root milestone's context (if depth > 1)

// Task's own learnings (bubbled from completed children)
// task.learnings.own - learnings attached to this task

Return Type Summary

返回类型汇总

MethodReturnsNotes
tasks.get(id)
TaskWithContext
Full context chain + inherited learnings
tasks.nextReady()
TaskWithContext | null
Deepest ready leaf with full context
tasks.list()
Task[]
Basic task fields only
tasks.create()
Task
No context chain
tasks.start/complete()
Task
No context chain
方法返回值说明
tasks.get(id)
TaskWithContext
完整上下文链 + 继承的经验
tasks.nextReady()
TaskWithContext | null
具备完整上下文的最深层就绪子任务
tasks.list()
Task[]
仅包含基础任务字段
tasks.create()
Task
无上下文链
tasks.start/complete()
Task
无上下文链

Blockers

依赖阻塞

Blockers prevent a task from being ready until the blocker completes.
Constraints:
  • Blockers cannot be self
  • Blockers cannot be ancestors (parent, grandparent, etc.)
  • Blockers cannot be descendants
  • Creating/reparenting with invalid blockers is rejected
javascript
// Add blocker - taskA waits for taskB
await tasks.block(taskA.id, taskB.id);

// Remove blocker
await tasks.unblock(taskA.id, taskB.id);
依赖阻塞会阻止任务就绪,直到阻塞任务完成。
约束条件:
  • 不能将自身设为阻塞项
  • 不能将父级(父任务、祖父任务等)设为阻塞项
  • 不能将子级设为阻塞项
  • 创建/重父级时若包含无效阻塞项会被拒绝
javascript
// Add blocker - taskA waits for taskB
await tasks.block(taskA.id, taskB.id);

// Remove blocker
await tasks.unblock(taskA.id, taskB.id);

Task Hierarchies

任务层级结构

Three levels: Milestone (depth 0) -> Task (depth 1) -> Subtask (depth 2).
LevelNamePurposeExample
0MilestoneLarge initiative"Add user authentication system"
1TaskSignificant work item"Implement JWT middleware"
2SubtaskAtomic step"Add token verification function"
Choosing the right level:
  • Small feature (1-2 files) -> Single task
  • Medium feature (3-7 steps) -> Task with subtasks
  • Large initiative (5+ tasks) -> Milestone with tasks
See @file references/hierarchies.md for detailed guidance.
分为三级:里程碑(层级0)-> 任务(层级1)-> 子任务(层级2)。
层级名称用途示例
0里程碑大型倡议"添加用户认证系统"
1任务重要工作项"实现JWT中间件"
2子任务原子步骤"添加令牌验证函数"
选择合适的层级:
  • 小型功能(1-2个文件)-> 单一任务
  • 中型功能(3-7个步骤)-> 带子任务的任务
  • 大型倡议(5个以上任务)-> 带任务的里程碑
请查看@file references/hierarchies.md获取详细指导。

Recording Results

记录成果

Complete tasks immediately after implementing AND verifying:
  • Capture decisions while fresh
  • Note deviations from plan
  • Document verification performed
  • Create follow-up tasks for tech debt
Your result must include explicit verification evidence. See @file references/verification.md.
完成任务需在实现并验证后立即进行
  • 趁记忆清晰时记录决策
  • 记录与计划的偏差
  • 记录已执行的验证操作
  • 为技术债务创建后续任务
你的成果必须包含明确的验证证据。请查看@file references/verification.md。

Best Practices

最佳实践

  1. Right-size tasks: Completable in one focused session
  2. Clear completion criteria: Context should define "done"
  3. Don't over-decompose: 3-7 children per parent
  4. Action-oriented descriptions: Start with verbs ("Add", "Fix", "Update")
  5. Verify before completing: Tests passing, manual testing done

  1. 合理规划任务规模:可在一个专注会话内完成
  2. 明确完成标准:上下文应定义“完成”的状态
  3. 避免过度拆分:每个父任务下3-7个子任务为宜
  4. 采用动作导向的描述:以动词开头(如“添加”、“修复”、“更新”)
  5. 完成前先验证:确保测试通过、已完成手动测试

Reading Order

阅读顺序

TaskFile
Understanding API@file references/api.md
Implementation workflow@file references/workflow.md
Task decomposition@file references/hierarchies.md
Good/bad examples@file references/examples.md
Verification checklist@file references/verification.md
任务文件路径
理解API@file references/api.md
实现工作流@file references/workflow.md
任务拆分@file references/hierarchies.md
正反示例@file references/examples.md
验证检查清单@file references/verification.md

In This Reference

参考文档说明

FilePurpose
references/api.md
Overseer MCP codemode API types/methods
references/workflow.md
Start->implement->complete workflow
references/hierarchies.md
Milestone/task/subtask organization
references/examples.md
Good/bad context and result examples
references/verification.md
Verification checklist and process
文件路径用途
references/api.md
Overseer MCP代码模式API类型与方法
references/workflow.md
从启动到实现再到完成的工作流
references/hierarchies.md
里程碑/任务/子任务的组织方式
references/examples.md
上下文与成果的正反示例
references/verification.md
验证检查清单与流程