# 🎯 Taskr 实际上是如何运行的？

## 3.3 任务 (Tasks) - 核心积木

### 了解任务层级

任务的组织方式就像是论文的大纲：

```
1.0 构建用户身份验证 (父任务 / parent task)
  1.1 设置数据库表 (子任务 / subtask)
    1.1.1 创建 users 表 (次级子任务 / sub-subtask)
    1.1.2 加入密码哈希 (password hashing) 功能
  1.2 创建登录页面
    1.2.1 设计登录表单
    1.2.2 加入表单验证
  1.3 实现注销功能
```

**最聪明的地方在于：** 当 1.1.1 和 1.1.2 都完成时，1.1 会自动标记为完成。当 1.1、1.2 和 1.3 都完成时，1.0 也会自动完成！

### 任务类型说明

每个任务都有一个类型 (Type)，用来告诉你的 AI 这是哪种性质的工作：

  - **setup (设置)** 🔧 - 准备工作（安装依赖包、创建文件夹）
  - **analysis (分析)** 🔍 - 厘清问题（研究 API、规划实现方法）
  - **implementation (实现)** 💻 - 实际动手开发（写代码、创建功能）
  - **validation (验证)** ✓ - 确保它能运行（检查逻辑、Code Review）
  - **testing (测试)** 🧪 - 证明它能运行（编写测试、运行测试用例）

### 任务状态流转

任务会像传送带一样经历不同的状态：

1.  **open (待处理)** ⭕ - 等待被开始
2.  **wip (进行中)** 🔄 - 目前正在处理中 (work in progress)
3.  **done (已完成)** ✅ - 已成功完成
4.  **skipped (已跳过)** ⏭️ - 刻意跳过（不需要执行）

### 单一任务法则 (The One-Task Rule)

这里有一件非常重要的事：**你的 AI 一次只能处理一个任务**。

为什么？因为多任务处理 (multitasking) 会导致混乱！当你的 AI 将一个任务标记为 "wip" 时，它会通过 `wip_agent_id` 字段取得该任务的独占所有权。没有其他 Agent 可以碰这个任务，而且这个 Agent 在完成这个任务之前，不能开始另一个任务。

这个规则是在数据库层级通过 PostgreSQL 触发器 (triggers) 以及 MCP 处理代码来强制执行的！

### 创建新任务

你的 AI 使用 `create_task` 工具来创建任务：

```
你的 AI：“我需要把这个工作拆解成更小的部分”
创建动作：在目前的任务下创建子任务，或是创建一个全新的任务列表
速度：即时
控制权：你的 AI 会根据你的需求自行决定架构
```

**提示：** 对于较大型的项目，请先将你的需求粘贴到 AI 的聊天窗口中 —— 它将会创建一个更详尽、结构更完整的任务层级。

### `get_task` 的魔法

当你的 AI 调用 `get_task` 时，幕后会发生这些事：

1.  **检查现有的 WIP** - “我已经有正在处理的工作了吗？”
2.  **寻找下一个符合逻辑的任务** - “按照顺序，下一个‘待处理 (open)’的任务是什么？”
3.  **将其标记为 WIP** - “这个任务现在归我管了！”
4.  **返回完整上下文** - 任务细节 + 笔记 + 指引规则
5.  **防止冲突** - 没有其他 Agent 可以认领这个任务

数据库中的 `get_task_for_agent` 函数会以原子操作 (atomically) 的方式处理这一切！

-----
