Goals & Problems
10 commands · plm goals
Raise the destination, cut problems toward it, solve them: progress derives itself.
A goal is a destination, not a task: the outcome the project exists to reach, plus what success looks like. A problem is one concrete obstacle on the way there, cut UNDER a goal. The two form a single loop: raise the goal, cut a problem toward it, pick the problem up, solve it, and the goal's progress ticks up on its own. Nobody types a percentage anywhere: progress is derived, solved problems over cut problems, so the goals list is the one report that moves only when work actually lands.
Step 1 of 6
Raise the outcome
One line for the destination, --why for what success looks like. Write the why as the test you will apply later: when this is true, the goal is reached. Vague goals produce vague problems.
plm goal · raise$ plm goal "Dogfood: PLMHub manages the building of PLMHub itself" --why "Edvard plans in the hub, the agent works through the plm CLI end to end"✓ goal goal_e8956f9961 — Dogfood: PLMHub manages the building of PLMHub itselffull form · plm goal "<title>" [--why "…"]
Step 2 of 6
Cut a problem under it
A problem is the atomic unit of value: one obstacle, one solution. Cutting it under a goal is what makes the goal measurable, and the CLI answers with the exact command to start working on it.
plm problem · cut$ plm problem "chapter template renders any group" --goal goal_e8956f9961✓ problem prob_84acc91b — chapter template renders any group (plm work prob_84acc91b)full form · plm problem "<title>" --goal <goal-id> [--why "…"]
Step 3 of 6
Pick it up
plm work puts you ON the problem: it cuts the prob/<id> branch, checks it out, and tells the hub you are the one working it. From here every plm commit is tagged with the problem automatically, and your teammates see who is where without asking.
plm work$ plm work prob_84acc91b✓ working prob_84acc91b on branch prob/84acc91b (plm commit will tag it)Step 4 of 6
Solve it, and the goal moves
plm done closes the active problem, optionally recording the solution in one line. This is the only thing that moves a goal's score: the moment it lands, 14/20 becomes 15/20. Solutions accumulate into reusable knowledge, not just closed tickets.
plm done$ plm done --solution "keyset pagination on the events table"✓ prob_84acc91b solved. Nice work.full form · plm done [prob_…] [--solution "…"]
Step 5 of 6
Read the honest progress report
Each goal shows its status and the derived score. If a goal sits at 0/1 for weeks, that is a real signal, not a formatting problem. Agents read this list before deciding what to work on next.
plm goals$ plm goals2 goals · showing 2goal_e8956f9961 [active] Dogfood: PLMHub manages the building of PLMHub itself (14/20 solved)Edvard plans in the hub, the agent works through the plm CLI end to end.goal_b0d57442e8 [active] Launch PLMHub's public agent platform (0/1 solved)Author a skill once, install it into any agent.full form · plm goals [--head N|--tail N|--n N]
Step 6 of 6
Steer while you own it
Both records stay yours to shape: retitle, rewrite the why, park a goal or mark it achieved, flip a problem between open and solving, file the solution. Deleting a goal is the one guarded act (project admins only), and even then its problems survive, unattached: destinations are disposable, work is not.
plm goal · update$ plm goal goal_e8956f9961 --status achieved✓ updated goal_e8956f9961 (status)full form · plm goal <goal_…> [--title "…"] [--why "…"] [--status active|achieved|parked]
Also in this chapter
Delete a goal. Project admin only; its problems survive, unattached.
Update a problem: status, title, context, or the recorded solution.
List problems with status and who is on them, filterable by status or goal.
Discuss a problem on the record, next to the problem itself.
- Everything here is project-scoped: run inside a linked repo (plm link <project-slug>).
- Goal statuses: active, achieved, parked. Problem statuses: open, solving, solved.
- Progress is derived (solved/cut problems), never hand-edited. plm done is the only thing that moves it.
- plm work stores the active problem per checkout (.plmhub/state.json); switching problems warns about the one left open.
- Goal delete is project-admin only; its problems survive, unattached.