planr 1.4.0 → 1.5.1

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 (60) hide show
  1. package/README.md +21 -61
  2. package/docs/ARCHITECTURE.md +4 -4
  3. package/docs/CLAUDE_CODE.md +2 -2
  4. package/docs/CLI_REFERENCE.md +6 -14
  5. package/docs/CODEX.md +6 -6
  6. package/docs/CURSOR.md +2 -2
  7. package/docs/EXAMPLE_WEBAPP.md +63 -97
  8. package/docs/GOALS.md +8 -25
  9. package/docs/INSTALL.md +3 -3
  10. package/docs/MCP_CONTRACT.md +6 -9
  11. package/docs/MODEL_ROUTING.md +20 -177
  12. package/docs/RELEASE.md +1 -1
  13. package/docs/ROUTING_BUNDLES.md +32 -0
  14. package/docs/SKILLS.md +35 -50
  15. package/docs/documentation/CONTRACT.md +164 -0
  16. package/docs/documentation/COVERAGE.md +91 -0
  17. package/docs/documentation/INFORMATION_ARCHITECTURE.md +147 -0
  18. package/docs/fixtures/mcp-contract.json +3 -11
  19. package/npm/native/darwin-arm64/planr +0 -0
  20. package/npm/native/darwin-x86_64/planr +0 -0
  21. package/npm/native/linux-arm64/planr +0 -0
  22. package/npm/native/linux-x86_64/planr +0 -0
  23. package/package.json +25 -14
  24. package/plugins/planr/.claude-plugin/plugin.json +1 -1
  25. package/plugins/planr/.codex-plugin/plugin.json +2 -2
  26. package/plugins/planr/skills/planr-loop/SKILL.md +1 -1
  27. package/docs/PRESET_COMPOSITION.md +0 -109
  28. package/docs/PRESET_EVALUATION.md +0 -118
  29. package/docs/PRESET_REGISTRY.md +0 -61
  30. package/evaluations/preset-suite-v1.toml +0 -127
  31. package/evaluations/sol-luna-codex-v1.toml +0 -42
  32. package/plugins/planr/skills/planr-loop/agents/planr-reviewer.toml +0 -23
  33. package/plugins/planr/skills/planr-loop/agents/planr-worker.toml +0 -21
  34. package/presets/bindings/claude-native.toml +0 -52
  35. package/presets/bindings/codex-openai.toml +0 -56
  36. package/presets/bindings/cursor-fable-grok.toml +0 -49
  37. package/presets/bindings/cursor-openai.toml +0 -49
  38. package/presets/bindings/mixed-host.toml +0 -64
  39. package/presets/policies/balanced.toml +0 -50
  40. package/presets/policies/low-usage.toml +0 -50
  41. package/presets/policies/max-quality.toml +0 -50
  42. package/presets/policies/read-only-audit.toml +0 -50
  43. package/website/README.md +0 -79
  44. package/website/_headers +0 -7
  45. package/website/alchemy-runtime.test.mjs +0 -21
  46. package/website/app.mjs +0 -216
  47. package/website/build-catalog.mjs +0 -135
  48. package/website/build-site.test.mjs +0 -69
  49. package/website/catalog-model.mjs +0 -185
  50. package/website/catalog-model.test.mjs +0 -124
  51. package/website/cloudflare-launcher.test.mjs +0 -38
  52. package/website/data/catalog.json +0 -307
  53. package/website/index.html +0 -122
  54. package/website/registry/manifest.toml +0 -48
  55. package/website/registry/report.md +0 -33
  56. package/website/registry/trusted-maintainers.toml +0 -6
  57. package/website/registry/verification.json +0 -7258
  58. package/website/serve.mjs +0 -41
  59. package/website/styles.css +0 -201
  60. package/website/test-fixtures/recommended.json +0 -72
@@ -1,307 +0,0 @@
1
- {
2
- "schemaVersion": 1,
3
- "generatedAtUnix": 1783987200,
4
- "source": {
5
- "state": "verified_registry_projection",
6
- "manifest": "website/registry/manifest.toml",
7
- "entryCount": 1,
8
- "trust": "planr_registry_v1"
9
- },
10
- "compositions": [
11
- {
12
- "id": "balanced-codex@1.0.0",
13
- "entryId": "balanced-codex",
14
- "entryVersion": "1.0.0",
15
- "status": "recommended",
16
- "statusLabel": "Recommended",
17
- "recommended": true,
18
- "freshness": "current",
19
- "lifecycle": "published",
20
- "replacement": null,
21
- "policy": {
22
- "id": "balanced",
23
- "version": "1.0.0",
24
- "usage": {
25
- "budget_exhaustion": "stop",
26
- "max_active_agents": 3,
27
- "max_attempts": 4,
28
- "max_depth": 1,
29
- "max_parallel_readers": 2,
30
- "max_parallel_writers": 1,
31
- "max_tool_calls": 120,
32
- "max_wall_time_seconds": 3600,
33
- "metering": "estimated",
34
- "review_reserve_percent": 20
35
- },
36
- "transitions": {
37
- "availability_fallback": {
38
- "max_fallbacks": 1,
39
- "require_same_capability_class": true
40
- },
41
- "quality_escalation": {
42
- "max_escalations": 1,
43
- "require_verification_evidence": true
44
- },
45
- "quota_downgrade": {
46
- "enabled": false,
47
- "max_downgrades": 0,
48
- "noncritical_only": true
49
- },
50
- "retry": {
51
- "max_same_route_retries": 1
52
- },
53
- "safety_stop": {
54
- "enabled": true
55
- }
56
- },
57
- "materiality": {
58
- "changed_files_threshold": 10,
59
- "changed_lines_threshold": 500
60
- },
61
- "execution": {
62
- "max_read_scope_entries": 8,
63
- "max_write_scope_entries": 4,
64
- "roles": {
65
- "worker": {
66
- "approvals": [],
67
- "commands": [],
68
- "environment": [],
69
- "filesystem": {
70
- "allow_overwrite": false,
71
- "read_roots": [
72
- "docs",
73
- "src",
74
- "tests"
75
- ],
76
- "write_roots": [
77
- "docs",
78
- "src",
79
- "tests"
80
- ]
81
- },
82
- "hooks": [],
83
- "mcp_servers": [],
84
- "network_hosts": [],
85
- "secret_references": "[REDACTED]",
86
- "tools": [
87
- "cargo",
88
- "git",
89
- "rg"
90
- ]
91
- }
92
- }
93
- }
94
- },
95
- "binding": {
96
- "id": "codex-openai",
97
- "version": "1.0.0",
98
- "host": "codex",
99
- "profiles": {
100
- "codex-openai-driver": {
101
- "capabilities": [],
102
- "client": "codex",
103
- "cost_tier": "premium",
104
- "effort": "xhigh",
105
- "model": "gpt-5.5"
106
- },
107
- "codex-openai-worker": {
108
- "capabilities": [],
109
- "client": "codex",
110
- "cost_tier": "standard",
111
- "effort": "high",
112
- "model": "gpt-5.4-mini",
113
- "skill": "planr-work"
114
- }
115
- },
116
- "dispatch": {
117
- "driver": {
118
- "capability_evidence": [
119
- "builtin-codex-none-fork-contract"
120
- ],
121
- "effort_override": false,
122
- "fork_turns": {
123
- "mode": "none"
124
- },
125
- "model_override": false
126
- },
127
- "worker": {
128
- "capability_evidence": [
129
- "builtin-codex-none-fork-contract"
130
- ],
131
- "effort_override": true,
132
- "fork_turns": {
133
- "mode": "none"
134
- },
135
- "model_override": true
136
- }
137
- }
138
- },
139
- "compatibility": {
140
- "hosts": [
141
- "codex"
142
- ],
143
- "minPlanrVersion": "1.3.0",
144
- "maxPlanrVersion": "1.9.0"
145
- },
146
- "enforcement": [
147
- {
148
- "dimension": "Policy limits",
149
- "state": "verified",
150
- "detail": "Planr validates count, time, concurrency, transition, and safety-stop limits before dispatch."
151
- },
152
- {
153
- "dimension": "Execution permissions",
154
- "state": "verified",
155
- "detail": "Registry-safe policy: no commands, hooks, network/MCP grants, secrets, or overwrite permission."
156
- },
157
- {
158
- "dimension": "Model and effort",
159
- "state": "host_enforced",
160
- "detail": "The host binding requests concrete routes; the host retains final execution authority."
161
- },
162
- {
163
- "dimension": "Effective route evidence",
164
- "state": "verified",
165
- "detail": "7 of 7 evaluation runs carried verified effective-route evidence."
166
- }
167
- ],
168
- "evaluation": {
169
- "suiteId": "planr-preset-suite",
170
- "suiteVersion": "1.8.0",
171
- "evaluatedAtUnix": 1783987200,
172
- "reviewAtUnix": 1815523200,
173
- "status": "recommended",
174
- "metrics": {
175
- "actual_task_runs": 7,
176
- "availability_fallbacks": 7,
177
- "average_credits_micros": 100,
178
- "average_quality_score_bps": 10000,
179
- "corrections": 7,
180
- "metrics_source": "trusted_telemetry",
181
- "oracle_passes": 7,
182
- "p95_latency_ms": 228,
183
- "quality_escalations": 7,
184
- "reliability_bps": 10000,
185
- "retries": 7,
186
- "runs": 7,
187
- "safety_stop_attempts": 1,
188
- "safety_stop_failures": 0,
189
- "total_credits_micros": 700,
190
- "total_tokens": 70,
191
- "total_tool_calls": 7,
192
- "transition_contract_failures": 0,
193
- "verified_result_hashes": 7,
194
- "verified_route_runs": 7,
195
- "violations": 0
196
- },
197
- "thresholds": [
198
- {
199
- "actual": "7",
200
- "name": "minimum_runs",
201
- "pass": true,
202
- "rule": ">= 7"
203
- },
204
- {
205
- "actual": "10000",
206
- "name": "quality",
207
- "pass": true,
208
- "rule": ">= 8500 bps"
209
- },
210
- {
211
- "actual": "10000",
212
- "name": "reliability",
213
- "pass": true,
214
- "rule": ">= 9000 bps"
215
- },
216
- {
217
- "actual": "100",
218
- "name": "average_cost",
219
- "pass": true,
220
- "rule": "<= 1200000 credits_micros"
221
- },
222
- {
223
- "actual": "228",
224
- "name": "p95_latency",
225
- "pass": true,
226
- "rule": "<= 5000 ms"
227
- },
228
- {
229
- "actual": "0",
230
- "name": "transition_contract",
231
- "pass": true,
232
- "rule": "<= 0 failures"
233
- },
234
- {
235
- "actual": "0",
236
- "name": "safety_stop",
237
- "pass": true,
238
- "rule": "<= 0 failures"
239
- },
240
- {
241
- "actual": "7/7",
242
- "name": "actual_task_runs",
243
- "pass": true,
244
- "rule": "all fixtures executed"
245
- },
246
- {
247
- "actual": "7/7",
248
- "name": "output_oracles",
249
- "pass": true,
250
- "rule": "all task output oracles pass"
251
- },
252
- {
253
- "actual": "7/7",
254
- "name": "route_evidence",
255
- "pass": true,
256
- "rule": "all runs verified"
257
- },
258
- {
259
- "actual": "7/7",
260
- "name": "result_hashes",
261
- "pass": true,
262
- "rule": "all result hashes verified"
263
- }
264
- ],
265
- "resultHashes": [
266
- "c721c30da6e5f988de6741e8d4e611f7f45ad36425559a6b67ae4723869619be",
267
- "e026c322f1f094f7241d352a8e9c70f10b89d456e7f42825b3c689dc5d785dc9",
268
- "c74bf8de8296ff94ba45deeac158b619e3eb99c4e1b5251169bc2f1586518979",
269
- "f76f06ae46bc2ce05bd631ee1f702e348a8dd3b8d4b2e53d59c409af4f330015",
270
- "2165057d66dcc73722a57d01fb237a73f4da12bc70ab8757c817975925bfbbd8",
271
- "052de2acf92d0ac000a15b92b26d5f173fe4ff606ee1dbe37df1e4a535cbdff8",
272
- "41bf6ab560a23c450e9def8944c934091b598d270978fef8aaae0933f806619e"
273
- ],
274
- "fixtureSha256": "733c94e049d784eec2fa222f60c230e3f185ccefc84c23c313b1d7e85b60ab22"
275
- },
276
- "registry": {
277
- "id": "planr-official",
278
- "version": "2026.07",
279
- "manifestSha256": "1512df7f667dd1c8f92b2eb39a06739336048dde58327195ada85b419a6cb4c7",
280
- "signer": "planr-release-2026",
281
- "signatureVerified": true,
282
- "trustedMaintainer": true,
283
- "artifacts": [
284
- {
285
- "path": "presets/policies/balanced.toml",
286
- "kind": "policy",
287
- "sha256": "827667b678224f6b09f7c3faab188ede4c7bad49cd2fc9fa8e46f01d61147080",
288
- "sizeBytes": 993
289
- },
290
- {
291
- "path": "presets/bindings/codex-openai.toml",
292
- "kind": "host-binding",
293
- "sha256": "2f1f1d91000aff8e6a7424f0380c16c46d24ee38c94de5a9beee2158c0bf6575",
294
- "sizeBytes": 1449
295
- },
296
- {
297
- "path": "website/registry/verification.json",
298
- "kind": "verification",
299
- "sha256": "7d1e36372b050ecab5080ea029fd3594f8f8f1df2f1d391c36aebd0fb56cf99a",
300
- "sizeBytes": 276027
301
- }
302
- ]
303
- },
304
- "command": "planr agents preset apply balanced --binding codex-openai"
305
- }
306
- ]
307
- }
@@ -1,122 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <meta
7
- name="description"
8
- content="Compare verified Planr policy and host-binding compositions with evaluation and registry provenance."
9
- />
10
- <meta
11
- http-equiv="Content-Security-Policy"
12
- content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'"
13
- />
14
- <title>Planr Preset Catalog</title>
15
- <link rel="stylesheet" href="./styles.css" />
16
- <script type="module" src="./app.mjs"></script>
17
- </head>
18
- <body>
19
- <a class="skip-link" href="#catalog">Skip to catalog</a>
20
- <header class="site-header">
21
- <a class="brand" href="./" aria-label="Planr preset catalog home">
22
- <span class="brand-mark" aria-hidden="true">P</span>
23
- <span>Planr <strong>Presets</strong></span>
24
- </a>
25
- <p class="header-note">Evidence before recommendation.</p>
26
- </header>
27
-
28
- <main id="catalog">
29
- <section class="hero" aria-labelledby="hero-title">
30
- <div class="hero-copy">
31
- <p class="eyebrow">Public catalog · read-only</p>
32
- <h1 id="hero-title">Choose policy intent.<br />See host reality.</h1>
33
- <p class="lede">
34
- Compare portable Planr policies with versioned host bindings. Every published status comes from
35
- registry verification and evaluation evidence—not editorial judgment.
36
- </p>
37
- </div>
38
- <dl class="catalog-stats" aria-label="Catalog summary">
39
- <div><dt>Published</dt><dd id="stat-published">—</dd></div>
40
- <div><dt>Recommended</dt><dd id="stat-recommended">—</dd></div>
41
- <div><dt>Trust source</dt><dd id="stat-trust">Loading</dd></div>
42
- </dl>
43
- </section>
44
-
45
- <section id="fixture-banner" class="fixture-banner" hidden aria-label="Test fixture notice">
46
- Local test fixture. Recommendation labels on this page are synthetic and are not published registry metadata.
47
- </section>
48
-
49
- <section class="authority-note" aria-labelledby="authority-title">
50
- <div aria-hidden="true" class="authority-icon">↳</div>
51
- <div>
52
- <h2 id="authority-title">Planr governs policy; the host executes the route.</h2>
53
- <p>
54
- A binding can request a model, effort, and context-fork mode. Codex, Claude Code, Cursor, or another host
55
- retains the final concrete execution choice. The catalog distinguishes binding intent from verified
56
- effective-route evidence.
57
- </p>
58
- </div>
59
- </section>
60
-
61
- <section class="compare-shell" aria-labelledby="compare-title">
62
- <div class="section-heading">
63
- <div>
64
- <p class="eyebrow">Side-by-side</p>
65
- <h2 id="compare-title">Compare compositions</h2>
66
- </div>
67
- <label class="toggle">
68
- <input id="recommended-only" type="checkbox" />
69
- <span>Recommended only</span>
70
- </label>
71
- </div>
72
-
73
- <div class="selectors" aria-label="Comparison choices">
74
- <label>
75
- <span>Composition A</span>
76
- <select id="composition-a" aria-controls="comparison-a"></select>
77
- </label>
78
- <span class="versus" aria-hidden="true">vs</span>
79
- <label>
80
- <span>Composition B</span>
81
- <select id="composition-b" aria-controls="comparison-b"></select>
82
- </label>
83
- </div>
84
-
85
- <div id="empty-state" class="empty-state" hidden>
86
- <p class="eyebrow">Publication gate active</p>
87
- <h3>No trusted compositions are published.</h3>
88
- <p id="empty-message">
89
- Generate this catalog from a signed registry manifest after Planr verifies its evaluation evidence.
90
- </p>
91
- <code>node website/build-catalog.mjs --help</code>
92
- </div>
93
-
94
- <div id="comparison" class="comparison-grid" aria-live="polite">
95
- <article id="comparison-a" class="preset-card" aria-label="Composition A"></article>
96
- <article id="comparison-b" class="preset-card" aria-label="Composition B"></article>
97
- </div>
98
- </section>
99
-
100
- <section class="legend" aria-labelledby="legend-title">
101
- <div>
102
- <p class="eyebrow">Status language</p>
103
- <h2 id="legend-title">Five states, no ambiguity</h2>
104
- </div>
105
- <dl>
106
- <div><dt>Experimental</dt><dd>Valid enough to inspect; evaluation binding is not required.</dd></div>
107
- <div><dt>Verified</dt><dd>Integrity and current evaluation checks pass; recommendation gates did not.</dd></div>
108
- <div><dt>Recommended</dt><dd>Trusted signature plus current canonical evaluation and telemetry gates pass.</dd></div>
109
- <div><dt>Stale</dt><dd>The review date or current suite validity has expired.</dd></div>
110
- <div><dt>Deprecated</dt><dd>Published for continuity with an explicit replacement path.</dd></div>
111
- </dl>
112
- </section>
113
- </main>
114
-
115
- <footer>
116
- <p>Local-first by design. A catalog outage never affects installed packs or active projects.</p>
117
- <p id="generated-at">Catalog provenance loading…</p>
118
- </footer>
119
- <div id="copy-status" class="sr-only" aria-live="polite"></div>
120
- </body>
121
- </html>
122
-
@@ -1,48 +0,0 @@
1
- schema_version = 1
2
- id = "planr-official"
3
- version = "2026.07"
4
- generated_at_unix = 1783987200
5
-
6
- [[entries]]
7
- id = "balanced-codex"
8
- version = "1.0.0"
9
- kind = "pack"
10
- lifecycle = "published"
11
- verification_status = "recommended"
12
- verified_at_unix = 1783987200
13
- review_at_unix = 1815523200
14
- compatible_hosts = ["codex"]
15
- min_planr_version = "1.3.0"
16
- max_planr_version = "1.9.0"
17
- verification_path = "website/registry/verification.json"
18
-
19
- [entries.evaluation]
20
- policy_id = "balanced"
21
- policy_version = "1.0.0"
22
- binding_id = "codex-openai"
23
- binding_version = "1.0.0"
24
- suite_id = "planr-preset-suite"
25
- suite_version = "1.8.0"
26
-
27
- [[entries.artifacts]]
28
- path = "presets/policies/balanced.toml"
29
- kind = "policy"
30
- sha256 = "827667b678224f6b09f7c3faab188ede4c7bad49cd2fc9fa8e46f01d61147080"
31
- size_bytes = 993
32
-
33
- [[entries.artifacts]]
34
- path = "presets/bindings/codex-openai.toml"
35
- kind = "host-binding"
36
- sha256 = "2f1f1d91000aff8e6a7424f0380c16c46d24ee38c94de5a9beee2158c0bf6575"
37
- size_bytes = 1449
38
-
39
- [[entries.artifacts]]
40
- path = "website/registry/verification.json"
41
- kind = "verification"
42
- sha256 = "7d1e36372b050ecab5080ea029fd3594f8f8f1df2f1d391c36aebd0fb56cf99a"
43
- size_bytes = 276027
44
-
45
- [entries.signature]
46
- signer = "planr-release-2026"
47
- algorithm = "ed25519"
48
- value = "122e213bab8e51b3030685a48b1a3520bc5e2397515dc3aa38da7ed333211e8202e4802949e667add6f29389af29510c2570c4511385206e61c17d4aa914d208"
@@ -1,33 +0,0 @@
1
- # Preset Evaluation Verification
2
-
3
- Fixture: `planr-preset-suite` v1.8.0 (`733c94e049d784eec2fa222f60c230e3f185ccefc84c23c313b1d7e85b60ab22`)
4
- Verified: 1783987200 / expires: 1815523200 / evaluated: 1783987200
5
- Runner: planr-instrumented-live-host-runner schema 1 / Planr 1.3.0 / macos aarch64
6
-
7
- This report joined Planr-read challenge-bound task artifacts with independently signed Ed25519 telemetry receipts. Verified receipts provide trusted effective-route and usage measurements; missing or invalid receipts remain recommendation-ineligible.
8
-
9
- | Candidate | Status | Source | Quality | Reliability | Avg cost | p95 latency | Hashes | Label |
10
- |---|---|---|---:|---:|---:|---:|---:|---|
11
- | `balanced-codex-openai` | `Recommended` | `TrustedTelemetry` | 10000 bps | 10000 bps | 100 μcredits | 228 ms | 7/7 | recommended |
12
- | `low-usage-codex-openai` | `Unverified` | `TrustedTelemetry` | 9663 bps | 4285 bps | 100 μcredits | 197 ms | 7/7 | — |
13
- | `max-quality-codex-openai` | `Recommended` | `TrustedTelemetry` | 10000 bps | 10000 bps | 100 μcredits | 171 ms | 7/7 | recommended |
14
- | `read-only-audit-codex-openai` | `Unverified` | `TrustedTelemetry` | 9831 bps | 7142 bps | 100 μcredits | 169 ms | 7/7 | — |
15
-
16
- ## Versioned task inputs
17
-
18
- - `Exploration` `explore-routing-boundaries` v1.0.0: `277f2f9155f85365324c6ea6cd717baa47bc9c482446217b30d9f94c6d6684df`
19
- - `Implementation` `implement-bounded-policy-change` v1.0.0: `f4704037e6a63746e100d31aa98843adeca458fdb336a3317565b62693d676d2`
20
- - `Mechanical` `mechanical-schema-rewrite` v1.0.0: `96882c36d71af8c0637a17cfb47db66dbef0fbd170c963ba500c8d9f23d48a7a`
21
- - `Browser` `browser-report-smoke` v1.0.0: `fc453ccf8422fa0093edb60b0162e83982e005b07ee569de5dff222b13319827`
22
- - `Visual` `visual-report-regression` v1.0.0: `d71938957b10cbcf8dd67fde7e43853ba66fc23ab3b436fa3287caa6a2b5a1f3`
23
- - `Security` `security-safety-stop` v1.0.0: `dd439a0094897e7ebed01c301fed542e910e8e2b7d6b2a5942c1c44b47082e7f`
24
- - `Subagent` `subagent-sol-luna-dispatch` v1.0.0: `38372ba41431ccf4f2e9b56ea5f93db55e52156e3fa1c2956bf3dca15d63654f`
25
-
26
- ## Codex Sol/Luna contract
27
-
28
- - [x] `fork_turns = all` rejected
29
- - [x] `fork_turns = none` parameters verified
30
- - [x] missing effective model/effort cannot verify
31
- - [x] process-exit effective route evidence verifies
32
-
33
- Reproducible evidence: **fail**.
@@ -1,6 +0,0 @@
1
- schema_version = 1
2
-
3
- [[maintainers]]
4
- id = "planr-release-2026"
5
- public_key = "e8631493d6da6ea3983f17585270f558e7757da5bb08bd228756da318d0a6b14"
6
- revoked = false