Skip to content

Lesson 12 — Task vs Run vs Turn vs process ​

Outcome ​

Add AgentRun and AgentTurn domain/storage models and make their lifetimes explicit before the fake adapter starts doing work.

Why this comes now ​

Without this separation, later features such as resume, review follow-ups, long-lived provider servers, and crash recovery all become awkward or misleading.

Understand ​

A Task can outlive every provider execution. A Run is one supervised provider/session lifetime attached to the Task. A Turn is one input → work cycle within a Run. An OS process is merely how one adapter strategy may implement a Run or Turn.

Provider completion is also not the same as Task readiness for Review: revision capture and other follow-up Operations may still be pending.

Build the real project ​

  1. Implement AgentRun with selected Agent Instance/Strategy, Execution Environment reference, status, stopped reason, external session ID, capability snapshot, and policy snapshot placeholder.
  2. Implement AgentTurn sequence/status/timestamps.
  3. Persist them.
  4. Add domain/application APIs that can create a Run/Turn without exposing PID as identity.
  5. Add explicit stopped-reason classification type.
  6. Write timeline tests with multiple Turns in one Run and multiple Runs for one Task.

Completion gate ​

Tests show Task ID, Run ID, Turn ID are independent. A Run can obtain external session ID after creation. Stopping a Run does not itself mark the Task Done.

Pitfalls to avoid ​

Do not put exit_code on Task. Do not assume every Run has one PID. Do not call a provider Turn “Task completed.”

References ​

AGENT_SYSTEM.md, T3 turn-completion notes: https://github.com/pingdotgg/t3code/blob/main/docs/internals/overview.md

Checkpoint ​

Update your vocabulary in code/comments if you catch yourself using “session” where Run or Turn is meant.

Forge is local-first. The docs are part of the product engineering system.