Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
{
"name": "specode",
"source": "./plugins/specode",
"version": "5.0.0",
"description": "Lightweight spec-driven workflow: orchestrates superpowers skills per phase, lands 3 fixed docs (requirements/design/implementation-log). **v5.0.0 BREAKING**: 命令去 `specode-` 前缀 — `/specode:spec` / `/specode:continue` / `/specode:list` / `/specode:distill`(原 `/specode:specode-*`);内核 skill 加 `user-invocable:false` 隐藏裸 `/specode`。**v4.0.0 BREAKING**: 彻底拔出记忆注入工程 — 砍 P3-1 codemap recall / P3-2 rule-check / acceptance auto-distill prompt。保留 project-level CLAUDE.md scan。distill v4 完全重写为手动 md-only Obsidian wiki organizer, 默认写 `/Volumes/External HD/Obsidian/Notes/11-KnowledgeBase/<slug>/`。如需 v3 行为 checkout `backup/specode-v3.4.0-task-swarm-v0.9.2`。",
"version": "5.0.1",
"description": "Lightweight spec-driven workflow: orchestrates superpowers skills per phase, lands 3 fixed docs (requirements/design/implementation-log). **v5.0.1**: distill skill 加 `user-invocable:false`(隐藏裸 `/distill` + 消除 `/specode:distill` 重复);distill 收敛为纯 md-only(移除 `--format yml|both` + codemap 死路径);清理全部 `.ai-memory`/codemap 文档残留 + requirements 模板删 recall 段。**v5.0.0 BREAKING**: 命令去 `specode-` 前缀 — `/specode:spec` / `/specode:continue` / `/specode:list` / `/specode:distill`(原 `/specode:specode-*`);内核 skill 加 `user-invocable:false` 隐藏裸 `/specode`。**v4.0.0 BREAKING**: 彻底拔出记忆注入工程 — 砍 P3-1 codemap recall / P3-2 rule-check / acceptance auto-distill prompt。保留 project-level CLAUDE.md scan。distill v4 完全重写为手动 md-only Obsidian wiki organizer, 默认写 `/Volumes/External HD/Obsidian/Notes/11-KnowledgeBase/<slug>/`。如需 v3 行为 checkout `backup/specode-v3.4.0-task-swarm-v0.9.2`。",
"homepage": "https://github.com/qxbyte/pluginhub",
"repository": "https://github.com/qxbyte/pluginhub",
"license": "MIT",
Expand Down
6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

A **three-plugin** marketplace for Claude Code and CodeBuddy CLIs. The root is only the marketplace shell; each plugin under `plugins/<name>/` is self-contained with its own `plugin.json`, skills, scripts, tests, and CHANGELOG.

- **specode** (`plugins/specode/`, v5.0.0) — a **lightweight spec-driven workflow plugin**. It is not a state machine: it is a thin **orchestration shell** (壳) that walks a host agent through a phase pipeline (requirements → design → 执行方式 → 执行 → 验收) and, at each phase, **delegates the heavy lifting to superpowers skills** (`brainstorming` / `writing-plans` / `subagent-driven-development` / `executing-plans` / `verification-before-completion`). When superpowers is absent, specode falls back to a **specode-native** path (first-class, not an afterthought). It produces **3 fixed documents** (`requirements.md` / `design.md` / `implementation-log.md`) under the user's specs directory. **This is the plugin this `CLAUDE.md` documents** unless stated otherwise.
- **specode** (`plugins/specode/`, v5.0.1) — a **lightweight spec-driven workflow plugin**. It is not a state machine: it is a thin **orchestration shell** (壳) that walks a host agent through a phase pipeline (requirements → design → 执行方式 → 执行 → 验收) and, at each phase, **delegates the heavy lifting to superpowers skills** (`brainstorming` / `writing-plans` / `subagent-driven-development` / `executing-plans` / `verification-before-completion`). When superpowers is absent, specode falls back to a **specode-native** path (first-class, not an afterthought). It produces **3 fixed documents** (`requirements.md` / `design.md` / `implementation-log.md`) under the user's specs directory. **This is the plugin this `CLAUDE.md` documents** unless stated otherwise.
- **task-swarm** (`plugins/task-swarm/`, v0.10.1) — a standalone implementation-phase orchestrator (multi-coder fork + reviewer/validator state machine), extracted out of specode in milestone M1. It has its own CLI (`scripts/task_swarm/`), state machine, agents, skill, and CHANGELOG. specode hands off to it only via the user-chosen "委托 task-swarm" option in the 执行方式 selector, with **zero import** (calls task-swarm's own `/task-swarm:swarm` command).
- **obsidian-wiki** (`plugins/obsidian-wiki/`, v2.0.0) — a **skills-only** plugin (no commands, no hooks) for maintaining an Obsidian LLM-Wiki: a deterministic structure layer (Home tree / per-dir READMEs / partition pages via `wiki-struct`), content curation (`wiki-curate`), and a unified orchestrator (`wiki-orchestrate`). Generic code + per-vault `.wiki/config.json`, zero hardcoded structure. Largely independent of the other two — its only historical tie is that the old spec→knowledge distill capability was **extracted out of it into specode's `distill`** in its own v2.0.0.

Expand Down Expand Up @@ -91,7 +91,7 @@ specode has almost no runtime logic. The behavior lives in **`skills/specode/SKI
Both superpowers and task-swarm are **soft dependencies** (run-time only, called via SKILL prose, zero import). specode installed alone must run the whole 启动→coding 完成 loop via the native fallbacks — the fallback path is a first-class peer of the superpowers path, not a footnote.

### `distill` — the off-pipeline 4th command
`/specode:distill [<slug>]` is **not** part of the requirements→验收 pipeline and does **not** produce or touch the 3 fixed docs. It is a manual, user-triggered organizer (own command `commands/distill.md` + own skill `skills/distill/SKILL.md`) that converts a finished spec into **md-only** Obsidian knowledge notes (default `/Volumes/External HD/Obsidian/Notes/11-KnowledgeBase/<slug>/`). As of v4.0.0 it has **no** machine-readable yml output (md-only default; `--format yml|both` opt-in), **no** codemap recall, and is **never auto-triggered** — treat it as a standalone wiki utility, not a workflow phase. The `distill` SKILL.md is authoritative for current behavior; the two `skills/distill/references/*.md` (breakdown-heuristics / doc-template) still carry v3-era `.ai-memory/` path framing and want a dedicated alignment pass.
`/specode:distill [<slug>]` is **not** part of the requirements→验收 pipeline and does **not** produce or touch the 3 fixed docs. It is a manual, user-triggered organizer (own command `commands/distill.md` + own skill `skills/distill/SKILL.md`) that converts a finished spec into **md-only** Obsidian knowledge notes (default `/Volumes/External HD/Obsidian/Notes/11-KnowledgeBase/<slug>/`). It is **md-only** (the yml / `codemap knowledge write` path was removed in 5.0.1 — its only consumer, codemap recall, was already gone since v4.0.0), takes **no** `.ai-memory`, and is **never auto-triggered** — treat it as a standalone wiki utility, not a workflow phase. The `distill` SKILL.md and both `skills/distill/references/*.md` (breakdown-heuristics / doc-template) are aligned to this md-only reality.

### The 3 fixed documents (硬约束)
Whatever the execution engine, a spec **always** produces exactly these 3, with **fixed filenames**, **fixed location** `<specsRoot>/<slug>/`:
Expand Down Expand Up @@ -138,7 +138,7 @@ Detailed steps are in CONTRIBUTING.md §Release. Each plugin releases **independ
- `plugins/<plugin>/.claude-plugin/plugin.json` → `"version"`
- `.claude-plugin/marketplace.json` → **that plugin's** entry's `version` (leave the other two entries alone)

Workflow (per plugin): bump both manifests → rename `## Unreleased` in the plugin's CHANGELOG to `## X.Y.Z (YYYY-MM-DD)` + add a fresh `## Unreleased` above → `python3 scripts/check_marketplace_versions.py` (must pass) → run that plugin's tests → commit + push → `claude plugin tag --dry-run plugins/<plugin>` → `claude plugin tag plugins/<plugin> --push`. Tag format is `<plugin>--v{version}` (annotated, e.g. `specode--v5.0.0`, `task-swarm--v0.10.1`). **Pushing the tag IS the release** — host CLIs fetch the marketplace manifest from GitHub by git tag.
Workflow (per plugin): bump both manifests → rename `## Unreleased` in the plugin's CHANGELOG to `## X.Y.Z (YYYY-MM-DD)` + add a fresh `## Unreleased` above → `python3 scripts/check_marketplace_versions.py` (must pass) → run that plugin's tests → commit + push → `claude plugin tag --dry-run plugins/<plugin>` → `claude plugin tag plugins/<plugin> --push`. Tag format is `<plugin>--v{version}` (annotated, e.g. `specode--v5.0.1`, `task-swarm--v0.10.1`). **Pushing the tag IS the release** — host CLIs fetch the marketplace manifest from GitHub by git tag.

Semver "API surface" for **specode** = the four command names (`/specode:spec <需求>` / `/specode:continue <slug>` / `/specode:list` / `/specode:distill [<slug>]`), the `SessionStart` hook event, the persisted `config.json.specsRoot` field, and the 3 fixed document filenames. Removing/renaming any of these is **major**; adding a backwards-compatible capability is **minor**.

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# pluginhub

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./README.md#license)
[![specode](https://img.shields.io/badge/specode-5.0.0-blue.svg)](./plugins/specode/.claude-plugin/plugin.json)
[![specode](https://img.shields.io/badge/specode-5.0.1-blue.svg)](./plugins/specode/.claude-plugin/plugin.json)
[![task-swarm](https://img.shields.io/badge/task--swarm-0.10.1-blue.svg)](./plugins/task-swarm/.claude-plugin/plugin.json)
[![obsidian-wiki](https://img.shields.io/badge/obsidian--wiki-2.0.0-blue.svg)](./plugins/obsidian-wiki/.claude-plugin/plugin.json)
[![Claude Code](https://img.shields.io/badge/Claude%20Code-compatible-8A2BE2)](https://github.com/qxbyte/pluginhub#installation)
Expand All @@ -20,7 +20,7 @@ any plugin it hosts. More plugins will land here over time.

| Plugin | Version | What it does |
| --- | --- | --- |
| **specode** | 5.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 3 fixed docs per spec. **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 <slug>` writes md (default) to `/Volumes/External HD/Obsidian/Notes/11-KnowledgeBase/<slug>/`, no `.ai-memory/` writes. To restore v3 behaviour: `git checkout backup/specode-v3.4.0-task-swarm-v0.9.2`. |
| **specode** | 5.0.1 | 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 3 fixed docs per spec. **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 <slug>` writes md (default) to `/Volumes/External HD/Obsidian/Notes/11-KnowledgeBase/<slug>/`, no `.ai-memory/` writes. To restore v3 behaviour: `git checkout backup/specode-v3.4.0-task-swarm-v0.9.2`. |
| **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 `<project_root>/.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). |
| **obsidian-wiki** | 2.0.0 | Maintain an Obsidian LLM-Wiki: deterministic structure layer (Home tree / READMEs / partition pages), SpecIn → knowledge-base distillation + MEMORY, content curation (lint / ingest / curate), unified orchestrator. Generic + per-vault `.wiki/config.json`. See [`plugins/obsidian-wiki/`](./plugins/obsidian-wiki). |

Expand Down
Loading
Loading