Skip to content

Cycle: plan · do · study · act

The four cycle commands. Each records to the active project’s graph and (if an LLM is configured) prints coaching. See Your First Cycle for a narrative walkthrough.

Enter a plan; the LLM sets a verifiable expected evaluation and a new cycle starts.

Terminal window
pdsa plan "<what & why & how>" [--expect "<expected>"] [--fresh] [--no-recall] [--json] [--project <name>]
FlagEffect
--expect "<text>"Use your own expected evaluation instead of the LLM-generated one.
--freshStart an independent cycle; do not link it as a reinforcement of the previous one.
--no-recallSkip auto-injecting recent-cycle learnings into the coaching prompt.
--jsonEmit a JSON object instead of prose. See For AI Agents.
--project <name>Record to a specific project’s DB.

If the previous cycle’s act asked for reinforcement, plan links this cycle to it with a REINFORCES edge (unless --fresh).

Recent-cycle learnings are auto-injected into the coaching prompt so the LLM avoids repeating past mistakes — pull them explicitly with pdsa recall, or disable injection with --no-recall.

Report what you actually did; organizes Plan → Do and flags the gap.

Terminal window
pdsa do "<what you changed / ran / observed>" [--json] [--project <name>]

Requires an in-progress cycle (run pdsa plan first).

Report results; the LLM judges them against the expected evaluation and records a verdict.

Terminal window
pdsa study "<results / metrics / observations>" [--json] [--project <name>]

Records: verdict (met / partial / unmet), the measured actual, and a learning narrative.

Learnings + reinforcement decision; closes the cycle.

Terminal window
pdsa act [--note "<memo>"] [--reinforce "<what to reinforce>"] [--json] [--project <name>]
FlagEffect
--note "<memo>"Attach a free-form memo.
--reinforce "<text>"Force reinforcement of a specific thing (next plan links here).
--jsonEmit a JSON object (includes reinforce, what, and the running hitRate).

If the verdict wasn’t met, the next pdsa plan auto-links as a reinforcement cycle unless it’s run with --fresh.