Process: Task Lifecycle

Жизненный цикл задачи от создания до завершения.

Trigger

  • Человек отправляет сообщение в @maxnovaocbot
  • Агент создаёт child task
  • Cron-задача по расписанию

Статусы

                    ┌──────────┐
                    │ pending  │
                    └────┬─────┘
                         │ pickup (SKIP LOCKED)
                         ▼
                    ┌──────────┐
              ┌─────│ running  │◀──────┐
              │     └────┬─────┘       │
              │          │             │ revise (≤3)
              │          ▼             │
              │     ┌──────────┐       │
              │     │ judging  │───────┘
              │     └────┬─────┘
              │          │
              │     ┌────┴────┐
              │     ▼         ▼
              │  ┌──────┐  ┌────────┐
              │  │ done │  │ failed │
              │  └──────┘  └───┬────┘
              │                │
              ▼                ▼
         ┌──────────┐   ┌───────────┐
         │ timeout  │   │ escalated │
         └──────────┘   └───────────┘
              │
              ▼
         ┌──────────┐
         │  failed  │
         └──────────┘

Дополнительные статусы:

  • blocked — ожидание завершения children (fan-out/fan-in)
  • killed — остановлен по budget или human request

Шаги подробно

1. Creation

Запись в таблицу tasks.

Обязательные поля:

  • to_agent — кому назначена
  • type — тип задачи (определяет routing)
  • payload — данные задачи (JSONB)
  • hypothesis_id — ссылка на гипотезу (если не operational)

Автоматически:

  • id — UUID
  • status = pending
  • created_at = now()
  • root_id = id для корневых задач, наследуется от parent для child
  • Бюджеты наследуются от parent если не указаны явно

2. Pickup

Worker атомарно берёт задачу:

UPDATE tasks SET status = 'running', started_at = now()
WHERE id = (
    SELECT id FROM tasks
    WHERE status = 'pending' AND to_agent = ANY(%s)
    ORDER BY priority, created_at
    FOR UPDATE SKIP LOCKED LIMIT 1
) RETURNING *;

Если задач нет — sleep(1), retry.

3. Pre-execution Policy Check

Policy-Layer проверяет до выполнения:

  • Budget не превышен (tokens, USD, time)
  • Agent имеет право на этот тип задачи
  • Input schema валиден
  • Нет нарушений Codex

При нарушении: status = 'failed', escalation record.

4. Execution

  1. Загрузка role config из roles/*.yaml (prompt, tools, budget)
  2. Context assembly: manifest RAG + agent memory + task payload
  3. LLM вызов с системным промптом
  4. Tool calls — каждый проходит через Policy Engine
  5. Финальный result

5. Post-execution Policy Check

  • Output соответствует schema
  • Нет PII/secrets leak
  • Confidence score указан

6. Judging

status = 'judging'. Agent-Judge получает (task, result).

VerdictДействие
accept→ done
revise→ running (с feedback)
reject→ failed + escalation

7. Finalization

Accept → done:

  • Artifacts сохраняются
  • Parent уведомляется (если есть)
  • Метрики записываются в runs

Revise → running:

  • revise_counter++
  • Если revise_counter ≤ 3 → обратно в running с feedback от Judge
  • Если revise_counter > 3 → failed + escalation

Reject → failed:

  • Escalation record создаётся
  • Parent уведомляется

8. Parent Notification (fan-in)

Если у задачи есть parent_id:

-- Проверка: все ли children завершены?
SELECT parent_id FROM tasks
WHERE parent_id = %s
GROUP BY parent_id
HAVING COUNT(*) = COUNT(*) FILTER (WHERE status IN ('done', 'failed'));

Если все children done → parent blocked → running (Director агрегирует).

9. User Reply (для root tasks)

Если задача корневая (parent_id IS NULL):

  • Agent-CEO агрегирует результат
  • Ответ через OpenClaw → Telegram

Участники

ЭтапУчастник
CreationUser или Agent
PickupWorker (queue loop)
PolicyPolicyEngine (code)
ExecutionTarget Agent
JudgingAgent-Judge
EscalationAgent-CEO или Human
ReplyAgent-CEO → OpenClaw

Failure Modes

ПроблемаРеакция
LLM timeoutRetry 2x с backoff → failed
Tool errorRetry с exponential backoff → failed
Budget exceededHard stop → escalation
Policy violationHard stop → escalation → security log
Invalid output→ revise (Judge feedback)
Child task failedParent → blocked → escalation
Agent unavailableTask stays pending, watchdog alert

Sequence Diagram

User    OpenClaw    CEO    IntelDir    Scout    Researcher    Judge    Librarian
  │         │        │        │          │          │           │         │
  │──msg──▶│        │        │          │          │           │         │
  │         │──task─▶│        │          │          │           │         │
  │         │        │──task─▶│          │          │           │         │
  │         │        │        │──task───▶│          │           │         │
  │         │        │        │          │──done──▶ │           │         │
  │         │        │        │          │         ┌┤  judge    │         │
  │         │        │        │          │◀accept──┘│           │         │
  │         │        │        │──task────┼─────────▶│           │         │
  │         │        │        │          │          │──done───▶ │         │
  │         │        │        │          │          │◀─accept──┤│         │
  │         │        │        │◀─────────┼──done────│           │         │
  │         │        │        │──aggregate─────────▶│           │         │
  │         │        │◀─done──│          │          │           │         │
  │         │        │──aggregate───────▶│          │           │         │
  │         │◀─reply─│        │          │          │           │──index─▶│
  │◀─reply──│        │        │          │          │           │         │

Связанные документы