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 @@ -6,9 +6,9 @@
{
"name": "dev",
"source": "./plugins/dev",
"description": "24 skills for software projects: Design (App, Secure, API, Data, Migration, UX, LLM, Observability, CI/CD, IaC), Review (App, Architecture, Security, UX, LLM), Tools (Debug, Test, Style, Accessibility, Performance), Meta. Grounded in MIT, CMU, Stanford curricula.",
"description": "27 skills for software projects: Design (App, Secure, API, Data, Migration, UX, LLM, Observability, CI/CD, IaC, Public), Review (App, Architecture, Security, UX, LLM, Public), Tools (Debug, Test, Style, Accessibility, Performance), Meta. Grounded in MIT, CMU, Stanford curricula. Works with Claude Code and GitHub Copilot CLI.",
"category": "development",
"tags": ["best-practices", "security", "architecture", "llm", "accessibility", "performance", "ci-cd", "iac"]
"tags": ["best-practices", "security", "architecture", "llm", "accessibility", "performance", "ci-cd", "iac", "copilot-cli"]
}
]
}
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ Format: [Semantic Versioning](https://semver.org). Dates: YYYY-MM-DD.

## [Unreleased]

### Added

- GitHub Copilot CLI support: this plugin now works as a Copilot CLI plugin/marketplace as well as a Claude Code plugin, without a second manifest or generated duplicate tree
- `meta-install --target claude|copilot-cli`, plus `--copilot-native` and `--standalone-skills` modes, for installing rules/skills into Copilot CLI projects
- `validate-skills.sh`: new Copilot CLI compatibility checks (`${CLAUDE_PLUGIN_ROOT}` usage, `plugin.json` `skills` field, unsafe single-line `description:` colons)

### Fixed

- Skill `name:` frontmatter changed from `dev:<skill>` to `dev-<skill>` — Copilot CLI rejects `:` in skill names; verified this has no effect on Claude Code, whose `/dev:<skill>` invocation is driven by `commands/<skill>.md`, not this field
- Three files (`review-app/SKILL.md`, `commands/meta-install.md`, `commands/meta-create-skill.md`) had unquoted single-line `description:` values containing a colon followed by a space, which breaks YAML parsing under Copilot CLI's stricter parser
- Four `SKILL.md` files used `${CLAUDE_PLUGIN_ROOT}` (Claude Code-only template variable) for cross-file references — replaced with plain relative paths
- Stale "24 skills" / "26 skills" counts corrected to 27 across `marketplace.json`, `plugin.json`, `CLAUDE.md`, `README.md`

---

## [2.0.0] — 2026-06-08
Expand Down
40 changes: 34 additions & 6 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Dev Best Practices

This repo contains best-practice rules for software projects (RAG systems, AI agents, data pipelines, full-stack web apps) and a **Claude Code Plugin** with 26 skills.
This repo contains best-practice rules for software projects (RAG systems, AI agents, data pipelines, full-stack web apps) and a **Claude Code Plugin** with 27 skills that also works as a **GitHub Copilot CLI plugin** (see "Copilot CLI Support" below).

## Repo Structure

Expand All @@ -10,9 +10,9 @@ This repo contains best-practice rules for software projects (RAG systems, AI ag

plugins/dev/
.claude-plugin/
plugin.json # Plugin metadata (name: "dev", version: "3.0.0")
commands/ # Slash command definitions (one file per skill)
skills/ # Skill workflow definitions (auto-triggered)
plugin.json # Plugin metadata (name: "dev", version: "3.0.0") — also read by Copilot CLI (fallback lookup path)
commands/ # Slash command definitions (one file per skill) — Claude Code only, Copilot CLI has no equivalent
skills/ # Skill workflow definitions (auto-triggered) — shared by Claude Code and Copilot CLI
rules/ # Mirror of claude/*.md (used by skills as reference)

claude/ # Condensed rules for Claude Code
Expand All @@ -33,7 +33,7 @@ scripts/
validate-skills.sh # Plugin structure validator (CI + pre-commit)
```

## Plugin Skills (24)
## Plugin Skills (27)

```text
DESIGN: design-app, design-secure, design-api, design-data, design-migration,
Expand All @@ -49,12 +49,40 @@ Navigation menu: `/dev:meta-help`

## Usage in Projects

**Install plugin:** `claude plugin install dev@gerald-dev-best-practices`
**Install plugin (Claude Code):** `claude plugin install dev@gerald-dev-best-practices`

**Install plugin (GitHub Copilot CLI):** `copilot plugin marketplace add gerfru/dev-best-practices` then `copilot plugin install dev@gerald-dev-best-practices` — see "Copilot CLI Support" below.

**Rules only (without plugin):** Copy `claude/essential-rules.md` into project CLAUDE.md, or use `/dev:meta-install`.

**More detail:** Selectively add sections from `claude/app-rules.md`, `claude/github-rules.md`, `claude/architecture-rules.md`.

## Copilot CLI Support

This plugin is dual-compatible with Claude Code and GitHub Copilot CLI, since both tools
converged on a near-identical plugin architecture:

- **Manifests are reused as-is.** `plugins/dev/.claude-plugin/plugin.json` sits at one of
Copilot CLI's fallback lookup paths and has no `skills` field — the exact condition both
tools need (Claude Code rejects a `skills` field; Copilot CLI auto-discovers `skills/`
only when it's absent). `.claude-plugin/marketplace.json` is also a valid Copilot CLI
lookup path. No second manifest or generated duplicate tree exists in this repo.
- **`SKILL.md` files use plain relative paths** (`../../rules/...`, `../other-skill/SKILL.md`)
for all cross-file references, never `${CLAUDE_PLUGIN_ROOT}` — that template variable is
Claude Code-only and Copilot CLI does not expand it. `${CLAUDE_PLUGIN_ROOT}` remains fine
inside `plugins/dev/commands/*.md`, which is Claude Code-only (Copilot CLI has no
slash-command-router concept — skills are natively slash-invocable there via discovery).
- **`meta-install` supports `--target claude|copilot-cli`** — for Copilot CLI it writes into
the same `CLAUDE.md` by default (Copilot CLI reads it directly as an instructions file),
or `.github/copilot-instructions.md` with `--copilot-native`. A `--standalone-skills` mode
copies the skill library into a project's `.github/skills/`, `.claude/skills/`, or
`.agents/skills/` for Copilot CLI users not using the plugin/marketplace mechanism.
- **Skill `name:` fields use `dev-<skill>` (hyphen, not colon).** Verified live: Copilot CLI
rejects `:` in skill names ("must contain only ASCII letters, numbers, hyphens,
underscores"); Claude Code's own `/dev:<skill>` slash-invocation is unaffected since it's
driven by `commands/<skill>.md` (plugin name + command filename), never by this
frontmatter field.

## Maintenance

- Update `reference/` when best practices change
Expand Down
30 changes: 25 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@

Opinionated best-practice rules for software projects — RAG systems, AI agents, data pipelines, full-stack web apps. Three detail levels: compact essential rules for `CLAUDE.md`, thematic rule files, and detailed reference docs.

Also a **Claude Code plugin**: install once, get 24 skills in every project.
Also a **Claude Code plugin**: install once, get 27 skills in every project. Also works as a **GitHub Copilot CLI plugin** — same repo, same skills.

---

## Quick Start

### Claude Code

```bash
# Add marketplace (once per machine)
claude plugin marketplace add gerfru/dev-best-practices
Expand All @@ -23,6 +25,24 @@ claude plugin install dev@gerald-dev-best-practices

**Windows (VS Code):** Claude icon → `/plugin` → Marketplaces → add `gerfru/dev-best-practices` → Plugins → Install `dev`.

### GitHub Copilot CLI

```bash
# Add marketplace (once per machine)
copilot plugin marketplace add gerfru/dev-best-practices

# Install plugin
copilot plugin install dev@gerald-dev-best-practices
```

Skills are then invocable directly, e.g. `/dev:design-api`, or auto-triggered from a
natural-language prompt matching a skill's description — same as Claude Code.

Not using Copilot's plugin/marketplace mechanism? Run `/dev:meta-install --target
copilot-cli --standalone-skills` from a Claude Code session against your target project to
copy the skill library into `.github/skills/`, `.claude/skills/`, or `.agents/skills/`,
where Copilot CLI auto-discovers it.

---

## Skills
Expand Down Expand Up @@ -69,7 +89,7 @@ Or just describe what you need in natural language — Claude picks the right sk

| Skill | What it does |
|---|---|
| `/dev:meta-help` | Navigation menu — shows all 24 skills, launches chosen one |
| `/dev:meta-help` | Navigation menu — shows all 27 skills, launches chosen one |
| `/dev:meta-install` | Insert `essential-rules.md` into project `CLAUDE.md` (detects install vs. update) |
| `/dev:meta-drift` | Compare installed rules block against current rule files |
| `/dev:meta-sync` | Repo-internal: check if `claude/*.md` still reflects `reference/*.md` |
Expand All @@ -85,9 +105,9 @@ Or just describe what you need in natural language — Claude picks the right sk

plugins/dev/
.claude-plugin/
plugin.json Plugin metadata (name: "dev", version: "2.0.0")
commands/ Slash-command definitions (one file per skill)
skills/ Skill workflow definitions (auto-triggered)
plugin.json Plugin metadata (name: "dev", version: "3.0.0") — also read by Copilot CLI
commands/ Slash-command definitions (one file per skill) — Claude Code only
skills/ Skill workflow definitions (auto-triggered) — shared with Copilot CLI
rules/ Mirror of claude/*.md (used by skills as reference)

claude/ Condensed rules for Claude Code
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "dev",
"version": "3.0.0",
"description": "26 Skills für Design (inkl. LLM-Engineering/RAG/Agents, Observability/SRE, CI/CD, IaC/GitOps, UX/Human-AI Interaction, Repo-Publication), Security-Review (ISEC/Stanford/MIT, OWASP LLM Top 10), App-Audit (OWASP ASVS 5.0, DORA), Architektur-Review, Debug, Test, Styling, Accessibility (WCAG 2.2), Performance Engineering (MIT 6.172, USE Method) und Skill-Erstellung.",
"description": "27 Skills für Design (inkl. LLM-Engineering/RAG/Agents, Observability/SRE, CI/CD, IaC/GitOps, UX/Human-AI Interaction, Repo-Publication), Security-Review (ISEC/Stanford/MIT, OWASP LLM Top 10), App-Audit (OWASP ASVS 5.0, DORA), Architektur-Review, Debug, Test, Styling, Accessibility (WCAG 2.2), Performance Engineering (MIT 6.172, USE Method) und Skill-Erstellung. Funktioniert mit Claude Code und GitHub Copilot CLI.",
"author": { "name": "Gerald" }
}
8 changes: 7 additions & 1 deletion plugins/dev/commands/meta-create-skill.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
---
description: Creates a new skill for this plugin following the established methodology: topic → academic research (university curricula + canonical books) → SKILL.md + references/. Use this skill when you want to create a new /dev skill. Trigger: "create a new skill", "build a new skill", "create skill for X", "add a skill", "add skill", "new skill for X". Covers: topic clarification, academic research, structure decision, writing all files, housekeeping (commands/, meta-help, plugin.json).
description: >
Creates a new skill for this plugin following the established methodology — topic →
academic research (university curricula + canonical books) → SKILL.md + references/.
Use this skill when you want to create a new /dev skill. Trigger phrases: "create a new
skill", "build a new skill", "create skill for X", "add a skill", "add skill",
"new skill for X". Covers topic clarification, academic research, structure decision,
writing all files, housekeeping (commands/, meta-help, plugin.json).
argument-hint: "[optional: skill topic, e.g. 'LLM Engineering' or 'Performance Monitoring']"
---

Expand Down
5 changes: 4 additions & 1 deletion plugins/dev/commands/meta-install.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
---
description: Installs or updates dev best practices rules in CLAUDE.md. Automatically detects whether initial installation or update is needed. Flags: --essential (default), --full, --update, --section <name>.
description: >
Installs or updates dev best practices rules in CLAUDE.md. Automatically detects
whether initial installation or update is needed. Flags — --essential (default),
--full, --update, --section <name>.
argument-hint: "[--essential | --full | --update | --section <security|cicd|architecture>]"
---

Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-api/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-api
name: dev-design-api
description: >
API contract design skill grounded in CMU 17-625 (API Design, Swarnalatha Ashok /
Bradley Schmerl) and Google API Design Guide. Use this skill whenever the user
Expand Down
4 changes: 2 additions & 2 deletions plugins/dev/skills/design-app/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
name: dev:design-app
name: dev-design-app
description: From an app idea to well-founded architecture and stack decisions based on the Dev-Best-Practices rules. Use this skill whenever the user describes a new app idea and wants help choosing architecture, stack, structure, or a scaffolding plan; triggers on "new app", "app idea", "how do I structure", "which stack", "architecture for ...".
---

# App Design (rule-based)

Turns an app idea into justified decisions. Standard: the rule files
under `${CLAUDE_PLUGIN_ROOT}/rules/` (especially architecture-rules.md, app-rules.md,
under `../../rules/` (especially architecture-rules.md, app-rules.md,
github-rules.md). No generic advice — every decision references the rule.

## Step 0 - Clarify Idea & Scope
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-cicd/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-cicd
name: dev-design-cicd
description: >
CI/CD Pipeline Design grounded in "Accelerate" (Forsgren/Humble/Kim, IT Revolution 2018)
and "Continuous Delivery" (Humble/Farley, Addison-Wesley 2010). Covers pipeline architecture,
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-data/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-data
name: dev-design-data
description: >
Data model design skill grounded in CMU 15-445 (Database Systems, Prof. Andy Pavlo)
and Stanford CS245. Use this skill whenever the user needs to design or review a
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-iac/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-iac
name: dev-design-iac
description: >
Infrastructure as Code Design grounded in "Infrastructure as Code" (Kief Morris,
O'Reilly 2021) and NTNU IIKG3005 (the only dedicated academic IaC course worldwide).
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-llm/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-llm
name: dev-design-llm
description: >
LLM system design grounded in Stanford CS224N (Yang/Choi), CMU 11-667
(Savelka/Kim) and Chip Huyen "Designing ML Systems". Use this skill whenever
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-migration/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-migration
name: dev-design-migration
description: >
Migration planning skill grounded in MIT 6.5840 (Distributed Systems, Morris/
Kaashoek/Zeldovich) and Martin Fowler's migration patterns. Use this skill
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-observability/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-observability
name: dev-design-observability
description: >
Observability architecture grounded in the Google SRE Books (Beyer et al.) and
Observability Engineering (Majors/Fong-Jones, O'Reilly 2022). Covers
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-public/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-public
name: dev-design-public
description: >
Publication-readiness design skill grounded in OpenSSF Best Practices,
GitHub Security Hardening docs, CISA Security-by-Design, OWASP DevSecOps
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-secure/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-secure
name: dev-design-secure
description: >
Security-first application design skill grounded in TU Graz ISEC Major curriculum
and top-university references (Stanford CS255/CS355, MIT 6.566/6.5610).
Expand Down
2 changes: 1 addition & 1 deletion plugins/dev/skills/design-ux/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:design-ux
name: dev-design-ux
description: >
Human-Centered UX Design skill grounded in the leading academic HCI curricula
(CMU HCII, Stanford CS 247A/347, ETH, TU Wien, TU Graz) and the four canonical
Expand Down
21 changes: 19 additions & 2 deletions plugins/dev/skills/meta-create-skill/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:meta-create-skill
name: dev-meta-create-skill
description: >
Creates a new skill for this plugin following the established methodology:
topic → academic research (university curricula + canonical books) → SKILL.md +
Expand Down Expand Up @@ -99,6 +99,11 @@ What belongs IN SKILL.md:
- Standard finding format (for review-* skills)
- Output format (which file, which structure)
- References to references/ files
- Cross-file references as **plain relative paths** (e.g. `../../rules/essential-rules.md`,
`../other-skill/SKILL.md`) — **never `${CLAUDE_PLUGIN_ROOT}`**. That variable is Claude
Code-only template syntax; it breaks silently under GitHub Copilot CLI, which also reads
this plugin's `skills/` directory but does not expand it. `${CLAUDE_PLUGIN_ROOT}` is
permitted only inside `commands/<name>.md` (a Claude-Code-only file Copilot never parses).

What does NOT belong in SKILL.md (→ references/):
- Lookup tables (Concept → course link)
Expand Down Expand Up @@ -173,7 +178,7 @@ Required elements:

```markdown
---
name: <skill-name>
name: dev-<skill-name>
description: >
<What the skill does>. Grounded in <primary source>.
Trigger: "<Keyword 1>", "<Keyword 2>", ...
Expand Down Expand Up @@ -209,6 +214,18 @@ description: >
- `references/<file>.md` — <what is in it>
```

**Note:** `name:` uses `dev-<skill-name>` (hyphen, not colon). Verified against a live
Copilot CLI install: `:` is rejected ("Skill name must start with an ASCII letter or
number and contain only ASCII letters, numbers, hyphens, underscores"), so `dev:<name>`
produced a load warning on every skill under Copilot CLI (non-fatal there — it fell back
to the folder name — but still worth avoiding). `dev-<name>` is ASCII-clean for Copilot.
Also verified live against Claude Code after this rename: `/dev:<skill-name>`
slash-invocation is driven entirely by `commands/<skill-name>.md` (plugin name from
`plugin.json` + the command file's own name) — it never reads this SKILL.md frontmatter
field at all, so the rename has zero effect on Claude Code's routing. Any cross-file
reference in the body must be a plain relative path regardless — see the rule under
Step 2a.

### 3c — commands/<name>.md

```markdown
Expand Down
4 changes: 2 additions & 2 deletions plugins/dev/skills/meta-drift/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:meta-drift
name: dev-meta-drift
description: Compares the dev-best-practices block in a project CLAUDE.md with the current state of the rule files and shows what is missing, outdated, or newly added. Use this skill whenever the user wants to update their project rules, check if rules are still current, or sync a CLAUDE.md with the latest best practices; triggers for "update rules", "are my rules still current", "drift", "sync CLAUDE.md", "update rules".
---

Expand All @@ -10,7 +10,7 @@ Shows the delta — without automatically overwriting.

## Step 0 — Load Sources

1. **Current state (TARGET):** Rule files from `${CLAUDE_PLUGIN_ROOT}/rules/`
1. **Current state (TARGET):** Rule files from `../../rules/`
- `essential-rules.md` — always
- `app-rules.md`, `github-rules.md`, `architecture-rules.md` — only if present in the project block

Expand Down
6 changes: 3 additions & 3 deletions plugins/dev/skills/meta-help/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: dev:meta-help
name: dev-meta-help
description: >
Navigation menu for all Dev Best Practices skills. Shows all available skills
grouped and starts the chosen one directly. Trigger for "which skill should I use",
Expand Down Expand Up @@ -61,9 +61,9 @@ Which skill should start?
**With a description:** Choose the best matching skill, mention it briefly ("→ starting review-secure …"), then start directly.
**With arguments:** Pass to the started skill.

Load and follow exactly: `${CLAUDE_PLUGIN_ROOT}/skills/<chosen-skill>/SKILL.md`
Load and follow exactly: `../<chosen-skill>/SKILL.md`

## Rules
- Show menu immediately, no intro
- After the choice: start directly, do not explain or ask again
- Never load all 26 skills at once — always only the chosen one
- Never load all 27 skills at once — always only the chosen one
Loading
Loading