{"id":51223175,"url":"https://github.com/qxbyte/pluginhub","last_synced_at":"2026-07-04T11:03:41.651Z","repository":{"id":358112370,"uuid":"1239754768","full_name":"qxbyte/pluginhub","owner":"qxbyte","description":"插件库","archived":false,"fork":false,"pushed_at":"2026-07-03T13:02:51.000Z","size":1879,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-03T15:06:39.120Z","etag":null,"topics":["ai-agents","claude-code","claude-code-plugin","codebuddy","obsidian","python","spec-driven-development","workflow"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qxbyte.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-15T12:06:48.000Z","updated_at":"2026-07-03T13:02:46.000Z","dependencies_parsed_at":"2026-05-15T21:00:33.238Z","dependency_job_id":"ae34d21b-fcac-4764-aee4-dae5c4263660","html_url":"https://github.com/qxbyte/pluginhub","commit_stats":null,"previous_names":["qxbyte/spec-mode","qxbyte/specode","qxbyte/pluginhub"],"tags_count":54,"template":false,"template_full_name":null,"purl":"pkg:github/qxbyte/pluginhub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qxbyte%2Fpluginhub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qxbyte%2Fpluginhub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qxbyte%2Fpluginhub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qxbyte%2Fpluginhub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qxbyte","download_url":"https://codeload.github.com/qxbyte/pluginhub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qxbyte%2Fpluginhub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35119016,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","claude-code","claude-code-plugin","codebuddy","obsidian","python","spec-driven-development","workflow"],"created_at":"2026-06-28T09:00:31.117Z","updated_at":"2026-07-04T11:03:41.645Z","avatar_url":"https://github.com/qxbyte.png","language":"Python","funding_links":[],"categories":["Source Catalog"],"sub_categories":[],"readme":"\u003cp align=\"right\"\u003e\u003cstrong\u003eEnglish\u003c/strong\u003e | \u003ca href=\"./README.zh-CN.md\"\u003e中文\u003c/a\u003e\u003c/p\u003e\n\n# pluginhub\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./README.md#license)\n[![specode](https://img.shields.io/badge/specode-5.2.0-blue.svg)](./plugins/specode/.claude-plugin/plugin.json)\n[![task-swarm](https://img.shields.io/badge/task--swarm-0.10.1-blue.svg)](./plugins/task-swarm/.claude-plugin/plugin.json)\n[![obsidian-wiki](https://img.shields.io/badge/obsidian--wiki-2.0.1-blue.svg)](./plugins/obsidian-wiki/.claude-plugin/plugin.json)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-compatible-8A2BE2)](https://github.com/qxbyte/pluginhub#installation)\n[![CodeBuddy](https://img.shields.io/badge/CodeBuddy-2.97.1%2B-1E90FF)](https://github.com/qxbyte/pluginhub#installation)\n[![Tests](https://img.shields.io/badge/pytest-255%20cases-success)](./plugins/task-swarm/tests)\n\n\u003e qxbyte's plugin marketplace for CLI coding agents\n\u003e (Claude Code / CodeBuddy).\n\n**pluginhub** is a small plugin marketplace: add it once, then install\nany plugin it hosts. More plugins will land here over time.\n\n## Plugins\n\n| Plugin | Version | What it does |\n| --- | --- | --- |\n| **specode** | 6.0.0 | A lightweight spec-driven **workflow** — orchestration shell that delegates each phase to [superpowers](https://github.com/obra/superpowers) skills (first-class native fallback) and lands 4 fixed docs per spec. **v6.0.0 BREAKING**: fixed docs 3 → 4 — `design.md` redefined as a **traditional design doc** (背景与目标/架构概览/模块划分/接口设计/数据流/错误处理/测试策略, prose only, no checkboxes); new `tasks.md` carries the executable plan (writing-plans format + `**Interfaces:**` contract blocks), engine-neutral — task-swarm (pipeline.yml now derived from it) / superpowers / specode self-execute all consume the same file; pipeline becomes requirements → design → tasks → 执行方式 selector → execute → acceptance, with brainstorming spanning requirements+design in one dual-artifact call; `/specode:continue` becomes **load-and-stop** — reads docs, reports a progress brief, then waits for the user's instruction (never auto-resumes); `design-unchecked` renamed `plan-unchecked` (tasks.md first, 5.x legacy design.md fallback, old name kept as alias); 5.x specs keep working via the legacy inference row. **v5.2.0**: Tier-0 RagKit gate tightened — probe changed from `test -d .ragkit` to `test -f .ragkit/chunks.json` (eliminates false-positive when only config.json exists after `backend set`); Tier-0 採纳条目 capped at Tier-2 discipline (≤5/phase, reasoned override allowed). **v5.1.3**: `list-specs` now surfaces intake-phase specs (dir created, requirements not yet written) — lists subdirs containing any fixed doc plus empty subdirs, hidden dirs still excluded; repo-wide stale-docs cleanup. **v5.1.2**: distill polish — `ensure-gitignore` skips in a non-git project with no existing `.gitignore` (no stray file); new `knowledge.py copy-to` verb (one-step dual-landing: copy cases/navigation + rebuild the dest's MEMORY) now used by distill Step 5; navigation `来源` keeps the origin slug (reusing specs listed in body). **v5.1.1**: validation-driven fixes — distill runs `design-unchecked` before sedimenting (warns if the spec isn't fully executed, so knowledge points don't reference unbuilt code); dedup navigation points against MEMORY before writing; retrieval emphasizes semantic relevance over tag-overlap. **v5.1.0**: reintroduces experience retrieval/injection on a new \"pointers-not-facts\" footing — new stdlib `knowledge.py` (ensure-gitignore/memory-rebuild/memory-validate); distill now emits **atomic case/navigation knowledge-points** to the project's `\u003cproject_root\u003e/knowledge-base/` (cases/ + navigation/ + a MEMORY index, gitignored), optionally copied to Obsidian; new `references/retrieval.md` two-tier gated retrieval wired into the requirements/design phases (inject pointers not facts, default reads only the small index, ≤5 docs on hit); acceptance re-hooks the distill prompt via the existing `auto_distill` default. **v5.0.1**: the `distill` skill is now `user-invocable: false` (hides the bare `/distill` + the duplicate `/specode:distill`, leaving one clean command entry); distill is now **md-only** (dropped the dead `--format yml|both` + `codemap knowledge write` path); purged all remaining `.ai-memory`/codemap doc references and removed the obsolete recall section from the requirements template. **v5.0.0 BREAKING**: commands dropped the redundant `specode-` prefix — `/specode:spec` / `/specode:continue` / `/specode:list` / `/specode:distill` (were `/specode:specode-*`); the `distill` skill dir + name were renamed to `distill`; the `specode` orchestration skill is now `user-invocable: false` so the bare `/specode` no longer shows in the slash menu (still auto-activates via its commands). Preserved AI-EDS-era features: project-level `CLAUDE.md` / `AGENT.md` filesystem scan injected as `## 项目级约束` section (痛点 #14 方案 D), SessionStart cache-vs-marketplace drift hint (M8), autonomous-mode defaults — 5 schema keys + 5 `SPECODE_*` env vars + `read-defaults` / `write-default` / `reset-default` verbs (M1+M9). **v4.0.0 BREAKING**: removed memory-injection pipeline — P3-1 `codemap recall` injection / P3-2 rule-acknowledgement post-check / acceptance auto-distill prompt all dropped; round 1/2 baseline showed the recall round-trip did not net save token. `distill` skill v4 rewritten as a **manual-only Obsidian organizer** — `/specode:distill \u003cslug\u003e` writes md (default) to `/Volumes/External HD/Obsidian/Notes/11-KnowledgeBase/\u003cslug\u003e/`, no `.ai-memory/` writes. To restore v3 behaviour: `git checkout backup/specode-v3.4.0-task-swarm-v0.9.2`. |\n| **task-swarm** | 0.10.1 | Multi-agent **orchestration** driven by a `pipeline.yml`: semantic task groups with cross-group concurrency, fork coders, per-group reviewer + validator loops. **v0.10.1**: the `task-swarm` orchestration skill is now `user-invocable: false` so the bare `/task-swarm` no longer shows in the slash menu (the `/task-swarm:swarm` command is unchanged). Preserved AI-EDS-era features: frontmatter-first `project_root` + registry-based run lookup (0.7.x), `## 项目级约束（必读）` section + `_PROJECT_AGENT_DOCS.md` inbox sentinel (0.7.3 + 0.7.4), lifecycle group with `init` dedupe (`--on-existing {error/resume/abort-old/force-new}` flag) + `run.pipeline_end_validator` (0.8.0 + 0.8.1), M2 `run-loop` auto-driver (0.8.1), task.md `## 开发纪律 (范式参考)` section listing superpowers skill names as paradigm identifiers (0.9.0–0.9.2). **v0.10.0 BREAKING**: removed `_ingest_lessons.py` + `cmd_resolve` auto-ingest + `--no-ingest` flag — `cmd_resolve` no longer writes `\u003cproject_root\u003e/.ai-memory/knowledge/cases\\|pitfalls/*.yml`. To restore v0.9.x behaviour: `git checkout backup/specode-v3.4.0-task-swarm-v0.9.2`. See [`plugins/task-swarm/`](./plugins/task-swarm). |\n| **obsidian-wiki** | 2.0.1 | Maintain an Obsidian LLM-Wiki with three skills: deterministic structure layer (`wiki-struct`: Home tree / READMEs / partition pages), content curation (`wiki-curate`: ingest / curate / lint), unified orchestrator (`wiki-orchestrate`). Generic code + per-vault config in the home-dir registry `~/.config/obsidian-wiki/` (falls back to `\u003cvault\u003e/.wiki/config.json`). **v2.0.0 BREAKING**: the spec-distill skill was extracted into specode's `/specode:distill`. See [`plugins/obsidian-wiki/`](./plugins/obsidian-wiki). |\n| **ragkit** | 0.1.0 | Standalone knowledge-base **RAG** — vector + lexical + metadata three-channel recall, RRF-fused, returns pointer cards. Optional downstream consumer of specode `distill` output; zero heavy deps (stdlib + numpy for lexical mode). See [`plugins/ragkit/`](./plugins/ragkit). |\n\n`## Installation` covers the whole marketplace; the other sections\n(Highlights, Usage, Architecture) document **specode**, the flagship\nplugin. For **task-swarm**, see its sources and `CHANGELOG` under\n[`plugins/task-swarm/`](./plugins/task-swarm); for **obsidian-wiki**,\nsee its own `README.md` / `AGENTS.md` under\n[`plugins/obsidian-wiki/`](./plugins/obsidian-wiki).\n\n## Highlights\n\n- **Orchestration shell, not a state machine.** specode delegates each\n  phase to a mature superpowers skill (`brainstorming` → `writing-plans`\n  → `subagent-driven-development` / `executing-plans` →\n  `verification-before-completion`). It owns only what's uniquely its\n  own: the spec lifecycle, fixed-doc landing, and the task-swarm bridge.\n- **Works standalone (native fallback).** No superpowers? specode runs\n  the clarify / plan / execute / verify loop itself with `AskUserQuestion`\n  wizards and sequential TDD. The native path is a first-class peer, not\n  an afterthought.\n- **4 fixed documents, fixed names, fixed location.** Every spec\n  produces `requirements.md` / `design.md` (传统设计文档: architecture /\n  modules / interfaces / data flow) / `tasks.md` (the executable plan,\n  engine-neutral) / `implementation-log.md` under `\u003cspecsRoot\u003e/\u003cslug\u003e/` —\n  whatever engine generated the content. Bug fixes use prose in\n  `requirements.md` (no `bugfix.md`).\n- **Documents are the state.** No persistent session files, no locks,\n  no status footer, no logging. \"Which phase am I in?\" is inferred from\n  which fixed docs exist plus the `- [ ]` checkbox progress in\n  `tasks.md` (5.x legacy specs: `design.md`).\n- **One adaptive selector.** After `tasks.md` is confirmed, an\n  `AskUserQuestion` selector offers up to 4 execution paths — only the\n  ones whose engine is installed: 委托 task-swarm / superpowers\n  subagent-driven / superpowers executing-plans / specode 自执行.\n- **First-run specsRoot setup.** On first use specode asks once for your\n  document directory and uses it **verbatim** as the specs root, then\n  persists it to `~/.config/specode/config.json.specsRoot` and never\n  asks again.\n- **One lightweight hook.** A single advisory `SessionStart` hook reminds\n  the agent specode is available. No blocking, no per-turn machinery.\n- **Parallel execution is a separate plugin.** Pick \"委托 task-swarm\" and\n  specode reads `tasks.md`, derives a `pipeline.yml`, and hands off to\n  the standalone **task-swarm** plugin (zero import).\n- **Project-level constraints follow the chain.** specode + task-swarm\n  (AI-EDS v0.9 痛点 #14 方案 D, preserved into v4.0.0 / v0.10.0) scan\n  `CLAUDE.md` / `AGENT.md` / `AGENTS.md` / `CODEBUDDY.md` at\n  `\u003cproject_root\u003e`, its parent directory, and any subdir touched by\n  `@writes`, and surface the matched **absolute paths** (not content)\n  into both `requirements.md` (`## 项目级约束`) and every coder /\n  reviewer / validator `task.md` (`## 项目级约束（必读）`).\n  `_PROJECT_AGENT_DOCS.md` inbox sentinel reinforces the hard\n  constraint. Fixes the silent drop where independent subagent\n  processes never see the host agent's auto-loaded instruction files.\n- **Autonomous mode / CI friendly (opt-in).** Set\n  `SPECODE_INTERACTIVE=false` plus relevant `SPECODE_PROJECT_ROOT` /\n  `SPECODE_EXECUTION_MODE` / `SPECODE_AUTO_DISTILL` /\n  `SPECODE_SPECS_ROOT_DEFAULT` env vars (or persist via\n  `resolve_root.py write-default --key X --value Y`), and every\n  `AskUserQuestion` gate that would normally block in CI / long-running\n  sessions skips silently with the configured default. Schema default\n  is `interactive=true` so existing installs see **zero behaviour\n  change** — only opt-in users get the autonomous path.\n- **Location-oriented knowledge, not memory injection.** The old AI-EDS\n  memory-injection pipeline (specode P3-1 `codemap recall` + P3-2\n  rule-check + acceptance auto-distill, plus task-swarm `cmd_resolve`\n  auto-ingest writing `.ai-memory/knowledge/*.yml`) was removed in\n  v4.0.0 / v0.10.0 after baseline experiments (3 cases) showed the\n  recall round-trip did not net save token; neither plugin reads /\n  writes `.ai-memory/knowledge/`. **v5.1.0 reintroduced retrieval on a\n  deliberately different, pointers-not-facts footing**: run\n  `/specode:distill \u003cslug\u003e` manually to sediment atomic\n  case / navigation knowledge points into the project's own\n  `\u003cproject_root\u003e/knowledge-base/` (gitignored; optional copy to an\n  Obsidian dir you specify), and the requirements / design phases run a\n  two-tier gated retrieval over its small `MEMORY.md` index to locate\n  real code faster — real code stays the sole source of truth, and\n  execution / task-swarm receive zero injection.\n  To restore v3.4.0 / v0.9.2 behaviour: `git checkout backup/specode-v3.4.0-task-swarm-v0.9.2`.\n\n## Installation\n\n\u003e 📌 **Marketplace name is `pluginhub` (the repo name), not `qxbyte` (the owner name).**\n\u003e All install / uninstall commands use `\u003cplugin\u003e@pluginhub`, e.g. `specode@pluginhub` and `task-swarm@pluginhub`. Using `@qxbyte` will fail with `Marketplace \"qxbyte\" not found`. Cached plugins are also stored under `~/.claude/plugins/cache/pluginhub/\u003cplugin\u003e/\u003cversion\u003e/` — useful when troubleshooting which version is actually loaded.\n\n### From GitHub (recommended)\n\nWorks with either CLI; the plugin manifest is shared.\nCodeBuddy verified on 2.97.1.\n\n```sh\n# CodeBuddy\ncodebuddy plugin marketplace add https://github.com/qxbyte/pluginhub\ncodebuddy plugin install specode@pluginhub\n\n# Claude Code\nclaude plugin marketplace add https://github.com/qxbyte/pluginhub\nclaude plugin install specode@pluginhub\n```\n\nFor the full superpowers-backed experience, also install the\n**superpowers** plugin. For multi-agent parallel execution, also install\n**task-swarm** from this same marketplace (no second `marketplace add`\nneeded) — specode delegates the execution phase to it when installed, and\nself-executes sequentially otherwise:\n\n```sh\n# Claude Code\nclaude plugin install task-swarm@pluginhub\n# CodeBuddy\ncodebuddy plugin install task-swarm@pluginhub\n```\n\nspecode runs fine without either via its native fallbacks.\n\n### One-shot (Claude Code only)\n\n```sh\nclaude --plugin-url https://github.com/qxbyte/pluginhub/archive/refs/heads/main.zip\n```\n\n### Local development\n\n```sh\ngit clone https://github.com/qxbyte/pluginhub.git\nclaude    --plugin-dir ./pluginhub/plugins/specode\ncodebuddy --plugin-dir ./pluginhub/plugins/specode\n\n# add task-swarm too if you want delegated multi-agent execution\nclaude --plugin-dir ./pluginhub/plugins/specode --plugin-dir ./pluginhub/plugins/task-swarm\n```\n\n### Uninstall\n\n```sh\nclaude plugin uninstall specode@pluginhub\nclaude plugin uninstall task-swarm@pluginhub   # if installed\nclaude plugin marketplace remove pluginhub\n# optional: wipe user-level config (and legacy ~/.specode state)\nrm -rf ~/.specode ~/.config/specode\n```\n\n### Update\n\n```sh\n# Claude Code\nclaude plugin update specode@pluginhub\nclaude plugin marketplace update pluginhub\n\n# CodeBuddy\ncodebuddy plugin update specode@pluginhub\ncodebuddy plugin marketplace update pluginhub\n```\n\n## Usage\n\nspecode has exactly four commands.\n\n### 1. Start a spec\n\n```sh\n/specode:spec \u003crequirement\u003e\n```\n\n`cd` to your project directory first — specode derives the default\nproject root from the cwd (`git rev-parse --show-toplevel`, falling\nback to cwd) and asks you to confirm it once per spec. On the **first\never** run it also asks once for your document management directory\nand remembers it. The agent then walks the pipeline:\n\n1. **requirements** — clarify + write `requirements.md` (via\n   `superpowers:brainstorming`, or a native `AskUserQuestion` wizard).\n2. **design** — produce a traditional design doc `design.md`\n   (architecture / modules / interfaces / data flow / error handling /\n   test strategy; brainstorming's design output lands here, or native\n   authoring).\n3. **tasks** — produce the executable plan `tasks.md` (via\n   `superpowers:writing-plans`, or native Task breakdown). Engine-neutral:\n   every execution path consumes this one file.\n4. **执行方式 selector** — pick how to execute (adaptive 4 options; see\n   Highlights).\n5. **execute** — run the plan with TDD, appending to\n   `implementation-log.md`.\n6. **verify** — check against the `requirements.md` `AC-N` items, the\n   design's 测试策略, and the `tasks.md` checkboxes, then ask you to\n   accept.\n\nAll output lands under `\u003cspecsRoot\u003e/\u003cslug\u003e/` as the 4 fixed documents.\n\n### 2. Resume a spec\n\n```sh\n/specode:continue \u003cslug\u003e\n```\n\n`\u003cslug\u003e` is required. specode locates `\u003cspecsRoot\u003e/\u003cslug\u003e/`, infers\nthe phase from the documents present (and the `- [ ]` progress in\n`tasks.md`; 5.x legacy specs: `design.md`), **reports a progress brief,\nthen stops and waits** — say \"继续\" to resume, or supply requirement\nchanges first. It never auto-resumes. Use `/specode:list` to find a slug.\n\n### 3. List specs\n\n```sh\n/specode:list\n```\n\nLists every spec under `\u003cspecsRoot\u003e` with its inferred phase. Overview\nonly — it does not resume.\n\n### 4. Distill knowledge (off-pipeline)\n\n```sh\n/specode:distill \u003cslug\u003e [--target-dir \u003cabs-path\u003e]\n```\n\nManually sediments a finished spec (plus the current agent context)\ninto atomic **case / navigation knowledge points** under the project's\nown `\u003cproject_root\u003e/knowledge-base/` (cases/ + navigation/ + a\n`MEMORY.md` index, gitignored), optionally copying them to an Obsidian\ndirectory. The requirements / design phases later retrieve these as\n**location pointers, never facts** — real code stays the sole source\nof truth. Never auto-run; the acceptance phase only offers it.\n\n## Architecture\n\n```\n.claude-plugin/marketplace.json   marketplace manifest (specode + task-swarm + obsidian-wiki)\nplugins/specode/\n  .claude-plugin/plugin.json      plugin manifest\n  hooks/hooks.json                1 advisory SessionStart hook\n  commands/spec.md        /specode:spec (new spec)\n  commands/continue.md    /specode:continue \u003cslug\u003e\n  commands/list.md        /specode:list\n  commands/distill.md     /specode:distill \u003cslug\u003e (off-pipeline sedimenter)\n  scripts/\n    resolve_root.py               specsRoot / project_root / defaults CLI\n    knowledge.py                  knowledge-base index CLI (MEMORY rebuild/validate/copy-to)\n    spec_hooks.py                 SessionStart discipline injection\n    run.sh / run.cmd              python3 → python → py interpreter probe\n  skills/specode/\n    SKILL.md                      the orchestration shell (all behavior)\n    references/\n      selectors.md                执行方式 selector verbatim examples\n      obsidian.md                 specsRoot path resolution + conventions\n      superpowers-wiring.md       phase ↔ superpowers skill mapping\n      retrieval.md                two-tier gated experience retrieval spec\n  skills/distill/\n    SKILL.md                      /specode:distill behavior (case/navigation points)\n    references/                   breakdown heuristics + doc templates\n  assets/templates/               requirements.md / design.md / tasks.md /\n                                  implementation-log.md seed templates\n  tests/                          hermetic pytest suite (resolve_root.py + knowledge.py)\n```\n\nThe companion **task-swarm** plugin (`plugins/task-swarm/`) is a\nstandalone multi-agent orchestrator that specode optionally hands off\nto; see its own `skills/task-swarm/SKILL.md` and `CHANGELOG.md`. The\n**obsidian-wiki** plugin (`plugins/obsidian-wiki/`) is self-contained\nand documented by its own `README.md` / `AGENTS.md`.\n\n## Contributing\n\nSee [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the stdlib-only\nruntime rule, the `run.sh` CLI invocation contract, the advisory-hook\nrule, hermetic test conventions, and the release procedure.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqxbyte%2Fpluginhub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqxbyte%2Fpluginhub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqxbyte%2Fpluginhub/lists"}