Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
898407e
docs: add plugin-doctor design spec
NeuralEmpowerment Jul 16, 2026
5d52cd1
docs: add plugin-doctor implementation plan
NeuralEmpowerment Jul 16, 2026
43b11f0
chore: ignore local .worktrees/ directory
NeuralEmpowerment Jul 16, 2026
0b313f6
feat(plugin-doctor): add state I/O and cadence gating
NeuralEmpowerment Jul 16, 2026
fcc4416
fix(plugin-doctor): fail open on non-dict state and non-string timest…
NeuralEmpowerment Jul 16, 2026
8e280fd
feat(plugin-doctor): add semver comparison and context formatting
NeuralEmpowerment Jul 16, 2026
5bb5092
feat(plugin-doctor): add SessionStart handler and plugin manifest
NeuralEmpowerment Jul 16, 2026
92d1951
test(plugin-doctor): cover the marketplace-refresh subprocess path
NeuralEmpowerment Jul 16, 2026
046f6fc
docs(plugin-doctor): register plugin and document
NeuralEmpowerment Jul 16, 2026
b276a4c
docs: fix stale test count in plugin-doctor changelog entry
NeuralEmpowerment Jul 16, 2026
ed7243b
fix(plugin-doctor): guard catalog manifest against non-dict JSON, add…
NeuralEmpowerment Jul 16, 2026
a9a8d54
docs: clarify plugin-doctor cadence wording (spec step 5)
NeuralEmpowerment Jul 16, 2026
e096d80
docs: amend plugin-doctor design with GitHub release-age gate
NeuralEmpowerment Jul 17, 2026
94cb155
docs: add implementation plan for the GitHub release-age gate
NeuralEmpowerment Jul 17, 2026
18c6864
feat(plugin-doctor): add is_release_old_enough pure function
NeuralEmpowerment Jul 17, 2026
3b9ed06
feat(plugin-doctor): gate outdated-version warnings on a 48h GitHub r…
NeuralEmpowerment Jul 17, 2026
6f34df6
fix(plugin-doctor): URL-encode the plugin/version ref in GitHub API c…
NeuralEmpowerment Jul 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@
"description": "Hypothesis-first experiment workflow — scaffolding, eval packs, results, verdicts, and the two-commit discipline",
"source": "./plugins/experiments",
"category": "development"
},
{
"name": "plugin-doctor",
"description": "Warns when installed agentic-primitives plugins have updates available, checked weekly. Never auto-updates.",
"source": "./plugins/plugin-doctor",
"category": "observability"
}
]
}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ build/
dist/
target/

# Local git worktrees
.worktrees/


# Python
__pycache__/
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### 🩺 plugin-doctor

A new plugin that warns when installed `agentic-primitives` plugins have updates available.

#### Added

- **`plugins/plugin-doctor/`** — `SessionStart` hook compares installed plugin versions (from `~/.claude/plugins/cache/agentic-primitives/`) against the marketplace catalog (from `~/.claude/plugins/marketplaces/agentic-primitives/`), refreshing the catalog at most once a week. Emits `additionalContext` naming outdated plugins when found; instructs Claude to ask the user before updating anything. Never runs `claude plugin update` itself.
- **37 unit/integration tests** in `tests/unit/claude/hooks/test_plugin_doctor.py` covering state I/O, cadence gating, semver comparison, and the handler end-to-end via subprocess.

### 🏗 Workspace Injection Contract (ADR-035)

A small, cross-orchestrator file-injection seam that any consumer of the workspace image (agentic-domain-runner, Syntropic137, future Codex/Gemini wrappers) can target.
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ Replace `sdlc` with any plugin name from the [Available Plugins](#available-plug
| **observability** | `claude plugin install observability@agentic-primitives --scope user` | Full-spectrum JSONL event observability |
| **delegation** | `claude plugin install delegation@agentic-primitives --scope user` | Delegating work — `claude -p`, Codex, and session handoffs |
| **experiments** | `claude plugin install experiments@agentic-primitives --scope user` | Hypothesis-first experiment workflow |
| **plugin-doctor** | `claude plugin install plugin-doctor@agentic-primitives --scope user` | Warns when installed plugins are outdated |

### What's in each plugin

Expand All @@ -168,6 +169,7 @@ Replace `sdlc` with any plugin name from the [Available Plugins](#available-plug
| **observability** | -- | -- | -- | All 14 lifecycle events → structured JSONL via agentic_events |
| **delegation** | -- | `delegating-to-claude-p`, `delegating-to-codex`, `writing-handoffs` | -- | -- |
| **experiments** | -- | `running-experiments` | -- | -- |
| **plugin-doctor** | -- | -- | -- | SessionStart plugin-freshness check (weekly, never auto-updates) |

---

Expand Down
Loading
Loading