Tasks work in isolation
A task starts from its prompt alone. It hasn’t seen your thread’s history, your earlier corrections, or the files the parent explored: everything it needs must be in the prompt it’s given. And the parent isn’t fed each step as it happens: it gets the final summary automatically and reads interim progress only when it asks. Tasks are cheap parallelism precisely because they don’t drag the whole conversation context with them.Shared vs fresh machines
A task either shares the parent’s machine or gets a fresh one, and the split follows writes:- Shared: the task works on the parent’s machine and sees its working tree exactly as it stands, uncommitted changes included. Right for tasks that only read: exploring, auditing, summarizing.
- Fresh: the task boots its own machine with a clean checkout from the upstream branch. Right for tasks that write: each writer gets an isolated tree, so two tasks editing code can’t collide with each other or with the parent.
Parallel vs stacked
- Parallel tasks run simultaneously and must touch disjoint parts of the codebase: different packages, different files. Each ships its own PR.
- Stacked tasks depend on each other or touch overlapping files: Task 1 runs and ships its PR, then Task 2 starts from Task 1’s PR branch and builds on top. Slower, but conflict-free where parallel would collide.
Task lifecycle
How results come back
A task reports to its parent through explicit messages:- A task that finishes delivers its final summary to the parent, which wakes and acts on it.
- A task that gets blocked (it needs a decision, access, or credentials) surfaces its actual question to the parent as a notification. The parent can answer it, answer with your help, or escalate to you.
- Interim progress messages don’t wake the parent; it reads them on demand when it checks on the task.