---
title: openplanr 3.1.0
description: Published 2026-10-16. The status, sprint and sync skills say what they do with nothing connected and what a connected project tracker or source control adds.
url: https://openplanr.dev/docs/changelog/3.1.0
updated: 2026-10-16
related:
  - https://openplanr.dev/docs/changelog/3.1.1.md
  - https://openplanr.dev/docs/changelog/3.0.1.md
  - https://openplanr.dev/docs/changelog/3.0.0.md
---

# openplanr 3.1.0

Published 2026-10-16.

[Release on GitHub](https://github.com/openplanr/OpenPlanr/releases/tag/openplanr%403.1.0)

## 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.
