How to manage plans and tasks
This guide shows how to have the agent work through a list of tasks with its plan tool, and how to follow its progress. The tool is on by default (planTool: true).
Give the agent a list
Ask for several things at once, as a list:
Do these 2 things: 1. create a file a.txt containing A, 2. create a file b.txt containing B.
The model creates a plan from the list, works through it, and updates each task's status as it goes. Small models do it more reliably when you say so: "Use the plan tool. Do these…".
Follow the progress
mm shows where the plan is after every plan action that changes or reads its state (create, update, next, status) — whether or not the model mentions it in its answer.
-
Line mode (
mm agent.yaml,mm -p): one line before each call, one line after it. Measured on Qwen3.5 4B with the request above:📋 plan: create 📋 [1/2] ⏳ Task 1: Create a file a.txt containing A (open) 💾 write_file: a.txt (1 bytes) 💾 write_file: b.txt (1 bytes) 📋 plan: update user-request-1 📋 [2/2] ⏳ Task 2: Create a file b.txt containing B (open) 📋 plan: update user-request-1 📋 [2/2] All tasks complete! -
Window (
mm -tui): each call is a tool call in the conversation, and the📋 [C/N] …line follows it as a notice. -
Editor (
mm -acp): each call is a tool call; the status line is inside its result.
The status line shows the task being worked on — the first one in progress, else the first one still open: [C/N] <icon> Task C: <description> (<status>). Icons: ⏳ open, 🔄 in progress, ✅ done, ❌ failed. When every task is over it says [N/N] All tasks complete!, or [N/N] Plan finished: D done, F failed if some failed.
Steer the plan
The model decides when to call the tool; you steer it in your own words:
- Where are we? "What's the status of the plan?" — the model calls
statusand mm shows the line. - Skip a task. "Skip the tests and go on." — the model can mark it and move on with
next. - A task failed. The model can mark it
failed, with a note; the status line then moves to the next open task. - Drop the plan. "Forget this plan." — the model can call
delete.
There is no slash command for plans: they are the model's tool.
Variants
- Several conversations in an editor. Each thread has its own plans: a plan made in one Zed thread is not visible in another.
- Starting over.
/newand/resumeforget the plans in every front end; an editor's reload (session/load,session/resume) starts the thread with no plan. Plans are kept in memory only, never in the session file, and are lost when mm stops. - The
plan-managerskill.skills/plan-managertells the model when to make a plan and how to move through it. Put it in the agent'sskillsDirfor a model that does not use the tool by itself. It also asks the model to repeat the status line in its answer; mm shows it anyway. - An agent that does not need plans. Set
planTool: false: the tool is not declared. Do it for an agent whose job is a single answer (writing a document, answering questions), where a small model may otherwise loop on plan calls.
Troubleshooting
- The agent does not create a plan. Give a numbered list, and say "use the plan tool". With a small model, add the
plan-managerskill. - The agent keeps calling
plan update.updatechanges the status of ONE task; it cannot change a plan's tasks. A call without a validstatusgets an answer that quotes the call back, names the missing field and gives a valid call. If a small model still repeats it, setplanTool: falsefor that agent.
See also
- Tools reference —
plan: every action, field, result and error - Configuration reference:
planTool - Slash commands reference:
/new,/resume demos/plans/— a measured demo: a Go program built in four planned steps, and a plan that ends with a failed task
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|