<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://www.anwsome.com//index.php?action=history&amp;feed=atom&amp;title=%E4%BB%BB%E5%8A%A1%E7%B3%BB%E7%BB%9F%E4%B8%8E%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%EF%BC%9A%E8%AE%A9%E7%9B%AE%E6%A0%87%E8%B6%85%E8%B6%8A%E5%AF%B9%E8%AF%9D%28%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent%EF%BC%89</id>
	<title>任务系统与依赖管理：让目标超越对话(构建自己的AI Agent） - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://www.anwsome.com//index.php?action=history&amp;feed=atom&amp;title=%E4%BB%BB%E5%8A%A1%E7%B3%BB%E7%BB%9F%E4%B8%8E%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%EF%BC%9A%E8%AE%A9%E7%9B%AE%E6%A0%87%E8%B6%85%E8%B6%8A%E5%AF%B9%E8%AF%9D%28%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent%EF%BC%89"/>
	<link rel="alternate" type="text/html" href="http://www.anwsome.com//index.php?title=%E4%BB%BB%E5%8A%A1%E7%B3%BB%E7%BB%9F%E4%B8%8E%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%EF%BC%9A%E8%AE%A9%E7%9B%AE%E6%A0%87%E8%B6%85%E8%B6%8A%E5%AF%B9%E8%AF%9D(%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent%EF%BC%89&amp;action=history"/>
	<updated>2026-04-15T00:35:28Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://www.anwsome.com//index.php?title=%E4%BB%BB%E5%8A%A1%E7%B3%BB%E7%BB%9F%E4%B8%8E%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%EF%BC%9A%E8%AE%A9%E7%9B%AE%E6%A0%87%E8%B6%85%E8%B6%8A%E5%AF%B9%E8%AF%9D(%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent%EF%BC%89&amp;diff=117&amp;oldid=prev</id>
		<title>Admin：​创建页面，内容为“&lt;blockquote&gt;&quot;大目标要拆成小任务，排好序，记在磁盘上&quot; —— 文件持久化的任务图，为多 Agent 协作打基础。&lt;/blockquote&gt;前面的 TodoManager 是内存中的扁平清单：没有顺序、没有依赖、状态只有做完没做完。  真实的目标是有结构的——任务 B 依赖任务 A，任务 C 和 D 可以并行，任务 E 要等 C 和 D 都完成。  没有显式的关系，Agent 分不清什么能做、什么被卡…”</title>
		<link rel="alternate" type="text/html" href="http://www.anwsome.com//index.php?title=%E4%BB%BB%E5%8A%A1%E7%B3%BB%E7%BB%9F%E4%B8%8E%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%EF%BC%9A%E8%AE%A9%E7%9B%AE%E6%A0%87%E8%B6%85%E8%B6%8A%E5%AF%B9%E8%AF%9D(%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent%EF%BC%89&amp;diff=117&amp;oldid=prev"/>
		<updated>2026-03-23T05:02:35Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;blockquote&amp;gt;&amp;quot;大目标要拆成小任务，排好序，记在磁盘上&amp;quot; —— 文件持久化的任务图，为多 Agent 协作打基础。&amp;lt;/blockquote&amp;gt;前面的 TodoManager 是内存中的扁平清单：没有顺序、没有依赖、状态只有做完没做完。  真实的目标是有结构的——任务 B 依赖任务 A，任务 C 和 D 可以并行，任务 E 要等 C 和 D 都完成。  没有显式的关系，Agent 分不清什么能做、什么被卡…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&amp;quot;大目标要拆成小任务，排好序，记在磁盘上&amp;quot; —— 文件持久化的任务图，为多 Agent 协作打基础。&amp;lt;/blockquote&amp;gt;前面的 TodoManager 是内存中的扁平清单：没有顺序、没有依赖、状态只有做完没做完。&lt;br /&gt;
&lt;br /&gt;
真实的目标是有结构的——任务 B 依赖任务 A，任务 C 和 D 可以并行，任务 E 要等 C 和 D 都完成。&lt;br /&gt;
&lt;br /&gt;
没有显式的关系，Agent 分不清什么能做、什么被卡住、什么能同时跑。&lt;br /&gt;
&lt;br /&gt;
== 一、从清单到图 ==&lt;br /&gt;
我们需要把扁平清单升级为&amp;#039;&amp;#039;&amp;#039;持久化到磁盘的任务图&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
 &amp;lt;code&amp;gt;.tasks/&lt;br /&gt;
   task_1.json  {&amp;quot;id&amp;quot;:1, &amp;quot;status&amp;quot;:&amp;quot;completed&amp;quot;}&lt;br /&gt;
   task_2.json  {&amp;quot;id&amp;quot;:2, &amp;quot;blockedBy&amp;quot;:[1], &amp;quot;status&amp;quot;:&amp;quot;pending&amp;quot;}&lt;br /&gt;
   task_3.json  {&amp;quot;id&amp;quot;:3, &amp;quot;blockedBy&amp;quot;:[1], &amp;quot;status&amp;quot;:&amp;quot;pending&amp;quot;}&lt;br /&gt;
   task_4.json  {&amp;quot;id&amp;quot;:4, &amp;quot;blockedBy&amp;quot;:[2,3], &amp;quot;status&amp;quot;:&amp;quot;pending&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 任务图 (DAG):&lt;br /&gt;
                  +----------+&lt;br /&gt;
             +--&amp;gt; | task 2   | --+&lt;br /&gt;
             |    | pending  |   |&lt;br /&gt;
 +----------+     +----------+    +--&amp;gt; +----------+&lt;br /&gt;
 | task 1   |                          | task 4   |&lt;br /&gt;
 | completed| --&amp;gt; +----------+    +--&amp;gt; | blocked  |&lt;br /&gt;
 +----------+     | task 3   | --+     +----------+&lt;br /&gt;
                  | pending  |&lt;br /&gt;
                  +----------+&lt;br /&gt;
 &lt;br /&gt;
 顺序:   task 1 必须先完成, 才能开始 2 和 3&lt;br /&gt;
 并行:   task 2 和 3 可以同时执行&lt;br /&gt;
 依赖:   task 4 要等 2 和 3 都完成&lt;br /&gt;
 状态:   pending -&amp;gt; in_progress -&amp;gt; completed&amp;lt;/code&amp;gt;&lt;br /&gt;
这个任务图是后续所有机制的协调骨架：后台执行、多 Agent 团队、工作区隔离都读写这同一个结构。&lt;br /&gt;
&lt;br /&gt;
== 二、核心能力 ==&lt;br /&gt;
任务图随时回答三个问题：&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;什么可以做？&amp;#039;&amp;#039;&amp;#039; —— 状态为 &amp;lt;code&amp;gt;pending&amp;lt;/code&amp;gt; 且 &amp;lt;code&amp;gt;blockedBy&amp;lt;/code&amp;gt; 为空的任务&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;什么被卡住？&amp;#039;&amp;#039;&amp;#039; —— 等待前置任务完成的任务&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;什么做完了？&amp;#039;&amp;#039;&amp;#039; —— 状态为 &amp;lt;code&amp;gt;completed&amp;lt;/code&amp;gt; 的任务，完成时自动解锁后续任务&lt;br /&gt;
&lt;br /&gt;
== 三、核心机制 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. TaskManager ===&lt;br /&gt;
每个任务一个 JSON 文件，支持 CRUD + 依赖图：&lt;br /&gt;
 &amp;lt;code&amp;gt;class TaskManager:&lt;br /&gt;
     def __init__(self, tasks_dir: Path):&lt;br /&gt;
         self.dir = tasks_dir&lt;br /&gt;
         self.dir.mkdir(exist_ok=True)&lt;br /&gt;
         self._next_id = self._max_id() + 1&lt;br /&gt;
 &lt;br /&gt;
     def create(self, subject, description=&amp;quot;&amp;quot;):&lt;br /&gt;
         task = {&lt;br /&gt;
             &amp;quot;id&amp;quot;: self._next_id,&lt;br /&gt;
             &amp;quot;subject&amp;quot;: subject,&lt;br /&gt;
             &amp;quot;status&amp;quot;: &amp;quot;pending&amp;quot;,&lt;br /&gt;
             &amp;quot;blockedBy&amp;quot;: [],&lt;br /&gt;
             &amp;quot;blocks&amp;quot;: [],&lt;br /&gt;
             &amp;quot;owner&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         self._save(task)&lt;br /&gt;
         self._next_id += 1&lt;br /&gt;
         return json.dumps(task, indent=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. 依赖解除 ===&lt;br /&gt;
完成任务时，自动将其 ID 从其他任务的 &amp;lt;code&amp;gt;blockedBy&amp;lt;/code&amp;gt; 中移除：&lt;br /&gt;
 &amp;lt;code&amp;gt;def _clear_dependency(self, completed_id):&lt;br /&gt;
     for f in self.dir.glob(&amp;quot;task_*.json&amp;quot;):&lt;br /&gt;
         task = json.loads(f.read_text())&lt;br /&gt;
         if completed_id in task.get(&amp;quot;blockedBy&amp;quot;, []):&lt;br /&gt;
             task[&amp;quot;blockedBy&amp;quot;].remove(completed_id)&lt;br /&gt;
             self._save(task)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. 状态变更 + 依赖关联 ===&lt;br /&gt;
&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; 处理状态转换和依赖边：&lt;br /&gt;
 &amp;lt;code&amp;gt;def update(self, task_id, status=None,&lt;br /&gt;
            add_blocked_by=None, add_blocks=None):&lt;br /&gt;
     task = self._load(task_id)&lt;br /&gt;
     if status:&lt;br /&gt;
         task[&amp;quot;status&amp;quot;] = status&lt;br /&gt;
         if status == &amp;quot;completed&amp;quot;:&lt;br /&gt;
             self._clear_dependency(task_id)&lt;br /&gt;
     self._save(task)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. 工具集成 ===&lt;br /&gt;
四个任务工具加入调度映射：&lt;br /&gt;
 &amp;lt;code&amp;gt;TOOL_HANDLERS = {&lt;br /&gt;
     &amp;#039;&amp;#039;# ...基础工具...&amp;#039;&amp;#039;&lt;br /&gt;
     &amp;quot;task_create&amp;quot;: lambda **kw: TASKS.create(kw[&amp;quot;subject&amp;quot;]),&lt;br /&gt;
     &amp;quot;task_update&amp;quot;: lambda **kw: TASKS.update(&lt;br /&gt;
         kw[&amp;quot;task_id&amp;quot;], kw.get(&amp;quot;status&amp;quot;)&lt;br /&gt;
     ),&lt;br /&gt;
     &amp;quot;task_list&amp;quot;:   lambda **kw: TASKS.list_all(),&lt;br /&gt;
     &amp;quot;task_get&amp;quot;:    lambda **kw: TASKS.get(kw[&amp;quot;task_id&amp;quot;]),&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 四、实际工作流程 ==&lt;br /&gt;
 &amp;lt;code&amp;gt;1. 创建任务&lt;br /&gt;
    task_create: &amp;quot;Setup project&amp;quot;&lt;br /&gt;
    task_create: &amp;quot;Write code&amp;quot;&lt;br /&gt;
    task_create: &amp;quot;Write tests&amp;quot;&lt;br /&gt;
    task_create: &amp;quot;Deploy&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 2. 设置依赖&lt;br /&gt;
    task_update: task 2, add_blocked_by=[1]&lt;br /&gt;
    task_update: task 3, add_blocked_by=[1]&lt;br /&gt;
    task_update: task 4, add_blocked_by=[2,3]&lt;br /&gt;
 &lt;br /&gt;
 3. 查看可执行任务&lt;br /&gt;
    task_list -&amp;gt; [task 1] (pending, no blockedBy)&lt;br /&gt;
 &lt;br /&gt;
 4. 开始执行&lt;br /&gt;
    task_update: task 1, status=&amp;quot;in_progress&amp;quot;&lt;br /&gt;
    # ... work ...&lt;br /&gt;
    task_update: task 1, status=&amp;quot;completed&amp;quot;&lt;br /&gt;
    # 自动解锁 task 2 和 3&lt;br /&gt;
 &lt;br /&gt;
 5. 并行执行&lt;br /&gt;
    task_update: task 2, status=&amp;quot;in_progress&amp;quot;&lt;br /&gt;
    task_update: task 3, status=&amp;quot;in_progress&amp;quot;&lt;br /&gt;
    # ... work ...&lt;br /&gt;
    task_update: task 2, status=&amp;quot;completed&amp;quot;&lt;br /&gt;
    task_update: task 3, status=&amp;quot;completed&amp;quot;&lt;br /&gt;
    # 自动解锁 task 4&lt;br /&gt;
 &lt;br /&gt;
 6. 完成&lt;br /&gt;
    task_update: task 4, status=&amp;quot;completed&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 五、试一试 ==&lt;br /&gt;
 &amp;lt;code&amp;gt;cd learn-claude-code&lt;br /&gt;
 python agents/s07_task_system.py&amp;lt;/code&amp;gt;&lt;br /&gt;
试试这些 prompt：&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Create 3 tasks: &amp;quot;Setup project&amp;quot;, &amp;quot;Write code&amp;quot;, &amp;quot;Write tests&amp;quot;. Make them depend on each other in order.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;List all tasks and show the dependency graph&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Complete task 1 and then list tasks to see task 2 unblocked&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a task board for refactoring: parse -&amp;gt; transform -&amp;gt; emit -&amp;gt; test, where transform and emit can run in parallel after parse&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 六、与 TodoManager 的区别 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!特性&lt;br /&gt;
!TodoManager (s03)&lt;br /&gt;
!TaskManager (s07)&lt;br /&gt;
|-&lt;br /&gt;
|存储&lt;br /&gt;
|内存&lt;br /&gt;
|磁盘 (JSON 文件)&lt;br /&gt;
|-&lt;br /&gt;
|结构&lt;br /&gt;
|扁平清单&lt;br /&gt;
|依赖图 (DAG)&lt;br /&gt;
|-&lt;br /&gt;
|依赖&lt;br /&gt;
|无&lt;br /&gt;
|&amp;lt;code&amp;gt;blockedBy&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;blocks&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|并行&lt;br /&gt;
|不支持&lt;br /&gt;
|支持&lt;br /&gt;
|-&lt;br /&gt;
|持久化&lt;br /&gt;
|重启丢失&lt;br /&gt;
|跨会话保存&lt;br /&gt;
|-&lt;br /&gt;
|适用场景&lt;br /&gt;
|单次会话快速清单&lt;br /&gt;
|复杂多步目标&lt;br /&gt;
|}&lt;br /&gt;
从 s07 起，任务图是多步工作的默认选择。s03 的 Todo 仍可用于单次会话内的快速清单。&lt;br /&gt;
&lt;br /&gt;
== 七、设计哲学 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;持久化任务比任何一次对话都长命。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
这是 Harness 工程的核心原则：&lt;br /&gt;
&lt;br /&gt;
* 对话会结束，但目标可能延续&lt;br /&gt;
* 上下文可能被压缩，但任务状态始终完整&lt;br /&gt;
* 多个 Agent 可以协作同一个任务图&lt;br /&gt;
* 重启后可以从断点继续&lt;br /&gt;
&lt;br /&gt;
== 八、进阶应用 ==&lt;br /&gt;
任务系统是以下高级功能的基础：&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;后台执行 (s08)&amp;#039;&amp;#039;&amp;#039;：任务在后台运行，Agent 继续思考&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Agent 团队 (s09+)&amp;#039;&amp;#039;&amp;#039;：多个 Agent 协作处理任务图&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;自治 Agent (s11)&amp;#039;&amp;#039;&amp;#039;：Agent 自己扫描看板、认领任务&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;工作区隔离 (s12)&amp;#039;&amp;#039;&amp;#039;：每个任务在自己的目录执行&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;没有任务系统，就没有真正的多 Agent 协作。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&amp;#039;&amp;#039;Bash 就够了。真正的 Agent 是宇宙所需要的全部。&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;延伸阅读&amp;#039;&amp;#039;&amp;#039;：learn-claude-code 开源项目，12 个渐进式教程，完整教授 Harness 工程。&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>