Repository navigation
v0.30.6 — ready for Anthropic's plugin directory: lighter plugin copies, nothing written into projects you have not bound, and a directory copy that knows where its updates come from
LatestThis release prepares ProjectStore for Anthropic's plugin directory. Several of its fixes matter to everyone already using it.
Your plugin copy no longer carries the lint tools
Claude Code installs the packages a plugin's package-lock.json names, at every install and update. Since 0.29.4 our repository root carried the lockfile of ESLint and Prettier, so every copy installed from the git marketplace held a 29 MB node_modules of tools only contributors use.
From 0.30.6 the plugin's root has no lockfile, and a new copy installs nothing. The folders of older versions stay in Claude Code's plugin cache. Claude Code marks an old version's folder at the update and documents removing it 14 days later, but on our own machine a folder marked in September was still there in October. If you want the space back, delete ~/.claude/plugins/cache/SmartAndPoint/projectstore/<old version>/ yourself, for each version that no session still runs and that ~/.claude/plugins/installed_plugins.json no longer records: a project-scope install can still point at an older one. Contributors run npm run lint:setup once per checkout; the lint tools now live in tools/lint/, and the old root node_modules/ can be deleted.
A project you have not bound gets nothing written into it
The first session in any folder used to create a .projectstore/ folder there, to remember that the welcome was shown. With ProjectStore installed for your user, that meant a new untracked folder in every repository you opened.
From 0.30.6 a project with no binding gets nothing. The welcome is remembered on your machine, under ~/.cache/projectstore/ (or under $XDG_CACHE_HOME/projectstore/ when that is set to an absolute path). In a project that is not bound it now appears once per machine for each agent: Claude Code and Codex each show it once.
A bound project still writes its own marker and shows the welcome once, unless this machine has already shown the unbound welcome: then it shows none, and the start of each session still names the vault.
A .projectstore/ that an earlier version created in a project you never bound stays where it is. If that project does not use ProjectStore, delete the folder: it holds only two .gitignore files and the marker.
A copy from Anthropic's directory knows where its updates come from
A plugin added from Anthropic's directory loads in Claude Code as projectstore@synced, through your claude.ai account. Until now ProjectStore took such a copy for a development checkout, and its welcome named npx projectstore@latest upgrade as the way to update it, which would have installed a second copy over it.
From 0.30.6:
- the welcome and doctor say that updates come from claude.ai, and how to turn the copy off for your account or for one project;
- setup, install and upgrade never register the npm copy over it unless you choose npm, and
--channel gitkeeps the directory copy; - the status line follows the synced copy across updates;
- doctor reads auto-update the way Claude Code does: on for Anthropic's official marketplaces, such as
claude-plugins-official, and for marketplaces added from claude.ai; off for the others. It no longer names our own marketplace in another marketplace's advice.
The update step names a command Claude Code has
ProjectStore's messages, doctor and README gave /plugin update as the update step for a git-marketplace copy. Claude Code has no such command in a session: it opens the plugin browser and updates nothing. Doctor's "newer version available" line, the welcome and the getting-started page gave /plugin marketplace update instead, which refreshes the marketplace's listing. All of them now give the steps Claude Code documents, which are also the ones below: open /plugin manage and choose Update now on projectstore, then run /reload-plugins to load it.
Hook commands work from a path with a space
Each hook command now quotes the plugin's folder, so a copy installed under a path with a space in it (a Windows user name, say) runs its hooks. Codex's hook commands are unchanged, so Codex does not ask you to review its hooks again.
Codex roles pass the model the core names
A Codex role skill asks the core for its model and effort and passes them to spawn_agent. Since 0.30.5 the core answered with the model set for Codex, but in our runs (2 of 3) the parent passed its own model instead. The skills now pass the core's answer verbatim, and never substitute the running model. The review, story and reconcile commands say the same.
The MCP server starts from its own entry
Claude Code now starts ProjectStore's MCP server from scripts/mcp-server.mjs, which loads only the read commands. Its tools and their answers are unchanged. projectstore mcp still works.
Three agents' front matter parses as YAML
The descriptions of the archaeologist, librarian and planner agents held a colon followed by a space without quotes. Claude Code loads them, but a YAML parser does not, and Anthropic's directory refuses front matter that does not parse. They are quoted now, and the guard that holds the plugin to the directory's file rules checks every agent, command and skill.
What ProjectStore runs, writes, sends and fetches
The README now says all of it, in one section, and a test fails when a shipped module that starts a program or makes a request is not accounted for there. In short: no server, no account, no telemetry; the hooks start only git and make no request; the three requests ProjectStore's own code makes are each made by a command you run. The privacy page is at https://projectstore.dev/privacy/.
Upgrading
Nothing to migrate. The agents block stays v5.
From npm, from a terminal in your project:
npx projectstore@0.30.6 upgrade
Codex's registration is per machine:
npx projectstore@0.30.6 upgrade --harness codex
From the git marketplace, in a Claude Code session: open /plugin manage and choose Update now on projectstore, then run /reload-plugins to load it. Or, from a terminal, then restart Claude Code:
claude plugin update projectstore@SmartAndPoint