Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
8450951
docs(claude-ops): add plugin-fleet-sync-skill plan and brief
kyle-sexton Jul 17, 2026
c8ca59d
test(claude-ops): verify plugin CLI runtime facts for plugins skill (…
kyle-sexton Jul 17, 2026
53177ce
feat(claude-ops): add fleet-state.sh read-only plugin-state inspectio…
kyle-sexton Jul 17, 2026
3ac3073
fix(claude-ops): separate benign same-version multi-scope from real d…
kyle-sexton Jul 17, 2026
f69f5ac
feat(claude-ops): add plugins skill router, sync/converge algorithms,…
kyle-sexton Jul 17, 2026
eebdbdc
test(claude-ops): add evals for the plugins skill (phase 4)
kyle-sexton Jul 17, 2026
93eee1a
chore(claude-ops): bump to 0.9.0 for the plugins skill (phase 5)
kyle-sexton Jul 17, 2026
a2c8fc9
fix(claude-ops): correct fleet-state.sh path in the plugins skill's S…
kyle-sexton Jul 17, 2026
5b8db95
fix(claude-ops): fix currentProject detection and CLI-usage gotchas (…
kyle-sexton Jul 17, 2026
fb400d3
docs(claude-ops): correct phase 6 evidence to state real verification…
kyle-sexton Jul 17, 2026
ecdd76c
fix(claude-ops): stop overclaiming enable-state-mismatch detection in…
kyle-sexton Jul 17, 2026
56ca78b
fix(claude-ops): mark fleet-state.sh/fleet-state.test.sh executable
kyle-sexton Jul 17, 2026
96981c3
docs(claude-ops): fix typos-lint false-positive in PLAN.md evidence
kyle-sexton Jul 17, 2026
114e318
fix(claude-ops): fix CI-only test failure and hardcoded path from liv…
kyle-sexton Jul 17, 2026
f403c52
fix(claude-ops): strip every PATH dir containing jq, not just the first
kyle-sexton Jul 17, 2026
88bd1ec
fix(claude-ops): make jq-missing test case location-independent of jq
kyle-sexton Jul 17, 2026
e5f1b37
fix(claude-ops): fix --all abort-on-malformed-catalog and cross-repo …
kyle-sexton Jul 17, 2026
706633b
fix(claude-ops): fix sync's primary-value-path gap, converge's wrong-…
kyle-sexton Jul 17, 2026
348dd52
fix(claude-ops): exclude defaultEnabled:false catalog plugins from mi…
kyle-sexton Jul 17, 2026
0d6f1f7
fix(claude-ops): compare actual versions before choosing converge's c…
kyle-sexton Jul 17, 2026
6b42033
fix(claude-ops): stop unconditionally case-folding project-path compa…
kyle-sexton Jul 17, 2026
1de4658
fix(claude-ops): restrict Step 5's enable-fill loop to verifiable scopes
kyle-sexton Jul 17, 2026
6d75117
fix(claude-ops): make the case-sensitivity regression test host-deter…
kyle-sexton 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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Browse and manage with `/plugin`. To refresh after updates: `/plugin marketplace
- [`playbooks`](plugins/playbooks) — Doctrine and knowledge playbooks as on-demand skills, plus a maintainer-facing update skill. boris — Boris Cherny's Claude Code workflow tips (howborisusesclaudecode.com); thariq — Anthropic's internal skill-authoring playbook; fable-5 — Claude Fable 5's operating doctrine (self-authored, no upstream). The boris and thariq packs vendor a verbatim upstream baseline; /playbooks:update drift-checks and syncs those baselines centrally (maintainers).
- [`claude-config`](plugins/claude-config) — Three audit skills for a repo's Claude Code configuration: audit (settings.json / .mcp.json / hooks / plugins / permissions drift), automation-gaps (evidence-gated verdicts on automation gaps), and permission-hygiene (allow-rule / allowed-tools grants for auto-mode durability and portability).
- [`claude-memory`](plugins/claude-memory) — Audits the Claude Code instruction/memory layer — CLAUDE.md, CLAUDE.local.md, .claude/rules/, and auto-memory — against a checklist derived from official Claude Code documentation. A deterministic script-backed spine (MEMORY.md index integrity, orphan always-loaded rules) yields identical findings on identical repo state; judgment-tier checks apply fixed criteria with model reading. Actions: audit (default), fix (per-item approval), update (refresh criteria from current docs), report.
- [`claude-ops`](plugins/claude-ops) — Claude Code operations toolkit. Four skills: observability (read locally captured telemetry — OTEL store, collector, hook-event JSONL, ccusage — with trend reports and store pruning), troubleshoot (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and integrate them into the current repo), and a re-runnable setup action that settles where the troubleshooting registry lives. Plus a family of seven advisory *-audit telemetry-emitter hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures) that emit the shared hook-telemetry envelope, and a reference sink that maps envelopes into the hook-events.jsonl the observability skill reads.
- [`claude-ops`](plugins/claude-ops) — Claude Code operations toolkit. Five skills: observability (read locally captured telemetry — OTEL store, collector, hook-event JSONL, ccusage — with trend reports and store pruning), troubleshoot (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and integrate them into the current repo), plugins (bring a machine's plugin fleet current on demand — marketplace refresh, effective-scope updates including in-repo project/local installs, new-plugin install per policy, scope-divergence detection and explicit convergence), and a re-runnable setup action that settles where the troubleshooting registry lives. Plus a family of seven advisory *-audit telemetry-emitter hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures) that emit the shared hook-telemetry envelope, and a reference sink that maps envelopes into the hook-events.jsonl the observability skill reads.
- [`skill-quality`](plugins/skill-quality) — Skill-authoring QA tooling: a static contract checker that runs seventeen deterministic checks over a Claude Code skill (frontmatter, listing-budget cap, trigger-keyword preservation, line caps, broken internal refs, markdownlint, gotchas surface, evals presence) and a bundled evals.json schema for validation. Runs against any repo's skills directory via the convention-resolution ladder — no baked layout.

### Security
Expand Down
197 changes: 197 additions & 0 deletions docs/topics/plugin-fleet-sync-skill/PLAN.md

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions docs/topics/plugin-fleet-sync-skill/design/design-resolution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Design resolution — plugin-fleet-sync-skill

outcome: early-exit (Tier B)

Reason: the contract surface was fully resolved by the /interview Brief (PLAN.md `## Brief`,
Decisions 1–8) backed by three verified research passes (official CC docs, repo conventions,
scope-precedence empirics). No new code types or module topology — the deliverable is a
markdown skill orchestrating the `claude plugin` CLI plus one read-only state-inspection
script. Type surface is small enough to sketch here; full /design would re-derive the Brief.

## Type sketch

**Action surface** (router in SKILL.md):

- `sync [marketplace|all]` — default; mutating via CLI only
- `audit [marketplace|all]` — read-only dry-run of sync + converge predictions
- `converge` — explicit scope consolidation; only committed-settings-touching action

**userConfig** (plugin.json, personal policy scalar):

- `install_new`: `ask` (default) | `all` | `none` — enum support in the manifest schema is a
Phase-1 verification; fallback is a string field validated in skill prose.

**State-inspection output** (read-only script → JSON consumed by the skill):

```json
{
"marketplace": {"name": "...", "autoUpdate": false, "lastUpdated": "..."},
"catalog": ["plugin", "..."],
"installed": [{"id": "plugin@mp", "scope": "user|project|local", "version": "...", "projectPath": "..."}],
"enabled": {"plugin@mp": true},
"missing_from_install": ["..."],
"missing_from_enabled": ["..."],
"divergences": [{"id": "...", "scopes": [{"scope": "...", "version": "...", "projectPath": "..."}]}]
}
```

Inputs are internal CC state files read-only (`installed_plugins.json`, `known_marketplaces.json`,
marketplace `marketplace.json`, settings `enabledPlugins`); every mutation goes through the CLI.
11 changes: 8 additions & 3 deletions plugins/claude-ops/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "claude-ops",
"version": "0.8.0",
"description": "Claude Code operations toolkit. Four skills: observability (read locally captured telemetry — OTEL store, collector, hook-event JSONL, ccusage — with trend reports and store pruning), troubleshoot (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and integrate them into the current repo), and a re-runnable setup action that settles where the troubleshooting registry lives. Plus a family of seven advisory *-audit telemetry-emitter hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures) that emit the shared hook-telemetry envelope, and a reference sink that maps envelopes into the hook-events.jsonl the observability skill reads.",
"version": "0.9.0",
"description": "Claude Code operations toolkit. Five skills: observability (read locally captured telemetry — OTEL store, collector, hook-event JSONL, ccusage — with trend reports and store pruning), troubleshoot (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and integrate them into the current repo), plugins (bring a machine's plugin fleet current on demand — marketplace refresh, effective-scope updates including in-repo project/local installs, new-plugin install per policy, scope-divergence detection and explicit convergence), and a re-runnable setup action that settles where the troubleshooting registry lives. Plus a family of seven advisory *-audit telemetry-emitter hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures) that emit the shared hook-telemetry envelope, and a reference sink that maps envelopes into the hook-events.jsonl the observability skill reads.",
"author": {
"name": "Melodic Software",
"email": "info@melodicsoftware.com"
},
"license": "MIT",
"keywords": ["claude-code", "operations", "observability", "otel", "troubleshooting", "changelog", "monitoring", "hooks", "telemetry", "audit"],
"keywords": ["claude-code", "operations", "observability", "otel", "troubleshooting", "changelog", "monitoring", "hooks", "telemetry", "audit", "plugins", "marketplace"],
"userConfig": {
"registry_dir": {
"type": "string",
Expand All @@ -19,6 +19,11 @@
"type": "string",
"title": "Skill-usage log directory (project-relative)",
"description": "Optional contained project-relative directory where the skill-usage-audit hook writes skill-usage.jsonl. Absolute, drive, UNC, traversal, and escaping-symlink paths are invalid. Leave unset to use .claude/observability."
},
"install_new": {
"type": "string",
"title": "New-plugin install policy for the plugins skill's sync action",
"description": "Controls what `sync` does with catalog plugins that aren't installed yet. Valid values: \"ask\" (default — offer them in one batched multi-select prompt), \"all\" (install every one automatically), \"none\" (report only, never install). The manifest schema has no enum type, so this validates in prose, not JSON Schema; any other value is treated as \"ask\"."
}
}
}
15 changes: 15 additions & 0 deletions plugins/claude-ops/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,21 @@
All notable changes to the `claude-ops` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.9.0]

### Added

- New `plugins` skill (`/claude-ops:plugins`): brings a machine's plugin fleet current on demand.
`sync` (default) refreshes marketplaces, updates in-repo project/local-scope installs plus the
user-scope sweep, installs new catalog plugins per the `install_new` policy, and fills any
`enabledPlugins` completeness gap — all CLI-mediated, never hand-editing Claude Code's internal
state files. `audit` runs the same algorithm read-only. `converge` is the one action that can
touch a committed `.claude/settings.json`: it detects actionable (version-behind) scope
divergence, previews and confirms per plugin, then surfaces the resulting diff for review — never
auto-committed, and it aborts outright in an autonomous session. Adds a read-only
`scripts/fleet-state.sh` state-inspection script and the `install_new` userConfig scalar
(`ask` default / `all` / `none`).

## [0.8.0]

### Changed
Expand Down
17 changes: 12 additions & 5 deletions plugins/claude-ops/README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# claude-ops

A Claude Code plugin for running Claude Code well over time — one cohesive
capability across four skills and a family of telemetry-emitter hooks.
capability across five skills and a family of telemetry-emitter hooks.
Observability reads what your sessions actually did, troubleshooting tracks what
upstream has broken, changelog integration keeps your repo current with what
upstream has shipped, a re-runnable `setup` action settles where the
troubleshooting registry lives, and the `*-audit` hooks feed observability with
per-hook execution telemetry Claude Code's native OTEL cannot see.
upstream has shipped, the plugins skill keeps your own plugin fleet current, a
re-runnable `setup` action settles where the troubleshooting registry lives,
and the `*-audit` hooks feed observability with per-hook execution telemetry
Claude Code's native OTEL cannot see.

## Skills

Expand All @@ -15,6 +16,7 @@ per-hook execution telemetry Claude Code's native OTEL cannot see.
| `/claude-ops:observability` | Reads locally captured Claude Code telemetry — OTEL DuckDB store, machine-owned collector, optional Aspire dashboard, hook-event JSONL, ccusage — and renders cross-session trend reports (`session`/`day`/`week`/`month`/`since:`/`all` scopes). Read-only except the explicit `clean` action, which prunes the JSONL log and OTEL store by age. |
| `/claude-ops:troubleshoot` | Searches known Claude product GitHub bugs before you build on a feature, checks service health and model quality, and maintains a persistent registry of tracked issues (what they block, workarounds, follow-ups when fixed). Actions: `status` (default), `search`, `check-all`, `scan`, `list`, `quality`, `create`. |
| `/claude-ops:changelog` | Ingests Claude Code changelog entries and integrates them into the current repo: `fetch` (read-only display), `diff` (impact triage, no edits), `status` (applied versions from git history), and `apply` (full explore → research → interview → implement pipeline, explicit user intent only). |
| `/claude-ops:plugins` | Brings a machine's plugin fleet current on demand: marketplace refresh, updates for the plugins that actually load (including in-repo project/local-scope installs), new-catalog-plugin install per policy, and scope-divergence detection. Actions: `sync` (default, CLI-mediated mutations only), `audit` (read-only dry run), `converge` (the one action that can touch a committed `.claude/settings.json` — previews and confirms per plugin first). |
| `/claude-ops:setup` | Validates the troubleshooting-registry and skill-usage-log destinations, including path containment, and routes personal option changes through Claude Code's plugin configuration prompt. |

## The audit hooks
Expand Down Expand Up @@ -120,8 +122,13 @@ instead of failing.

## Configuration

Two `userConfig` options:
Three `userConfig` options:

- **`install_new`** (string, optional) — new-catalog-plugin install policy for the `plugins`
skill's `sync` action. `ask` (default) offers not-yet-installed catalog plugins in one batched
multi-select prompt; `all` installs every one automatically; `none` reports them without
installing. The manifest schema has no `enum` type, so this validates in prose, not JSON Schema;
any other value is treated as `ask`.
- **`registry_dir`** (string, optional) — project-relative directory for the
troubleshoot issue registry (`registry.json`). Set it to keep the
registry inside your repo (git-tracked, team-shared) instead of the
Expand Down
Loading
Loading