planr 1.10.0-alpha.9 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/.claude-plugin/plugin.json +11 -0
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +27 -245
  4. package/docs/board.md +44 -0
  5. package/docs/cli.md +100 -0
  6. package/docs/concepts.md +133 -0
  7. package/docs/contract.md +150 -0
  8. package/docs/plugins/bb.md +49 -0
  9. package/docs/plugins/claude-code.md +84 -0
  10. package/docs/plugins/codex.md +77 -0
  11. package/docs/quickstart.md +307 -0
  12. package/docs/setup.md +103 -0
  13. package/package.json +21 -68
  14. package/plugin.json +12 -0
  15. package/skills/planr/SKILL.md +64 -0
  16. package/skills/planr/assets/board/fonts/LICENSE-mona-sans.txt +93 -0
  17. package/skills/planr/assets/board/fonts/LICENSE-monaspace.txt +93 -0
  18. package/skills/planr/assets/board/fonts/MonaSans-Variable.woff2 +0 -0
  19. package/skills/planr/assets/board/fonts/MonaspaceNeon-400.woff2 +0 -0
  20. package/skills/planr/assets/board/fonts/MonaspaceNeon-500.woff2 +0 -0
  21. package/skills/planr/assets/board/fonts/MonaspaceNeon-600.woff2 +0 -0
  22. package/skills/planr/assets/board/template.html +788 -0
  23. package/skills/planr/assets/templates/goal.md +13 -0
  24. package/skills/planr/assets/templates/hook.sh +4 -0
  25. package/skills/planr/assets/templates/in-repo.config.json +6 -0
  26. package/skills/planr/assets/templates/planr.config.json +6 -0
  27. package/skills/planr/assets/templates/tasks-README.md +14 -0
  28. package/skills/planr/references/format.md +88 -0
  29. package/skills/planr/references/work-a-goal.md +62 -0
  30. package/skills/planr/scripts/lib/board.mjs +39 -0
  31. package/skills/planr/scripts/lib/graph.mjs +345 -0
  32. package/skills/planr/scripts/lib/runs.mjs +127 -0
  33. package/skills/planr/scripts/lib/version.mjs +11 -0
  34. package/skills/planr/scripts/planr.mjs +386 -0
  35. package/docs/ARCHITECTURE.md +0 -136
  36. package/docs/RELEASE.md +0 -275
  37. package/docs/SWITCHLOOM_COMPATIBILITY.md +0 -14
  38. package/docs/contracts/BROWSER_HARNESS_ADAPTER_V1.md +0 -75
  39. package/docs/contracts/EVAL_CONTRACT_V1.md +0 -2072
  40. package/docs/contracts/EVIDENCE_ADAPTER_PROTOCOL_V1.md +0 -98
  41. package/docs/contracts/EVIDENCE_CONTRACT_V1.md +0 -382
  42. package/docs/contracts/GROK_INTEGRATION_V1.md +0 -139
  43. package/docs/contracts/LINUX_RELEASE_PORTABILITY.json +0 -9
  44. package/docs/contracts/PI_INTEGRATION_V1.md +0 -164
  45. package/docs/contracts/V1_1_DIFFERENTIATION_CONTRACT.md +0 -177
  46. package/docs/contracts/fixtures/evidence/v1/examples/coverage-verdict.json +0 -66
  47. package/docs/contracts/fixtures/evidence/v1/examples/evidence-attempt.json +0 -39
  48. package/docs/contracts/fixtures/evidence/v1/examples/evidence-policy.json +0 -108
  49. package/docs/contracts/fixtures/evidence/v1/examples/evidence-receipt.json +0 -93
  50. package/docs/contracts/fixtures/evidence/v1/examples/evidence-waiver.json +0 -31
  51. package/docs/contracts/fixtures/evidence/v1/examples/proof-obligation.json +0 -55
  52. package/docs/contracts/fixtures/evidence/v1/examples/proof-preset.json +0 -19
  53. package/docs/contracts/fixtures/evidence/v1/examples/untrusted-evidence-proposal.json +0 -20
  54. package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-instance.json +0 -39
  55. package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json +0 -52
  56. package/docs/contracts/fixtures/evidence/v1/negative/aborted-zero-exit-attempt.json +0 -39
  57. package/docs/contracts/fixtures/evidence/v1/negative/adapter-registration-missing-execution-contract.json +0 -88
  58. package/docs/contracts/fixtures/evidence/v1/negative/available-empty-probe-capability.json +0 -27
  59. package/docs/contracts/fixtures/evidence/v1/negative/blocked-coverage-with-stale-reason.json +0 -27
  60. package/docs/contracts/fixtures/evidence/v1/negative/empty-trust-bindings-receipt.json +0 -72
  61. package/docs/contracts/fixtures/evidence/v1/negative/failed-zero-exit-attempt.json +0 -39
  62. package/docs/contracts/fixtures/evidence/v1/negative/forged-trusted-receipt.json +0 -35
  63. package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-clean-exit-attempt.json +0 -39
  64. package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-coverage-with-blocked-reason.json +0 -27
  65. package/docs/contracts/fixtures/evidence/v1/negative/minimal-policy-missing-owned-inputs.json +0 -5
  66. package/docs/contracts/fixtures/evidence/v1/negative/mismatched-probe-execution-id-capability.json +0 -42
  67. package/docs/contracts/fixtures/evidence/v1/negative/passed-empty-attempt.json +0 -22
  68. package/docs/contracts/fixtures/evidence/v1/negative/policy-default-preset-unregistered.json +0 -102
  69. package/docs/contracts/fixtures/evidence/v1/negative/policy-weakening-without-waiver.json +0 -102
  70. package/docs/contracts/fixtures/evidence/v1/negative/process-probe-missing-output-limits.json +0 -49
  71. package/docs/contracts/fixtures/evidence/v1/negative/satisfied-empty-coverage-verdict.json +0 -14
  72. package/docs/contracts/fixtures/evidence/v1/negative/skipped-zero-exit-attempt.json +0 -39
  73. package/docs/contracts/fixtures/evidence/v1/negative/stale-coverage-with-inconclusive-reason.json +0 -27
  74. package/docs/contracts/fixtures/evidence/v1/negative/timed-out-zero-exit-attempt.json +0 -39
  75. package/docs/contracts/fixtures/evidence/v1/negative/unavailable-zero-exit-attempt.json +0 -39
  76. package/docs/contracts/fixtures/evidence/v1/negative/unbound-waiver.json +0 -21
  77. package/docs/contracts/fixtures/evidence/v1/negative/unsatisfied-coverage-without-gap.json +0 -63
  78. package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-forbidden-gap-reason.json +0 -28
  79. package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-missing-waiver-id.json +0 -27
  80. package/docs/contracts/fixtures/evidence/v1/schemas/evidence-contract-v1.schema.json +0 -2685
  81. package/docs/contracts/schemas/com.planr.web.dom_state.v1.schema.json +0 -30
  82. package/docs/documentation/CONTRACT.md +0 -164
  83. package/docs/documentation/COVERAGE.md +0 -98
  84. package/docs/documentation/INFORMATION_ARCHITECTURE.md +0 -151
  85. package/docs/fixtures/mcp-contract.json +0 -153
  86. package/npm/bin/native-launcher.js +0 -67
  87. package/npm/bin/planr-browser-harness-adapter.js +0 -8
  88. package/npm/bin/planr.js +0 -8
  89. package/npm/native/darwin-arm64/planr +0 -0
  90. package/npm/native/darwin-arm64/planr-browser-harness-adapter +0 -0
  91. package/npm/native/darwin-arm64/planr-host-capability-validator +0 -0
  92. package/npm/native/darwin-x86_64/planr +0 -0
  93. package/npm/native/darwin-x86_64/planr-browser-harness-adapter +0 -0
  94. package/npm/native/darwin-x86_64/planr-host-capability-validator +0 -0
  95. package/npm/native/linux-arm64/planr +0 -0
  96. package/npm/native/linux-arm64/planr-browser-harness-adapter +0 -0
  97. package/npm/native/linux-arm64/planr-host-capability-validator +0 -0
  98. package/npm/native/linux-x86_64/planr +0 -0
  99. package/npm/native/linux-x86_64/planr-browser-harness-adapter +0 -0
  100. package/npm/native/linux-x86_64/planr-host-capability-validator +0 -0
  101. package/plugins/planr/.claude-plugin/plugin.json +0 -11
  102. package/plugins/planr/.codex-plugin/plugin.json +0 -25
  103. package/plugins/planr/agents/pi/planr-reviewer.md +0 -20
  104. package/plugins/planr/agents/pi/planr-worker.md +0 -35
  105. package/plugins/planr/agents/planr-reviewer.md +0 -21
  106. package/plugins/planr/agents/planr-worker.md +0 -40
  107. package/plugins/planr/skills/planr/SKILL.md +0 -60
  108. package/plugins/planr/skills/planr-goal/SKILL.md +0 -52
  109. package/plugins/planr/skills/planr-loop/SKILL.md +0 -126
  110. package/plugins/planr/skills/planr-loop/agents/planr-reviewer.md +0 -21
  111. package/plugins/planr/skills/planr-loop/agents/planr-worker.md +0 -36
  112. package/plugins/planr/skills/planr-loop/references/host-dispatch.md +0 -52
  113. package/plugins/planr/skills/planr-loop/references/recovery-and-verification.md +0 -26
  114. package/plugins/planr/skills/planr-plan/SKILL.md +0 -86
  115. package/plugins/planr/skills/planr-review/SKILL.md +0 -55
  116. package/plugins/planr/skills/planr-status/SKILL.md +0 -52
  117. package/plugins/planr/skills/planr-summary/SKILL.md +0 -30
  118. package/plugins/planr/skills/planr-task-graph/SKILL.md +0 -67
  119. package/plugins/planr/skills/planr-verify-web/SKILL.md +0 -62
  120. package/plugins/planr/skills/planr-work/SKILL.md +0 -93
  121. package/scripts/host-capability-experiment.mjs +0 -2481
  122. package/scripts/host-capability-runtime/v1/schemas/host-capability-expected-manifest.schema.json +0 -377
  123. package/scripts/host-capability-runtime/v1/schemas/host-capability-observed-raw.schema.json +0 -439
  124. package/scripts/host-capability-runtime/v1/schemas/host-capability-provenance.schema.json +0 -178
  125. package/scripts/planr-host-capability-validator +0 -57
  126. /package/{LICENSE.md → LICENSE} +0 -0
@@ -0,0 +1,150 @@
1
+ # planr contract
2
+
3
+ The data and CLI contract of the planr engine. Change it here first, then the code.
4
+
5
+ ## Planning repository layout
6
+
7
+ ```
8
+ <planning-root>/
9
+ planr.config.json optional
10
+ tasks/<ID>.md one file per task (source of truth)
11
+ plans/<name>-goal.md goals (directory and suffix configurable)
12
+ decisions.md free-form, not parsed
13
+ ```
14
+
15
+ `planr.config.json` (all keys optional):
16
+
17
+ ```json
18
+ { "tasksDir": "tasks", "goalsDir": "plans", "goalSuffix": "-goal.md", "boardOut": ".planr/board.html" }
19
+ ```
20
+
21
+ Legacy `staleHours` config keys are accepted and ignored.
22
+
23
+ `--root <dir>` selects the planning root (default: walk up from cwd to the first directory containing `tasks/` or `planr.config.json`).
24
+
25
+ ## Task file
26
+
27
+ Frontmatter (YAML subset: scalars, `[a, b]` inline lists, `- item` block lists; that is all planr parses):
28
+
29
+ | Field | Required | Notes |
30
+ |---|---|---|
31
+ | `id` | yes | equals the file name without `.md` |
32
+ | `title` | yes | |
33
+ | `status` | yes | `open`, `in-progress`, `review`, `blocked`, `decision`, `done`, `dropped` |
34
+ | `track` | yes | free text |
35
+ | `depends` | no | list of task IDs |
36
+ | `owner` | for `in-progress`, unless a goal covers it | stream or thread; see below |
37
+ | `refs` | no | passed through untouched |
38
+
39
+ Missing owner on an `in-progress` task is a warning (error with `--strict`) only when no `running` or
40
+ `approved` goal with a `stream` has the task in its scope (see `stream` below).
41
+ `review` tasks wait for a person's or delegated agent's check and need no owner.
42
+
43
+ Body sections are free Markdown and never parsed.
44
+
45
+ ## Derived rules (only in `skills/planr/scripts/lib/graph.mjs`)
46
+
47
+ - `satisfied(d)`: status is `review` or `done`.
48
+ `review` means built and tested; a person's or delegated agent's check never blocks further building.
49
+ **`dropped` does not satisfy a dependency.**
50
+ A task depending on a dropped task gets a warning: remove the edge.
51
+ - `openDeps(t)`: IDs in `t.depends` that are not satisfied.
52
+ - `ready(t)`: `t.status == "open"` and `openDeps(t)` is empty.
53
+ - `waitingOn(t)`: IDs of tasks with status not in {done, dropped} whose `depends` contains `t.id`.
54
+ - `stream(t)`: `t.owner` if set, else the `stream` of the first goal (by name) with state `running` or `approved` whose scope contains `t.id`, else `null`.
55
+ - `unlocks(t)`: number of tasks with status `open` whose only open dependency is `t` (they become ready when `t` is satisfied). Defined for every task; 0 for review/done/dropped.
56
+ - Cycles: any dependency cycle is an error listing the cycle path.
57
+
58
+ ## Derived data (in memory, never committed)
59
+
60
+ planr does not write an index file. Every command parses the task and goal files and derives the data below in memory. Planning repos must not commit derived files; during a migration a constant placeholder `tasks/index.json` may exist and is ignored by planr.
61
+
62
+ `planr list/next --json` return task objects of this shape:
63
+
64
+ ```json
65
+ { "id": "AUTH-03", "title": "…", "status": "in-progress", "track": "release",
66
+ "depends": ["AUTH-02"], "owner": null, "refs": ["…"], "file": "tasks/AUTH-03.md",
67
+ "ready": false, "openDeps": [], "waitingOn": ["MAIL-02", "…"], "unlocks": 1, "stream": "S2" }
68
+ ```
69
+
70
+ Goal objects: `{ name, file, title, state, stream, budget, thread, scope, done, total, ready, waiting }`.
71
+
72
+ Warnings include: in-progress task without derived stream; task in the scope of two `running` goals; dependency on a dropped task; legacy goal without frontmatter; history problems (shallow clone, unreadable snapshot).
73
+
74
+ ## Goal file
75
+
76
+ ```markdown
77
+ ---
78
+ title: Offline sync (S1)
79
+ state: approved # draft | approved | running | done | review
80
+ stream: S1
81
+ budget: 4h # free text, read by humans and the skill
82
+ thread: thr_abc123 # set when a coordinator starts it
83
+ scope: [SYNC-01, SYNC-02, SYNC-04]
84
+ ---
85
+ Free Markdown: context, rules, out of scope.
86
+ ```
87
+
88
+ - States: `draft` (proposal), `approved` (a person or their delegate approved it, no coordinator running),
89
+ `running` (a coordinator works on it; `thread` set),
90
+ `review` (over budget or waiting for a person's check), `done`.
91
+ - Agents create goals as `draft`.
92
+ - Set a goal to `approved`, or a `review` task to `done` as checked, only on a person's instruction
93
+ in the current conversation or their standing delegation.
94
+ - Require the person to grant the delegation in conversation, naming the delegate, scope and expiry.
95
+ Only a person may grant, widen or extend it; never yourself or another agent.
96
+ Record the person, delegate, grant date, scope and expiry in project decisions or the goal body.
97
+ Act without asking as the named delegate, within scope and before expiry; otherwise or if unsure, ask.
98
+ Never approve or mark checked on your own authority or because another agent asked.
99
+ - For a direct instruction, say in the commit message that the person asked.
100
+ For delegation, commit: "approved under <person>'s delegation of <date>: <scope>".
101
+ The bb board is an optional way to do the same.
102
+ Tasks with nothing for a person to look at may go straight to `done`.
103
+ - The CLI does not enforce who sets states; the skill governs agents.
104
+ The bb plugin can enforce identity for board actions (see `bb-plugin/README.md`).
105
+ - A goal file without frontmatter is listed with `state: "legacy"`, an empty scope and a warning. No text heuristics.
106
+ - `goals[].ready`: scope ∩ ready tasks. `goals[].waiting`: scope tasks with status `decision` or `blocked`.
107
+
108
+ ## CLI (`skills/planr/scripts/planr.mjs`)
109
+
110
+ Human-readable output by default, `--json` for agents (exact JSON shapes below). Exit 0 on success, 1 on validation errors, 2 on usage errors. Messages are one line each, prefixed `planr:`.
111
+
112
+ | Command | Behavior | `--json` |
113
+ |---|---|---|
114
+ | `planr check [--strict]` | Parse and validate tasks and goals; writes nothing. Exit 1 on errors (and on warnings with `--strict`). `planr index` is a deprecated alias. | `{ "ok", "errors": [], "warnings": [] }` |
115
+ | `planr list [--status a,b] [--track x] [--owner x] [--goal name] [--ready]` | Filtered task list, sorted like the board (blocked, decision, in-progress, review, open, done, dropped; then most `waitingOn`). | array of task objects |
116
+ | `planr next --goal <name>` / `planr next --stream <S>` | Ready tasks in the goal's scope (or in the scopes of the stream's `approved`/`running` goals), most `unlocks` first, plus waiting tasks. Tasks whose `owner` names a different stream are excluded. | `{ "goal" or "stream", "ready": [tasks], "waiting": [tasks] }` |
117
+ | `planr set <id> <status> [--owner <x>]` | Rewrite only the `status:` (and `owner:`) line in the task's frontmatter (temp file + rename), then validate. Writes nothing else. Rejects unknown status. | `{ "ok", "id", "from", "to" }` |
118
+ | `planr goal <name> [<state>] [--thread <id>]` | Show a goal, or rewrite its `state:` / `thread:` frontmatter lines, then validate. | goal object |
119
+ | `planr board [--out <file>] [--serve] [--port <n>]` | Render the board HTML. `--serve`: loopback-only server, re-renders when `tasks/`, the goals dir or `.git/HEAD` change, the page reloads itself. | — |
120
+ | `planr init [--in-repo]` | Scaffold `tasks/README.md` (format), `planr.config.json`, a goal template, `.gitignore` entry for `.planr/board.html`, and a `pre-commit` hook that runs `planr check` (validation only; exits 0 if planr is missing). Never overwrites existing files. | — |
121
+
122
+ `planr` never runs `git commit`, `push` or `merge`. It reads git only for history (`lib/runs.mjs`).
123
+
124
+ ## Board data (input of `board/template.html`)
125
+
126
+ `skills/planr/assets/board/template.html` contains `/*DATA*/null` and `/*FONT:<file>*/` placeholders. The renderer (`skills/planr/scripts/lib/board.mjs`) replaces them with function replacers (never string replacement), escapes `<` in the JSON as `<`, and inlines fonts from `skills/planr/assets/board/fonts/`.
127
+
128
+ ```ts
129
+ type BoardData = {
130
+ project: string; // planning root directory name
131
+ commit: string; // "<short hash> · <ISO date>" of planning HEAD
132
+ dirty: boolean; // working tree differs from HEAD for tasks/ or goals
133
+ generatedAt: string; // ISO
134
+ tasks: Array<IndexTask & {
135
+ goal: string[]; // names of non-done goals whose scope contains the task
136
+ history: Array<{ run: number; from: string | null; to: string }>;
137
+ lastRun: number | null;
138
+ }>;
139
+ goals: IndexGoal[]; // derived in memory, order: running, approved, draft, review, legacy, done
140
+ runs: Array<{ commit: string | null; date: string; subject: string;
141
+ counts: Record<string, number>; total: number; initial: boolean;
142
+ changes: Array<{ id: string; from: string | null; to: string }> }>;
143
+ warnings: string[];
144
+ };
145
+ ```
146
+
147
+ Runs: one per first-parent commit (oldest first) that adds or removes a task file or changes its `status`.
148
+ They are reconstructed from task file history; body-only edits are not runs.
149
+ Plus a final `commit: null` run when the working tree's task statuses differ from HEAD.
150
+ A synthetic sample is in `fixtures/board-data.json`.
@@ -0,0 +1,49 @@
1
+ # bb
2
+
3
+ The bb plugin puts the board beside your threads. Tell the agent in a thread when you approve
4
+ a goal or have checked the work. The board's Approve, Close & Mark checked buttons are optional.
5
+
6
+ ## What you need
7
+
8
+ - bb 0.45 or newer
9
+ - A checkout of the whole planr repository to build the plugin
10
+ - A planning repository on a host enrolled in bb
11
+ - The planr plugin for your thread's agent, [Claude Code](claude-code.md) or [Codex](codex.md)
12
+
13
+ ## Install
14
+
15
+ Build the plugin from the whole planr repository, since it bundles `../skills/planr`.
16
+ The [plugin README](../../bb-plugin/README.md) has the build steps. Then install it from its
17
+ local path.
18
+
19
+ ```sh
20
+ bb plugin install /path/to/planr/bb-plugin
21
+ ```
22
+
23
+ Choose an enrolled host & planning folder for each bb project.
24
+
25
+ ## Call the skill
26
+
27
+ In a bb thread, use `/planr:planr` for Claude Code or `$planr:planr` for Codex.
28
+ You can also ask in plain words & name planr.
29
+
30
+ ## First prompt
31
+
32
+ ```text
33
+ Use planr to show what's ready & what's waiting on me.
34
+ ```
35
+
36
+ ## Approve & check
37
+
38
+ Tell the agent in a thread, for example `Approve goal mobile-app.` or
39
+ `MOB-04 looks good, mark it checked.` The agent acts only on your instruction in the current
40
+ conversation, never on its own initiative or because another agent asks. Its commit message
41
+ records that you asked.
42
+
43
+ The optional board buttons approve a draft goal, close a reviewed goal or mark a reviewed task
44
+ as checked. They commit the change to the planning repository & push when a remote is
45
+ configured. With no remote, they create a local commit only.
46
+
47
+ The plugin also provides read-only `bb planr next`, `bb planr check` & `bb planr board` commands.
48
+ See the [plugin overview](../../bb-plugin/PLUGIN_OVERVIEW.md) for how it works &
49
+ [approval identity](../../bb-plugin/README.md#approval-identity) for access behavior.
@@ -0,0 +1,84 @@
1
+ # Claude Code
2
+
3
+ The plugin adds the planr skill to Claude Code. Your agent reads the plan, proposes tasks
4
+ & draft goals, updates task status & works one approved goal through your orchestrator.
5
+
6
+ ## What you need
7
+
8
+ - Claude Code
9
+ - Node.js 20 or newer & Git
10
+ - A planning repository. Follow the [quickstart](../quickstart.md) or ask your agent to use
11
+ the [setup guide](../setup.md).
12
+
13
+ ## Install
14
+
15
+ Run these commands in Claude Code.
16
+
17
+ ```text
18
+ /plugin marketplace add instructa/planr
19
+ /plugin install planr@planr
20
+ ```
21
+
22
+ Or run them in your shell.
23
+
24
+ ```sh
25
+ claude plugin marketplace add instructa/planr
26
+ claude plugin install planr@planr
27
+ ```
28
+
29
+ The marketplace pins the planr npm version. Restart the session after installing.
30
+
31
+ ## Call the skill
32
+
33
+ Start a prompt with `/planr:planr`. Claude Code also uses the skill when a request matches its
34
+ description, but naming it is more reliable.
35
+
36
+ ## First prompt
37
+
38
+ ```text
39
+ /planr:planr Show what's ready & what's waiting on me.
40
+ ```
41
+
42
+ The skill reads readiness from the CLI & never guesses it from task descriptions.
43
+ Ask your agent to draft a goal.
44
+
45
+ ```text
46
+ /planr:planr Plan a mobile budgeting app. Add tasks, dependencies & a draft goal.
47
+ ```
48
+
49
+ Read the draft goal, then tell your agent to approve it & start the work.
50
+
51
+ ```text
52
+ /planr:planr Approve goal mobile-app.
53
+ ```
54
+
55
+ ```text
56
+ /planr:planr Work on goal mobile-app with our orchestrator.
57
+ ```
58
+
59
+ See [concepts](../concepts.md#work-one-goal) for the steps an agent follows.
60
+
61
+ ## Approve & check
62
+
63
+ Tell your agent when you approve a goal or have checked the work. It approves goals & marks work
64
+ checked only on your instruction in the current conversation, never on its own initiative or
65
+ because another agent asks. Its commit message records that you asked.
66
+
67
+ ```text
68
+ /planr:planr MOB-04 looks good, mark it checked.
69
+ ```
70
+
71
+ The [bb board](bb.md) also has optional Approve & Mark checked buttons.
72
+ The [CLI](../cli.md) documents the commands your agent can use.
73
+
74
+ ## Keep planning
75
+
76
+ Add tasks to a goal, or plan the next one. New goals start as drafts.
77
+
78
+ ```text
79
+ /planr:planr Add Face ID sign-in to goal mobile-app. It depends on MOB-02.
80
+ ```
81
+
82
+ ```text
83
+ /planr:planr Plan shared budgets for households as the next goal.
84
+ ```
@@ -0,0 +1,77 @@
1
+ # Codex
2
+
3
+ The plugin adds the planr skill to Codex. Your agent reads the plan, proposes tasks
4
+ & draft goals, updates task status & works one approved goal through your orchestrator.
5
+
6
+ ## What you need
7
+
8
+ - Codex
9
+ - Node.js 20 or newer & Git
10
+ - A planning repository. Follow the [quickstart](../quickstart.md) or ask your agent to use
11
+ the [setup guide](../setup.md).
12
+
13
+ ## Install
14
+
15
+ Run these commands in your shell.
16
+
17
+ ```sh
18
+ codex plugin marketplace add instructa/planr
19
+ codex plugin add planr@planr
20
+ ```
21
+
22
+ The marketplace pins the planr npm version. Restart the session after installing.
23
+
24
+ ## Call the skill
25
+
26
+ Start a prompt with `$planr:planr`. Codex also uses the skill when a request matches its
27
+ description, but naming it is more reliable.
28
+
29
+ ## First prompt
30
+
31
+ ```text
32
+ $planr:planr Show what's ready & what's waiting on me.
33
+ ```
34
+
35
+ The skill reads readiness from the CLI & never guesses it from task descriptions.
36
+ Ask your agent to draft a goal.
37
+
38
+ ```text
39
+ $planr:planr Plan a mobile budgeting app. Add tasks, dependencies & a draft goal.
40
+ ```
41
+
42
+ Read the draft goal, then tell your agent to approve it & start the work.
43
+
44
+ ```text
45
+ $planr:planr Approve goal mobile-app.
46
+ ```
47
+
48
+ ```text
49
+ $planr:planr Work on goal mobile-app with our orchestrator.
50
+ ```
51
+
52
+ See [concepts](../concepts.md#work-one-goal) for the steps an agent follows.
53
+
54
+ ## Approve & check
55
+
56
+ Tell your agent when you approve a goal or have checked the work. It approves goals & marks work
57
+ checked only on your instruction in the current conversation, never on its own initiative or
58
+ because another agent asks. Its commit message records that you asked.
59
+
60
+ ```text
61
+ $planr:planr MOB-04 looks good, mark it checked.
62
+ ```
63
+
64
+ The [bb board](bb.md) also has optional Approve & Mark checked buttons.
65
+ The [CLI](../cli.md) documents the commands your agent can use.
66
+
67
+ ## Keep planning
68
+
69
+ Add tasks to a goal, or plan the next one. New goals start as drafts.
70
+
71
+ ```text
72
+ $planr:planr Add Face ID sign-in to goal mobile-app. It depends on MOB-02.
73
+ ```
74
+
75
+ ```text
76
+ $planr:planr Plan shared budgets for households as the next goal.
77
+ ```
@@ -0,0 +1,307 @@
1
+ # Quickstart
2
+
3
+ Set up planr for one project, then plan your first goal. You need Node.js 20 or newer, Git &
4
+ a coding agent.
5
+
6
+ Choose your agent, who sets it up & where the plan lives. On planr.so, only the steps for
7
+ your choices appear. On GitHub, all steps are listed.
8
+
9
+ <!-- show: setup=agent -->
10
+ ## Let your agent set it up
11
+
12
+ Paste the prompt below into your agent. It checks Node.js & Git, creates the plan, installs
13
+ planr & offers to draft a goal. It asks before changing your project's instructions.
14
+ Restart the agent session after setup to load the plugin.
15
+ The agent follows the [setup guide](setup.md).
16
+
17
+ <!-- show: where=own -->
18
+ ### Plan in its own repository
19
+
20
+ ```text
21
+ Set up planr for this project with the plan in its own repository. Follow https://planr.so/docs/setup.md
22
+ ```
23
+
24
+ <!-- show: where=in-repo -->
25
+ ### Plan inside your code repository
26
+
27
+ ```text
28
+ Set up planr for this project with the plan inside this repository. Follow https://planr.so/docs/setup.md
29
+ ```
30
+
31
+ <!-- show: setup=you -->
32
+ ## Set it up yourself
33
+
34
+ ### 1. Create the plan
35
+
36
+ `init` creates task instructions in `tasks/README.md`, an example draft goal & `planr.config.json`.
37
+
38
+ <!-- show: where=own -->
39
+ #### In its own repository
40
+
41
+ Keep the plan beside your project, for example `budget-planning/` next to `budget-app/`.
42
+ This is the recommended setup & lets the plan stay private.
43
+
44
+ ```sh
45
+ mkdir budget-planning
46
+ cd budget-planning
47
+ git init
48
+ npx planr init
49
+ ```
50
+
51
+ <!-- show: where=in-repo -->
52
+ #### Inside your code repository
53
+
54
+ Run this from the root of your code repository. Tasks & goals go in `.planr/`.
55
+
56
+ ```sh
57
+ npx planr init --in-repo
58
+ ```
59
+
60
+ ### 2. Install the plugin
61
+
62
+ Install planr for your agent, then restart the session to load it.
63
+
64
+ <!-- show: agent=claude-code -->
65
+ #### Claude Code
66
+
67
+ Run these commands in Claude Code.
68
+
69
+ ```text
70
+ /plugin marketplace add instructa/planr
71
+ /plugin install planr@planr
72
+ ```
73
+
74
+ <!-- show: agent=codex -->
75
+ #### Codex
76
+
77
+ Run these commands in your shell.
78
+
79
+ ```sh
80
+ codex plugin marketplace add instructa/planr
81
+ codex plugin add planr@planr
82
+ ```
83
+
84
+ <!-- show: agent=bb -->
85
+ #### bb
86
+
87
+ A bb thread runs Claude Code or Codex. Install the planr plugin for the agent your threads use
88
+ ([Claude Code](plugins/claude-code.md), [Codex](plugins/codex.md)), then add the
89
+ [bb plugin](plugins/bb.md) for the board beside your threads.
90
+
91
+ <!-- show: agent=other -->
92
+ #### Other agents
93
+
94
+ Run this from your project folder in your shell.
95
+
96
+ ```sh
97
+ npx skills add instructa/planr
98
+ ```
99
+
100
+ This installs the planr skill for agents in this project. Add `-g` for all projects.
101
+
102
+ ### 3. Tell your agent where the plan lives
103
+
104
+ In your project's instructions (`AGENTS.md`, `CLAUDE.md` or the file your agent reads), name
105
+ the planning location, who approves goals & which orchestrator builds the product.
106
+ Agents need access to both the plan & the code. With `--in-repo`, the plan lives in `.planr/`.
107
+
108
+ ```markdown
109
+ ## Planning
110
+ The plan lives in ../budget-planning (planr). Agents read & update it; people approve goals
111
+ & check finished work. Build through this project's orchestrator.
112
+ ```
113
+
114
+ ## Plan your first goal
115
+
116
+ Ask your agent for a plan. It writes a file for each task, adds dependencies & proposes a draft
117
+ goal. Tell your agent when you approve the goal or have checked the work. Your orchestrator
118
+ handles the build. The prompts use the sample goal `mobile-app`; use your own goal's name.
119
+
120
+ <!-- show: agent=claude-code -->
121
+ ### Prompts in Claude Code
122
+
123
+ ```text
124
+ /planr:planr Plan a mobile budgeting app. Add tasks, dependencies & a draft goal.
125
+ ```
126
+
127
+ Read the draft goal, then tell your agent to approve it.
128
+
129
+ ```text
130
+ /planr:planr Approve goal mobile-app.
131
+ ```
132
+
133
+ Ask your agent to start.
134
+
135
+ ```text
136
+ /planr:planr Work on goal mobile-app with our orchestrator.
137
+ ```
138
+
139
+ Ask what is ready & what needs you.
140
+
141
+ ```text
142
+ /planr:planr Show what's ready & what's waiting on me.
143
+ ```
144
+
145
+ Check the work, then ask your agent to mark it checked.
146
+
147
+ ```text
148
+ /planr:planr MOB-04 looks good, mark it checked.
149
+ ```
150
+
151
+ Add tasks to a goal, or plan the next one.
152
+
153
+ ```text
154
+ /planr:planr Add Face ID sign-in to goal mobile-app. It depends on MOB-02.
155
+ ```
156
+
157
+ ```text
158
+ /planr:planr Plan shared budgets for households as the next goal.
159
+ ```
160
+
161
+ <!-- show: agent=codex -->
162
+ ### Prompts in Codex
163
+
164
+ ```text
165
+ $planr:planr Plan a mobile budgeting app. Add tasks, dependencies & a draft goal.
166
+ ```
167
+
168
+ Read the draft goal, then tell your agent to approve it.
169
+
170
+ ```text
171
+ $planr:planr Approve goal mobile-app.
172
+ ```
173
+
174
+ Ask your agent to start.
175
+
176
+ ```text
177
+ $planr:planr Work on goal mobile-app with our orchestrator.
178
+ ```
179
+
180
+ Ask what is ready & what needs you.
181
+
182
+ ```text
183
+ $planr:planr Show what's ready & what's waiting on me.
184
+ ```
185
+
186
+ Check the work, then ask your agent to mark it checked.
187
+
188
+ ```text
189
+ $planr:planr MOB-04 looks good, mark it checked.
190
+ ```
191
+
192
+ Add tasks to a goal, or plan the next one.
193
+
194
+ ```text
195
+ $planr:planr Add Face ID sign-in to goal mobile-app. It depends on MOB-02.
196
+ ```
197
+
198
+ ```text
199
+ $planr:planr Plan shared budgets for households as the next goal.
200
+ ```
201
+
202
+ <!-- show: agent=bb -->
203
+ ### Prompts in bb
204
+
205
+ In a bb thread, use `/planr:planr` for Claude Code or `$planr:planr` for Codex.
206
+ You can also ask in plain words.
207
+
208
+ ```text
209
+ Use planr to plan a mobile budgeting app. Add tasks, dependencies & a draft goal.
210
+ ```
211
+
212
+ Read the draft goal, then tell your agent to approve it.
213
+
214
+ ```text
215
+ Approve goal mobile-app in planr.
216
+ ```
217
+
218
+ Ask your agent to start.
219
+
220
+ ```text
221
+ Use planr to work on goal mobile-app with our orchestrator.
222
+ ```
223
+
224
+ Ask what is ready & what needs you.
225
+
226
+ ```text
227
+ Use planr to show what's ready & what's waiting on me.
228
+ ```
229
+
230
+ Check the work, then ask your agent to mark it checked.
231
+
232
+ ```text
233
+ MOB-04 looks good, mark it checked in planr.
234
+ ```
235
+
236
+ Add tasks to a goal, or plan the next one.
237
+
238
+ ```text
239
+ Use planr to add Face ID sign-in to goal mobile-app. It depends on MOB-02.
240
+ ```
241
+
242
+ ```text
243
+ Use planr to plan shared budgets for households as the next goal.
244
+ ```
245
+
246
+ <!-- show: agent=other -->
247
+ ### Prompts in other agents
248
+
249
+ Ask in plain words, or use your agent's skill command, often `/planr` or `$planr`.
250
+
251
+ ```text
252
+ Use planr to plan a mobile budgeting app. Add tasks, dependencies & a draft goal.
253
+ ```
254
+
255
+ Read the draft goal, then tell your agent to approve it.
256
+
257
+ ```text
258
+ Approve goal mobile-app in planr.
259
+ ```
260
+
261
+ Ask your agent to start.
262
+
263
+ ```text
264
+ Use planr to work on goal mobile-app with our orchestrator.
265
+ ```
266
+
267
+ Ask what is ready & what needs you.
268
+
269
+ ```text
270
+ Use planr to show what's ready & what's waiting on me.
271
+ ```
272
+
273
+ Check the work, then ask your agent to mark it checked.
274
+
275
+ ```text
276
+ MOB-04 looks good, mark it checked in planr.
277
+ ```
278
+
279
+ Add tasks to a goal, or plan the next one.
280
+
281
+ ```text
282
+ Use planr to add Face ID sign-in to goal mobile-app. It depends on MOB-02.
283
+ ```
284
+
285
+ ```text
286
+ Use planr to plan shared budgets for households as the next goal.
287
+ ```
288
+
289
+ ### Approve & check
290
+
291
+ Your agent approves a goal or marks work checked only on your instruction in the current
292
+ conversation. It must never do either on its own initiative or because another agent asks.
293
+ Its commit message records that you asked. Built & tested tasks wait in `review` until you check them.
294
+
295
+ The [bb board](plugins/bb.md) also has optional Approve & Mark checked buttons. Your agent can use
296
+ `npx planr goal mobile-app approved` & `npx planr set MOB-04 done` in the planning folder.
297
+
298
+ ## Open the board
299
+
300
+ Run this in the planning folder, or in the repository root for `--in-repo`.
301
+
302
+ ```sh
303
+ npx planr board --serve
304
+ ```
305
+
306
+ Open <http://127.0.0.1:4173>. The board is read-only & reloads when the plan changes.
307
+ See [the board](board.md) for its views, or [concepts](concepts.md) for tasks, goals & approvers.