Skip to content
OpenPlanr Docs
GitHub (opens in a new tab)

openplanr 3.1.0

Minor releasePublished Release on GitHub

Minor Changes

  • The status, sprint and sync skills say what they do with nothing connected and what a connected project tracker or source control adds. Before sprint or sync changes any tracker issue, they list every issue they will create, update, close or reopen, write only on your request or approval, and then report the items that were not updated.

  • The Claude, Codex and Cursor plugins include CONNECTORS.md, which lists the chat, project tracker and source control products OpenPlanr works with and the step to connect each one in your host. The status, sprint and sync skills now refer to a project tracker or source control connection and point to that list when one is missing.

  • openplanr init --repair adds a missing targets or createdAt to an existing .planr/config.json and keeps every other setting. It shows each field and value before writing and asks to confirm. A config error now names .planr/config.json and points to the repair, and openplanr init on an existing project fails with E_ALREADY_INITIALIZED, suggesting --repair or --force.

  • Two new skills, both run only when you invoke them. /share turns the status report, the current sprint or the latest release notes into a team update, shows you the exact text and destination, and creates a chat draft for you to send once you approve; with no chat connected it prints the update ready to paste. /connect reports which chat, project tracker and source control connections your host has and shows how to connect the missing ones through the host. Neither asks for or stores a credential.

  • Skills can be marked as run only when you ask for them by name. Claude Code skills marked this way carry disable-model-invocation: true, Codex skills set allow_implicit_invocation: false, and Cursor rules apply only when you mention them. The generated CLAUDE.md and AGENTS.md list such skills as user-invoked, so the agent points you to them instead of running them.

Patch Changes

  • openplanr setup --runtime claude no longer fails when the local Claude plugin marketplace was registered by another OpenPlanr install. Setup now shows both locations and points the marketplace at the install you are running. Your plugin data is kept. openplanr doctor reports when the marketplace points at a different install.

  • The npm package keywords describe OpenPlanr as agent skills for Claude Code, Codex and Cursor.

    • The dashboard's command palette button and Operate inbox tabs now have accessible names that match their visible text, so voice control and screen readers find them by what's on screen.
    • The diagram studio fits the drawing after its toolbar finishes laying out, so the first view no longer opens slightly zoomed out.
    • The dashboard and the diagram and design studios now bundle React 19.3 and radix-ui 1.8.
  • The plan skill's ID helper now accepts only the planning folder your .planr/config.json configures, including an empty one in a new project. For any other folder it stops with an error naming the config it checked and the folder it expects, instead of offering US-001 and T-001. It no longer creates the folder when reserving IDs.

  • After a user-scope openplanr setup, openplanr doctor in another project no longer warns that no managed runtime setup was found, and openplanr init no longer suggests installing a host plugin that is already set up.

  • /share formats a Slack draft in the standard Markdown that Slack's connector expects, and keeps Slack's own syntax for text you paste. It treats a chat app name such as slack as the app rather than a channel and still asks where to post. With no OpenPlanr project in the folder, it asks which project to use instead of guessing. /connect accepts a product name such as linear, and reports a connector that is set up but not signed in, with a pointer to the host's connector settings.

  • /ship runs each check on its own or with set -o pipefail, so shortening a check's output no longer hides a failure. Ship now names the verification helper's --project and --task arguments, and the helper prints its usage when it gets a plain path.

  • The CLI now ships the Protocol spec, story and task schemas, so it validates planning frontmatter without the optional planr-pipeline package, for example after install.sh --minimal. Invalid frontmatter is rejected before anything is written.

  • The JSON Schema validator now enforces exclusiveMinimum, maxProperties, dependentRequired and unevaluatedProperties. Data that breaks these constraints in the packaged schemas is rejected. A schema keyword or format the validator doesn't support is now reported as an error instead of being ignored.

  • The JSON Schema validator now reports a $ref it cannot resolve, or one that loops, even inside not, if, anyOf or oneOf, where it used to pass silently. A supported keyword with a malformed value, such as minimum: "3" or required: "id", is now an error instead of being ignored.

    A schema that refers to itself now validates data that nests through it, such as a tree of nodes, instead of reporting a circular reference.