{
  "markdown": "# Melodic Software. Claude Code plugins\n\nA public [Claude Code](https://code.claude.com/docs) plugin marketplace of reusable, repo-agnostic\nskills, hooks, and agents. Each plugin is designed to work in any repository and to be customized by\nconsumers without editing the plugin itself.\n\n## Use this marketplace\n\n```shell\n/plugin marketplace add melodic-software/claude-code-plugins\n/plugin install <plugin-name>@melodic-software\n```\n\nBrowse and manage with `/plugin`. To refresh after updates: `/plugin marketplace update melodic-software`.\n\nWhen you consume this repo from a local `directory` source, the install cache keys on semver\n`version`, not commit, so several commits under one version leave early installs on a stale\nsnapshot and `plugin update` can report \"already at the latest version\" while SHA lags. See\n[`docs/MIGRATION-PLAYBOOK.md`](docs/MIGRATION-PLAYBOOK.md) (\"Same-version commit drift\") and\n[#2061](https://github.com/melodic-software/claude-code-plugins/issues/2061).\n\n### Enable plugin suggestions for an organization\n\nSome catalog entries declare `relevance` signals so Claude Code can suggest the plugin when a\nsession's work matches (matching runs locally; nothing is reported anywhere). Suggestions are\nopt-in per marketplace: they surface only after an administrator allowlists the marketplace in\n[managed settings](https://code.claude.com/docs/en/settings#settings-files). Declare the\nmarketplace source AND allowlist its name in the same file:\n\n```json\n{\n  \"extraKnownMarketplaces\": {\n    \"melodic-software\": {\n      \"source\": {\n        \"source\": \"github\",\n        \"repo\": \"melodic-software/claude-code-plugins\"\n      }\n    }\n  },\n  \"pluginSuggestionMarketplaces\": [\"melodic-software\"]\n}\n```\n\nThe source declaration is required for any non-official marketplace: the allowlisted name is\nignored if the locally registered marketplace came from a different source. That rule stops an\nunrelated catalog from registering under an allowlisted name to get its plugins suggested.\nReference: [Recommend plugins for your org](https://code.claude.com/docs/en/plugin-relevance).\n\nA few personal or external-service plugins install disabled (`defaultEnabled: false`) until the\nuser opts in with `/plugin enable`; an existing install is never flipped by catalog changes.\n\n## Finding your way\n\n- Not sure which skill to invoke? Start at the [skill cheat sheet](docs/SKILL-CHEAT-SHEET.md). A\n  scan-and-go map from what you are doing to the skill that does it.\n- [Plugin catalog](docs/CATALOG.md). Every plugin by category, generated from the manifests and\n  kept in sync by CI. New plugins clear the per-plugin migration gate in\n  [`docs/MIGRATION-PLAYBOOK.md`](docs/MIGRATION-PLAYBOOK.md).\n- [Catalog taxonomy](docs/CATALOG-TAXONOMY.md). The category vocabulary the catalog is grouped by.\n\n## What's here\n\n- `.claude-plugin/marketplace.json`, the marketplace catalog.\n- `plugins/`, one directory per plugin.\n- `lib/`, single source of truth for the shared shell helpers; the self-contained copies vendored\n  under `plugins/`, into hook and skill-script directories alike, are synced from here by\n  each helper's own `scripts/sync-<helper>.sh` and CI rejects drift, so never edit a copy.\n- `scripts/`, repo-level CI checks, sync scripts, and catalog generators, with their tests\n  alongside.\n- `prompts/`, launch-prompt templates meant to be filled in and pasted into a session; unlike\n  `lib/`, nothing copies them, and plugin skills cite them by path.\n- `.claude/`, this checkout's own Claude Code configuration (session and PR-linkage hooks, the\n  source-control convention). It governs work done here and ships to no one.\n- `.github/`, workflows plus the policy files they read (runner policy, security paths, recurring\n  schedule, PR template).\n- `docs/MIGRATION-PLAYBOOK.md`, design charter, extensibility model, the per-plugin migration\n  gate, and the local development loop.\n- `docs/`, further design records and audits (CI runner routing, extensibility-contract smoke\n  tests, migration audits).\n- `CLAUDE.md`, operating rules for AI agents working in this repo (fresh-docs mandate + plugin\n  design rules).\n- `docs/OFFICIAL-DOCS.md`, canonical index of the official Claude Code doc pages the mandate\n  sends you to.\n\n## Validate a change\n\nThe shell suites here are spawn-bound, and Git Bash on Windows pays roughly\n140 ms per process spawn against roughly 3 ms on Linux, so running every\n`**/*.test.sh` locally is an hours-long wall on a Windows box and nobody does\nit. Run the suites that actually cover your change instead:\n\n```shell\nscripts/affected-tests.sh                 # list the suites covering your diff vs origin/main\nscripts/affected-tests.sh --run           # ... and run them, sequentially\nscripts/affected-tests.sh --explain       # ... and say why each one was selected\nscripts/affected-tests.sh path/to/file.sh # explicit paths instead of a diff\n```\n\nIt maps a changed file to its co-located suite, to any suite that names it, and\nto its dependents transitively, and it fans a shared-lib change out to every\ncarrying plugin by reading the `copies=(...)` array out of that lib's\n`scripts/sync-*.sh` manifest, the same manifest CI's `*-sync` lanes enforce. The\nfan-out is derived on every run, never transcribed, so a new carrying plugin is\ncovered the moment it exists.\n\nAll four ecosystems that carry suites here are selected, each by its own naming\nconvention: shell `*.test.sh`, Node `*.test.js` and `*.test.mjs`, Python\n`test_*.py`, and Pester `*.Tests.ps1`. Only the shell suites are executed by\n`--run`, because the others are driven by lane-specific invocations that cannot\nbe derived from a suite path; those are named as `NOT RUN` and `--run` exits 3\nrather than reporting success over suites that never executed.\n\nA changed file that maps to nothing is an **error**, not an empty selection.\n\"zero suites\" must never be read as \"nothing to run\". Path classes that\ngenuinely carry no suite are recorded, with the CI lane that does cover them, in\n[`scripts/affected-tests-no-suite.txt`](scripts/affected-tests-no-suite.txt);\n`--allow-unmapped` is the escape hatch for everything else. That list is for\nprose and manifests, never for code: a source file with no coverage is supposed\nto fail here. A **deletion** is the one exception: a changed path that no longer\nexists and that nothing claims is reported as a visible `deleted:` note instead\nof the error, because there is no content left to cover. A deletion that a\nsurviving suite still names (a co-located test left behind, a suite that\nreferences the dead path) keeps selecting those suites, which are exactly what\nfails loudly if the deletion broke something.\n\nThe runner is deliberately sequential: parallelising it measured sublinear\n(the suites are spawn-bound), and several guardrails suites assert wall-clock\nceilings that fail spuriously under concurrency. Selection is the lever.\n\nCI is unaffected, it still runs everything.\n\n## Official documentation\n\nThis repo tracks policy and wiring only; authoritative behavior lives in the official docs, which must\nbe read fresh rather than recalled. Start at the\n[Claude Code plugins guide](https://code.claude.com/docs/en/plugins).\n\n## License\n\n[MIT](LICENSE).\n",
  "bytes": 7217,
  "sha": "a8c19d082904ef542515b8c4f00133a865a978ac7d2997fc12e1337a644e66d4",
  "repo_slug": "melodic-software/claude-code-plugins",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/skl_melodic_software_claude_code_plugins_plu_3b0220ab/readme"
}