T-MJGM-probe-plugin-install-shape
Status: closed/superseded · Impact: medium · Complexity: small
Auto-generated from a /sdlc:task-work post-mortem. Review and promote to open/ready before
picking up.
Spec authors writing tasks that touch plugin-discovery (e.g.
T-KD48-post-mortem-routes-cross-repo-tasks) currently rely on stale mental models of how Claude
Code installs plugins on disk — that task’s Today section assumed ~/.claude/plugins/<name> was a
symlink, but the actual shape is two JSON files plus a marketplace path that may not even be a git
repo’s toplevel. A small probe script that prints the current on-disk shape would let authors paste
accurate Today claims rather than guessing.
The hidden plugin noun already carries info, resolve, and install-permissions, and
apps/sdlc/lib/services/plugin/ops/resolve.ts encodes the resolution logic (read
installed_plugins.json, cross-reference known_marketplaces.json, walk up to git toplevel for
source: directory plugins). But there’s no diagnostic shell — an author writing a new spec has to
read the resolver’s source AND read both JSON files manually to understand what their machine
actually looks like.
Proposed
Section titled “Proposed”A sdlc plugin probe sibling verb on the hidden plugin noun — per the
D-H7FS-op-substrate-surface path[] surface, not a loose script — that, given an optional plugin
name, prints a structured report of the install layout: marketplace source kind, install path, git
toplevel (if any), origin URL (if any), and a list of installed skills. Output is human-readable by
default and --output json for scripting.
Approach
Section titled “Approach”- New op module at
apps/sdlc/lib/services/plugin/ops/probe.tsviadefineOp, a sibling ofinfo/resolve/install-permissions. - For no-argument calls, list every installed plugin with a one-line summary each.
- For
<plugin-name>calls, print the full report. - Re-use the JSON-loading helpers in
resolve.ts(factor into a shared module underservices/plugin/if both ops need them).
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
apps/sdlc/lib/services/plugin/ops/probe.ts | new | the diagnostic op. |
apps/sdlc/lib/services/plugin/ops/resolve.ts | modify | optional: factor JSON-loading helpers into a shared module if the duplication is real. |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1:
sdlc plugin probe(no args) prints a one-line summary per installed plugin:<name>@<marketplace>\t<source-kind>\t<install-path>. - AC-2:
sdlc plugin probe sdlcprints a multi-line report includingmarketplace_source,install_path,git_toplevel, andorigin_url. - AC-3:
--output jsonemits the same data as JSON for scripting.
Out of scope
Section titled “Out of scope”- Modifying
plugin resolve’s output shape — the probe is a read-only diagnostic. - Adding a
--write-todaymode that templates the result into a task’sTodaysection. Useful but a separate task if demand emerges.
Dependencies
Section titled “Dependencies”- none
Discovery context
Section titled “Discovery context”Spawned by /sdlc:task-work post-mortem of T-KD48-post-mortem-routes-cross-repo-tasks on 2026-05-21.