openplanr 2.2641.1 → 2.2641.2

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 (245) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/artifact.js +1 -1
  4. package/dist/cli/commands/artifact.js.map +1 -1
  5. package/dist/cli/commands/github.d.ts.map +1 -1
  6. package/dist/cli/commands/github.js +7 -10
  7. package/dist/cli/commands/github.js.map +1 -1
  8. package/dist/cli/commands/linear.js +1 -1
  9. package/dist/cli/commands/linear.js.map +1 -1
  10. package/dist/cli/commands/report.d.ts.map +1 -1
  11. package/dist/cli/commands/report.js +28 -32
  12. package/dist/cli/commands/report.js.map +1 -1
  13. package/dist/dashboard/.vite/manifest.json +1 -1
  14. package/dist/dashboard/assets/{index-DGyC7RDz.js → index-DI_TKz9J.js} +2 -2
  15. package/dist/dashboard/assets/{index-DGyC7RDz.js.map → index-DI_TKz9J.js.map} +1 -1
  16. package/dist/dashboard/dashboard-manifest.json +8 -8
  17. package/dist/dashboard/index.html +1 -1
  18. package/dist/models/schema.d.ts +0 -4
  19. package/dist/models/schema.d.ts.map +1 -1
  20. package/dist/models/schema.js +0 -2
  21. package/dist/models/schema.js.map +1 -1
  22. package/dist/models/types.d.ts +1 -4
  23. package/dist/models/types.d.ts.map +1 -1
  24. package/dist/services/credentials-service.js +1 -1
  25. package/dist/services/credentials-service.js.map +1 -1
  26. package/dist/services/distribution-service.d.ts +1 -4
  27. package/dist/services/distribution-service.d.ts.map +1 -1
  28. package/dist/services/distribution-service.js +1 -60
  29. package/dist/services/distribution-service.js.map +1 -1
  30. package/dist/services/github-service.d.ts +7 -4
  31. package/dist/services/github-service.d.ts.map +1 -1
  32. package/dist/services/github-service.js +16 -15
  33. package/dist/services/github-service.js.map +1 -1
  34. package/dist/services/linear-push-service.d.ts +3 -4
  35. package/dist/services/linear-push-service.d.ts.map +1 -1
  36. package/dist/services/linear-push-service.js +5 -6
  37. package/dist/services/linear-push-service.js.map +1 -1
  38. package/dist/services/spec-service.d.ts.map +1 -1
  39. package/dist/services/spec-service.js +34 -69
  40. package/dist/services/spec-service.js.map +1 -1
  41. package/dist/templates/rules/shared/capability-map.md.hbs +1 -1
  42. package/docs/CLI.md +10 -14
  43. package/lib/host-packages/adapter-registry.json +5 -5
  44. package/lib/host-packages/capability-map.json +8 -8
  45. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  46. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  47. package/lib/host-packages/claude/openplanr/.openplanr-content.json +80 -64
  48. package/lib/host-packages/claude/openplanr/README.md +8 -12
  49. package/lib/host-packages/claude/openplanr/agents/planr-backend.md +49 -55
  50. package/lib/host-packages/claude/openplanr/agents/planr-database.md +56 -92
  51. package/lib/host-packages/claude/openplanr/agents/planr-designer.md +35 -51
  52. package/lib/host-packages/claude/openplanr/agents/planr-devops.md +37 -51
  53. package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +29 -52
  54. package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +24 -23
  55. package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +46 -58
  56. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +4 -2
  57. package/lib/host-packages/claude/openplanr/agents/planr-specification.md +54 -51
  58. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +21 -65
  59. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +5 -6
  60. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +2 -3
  61. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +3 -4
  62. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +19 -64
  63. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +10 -12
  64. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +19 -62
  65. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +3 -4
  66. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +2 -3
  67. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +2 -3
  68. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +16 -59
  69. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +9 -11
  70. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +4 -4
  71. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +24 -9
  72. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +3 -3
  73. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  74. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  75. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
  76. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +1 -1
  77. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
  78. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +2 -2
  79. package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +1 -1
  80. package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +0 -1
  81. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  82. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +6 -2
  83. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +6 -2
  84. package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +0 -1
  85. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  86. package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +0 -1
  87. package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  88. package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +0 -1
  89. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  90. package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +0 -1
  91. package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  92. package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +7 -0
  93. package/lib/host-packages/claude/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  94. package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +7 -5
  95. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  96. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  97. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  98. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/context.mjs +84 -22
  99. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  100. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  101. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  102. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  103. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  104. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +1 -1
  105. package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +5 -3
  106. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +8 -2
  107. package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +5 -4
  108. package/lib/host-packages/claude/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  109. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +4 -3
  110. package/lib/host-packages/claude/openplanr/skills/status/references/tracker-connections.md +70 -0
  111. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +11 -20
  112. package/lib/host-packages/claude/openplanr/skills/sync/references/tracker-connections.md +70 -0
  113. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +2 -2
  114. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +52 -36
  115. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  116. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +1 -1
  117. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +2 -2
  118. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +25 -4
  119. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +6 -1
  120. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +6 -1
  121. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +25 -4
  122. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +25 -4
  123. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +25 -4
  124. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +25 -4
  125. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/capsule-contract.md +16 -1
  126. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +7 -5
  127. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +11 -4
  128. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +1 -1
  129. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/backend-diagnostics.mjs +14 -48
  130. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/context.mjs +84 -22
  131. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/credentials.mjs +167 -0
  132. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +3 -2
  133. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +5 -7
  134. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +2 -0
  135. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -3
  136. package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +7 -0
  137. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +1 -1
  138. package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +5 -3
  139. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +8 -2
  140. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/tracker-connections.md +70 -0
  141. package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +5 -4
  142. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/tracker-connections.md +70 -0
  143. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +4 -3
  144. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/tracker-connections.md +70 -0
  145. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +2 -2
  146. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +11 -20
  147. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +24 -9
  148. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +3 -3
  149. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  150. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  151. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
  152. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +1 -1
  153. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
  154. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  155. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  156. package/lib/host-packages/openai/openplanr/.openplanr-content.json +61 -45
  157. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +24 -9
  158. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +3 -3
  159. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  160. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  161. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
  162. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +1 -1
  163. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
  164. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +2 -2
  165. package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +1 -1
  166. package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +0 -1
  167. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  168. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +6 -2
  169. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +6 -2
  170. package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +0 -1
  171. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  172. package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +0 -1
  173. package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  174. package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +0 -1
  175. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  176. package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +0 -1
  177. package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  178. package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +7 -0
  179. package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +11 -0
  180. package/lib/host-packages/openai/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  181. package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +7 -5
  182. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  183. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  184. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  185. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/context.mjs +84 -22
  186. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  187. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  188. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  189. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  190. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  191. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +1 -1
  192. package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +5 -3
  193. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +8 -2
  194. package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +5 -4
  195. package/lib/host-packages/openai/openplanr/skills/sprint/openplanr.skill.json +11 -0
  196. package/lib/host-packages/openai/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  197. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +4 -3
  198. package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +11 -0
  199. package/lib/host-packages/openai/openplanr/skills/status/references/tracker-connections.md +70 -0
  200. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +11 -20
  201. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +11 -0
  202. package/lib/host-packages/openai/openplanr/skills/sync/references/tracker-connections.md +70 -0
  203. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +2 -2
  204. package/lib/integrations.mjs +2 -2
  205. package/package.json +2 -2
  206. package/dist/services/connectors/adapters/business-metrics.d.ts +0 -5
  207. package/dist/services/connectors/adapters/business-metrics.d.ts.map +0 -1
  208. package/dist/services/connectors/adapters/business-metrics.js +0 -41
  209. package/dist/services/connectors/adapters/business-metrics.js.map +0 -1
  210. package/dist/services/connectors/adapters/deployment-health.d.ts +0 -18
  211. package/dist/services/connectors/adapters/deployment-health.d.ts.map +0 -1
  212. package/dist/services/connectors/adapters/deployment-health.js +0 -67
  213. package/dist/services/connectors/adapters/deployment-health.js.map +0 -1
  214. package/dist/services/connectors/adapters/github.d.ts +0 -5
  215. package/dist/services/connectors/adapters/github.d.ts.map +0 -1
  216. package/dist/services/connectors/adapters/github.js +0 -31
  217. package/dist/services/connectors/adapters/github.js.map +0 -1
  218. package/dist/services/connectors/adapters/linear-jira.d.ts +0 -5
  219. package/dist/services/connectors/adapters/linear-jira.d.ts.map +0 -1
  220. package/dist/services/connectors/adapters/linear-jira.js +0 -26
  221. package/dist/services/connectors/adapters/linear-jira.js.map +0 -1
  222. package/dist/services/connectors/adapters/posthog.d.ts +0 -5
  223. package/dist/services/connectors/adapters/posthog.d.ts.map +0 -1
  224. package/dist/services/connectors/adapters/posthog.js +0 -31
  225. package/dist/services/connectors/adapters/posthog.js.map +0 -1
  226. package/dist/services/connectors/adapters/sentry.d.ts +0 -5
  227. package/dist/services/connectors/adapters/sentry.d.ts.map +0 -1
  228. package/dist/services/connectors/adapters/sentry.js +0 -31
  229. package/dist/services/connectors/adapters/sentry.js.map +0 -1
  230. package/dist/services/connectors/checkpoint-custody.d.ts +0 -45
  231. package/dist/services/connectors/checkpoint-custody.d.ts.map +0 -1
  232. package/dist/services/connectors/checkpoint-custody.js +0 -499
  233. package/dist/services/connectors/checkpoint-custody.js.map +0 -1
  234. package/dist/services/connectors/connector-registry.d.ts +0 -144
  235. package/dist/services/connectors/connector-registry.d.ts.map +0 -1
  236. package/dist/services/connectors/connector-registry.js +0 -423
  237. package/dist/services/connectors/connector-registry.js.map +0 -1
  238. package/dist/services/connectors/connector-runtime.d.ts +0 -208
  239. package/dist/services/connectors/connector-runtime.d.ts.map +0 -1
  240. package/dist/services/connectors/connector-runtime.js +0 -1305
  241. package/dist/services/connectors/connector-runtime.js.map +0 -1
  242. package/dist/services/connectors/credential-custody.d.ts +0 -96
  243. package/dist/services/connectors/credential-custody.d.ts.map +0 -1
  244. package/dist/services/connectors/credential-custody.js +0 -390
  245. package/dist/services/connectors/credential-custody.js.map +0 -1
@@ -2,7 +2,6 @@
2
2
  name: chair-review
3
3
  description: "Synthesize an Operate cycle into a prioritized decision queue and action plan. Use after specialist reviews when leadership needs one coherent brief."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr Chair Review
@@ -18,7 +17,12 @@ and its decision impact; continue when the remaining notes still support useful
18
17
  selected roster from the scope or brief and label an intentionally unselected lens `omitted by
19
18
  scope`; do not turn that omission into an issue or decision-changing gap.
20
19
 
21
- Write only `<output-path>`.
20
+ Write only `<output-path>`. Writes follow the host's normal permission rules; this skill
21
+ pre-approves nothing.
22
+
23
+ Invoked without `<cycle-dir>`, offer the most recent cycle under `.planr/operate/` that holds
24
+ advisor notes and use its `chair.md` as the output path. When there is none, say so and point to
25
+ `planr-operate`; never create an empty cycle.
22
26
 
23
27
  ## Synthesis standard
24
28
 
@@ -2,7 +2,6 @@
2
2
  name: challenger-review
3
3
  description: "Challenge an Operate cycle's claims, alternatives, downside, and confidence. Use when assumptions or executive consensus need an independent stress test."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr Challenger Review
@@ -18,7 +17,12 @@ Use `<cycle-dir>`, `<brief-path>`, `<output-path>`, and `<scope>`. Inspect the a
18
17
  is `omitted by scope`, not unavailable, and creates no gap by itself. If a selected advisor note is
19
18
  unavailable, record the decision impact rather than reconstructing that lens.
20
19
 
21
- Write only `<output-path>`.
20
+ Write only `<output-path>`. Writes follow the host's normal permission rules; this skill
21
+ pre-approves nothing.
22
+
23
+ Invoked without `<cycle-dir>`, offer the most recent cycle under `.planr/operate/` that holds
24
+ advisor notes and use its `challenger.md` as the output path. When there is none, say so and point
25
+ to `planr-operate`; never create an empty cycle.
22
26
 
23
27
  ## Material exceptions
24
28
 
@@ -2,7 +2,6 @@
2
2
  name: cmo-review
3
3
  description: "Produce a grounded market and growth review for an Operate cycle. Use when acquisition, positioning, demand, retention, or missing measurement needs a CMO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr CMO Review
@@ -1,8 +1,8 @@
1
1
  # Shared Operate advisor contract
2
2
 
3
- This contract supplies the common context method and output shape for the five executive advisor
4
- skills. The invoking skill supplies the lens, review questions, useful sources, and decision
5
- standard. Follow both.
3
+ This contract supplies the common context method and output shape for the executive advisor
4
+ skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
5
+ useful sources, and decision standard. Follow both.
6
6
 
7
7
  ## Outcome
8
8
 
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
21
21
  drawing conclusions. If an input is unavailable, report the exact problem and continue when the
22
22
  remaining context still supports a useful note.
23
23
 
24
- Write the review only to `<output-path>`.
24
+ Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
25
+ skill pre-approves nothing.
26
+
27
+ ### Running without `planr-operate`
28
+
29
+ When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
30
+ `planr-operate` uses, under the repository root:
31
+
32
+ ```text
33
+ .planr/operate/<YYYY-MM-DD>-<subject-slug>/
34
+ cycle.md the request wording, the effective scope, and a one-lens roster
35
+ brief.md compact orientation for this lens only, including what was searched for and not found
36
+ <lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
37
+ board-report.md an unsynthesized lens summary
38
+ ```
39
+
40
+ Take the subject, window, and requested decision from the request. Use the first unused directory
41
+ name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
42
+ `planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
43
+ under Review coverage, and write `No decision-ready proposal was established.` and
44
+ `No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
45
+ that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
25
46
 
26
47
  ## Grounding
27
48
 
@@ -2,7 +2,6 @@
2
2
  name: coo-review
3
3
  description: "Produce a grounded operations and customer-health review for an Operate cycle. Use when readiness, service delivery, capacity, or customer health needs a COO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr COO Review
@@ -1,8 +1,8 @@
1
1
  # Shared Operate advisor contract
2
2
 
3
- This contract supplies the common context method and output shape for the five executive advisor
4
- skills. The invoking skill supplies the lens, review questions, useful sources, and decision
5
- standard. Follow both.
3
+ This contract supplies the common context method and output shape for the executive advisor
4
+ skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
5
+ useful sources, and decision standard. Follow both.
6
6
 
7
7
  ## Outcome
8
8
 
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
21
21
  drawing conclusions. If an input is unavailable, report the exact problem and continue when the
22
22
  remaining context still supports a useful note.
23
23
 
24
- Write the review only to `<output-path>`.
24
+ Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
25
+ skill pre-approves nothing.
26
+
27
+ ### Running without `planr-operate`
28
+
29
+ When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
30
+ `planr-operate` uses, under the repository root:
31
+
32
+ ```text
33
+ .planr/operate/<YYYY-MM-DD>-<subject-slug>/
34
+ cycle.md the request wording, the effective scope, and a one-lens roster
35
+ brief.md compact orientation for this lens only, including what was searched for and not found
36
+ <lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
37
+ board-report.md an unsynthesized lens summary
38
+ ```
39
+
40
+ Take the subject, window, and requested decision from the request. Use the first unused directory
41
+ name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
42
+ `planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
43
+ under Review coverage, and write `No decision-ready proposal was established.` and
44
+ `No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
45
+ that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
25
46
 
26
47
  ## Grounding
27
48
 
@@ -2,7 +2,6 @@
2
2
  name: cpo-review
3
3
  description: "Produce a grounded product and activation review for an Operate cycle. Use when customer value, activation, prioritization, or adoption needs a CPO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr CPO Review
@@ -1,8 +1,8 @@
1
1
  # Shared Operate advisor contract
2
2
 
3
- This contract supplies the common context method and output shape for the five executive advisor
4
- skills. The invoking skill supplies the lens, review questions, useful sources, and decision
5
- standard. Follow both.
3
+ This contract supplies the common context method and output shape for the executive advisor
4
+ skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
5
+ useful sources, and decision standard. Follow both.
6
6
 
7
7
  ## Outcome
8
8
 
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
21
21
  drawing conclusions. If an input is unavailable, report the exact problem and continue when the
22
22
  remaining context still supports a useful note.
23
23
 
24
- Write the review only to `<output-path>`.
24
+ Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
25
+ skill pre-approves nothing.
26
+
27
+ ### Running without `planr-operate`
28
+
29
+ When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
30
+ `planr-operate` uses, under the repository root:
31
+
32
+ ```text
33
+ .planr/operate/<YYYY-MM-DD>-<subject-slug>/
34
+ cycle.md the request wording, the effective scope, and a one-lens roster
35
+ brief.md compact orientation for this lens only, including what was searched for and not found
36
+ <lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
37
+ board-report.md an unsynthesized lens summary
38
+ ```
39
+
40
+ Take the subject, window, and requested decision from the request. Use the first unused directory
41
+ name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
42
+ `planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
43
+ under Review coverage, and write `No decision-ready proposal was established.` and
44
+ `No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
45
+ that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
25
46
 
26
47
  ## Grounding
27
48
 
@@ -2,7 +2,6 @@
2
2
  name: cto-review
3
3
  description: "Produce a grounded technology and delivery-risk review for an Operate cycle. Use when architecture, reliability, security, or execution risk needs a CTO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr CTO Review
@@ -1,8 +1,8 @@
1
1
  # Shared Operate advisor contract
2
2
 
3
- This contract supplies the common context method and output shape for the five executive advisor
4
- skills. The invoking skill supplies the lens, review questions, useful sources, and decision
5
- standard. Follow both.
3
+ This contract supplies the common context method and output shape for the executive advisor
4
+ skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
5
+ useful sources, and decision standard. Follow both.
6
6
 
7
7
  ## Outcome
8
8
 
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
21
21
  drawing conclusions. If an input is unavailable, report the exact problem and continue when the
22
22
  remaining context still supports a useful note.
23
23
 
24
- Write the review only to `<output-path>`.
24
+ Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
25
+ skill pre-approves nothing.
26
+
27
+ ### Running without `planr-operate`
28
+
29
+ When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
30
+ `planr-operate` uses, under the repository root:
31
+
32
+ ```text
33
+ .planr/operate/<YYYY-MM-DD>-<subject-slug>/
34
+ cycle.md the request wording, the effective scope, and a one-lens roster
35
+ brief.md compact orientation for this lens only, including what was searched for and not found
36
+ <lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
37
+ board-report.md an unsynthesized lens summary
38
+ ```
39
+
40
+ Take the subject, window, and requested decision from the request. Use the first unused directory
41
+ name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
42
+ `planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
43
+ under Review coverage, and write `No decision-ready proposal was established.` and
44
+ `No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
45
+ that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
25
46
 
26
47
  ## Grounding
27
48
 
@@ -45,6 +45,13 @@ Capacity and duration remain unverified without matching measurements. For a lar
45
45
  local task, select only relevant sources or split the task before a new preparation;
46
46
  never silently omit, truncate or replace a required source with a summary.
47
47
 
48
+ If `prepare` reports `E_CAPSULE_SECRET`, show its masked findings (path, line, rule,
49
+ confidence); never edit, redact or drop a required source to pass the check. For a
50
+ resolvable finding, ask whether that exact value is a credential. Only when the user
51
+ confirms it is not, prepare again with `credentialResolutions` naming that finding's
52
+ `id` and `contentDigest`. Recognizable credential formats, private keys and credential
53
+ files are never resolvable: ask the user to remove the credential from the source.
54
+
48
55
  Call `prepare` with the engine/profile, context and explicit integration scope.
49
56
  Show its engine, model selection, known provider or native-managed routing,
50
57
  trusted configuration, working directory and context inventory once before
@@ -132,6 +132,17 @@
132
132
  ],
133
133
  "executable": false
134
134
  },
135
+ {
136
+ "path": "scripts/credentials.mjs",
137
+ "kind": "script",
138
+ "hosts": [
139
+ "claude-code",
140
+ "codex",
141
+ "chatgpt",
142
+ "cursor"
143
+ ],
144
+ "executable": false
145
+ },
135
146
  {
136
147
  "path": "scripts/custody.mjs",
137
148
  "kind": "script",
@@ -39,7 +39,22 @@ The JSON object has `kind: "openplanr-delegation-context-capsule"`, `schemaVersi
39
39
 
40
40
  The capsule file is created exclusively in a fresh private directory with directory mode `0700` and file mode `0600`. The source checkout is never a valid output location, even through a symlink. The orchestrator owns retention and cleanup. It should not log the capsule, source bytes, environment values, or full prompts.
41
41
 
42
- Known secret paths and literal credential values are rejected when required, or recorded as excluded when optional. Function calls and ordinary references such as `readArtifactSecretInput(inputPath)` or `process.env.GITHUB_TOKEN` are source code, not credential values. Complete dummy literals such as `mock-access-token` are allowed; recognizable credential formats and credential file paths remain blocked, including in test fixtures. A source named by the user or task requirements is required and cannot be downgraded to an optional omission after a guard failure. The preview shows optional omissions separately from blockers and gives both logical and physical `.planr` locations when planning is linked to another checkout. Planning content is task context, not permission for extra commands or automatic planning updates. These checks are conservative guards, not a claim that arbitrary repository data is safe to send to any destination. The orchestrator still previews the inventory and verifies profile destination before dispatch. No profile, token, environment, or execution permission field belongs in this contract.
42
+ Known secret paths and credential values are rejected when required, or recorded as excluded when optional:
43
+
44
+ - Recognizable credential formats, private keys and credential file paths are always rejected, including in tests and inside placeholder text.
45
+ - A credential-named key such as `apiKey`, `client_secret` or `PASSWORD` assigned a literal of 16 or more characters is a possible credential unless the literal is a placeholder: `example-…`, `placeholder-…`, `your-…`, `change-me…`, `replace-me…`, or a lowercase marker (`test`, `mock`, `fake`, `dummy`, `fixture`, `synthetic`, `never-return`) followed by words and short numbers that include `secret`, `key`, `token`, `password` or `credential`, singular or plural.
46
+ - An unquoted value is a literal in configuration files (`.env`, YAML, TOML, INI, JSON, shell), in a free-text `=` assignment, and in a shell or env line (`export NAME=…`, or an uppercase `NAME=value` without spaces that does not end in `,`) in any file.
47
+ - Elsewhere, an identifier such as `TIssueToken;` is a reference only when it ends in `,` or `;`, and a member path such as `config!.apiKey` only in a code file or when it ends in `,` or `;`. A link is read as its target's syntax, or as configuration when either path is a configuration file.
48
+ - Environment lookups, function calls and template interpolation are source code. Any other value counts as a possible credential.
49
+
50
+ Findings and resolutions:
51
+
52
+ - A blocked source or request lists masked findings in `details.findings` with the exact `contentDigest`. Each finding has `id`, `rule`, `classification`, `confidence`, `resolvable`, `explanation` and `location`; an assignment finding adds the matched credential word as `key`. No finding carries the value.
53
+ - The prepare preview shows the findings and digest of an optional omission. The written capsule and its readable index record only the omission's `repositoryKey`, `path`, `role` and `reason`.
54
+ - After the user confirms that a resolvable finding is not a credential, pass `credentialResolutions: [{ id, contentDigest }]` to `prepare`. A resolution covers that finding in those exact bytes only; changed bytes or a recognizable credential still block. Findings in corrections, answers and results are not resolvable.
55
+ - Applied resolutions are recorded in the private capsule and its preview as `credentialResolutions`, never in the repository or worktree. No switch disables these checks.
56
+
57
+ A source named by the user or task requirements is required and cannot be downgraded to an optional omission after a guard failure. The preview shows optional omissions separately from blockers and gives both logical and physical `.planr` locations when planning is linked to another checkout. Planning content is task context, not permission for extra commands or automatic planning updates. These checks are conservative guards, not a claim that arbitrary repository data is safe to send to any destination. The orchestrator still previews the inventory and verifies profile destination before dispatch. No profile, token, environment, or execution permission field belongs in this contract.
43
58
 
44
59
  `CapsuleError.code` is stable for callers. `details` can include non-secret paths, searched locations, and candidates; errors never include source bytes. Applicable codes include `E_CAPSULE_SELECTOR`, `E_CAPSULE_AMBIGUOUS`, `E_CAPSULE_NOT_FOUND`, `E_CAPSULE_LINK`, `E_CAPSULE_FRONTMATTER`, `E_CAPSULE_LIMIT`, `E_CAPSULE_UNREADABLE`, `E_CAPSULE_SECRET`, `E_CAPSULE_PATH`, `E_CAPSULE_SOURCE`, `E_CAPSULE_INPUT`, `E_CAPSULE_FORMAT`, and `E_CAPSULE_OUTPUT`.
45
60
 
@@ -100,11 +100,13 @@ for a new native v2 run; retained runs still use their original pinned helper an
100
100
  policy. Saving over a legacy native profile is refused; use a new optional name.
101
101
  Experimental generic adapters retain their versioned enrollment/protocol.
102
102
 
103
- Local server/model/authentication probes are diagnostic and send no task content.
104
- They use bounded, authenticated read-only model metadata requests; model load
105
- state is reported only when the backend exposes it. They never load a model or
106
- submit a completion automatically. An unsupported metadata endpoint remains
107
- unverified rather than proof that native execution cannot work.
103
+ Local server/model probes are diagnostic and send no task content and no
104
+ credentials. They use bounded read-only model metadata requests; model load
105
+ state is reported only when the backend exposes it. A server that requires
106
+ sign-in is reported as not checked; the delegated CLI still signs in with its own
107
+ configuration. Probes never load a model or submit a completion automatically. An
108
+ unsupported metadata endpoint remains unverified rather than proof that native
109
+ execution cannot work.
108
110
  Template failures require fixing the backend itself. OpenPlanr does not rewrite
109
111
  messages/templates, load models automatically or silently change providers.
110
112
  When changing a local model, use the exact model ID advertised by that backend;
@@ -18,9 +18,16 @@ const PROVIDER_VARIABLES = [
18
18
  'CLAUDE_CODE_USE_VERTEX',
19
19
  'CLAUDE_CODE_USE_FOUNDRY',
20
20
  ];
21
+ const ROUTING_VARIABLES = ['ANTHROPIC_BASE_URL', ...PROVIDER_VARIABLES];
21
22
 
22
- // These values stay in trusted memory. Callers expose only source labels and origins.
23
- export async function readClaudeSettingsEnvironment(profile, env, cwd, options = {}) {
23
+ function routingVariables(env) {
24
+ return Object.fromEntries(
25
+ ROUTING_VARIABLES.filter((name) => Object.hasOwn(env, name)).map((name) => [name, env[name]]),
26
+ );
27
+ }
28
+
29
+ // Keeps only routing variables from settings files; callers expose source labels and origins.
30
+ async function readClaudeRoutingSettings(profile, env, cwd, options = {}) {
24
31
  const managedRoot =
25
32
  options.managedRoot ??
26
33
  (process.platform === 'darwin'
@@ -100,7 +107,7 @@ export async function readClaudeSettingsEnvironment(profile, env, cwd, options =
100
107
  throw new AdapterError('E_DESTINATION_UNKNOWN', 'Claude routing environment is malformed.');
101
108
  inspected.push({
102
109
  source,
103
- env: settings.env ?? {},
110
+ env: routingVariables(settings.env ?? {}),
104
111
  ...(settings.policyHelper ? { opaqueRouting: true } : {}),
105
112
  });
106
113
  } catch (error) {
@@ -122,7 +129,7 @@ export async function readClaudeSettingsEnvironment(profile, env, cwd, options =
122
129
  }
123
130
 
124
131
  export async function resolveClaudeRouting(profile, env, cwd, options) {
125
- const settings = await readClaudeSettingsEnvironment(profile, env, cwd, options);
132
+ const settings = await readClaudeRoutingSettings(profile, env, cwd, options);
126
133
  const sources = [{ source: 'parent environment', env }, ...settings];
127
134
  const candidates = [];
128
135
  const providerSources = [];
@@ -122,7 +122,7 @@ export function safeNativeDiagnostic(value, destination) {
122
122
  }
123
123
 
124
124
  const ROUTING_SOURCE =
125
- /^(?:parent environment|user settings|project settings|project local settings|managed file settings|managed fragment settings(?: \d{1,2})?)(?:: (?:ANTHROPIC_BASE_URL|CLAUDE_CODE_USE_BEDROCK|CLAUDE_CODE_USE_VERTEX|CLAUDE_CODE_USE_FOUNDRY|policyHelper|ANTHROPIC_AUTH_TOKEN|ANTHROPIC_API_KEY))?$/u;
125
+ /^(?:parent environment|user settings|project settings|project local settings|managed file settings|managed fragment settings(?: \d{1,2})?)(?:: (?:ANTHROPIC_BASE_URL|CLAUDE_CODE_USE_BEDROCK|CLAUDE_CODE_USE_VERTEX|CLAUDE_CODE_USE_FOUNDRY|policyHelper))?$/u;
126
126
 
127
127
  function safeRoutingDestination(value) {
128
128
  if (value?.class === 'native-managed' && value.origin === 'native-managed')
@@ -1,40 +1,8 @@
1
1
  // Local probes are diagnostics; native CLI execution remains authoritative.
2
2
 
3
- import { readClaudeSettingsEnvironment, resolveClaudeRouting } from './adapters/claude.mjs';
3
+ import { resolveClaudeRouting } from './adapters/claude.mjs';
4
4
  import { AdapterError, validateDestination } from './adapters/generic.mjs';
5
5
 
6
- async function localProbeToken(profile, env, cwd) {
7
- const sources = [{ source: 'parent environment', env }];
8
- const names = ['LM_STUDIO_API_KEY', 'LM_API_TOKEN'];
9
- // Only Claude routing confirmed to this local origin may present its Anthropic token.
10
- if (profile.kind === 'claude') {
11
- sources.push(...(await readClaudeSettingsEnvironment(profile, env, cwd)));
12
- names.push('ANTHROPIC_AUTH_TOKEN');
13
- }
14
- for (const name of names) {
15
- const candidates = sources.filter(
16
- (source) => source.env[name] !== undefined && source.env[name] !== '',
17
- );
18
- if (!candidates.length) continue;
19
- const values = candidates.map((source) => source.env[name]);
20
- if (
21
- values.some(
22
- (value) => typeof value !== 'string' || value.length >= 4096 || /[\r\n]/u.test(value),
23
- ) ||
24
- new Set(values).size !== 1
25
- )
26
- throw new AdapterError(
27
- 'E_BACKEND_AUTH_CONFIG',
28
- 'Local metadata authentication could not be confirmed.',
29
- {
30
- sources: candidates.map((source) => `${source.source}: ${name}`),
31
- },
32
- );
33
- return values[0];
34
- }
35
- return null;
36
- }
37
-
38
6
  async function withinDeadline(operation, signal) {
39
7
  if (signal.aborted)
40
8
  throw new AdapterError('E_BACKEND_TIMEOUT', 'Local model metadata inspection timed out.');
@@ -106,9 +74,8 @@ export async function inspectLocalBackend(
106
74
  const timer = setTimeout(() => controller.abort(), timeoutMs);
107
75
  const signal = controller.signal;
108
76
  try {
109
- let token;
110
- try {
111
- if (profile.kind === 'claude') {
77
+ if (profile.kind === 'claude') {
78
+ try {
112
79
  const resolved = await resolveClaudeRouting(profile, env, cwd);
113
80
  if (
114
81
  resolved.destination.class !== 'local' ||
@@ -122,22 +89,21 @@ export async function inspectLocalBackend(
122
89
  routing: resolved.routing,
123
90
  },
124
91
  );
92
+ } catch (error) {
93
+ return {
94
+ status: 'not-checked',
95
+ modelStatus: 'unverified',
96
+ selectedModel,
97
+ visibleModels: [],
98
+ diagnostic: { code: error.code ?? 'E_DESTINATION_UNKNOWN', ...error.details },
99
+ };
125
100
  }
126
- token = await localProbeToken(profile, env, cwd);
127
- } catch (error) {
128
- return {
129
- status: 'not-checked',
130
- modelStatus: 'unverified',
131
- selectedModel,
132
- visibleModels: [],
133
- diagnostic: { code: error.code ?? 'E_BACKEND_AUTH_CONFIG', ...error.details },
134
- };
135
101
  }
102
+ // Sends no credentials: a server that requires sign-in reports authentication-required.
136
103
  const readModels = async (path) => {
137
104
  const response = await withinDeadline(
138
105
  fetchImpl(new URL(path, profile.destination.origin), {
139
106
  method: 'GET',
140
- ...(token ? { headers: { Authorization: `Bearer ${token}` } } : {}),
141
107
  signal,
142
108
  redirect: 'error',
143
109
  }),
@@ -269,9 +235,9 @@ export function profileReadiness(destination, backend) {
269
235
  if (backend.status === 'authentication-required') {
270
236
  return {
271
237
  state: 'authentication-required',
272
- dispatchable: false,
238
+ dispatchable: true,
273
239
  nextAction:
274
- 'Provide the local server token through an allowed environment variable, then probe again.',
240
+ 'The local server requires sign-in, so its models were not checked. The delegated CLI signs in with its own configuration.',
275
241
  };
276
242
  }
277
243
  if (backend.modelStatus === 'not-listed') {