Plans, milestones & tasks

Give your AI agent a persistent place to track structured work — roadmaps, feature progress, sprint items — and recall it across sessions.

Plans, milestones, and tasks give your AI agent a persistent place to track structured work — roadmaps, feature progress, sprint items — and recall it across sessions. Each plan contains milestones, each milestone contains tasks, all linked by child_of relations and carrying a status.

Your agent drafts a plan, persists it into orkai, updates task status as work ships, and picks up where it left off in the next session. No more re-explaining what was done yesterday.

Plans, milestones, and tasks

The hierarchy is a three-level tree linked by child_of relations:

  • Plan — the roadmap (e.g. "v210 — Docs feature pages")
  • Milestone — a phase within the plan (e.g. "M1 — Write pages")
  • Task — a concrete unit of work (e.g. "Write workflows.astro")

Each level is an independent entity with its own ID, name, description, and text body. Long text is auto-distributed into searchable sections and chunks. All three are category-scoped so work stays in the right project.

Create a plan

Plans are created through the MCP plan, milestone, and tasks tools. The plan_id and milestone_id parameters are sugar that auto-attach child_of relations:

plan(action: "create",
  name: "v210 — Docs feature pages",
  description: "Add Workflows and Plans & tasks to the Features section",
  category_ids: ["4c5996d0b1dac020d931388e834d5fc8"])

milestone(action: "create",
  name: "M1 — Write pages",
  plan_id: "<plan-id>",
  category_ids: ["4c5996d0b1dac020d931388e834d5fc8"])

tasks(action: "create",
  name: "T1: Write workflows.astro",
  milestone_id: "<milestone-id>",
  category_ids: ["4c5996d0b1dac020d931388e834d5fc8"])

Power callers can pass relations with type: "child_of" and targetId directly instead of using the sugar parameters.

Status tracking

Each entity carries a metadata.status field:

Entity Available statuses
Milestone pending, in_progress, done
Task pending, in_progress, done, blocked

Update status as work progresses. The agent checks task status at session start to know exactly what was done and what is pending — no re-explaining.

List and filter

List plans, filter milestones by parent plan, and filter tasks by parent milestone and status:

plan(action: "list")
milestone(action: "list", plan_id: "<plan-id>")
tasks(action: "list", milestone_id: "<milestone-id>", status: "pending")

Cross-filter by parent and status to get exactly the slice you need — all blocked tasks in a milestone, all in-progress milestones in a plan, or every pending task across the project.

How the agent uses them

overview() surfaces active plans at session start. The agent then:

  1. Reads the latest session to pick up context.
  2. Checks plan, milestone, and task status to see what was in flight.
  3. Updates task status as work progresses (pending → in_progress → done).
  4. Persists new plans per the Feature Planner workflow when you request a new feature.
  5. Closes milestones when all child tasks are done.

The result: every session starts with a clear picture of what shipped and what is next.

Typical workflow

  1. You ask the agent to plan a feature.
  2. Agent drafts the design, presents it for approval.
  3. Once approved, agent persists plan → milestone → tasks in orkai.
  4. Agent implements each task, updating status as it goes.
  5. When all tasks in a milestone are done, agent closes the milestone.
  6. Next session: agent reads the plan and knows exactly where to continue.

See MCP for connecting your assistant, and Workflows for the step-by-step practices your agent follows (including the Feature Planner workflow that automates this process).