重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
task-management-protocol by oimiragieo/agent-studio
npx skills add https://github.com/oimiragieo/agent-studio --skill task-management-protocol使用 Claude Code 原生任务工具,在代理和会话之间进行任务同步、进度跟踪和上下文交接的标准化协议。
后台代理完成工作但主会话未收到通知。代理不会用发现结果更新任务描述。代理或会话之间缺乏结构化的上下文交接协议。
本技能解决的问题:
| 工具 | 用途 | 使用时机 |
|---|---|---|
TaskList() | 列出所有任务及其状态 | 工作开始时、完成后 |
TaskGet(id) | 获取完整任务详情 | 开始分配的任务前 |
TaskCreate(...) | 创建新任务 | 规划阶段、发现子任务时 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
TaskUpdate(...) | 更新状态/元数据 | 进度更新、发现、完成时 |
当任务属于计划文件(.claude/context/plans/*.md)的一部分时,执行代理——而非路由器——负责更新任务标记。
任务开始时:在计划文件中找到任务行,将 - [ ] 改为 - [~]。
任务完成时:将 - [~] 改为 - [x],并追加一行结果说明。
工具:在特定行使用 Edit——不要重写整个文件。
时机:在调用 TaskUpdate(completed) 之前更新计划文件。
静默处理:如果计划文件不存在,静默跳过——不要报错。
# 查找行号
grep -n "任务主题关键词" .claude/context/plans/my-plan.md
# 然后使用 Edit 在开始时将 [ ] → [~],完成时 [~] → [x]
反模式:将计划文件更新留给路由器。路由器只看到已完成的任务——计划文件必须在执行期间实时更新。
在进行任何工作之前,执行此序列:
// 步骤 1:检查现有任务
TaskList();
// 步骤 2:如果分配的任务存在,读取完整详情
TaskGet({ taskId: '<分配的任务ID>' });
// 步骤 3:认领任务
TaskUpdate({
taskId: '<分配的任务ID>',
status: 'in_progress',
activeForm: '正在处理 <任务主题>',
});
为何重要:
在以下情况更新任务:
// 当发现重要信息时
TaskUpdate({
taskId: 'X',
description: `原始描述:<原始描述>
## 发现(${new Date().toISOString().split('T')[0]})
- 发现:<你的发现>
- 文件:<相关文件>
- 影响:<为何重要>`,
metadata: {
discoveredFiles: ['路径/到/文件1.ts', '路径/到/文件2.ts'],
discoveries: ['发现模式 X', '需要依赖 Y'],
lastUpdated: new Date().toISOString(),
},
});
// 遇到阻碍时
TaskUpdate({
taskId: 'X',
description: `<现有描述>
## 受阻(${new Date().toISOString().split('T')[0]})
- 阻碍:<阻碍内容>
- 需要:<解除阻碍所需条件>
- 变通方案:<可能的变通方案(如有)>`,
metadata: {
status: 'blocked',
blocker: '阻碍描述',
blockerType: 'dependency|permission|information|external',
needsFrom: 'user|other-agent|external-system',
},
});
// 发现子任务时
TaskCreate({
subject: '子任务:<具体任务>',
description: `父任务:任务 #X
## 上下文
<此子任务存在的原因>
## 范围
<要完成的具体工作>
## 验收标准
- [ ] <标准 1>
- [ ] <标准 2>`,
activeForm: '正在处理 <子任务>',
});
// 链接到父任务
TaskUpdate({
taskId: '<新子任务ID>',
addBlockedBy: ['X'], // 此子任务阻碍父任务完成
});
没有结构化元数据,切勿标记任务完成:
TaskUpdate({
taskId: 'X',
status: 'completed',
description: `<原始描述>
## 已完成(${new Date().toISOString().split('T')[0]})
- 摘要:<一行总结完成的工作>
- 修改的文件:<列表>
- 测试:<通过/添加/无>`,
metadata: {
summary: '已完成工作的简明摘要',
filesModified: ['路径/到/文件1.ts', '路径/到/文件2.ts'],
filesCreated: ['路径/到/新文件.ts'],
testsAdded: true,
testsPassing: true,
outputArtifacts: ['.claude/context/reports/backend/我的报告.md'],
nextSteps: ['可选的后续步骤', '其他考虑事项'],
completedAt: new Date().toISOString(),
},
});
// 检查新解除阻碍的任务
TaskList();
在结束包含未完成工作的会话之前:
// 使用当前状态更新所有进行中的任务
TaskUpdate({
taskId: 'X',
description: `<现有描述>
## 会话暂停(${new Date().toISOString().split('T')[0]})
- 进度:<已完成的工作>
- 当前状态:<当前状况>
- 下一步:<立即执行的下一个操作>
- 待审阅文件:<关键文件>`,
metadata: {
sessionPaused: true,
progress: '60%',
currentState: '当前状态描述',
immediateNextStep: '接下来要做的具体事情',
keyFiles: ['文件1.ts', '文件2.ts'],
keyDecisions: ['决策 1', '决策 2'],
pausedAt: new Date().toISOString(),
},
});
在代理之间交接上下文时使用此一致结构:
interface TaskHandoffMetadata {
// 进度跟踪
status?: 'not_started' | 'in_progress' | 'blocked' | 'completed';
progress?: string; // 例如:"60%", "3/5 步骤"
// 发现上下文
discoveredFiles?: string[];
discoveries?: string[];
patterns?: string[];
// 阻碍信息
blocker?: string;
blockerType?: 'dependency' | 'permission' | 'information' | 'external';
needsFrom?: string;
// 完成上下文
summary?: string;
filesModified?: string[];
filesCreated?: string[];
outputArtifacts?: string[];
// 延续上下文
currentState?: string;
immediateNextStep?: string;
keyFiles?: string[];
keyDecisions?: string[];
// 时间戳
lastUpdated?: string;
completedAt?: string;
pausedAt?: string;
}
当开始处理其他代理曾处理的任务时:
// 获取包括元数据在内的完整任务详情
const task = TaskGet({ taskId: 'X' });
// 检查元数据获取上下文
if (task.metadata?.sessionPaused) {
// 前一会话暂停 - 读取 currentState 和 immediateNextStep
}
if (task.metadata?.discoveries) {
// 前一代理有发现 - 审阅 discoveries 数组
}
if (task.metadata?.blocker) {
// 任务曾被阻碍 - 检查阻碍是否已解决
}
使用此环境变量在会话间共享任务列表:
# 为所有会话设置共享任务列表
export CLAUDE_CODE_TASK_LIST_ID="my-project-tasks"
# 启动 claude code - 将使用共享任务列表
claude
使用时机:
// 会话 A 创建任务
TaskCreate({
subject: '实现功能 X',
description: '...',
metadata: {
owner: 'session-a',
priority: 'high',
},
});
// 会话 B(相同的 CLAUDE_CODE_TASK_LIST_ID)接手任务
TaskList(); // 看到来自会话 A 的任务
TaskUpdate({
taskId: '1',
status: 'in_progress',
metadata: {
owner: 'session-b', // 声明所有权
previousOwner: 'session-a',
},
});
// 错误 - 未来代理无上下文参考
TaskUpdate({ taskId: 'X', status: 'completed' });
// 正确 - 完整上下文得以保留
TaskUpdate({
taskId: 'X',
status: 'completed',
metadata: {
summary: '添加了带 JWT 验证的认证中间件',
filesModified: ['src/middleware/auth.ts'],
completedAt: new Date().toISOString(),
},
});
// 错误 - 发现丢失
// ... 代理发现重要模式但未记录 ...
// 正确 - 发现得以保留
TaskUpdate({
taskId: 'X',
metadata: {
discoveries: [...existingDiscoveries, '在模块 X 中发现循环依赖'],
},
});
// 错误 - 可能解除了其他任务的阻碍
TaskUpdate({ taskId: "X", status: "completed" });
// ... 会话结束 ...
// 正确 - 检查后续工作
TaskUpdate({ taskId: "X", status: "completed", metadata: {...} });
TaskList(); // 查找新解除阻碍的任务
// 错误 - 结构化数据放在叙述中
TaskUpdate({
taskId: 'X',
description: '文件:a.ts, b.ts。阻碍:认证问题。进度:50%',
});
// 正确 - 结构化元数据 + 叙述描述
TaskUpdate({
taskId: 'X',
description: '正在实现认证流程。遇到令牌刷新的阻碍。',
metadata: {
filesModified: ['a.ts', 'b.ts'],
blocker: '认证问题',
progress: '50%',
},
});
任务元数据补充但不替代记忆协议:
| 信息类型 | 任务元数据 | 记忆文件 |
|---|---|---|
| 任务特定发现 | 是 | 否 |
| 项目范围模式 | 仅引用 | 是(learnings.md) |
| 架构决策 | 仅引用 | 是(decisions.md) |
| 阻碍问题 | 是 | 是(issues.md) |
| 进度状态 | 是 | 否 |
| 完成摘要 | 是 | 是(learnings.md) |
模式:
// 带记忆引用的任务完成
TaskUpdate({
taskId: 'X',
status: 'completed',
metadata: {
summary: '实现了认证流程',
memoryUpdates: ['learnings.md: JWT 刷新模式', 'decisions.md: ADR-005 认证架构'],
},
});
// 开始
TaskList();
TaskGet({ taskId: '5' });
TaskUpdate({ taskId: '5', status: 'in_progress', activeForm: '正在实现登录流程' });
// 工作期间的发现
TaskUpdate({
taskId: '5',
metadata: {
discoveries: ['现有认证模块位于 src/auth/', '使用 JWT 而非会话'],
keyFiles: ['src/auth/jwt.ts', 'src/middleware/auth.ts'],
},
});
// 完成
TaskUpdate({
taskId: '5',
status: 'completed',
metadata: {
summary: '添加了带 JWT 认证的登录端点',
filesCreated: ['src/routes/login.ts', 'src/routes/login.test.ts'],
filesModified: ['src/routes/index.ts'],
testsAdded: true,
testsPassing: true,
completedAt: new Date().toISOString(),
},
});
TaskList(); // 检查是否有解除阻碍的任务
// 后台代理开始长任务
TaskUpdate({
taskId: '10',
status: 'in_progress',
metadata: { runningInBackground: true },
});
// 进度更新(执行期间多次)
TaskUpdate({
taskId: '10',
metadata: {
progress: '40%',
currentState: '已处理 400/1000 个文件',
discoveries: ['发现 12 个安全问题', '认证模块中有 3 个严重问题'],
},
});
// 完成 - 主会话可以检查此信息
TaskUpdate({
taskId: '10',
status: 'completed',
metadata: {
summary: '安全扫描完成:发现 12 个问题(3 个严重)',
outputArtifacts: ['.claude/context/reports/security/security-scan.md'],
criticalFindings: 3,
highFindings: 5,
mediumFindings: 4,
completedAt: new Date().toISOString(),
},
});
// 规划者创建带依赖关系的任务
TaskCreate({ subject: '设计认证系统', description: '...', activeForm: '正在设计认证' });
TaskCreate({
subject: '实现认证后端',
description: '...',
activeForm: '正在实现认证',
});
TaskCreate({ subject: '添加认证测试', description: '...', activeForm: '正在测试认证' });
TaskUpdate({ taskId: '2', addBlockedBy: ['1'] }); // 实现被设计阻碍
TaskUpdate({ taskId: '3', addBlockedBy: ['2'] }); // 测试被实现阻碍
// 架构师完成设计
TaskUpdate({
taskId: '1',
status: 'completed',
metadata: {
summary: '认证设计完成 - 带刷新令牌的 JWT',
outputArtifacts: ['.claude/context/plans/auth-design.md'],
keyDecisions: ['JWT 优于会话', 'Redis 用于令牌存储'],
},
});
// 开发者现在可以开始(任务 2 已解除阻碍)
TaskList(); // 显示任务 2 现在可用
TaskGet({ taskId: '2' }); // 从任务 1 的元数据中获取设计上下文
session-handoff - 创建完整的会话交接文档(用于复杂交接)operational-modes - 在任务执行期间自我调节工具使用thinking-tools - 用于验证任务完成质量的检查点TaskUpdate(in_progress)——绝不未经认领就开始TaskList() 检查新解除阻碍的任务的情况下完成工作metadata 字段存储机器可读字段| 反模式 | 为何失败 | 正确方法 |
|---|---|---|
| 完成时无摘要元数据 | 未来代理无延续上下文 | 始终在完成元数据中包含 summary、filesModified 和 completedAt |
| 工作前跳过 in_progress | 任务显示为无主;开始重复工作 | 始终在开始前调用 TaskUpdate(in_progress) |
| 完成后不检查 TaskList | 新解除阻碍的任务仍停滞 | 每次任务完成后始终调用 TaskList() |
| 结构化数据放在描述叙述中 | 无法被代理解析;上下文丢失 | 使用 metadata 字段存储结构化数据,description 用于叙述 |
| 缺少发现更新 | 工作期间积累的上下文在会话结束时丢失 | 在发现发生时更新元数据,而非事后追溯 |
开始前: 阅读 .claude/context/memory/learnings.md
完成后:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.md假设中断:如果不在任务元数据中,则视为未发生。
每周安装
52
仓库
GitHub 星标
19
首次出现
2026年1月27日
安全审计
安装于
github-copilot51
gemini-cli50
cursor50
codex49
kimi-cli49
opencode49
Standardized protocol for task synchronization, progress tracking, and context handoff between agents and sessions using Claude Code's native task tools.
Background agents complete work but main sessions don't receive notifications. Agents don't update task descriptions with findings. No protocol exists for structured context handoff between agents or sessions.
This skill solves:
| Tool | Purpose | When to Use |
|---|---|---|
TaskList() | List all tasks with status | Start of work, after completion |
TaskGet(id) | Get full task details | Before starting assigned task |
TaskCreate(...) | Create new task | Planning phase, discovered subtasks |
TaskUpdate(...) | Update status/metadata | Progress, discoveries, completion |
When a task is part of a plan file (.claude/context/plans/*.md), the executing agent — NOT the router — is responsible for updating task markers.
On task start : Find the task line in the plan file and change - [ ] to - [~].
On task complete : Change - [~] to - [x] and append a one-line result note.
Tool : Use Edit on the specific line — do NOT rewrite the whole file.
Timing : Update the plan file BEFORE calling TaskUpdate(completed).
Silence : If the plan file does not exist, skip silently — do not error.
# Find the line number
grep -n "task subject keywords" .claude/context/plans/my-plan.md
# Then use Edit to change [ ] → [~] on start, [~] → [x] on complete
Anti-pattern : Leaving plan file updates to the router. The router only sees completed tasks — plan files must be updated live during execution.
Before doing ANY work, execute this sequence:
// Step 1: Check existing tasks
TaskList();
// Step 2: If assigned task exists, read full details
TaskGet({ taskId: '<assigned-id>' });
// Step 3: Claim the task
TaskUpdate({
taskId: '<assigned-id>',
status: 'in_progress',
activeForm: 'Working on <task-subject>',
});
Why this matters:
Update tasks when you:
// When you discover something important
TaskUpdate({
taskId: 'X',
description: `ORIGINAL: <original-description>
## Discoveries (${new Date().toISOString().split('T')[0]})
- Found: <what you discovered>
- Files: <relevant files>
- Impact: <why this matters>`,
metadata: {
discoveredFiles: ['path/to/file1.ts', 'path/to/file2.ts'],
discoveries: ['Pattern X found', 'Dependency Y required'],
lastUpdated: new Date().toISOString(),
},
});
// When you hit a blocker
TaskUpdate({
taskId: 'X',
description: `<existing-description>
## BLOCKED (${new Date().toISOString().split('T')[0]})
- Blocker: <what's blocking>
- Needs: <what's required to unblock>
- Workaround: <possible workaround if any>`,
metadata: {
status: 'blocked',
blocker: 'Description of blocker',
blockerType: 'dependency|permission|information|external',
needsFrom: 'user|other-agent|external-system',
},
});
// When you discover subtasks
TaskCreate({
subject: 'Subtask: <specific-task>',
description: `Parent: Task #X
## Context
<why this subtask exists>
## Scope
<specific work to be done>
## Acceptance Criteria
- [ ] <criterion 1>
- [ ] <criterion 2>`,
activeForm: 'Working on <subtask>',
});
// Link to parent
TaskUpdate({
taskId: '<new-subtask-id>',
addBlockedBy: ['X'], // This subtask blocks parent completion
});
Never mark a task complete without structured metadata:
TaskUpdate({
taskId: 'X',
status: 'completed',
description: `<original-description>
## Completed (${new Date().toISOString().split('T')[0]})
- Summary: <one-line summary of what was done>
- Files modified: <list>
- Tests: <passed/added/none>`,
metadata: {
summary: 'Concise summary of completed work',
filesModified: ['path/to/file1.ts', 'path/to/file2.ts'],
filesCreated: ['path/to/new.ts'],
testsAdded: true,
testsPassing: true,
outputArtifacts: ['.claude/context/reports/backend/my-report.md'],
nextSteps: ['Optional follow-up', 'Another consideration'],
completedAt: new Date().toISOString(),
},
});
// Check for newly unblocked tasks
TaskList();
Before ending a session with incomplete work:
// Update all in-progress tasks with current state
TaskUpdate({
taskId: 'X',
description: `<existing-description>
## Session Paused (${new Date().toISOString().split('T')[0]})
- Progress: <what was accomplished>
- Current state: <where things stand>
- Next step: <immediate next action>
- Files to review: <key files>`,
metadata: {
sessionPaused: true,
progress: '60%',
currentState: 'Description of current state',
immediateNextStep: 'The very next thing to do',
keyFiles: ['file1.ts', 'file2.ts'],
keyDecisions: ['Decision 1', 'Decision 2'],
pausedAt: new Date().toISOString(),
},
});
Use this consistent structure for context handoff between agents:
interface TaskHandoffMetadata {
// Progress tracking
status?: 'not_started' | 'in_progress' | 'blocked' | 'completed';
progress?: string; // e.g., "60%", "3/5 steps"
// Discovery context
discoveredFiles?: string[];
discoveries?: string[];
patterns?: string[];
// Blocker information
blocker?: string;
blockerType?: 'dependency' | 'permission' | 'information' | 'external';
needsFrom?: string;
// Completion context
summary?: string;
filesModified?: string[];
filesCreated?: string[];
outputArtifacts?: string[];
// Continuation context
currentState?: string;
immediateNextStep?: string;
keyFiles?: string[];
keyDecisions?: string[];
// Timestamps
lastUpdated?: string;
completedAt?: string;
pausedAt?: string;
}
When starting work on a task that another agent worked on:
// Get full task details including metadata
const task = TaskGet({ taskId: 'X' });
// Check metadata for context
if (task.metadata?.sessionPaused) {
// Previous session paused - read currentState and immediateNextStep
}
if (task.metadata?.discoveries) {
// Previous agent found things - review discoveries array
}
if (task.metadata?.blocker) {
// Task was blocked - check if blocker is resolved
}
Use this environment variable to share task lists across sessions:
# Set shared task list for all sessions
export CLAUDE_CODE_TASK_LIST_ID="my-project-tasks"
# Start claude code - will use shared task list
claude
When to use:
// Session A creates task
TaskCreate({
subject: 'Implement feature X',
description: '...',
metadata: {
owner: 'session-a',
priority: 'high',
},
});
// Session B (same CLAUDE_CODE_TASK_LIST_ID) picks up task
TaskList(); // Sees task from Session A
TaskUpdate({
taskId: '1',
status: 'in_progress',
metadata: {
owner: 'session-b', // Claims ownership
previousOwner: 'session-a',
},
});
// WRONG - No context for future reference
TaskUpdate({ taskId: 'X', status: 'completed' });
// CORRECT - Full context preserved
TaskUpdate({
taskId: 'X',
status: 'completed',
metadata: {
summary: 'Added auth middleware with JWT validation',
filesModified: ['src/middleware/auth.ts'],
completedAt: new Date().toISOString(),
},
});
// WRONG - Discoveries lost
// ... agent finds important pattern but doesn't record it ...
// CORRECT - Discoveries preserved
TaskUpdate({
taskId: 'X',
metadata: {
discoveries: [...existingDiscoveries, 'Found circular dependency in module X'],
},
});
// WRONG - May have unblocked other tasks
TaskUpdate({ taskId: "X", status: "completed" });
// ... session ends ...
// CORRECT - Check for follow-up work
TaskUpdate({ taskId: "X", status: "completed", metadata: {...} });
TaskList(); // Find newly unblocked tasks
// WRONG - Structured data in prose
TaskUpdate({
taskId: 'X',
description: 'Files: a.ts, b.ts. Blocked by: auth issue. Progress: 50%',
});
// CORRECT - Structured metadata + prose description
TaskUpdate({
taskId: 'X',
description: 'Implementing auth flow. Hit a blocker with token refresh.',
metadata: {
filesModified: ['a.ts', 'b.ts'],
blocker: 'auth issue',
progress: '50%',
},
});
Task metadata complements but does not replace Memory Protocol:
| Information Type | Task Metadata | Memory Files |
|---|---|---|
| Task-specific discoveries | Yes | No |
| Project-wide patterns | Reference only | Yes (learnings.md) |
| Architecture decisions | Reference only | Yes (decisions.md) |
| Blocking issues | Yes | Yes (issues.md) |
| Progress state | Yes | No |
| Completion summary | Yes | Yes (learnings.md) |
Pattern:
// Task completion with memory reference
TaskUpdate({
taskId: 'X',
status: 'completed',
metadata: {
summary: 'Implemented auth flow',
memoryUpdates: ['learnings.md: JWT refresh pattern', 'decisions.md: ADR-005 auth architecture'],
},
});
// Start
TaskList();
TaskGet({ taskId: '5' });
TaskUpdate({ taskId: '5', status: 'in_progress', activeForm: 'Implementing login flow' });
// Discovery during work
TaskUpdate({
taskId: '5',
metadata: {
discoveries: ['Existing auth module at src/auth/', 'Uses JWT not sessions'],
keyFiles: ['src/auth/jwt.ts', 'src/middleware/auth.ts'],
},
});
// Completion
TaskUpdate({
taskId: '5',
status: 'completed',
metadata: {
summary: 'Added login endpoint with JWT auth',
filesCreated: ['src/routes/login.ts', 'src/routes/login.test.ts'],
filesModified: ['src/routes/index.ts'],
testsAdded: true,
testsPassing: true,
completedAt: new Date().toISOString(),
},
});
TaskList(); // Check for unblocked tasks
// Background agent starting long task
TaskUpdate({
taskId: '10',
status: 'in_progress',
metadata: { runningInBackground: true },
});
// Progress update (multiple during execution)
TaskUpdate({
taskId: '10',
metadata: {
progress: '40%',
currentState: 'Processed 400/1000 files',
discoveries: ['Found 12 security issues', '3 critical in auth module'],
},
});
// Completion - main session can check this
TaskUpdate({
taskId: '10',
status: 'completed',
metadata: {
summary: 'Security scan complete: 12 issues found (3 critical)',
outputArtifacts: ['.claude/context/reports/security/security-scan.md'],
criticalFindings: 3,
highFindings: 5,
mediumFindings: 4,
completedAt: new Date().toISOString(),
},
});
// Planner creates tasks with dependencies
TaskCreate({ subject: 'Design auth system', description: '...', activeForm: 'Designing auth' });
TaskCreate({
subject: 'Implement auth backend',
description: '...',
activeForm: 'Implementing auth',
});
TaskCreate({ subject: 'Add auth tests', description: '...', activeForm: 'Testing auth' });
TaskUpdate({ taskId: '2', addBlockedBy: ['1'] }); // Implementation blocked by design
TaskUpdate({ taskId: '3', addBlockedBy: ['2'] }); // Tests blocked by implementation
// Architect completes design
TaskUpdate({
taskId: '1',
status: 'completed',
metadata: {
summary: 'Auth design complete - JWT with refresh tokens',
outputArtifacts: ['.claude/context/plans/auth-design.md'],
keyDecisions: ['JWT over sessions', 'Redis for token store'],
},
});
// Developer can now start (task 2 unblocked)
TaskList(); // Shows task 2 now available
TaskGet({ taskId: '2' }); // Gets design context from task 1's metadata
session-handoff - Creates full session handoff documents (use for complex handoffs)operational-modes - Self-regulates tool usage during task executionthinking-tools - Checkpoints for verifying task completion qualityTaskUpdate(in_progress) before starting any work — never start without claimingTaskList() to check for newly unblocked tasksmetadata field for machine-readable fields| Anti-Pattern | Why It Fails | Correct Approach |
|---|---|---|
| No summary metadata on completion | Future agents have no context for continuation | Always include summary, filesModified, and completedAt in completion metadata |
| Skipping in_progress before work | Task appears unowned; duplicate work begins | Always call TaskUpdate(in_progress) before starting |
| Not checking TaskList after completion | Newly unblocked tasks remain stalled | Always call TaskList() after every task completion |
| Structured data in description prose | Cannot be parsed by agents; context lost | Use metadata field for structured data, description for narrative |
| Missing discovery updates | Context accumulated during work is lost on session end | Update metadata with discoveries as they happen, not retrospectively |
Before starting: Read .claude/context/memory/learnings.md
After completing:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.mdASSUME INTERRUPTION: If it's not in task metadata, it didn't happen.
Weekly Installs
52
Repository
GitHub Stars
19
First Seen
Jan 27, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
github-copilot51
gemini-cli50
cursor50
codex49
kimi-cli49
opencode49
超能力技能使用指南:AI助手技能调用优先级与工作流程详解
56,600 周安装
安全审计准备助手 - 代码审计前检查清单、静态分析和文档生成工具
1,600 周安装
Playwright 测试最佳实践指南 - 50+ 实战模式与 TypeScript/JavaScript 示例
1,600 周安装
App Store Connect CLI 签名设置指南:iOS/macOS 应用证书与配置文件管理
1,600 周安装
安全审查员 | 代码安全审计、漏洞扫描与渗透测试工具 | DevSecOps 自动化
1,600 周安装
数据库优化器:资深专家指导性能调优、查询优化与索引策略
1,600 周安装
Figma MCP 集成指南:使用 OpenAI Skills 实现 Figma 到代码的自动化转换
1,600 周安装