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:
- Reads the latest session to pick up context.
- Checks plan, milestone, and task status to see what was in flight.
- Updates task status as work progresses (pending → in_progress → done).
- Persists new plans per the Feature Planner workflow when you request a new feature.
- 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
- You ask the agent to plan a feature.
- Agent drafts the design, presents it for approval.
- Once approved, agent persists plan → milestone → tasks in orkai.
- Agent implements each task, updating status as it goes.
- When all tasks in a milestone are done, agent closes the milestone.
- 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).