Frame the repo as the Poimandres plugin, not the docs plugin - #4
Open
abernier wants to merge 1 commit into
Open
Conversation
The manifests and the README both read as though documentation lookup were what this plugin is. It is what it does first. Everything that follows — more skills, subagents, hooks — would have arrived as an exception to its own description. So the framing states the shape without promising components that do not exist: one install carrying Poimandres tooling, of which docs lookup is today's whole content. The marketplace descriptions gain a "currently", `pmndrs` and `poimandres` join the keywords, and the README splits what grows (components) from what does not (plumbing). Also fixes the server name the docs skill hands to ReadMcpResourceTool. Bundled in a plugin, the server registers as `plugin:pmndrs:docs`; the bare `docs` key from .mcp.json is not a name anything answers to, and the failure is a silent empty read rather than an error. Adds the test harness these edits need, on Node's built-in runner with no dependencies, plus CI. It covers the wiring that fails silently at runtime rather than loudly at load: the plugin name agreeing across both manifests (it is baked into every scoped MCP tool name), a component naming the server it reads resources from, no server declared and then used by nothing, skill names matching their directories, and the README listing every component shipped. That last one is the one that matters as components accumulate — a capability nobody can find is a capability nobody uses. Each check was mutation-tested: breaking the invariant fails the test that claims to guard it, and no other. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TnvYiz7aGhnBTK2tzExHis
abernier
marked this pull request as ready for review
August 10, 2026 06:11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Base of a two-PR stack. #3 (the
docs-lookupsubagent) now targets this branch.Why
The manifests and the README both read as though documentation lookup were what this plugin is:
That's what it does first. Everything meant to follow — more skills, subagents, hooks — would have arrived as an exception to the plugin's own description, and the first one would have forced this rewrite anyway, mixed into a PR about something else.
So the framing states the shape without promising components that don't exist yet: one install carrying Poimandres tooling, of which docs lookup is today's entire content. Marketplace descriptions gain a "Currently:",
pmndrsandpoimandresjoin the keywords, and the README splits what grows (components) from what doesn't (plumbing).nameis deliberately untouched — it's baked into every scoped MCP tool name (mcp__plugin_pmndrs_docs__…), so it's the one field here that isn't free to change.Also fixes
SKILL.mdtold Claude to passdocsas theserverargument toReadMcpResourceTool. Bundled in a plugin, the server registers asplugin:pmndrs:docs— the bare key from.mcp.jsonisn't a name anything answers to, and the failure is a silent empty read rather than an error. Unrelated to the stack's second half, so it belongs here.Tests
npm test— Node's built-in runner, no install step, wired to CI in.github/workflows/test.yml. Everything here targets wiring that fails silently at runtime rather than loudly at load:ReadMcpResourceTooltakes a configured name; the bare key isn't one.mcp.jsonconfigclaude plugin validate .passesThat last one is the point of doing this now: a capability nobody can find is a capability nobody uses, so the README table is enforced rather than maintained by good intentions. It caught its own omission twice while this stack was being written.
Each invariant was mutation-checked — breaking it fails the test that claims to guard it, and no other. 13/13 green with no
agents/directory present, which is the case this PR has to work in.Worth a look during review
categorystaysdocumentation. Retitling it generalist while there is exactly one component seemed worse for discoverability than leaving it accurate; it should move when a second component lands.Generated by Claude Code