From c1a4e4efda88990d438388a14660f577e11cb83f Mon Sep 17 00:00:00 2001 From: "ci[bot]" Date: Mon, 8 Jun 2026 16:02:12 +0000 Subject: [PATCH] :package: deps(thirdparty): update snapshots --- antigravity-awesome-skills/README.md | 8 +- antigravity-awesome-skills/SOURCE.md | 4 +- .../apps/web-app/public/sitemap.xml | 84 +++++------ .../assets/star-history.png | Bin 50344 -> 50198 bytes brooks-lint/AGENTS.md | 2 +- brooks-lint/CHANGELOG.md | 37 +++++ brooks-lint/README.md | 88 +++++++++++- brooks-lint/README.zh-CN.md | 84 ++++++++++- brooks-lint/SOURCE.md | 4 +- brooks-lint/docs/antigravity-setup.md | 40 ++++++ brooks-lint/docs/copilot-setup.md | 43 ++++++ brooks-lint/docs/cursor-setup.md | 38 +++++ brooks-lint/docs/factory-droid-setup.md | 43 ++++++ brooks-lint/docs/getting-started.md | 74 ++++++++++ brooks-lint/docs/kiro-setup.md | 41 ++++++ brooks-lint/docs/opencode-setup.md | 45 ++++++ brooks-lint/docs/pi-setup.md | 39 +++++ brooks-lint/docs/windsurf-setup.md | 36 +++++ brooks-lint/scripts/install.sh | 135 ++++++++++++++++++ 19 files changed, 786 insertions(+), 59 deletions(-) create mode 100644 brooks-lint/docs/antigravity-setup.md create mode 100644 brooks-lint/docs/copilot-setup.md create mode 100644 brooks-lint/docs/cursor-setup.md create mode 100644 brooks-lint/docs/factory-droid-setup.md create mode 100644 brooks-lint/docs/getting-started.md create mode 100644 brooks-lint/docs/kiro-setup.md create mode 100644 brooks-lint/docs/opencode-setup.md create mode 100644 brooks-lint/docs/pi-setup.md create mode 100644 brooks-lint/docs/windsurf-setup.md create mode 100755 brooks-lint/scripts/install.sh diff --git a/antigravity-awesome-skills/README.md b/antigravity-awesome-skills/README.md index 4ac9b85b..18796523 100644 --- a/antigravity-awesome-skills/README.md +++ b/antigravity-awesome-skills/README.md @@ -486,14 +486,14 @@ We officially thank the following contributors for their help in making this rep ## Star History - Star History Chart + Star History Chart - - - Star History Chart + + + Star History Chart diff --git a/antigravity-awesome-skills/SOURCE.md b/antigravity-awesome-skills/SOURCE.md index e2302a94..b96274f5 100644 --- a/antigravity-awesome-skills/SOURCE.md +++ b/antigravity-awesome-skills/SOURCE.md @@ -1,8 +1,8 @@ # Source - Repo: https://github.com/sickn33/antigravity-awesome-skills -- Ref: d89c349f775bff02124a1bbd345450115c1c8705 +- Ref: afc403de16917b418c301b690970047b2109542f - Remove-Paths: -- Snapshot: 2026-06-07 +- Snapshot: 2026-06-08 - Sync-Mode: copy_skill_dirs - Notes: vendored into playbook branch thirdparty/skill diff --git a/antigravity-awesome-skills/apps/web-app/public/sitemap.xml b/antigravity-awesome-skills/apps/web-app/public/sitemap.xml index 3eef78b4..37b3ec83 100644 --- a/antigravity-awesome-skills/apps/web-app/public/sitemap.xml +++ b/antigravity-awesome-skills/apps/web-app/public/sitemap.xml @@ -2,253 +2,253 @@ http://localhost/ - 2026-06-07 + 2026-06-08 daily 1.0 http://localhost/plugins - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/runapi-cli - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/article-illustrations - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/cv-generator - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/open-dynamic-workflows - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/video-content-extractor - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/2slides-ppt-generator - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/anti-sycophancy - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/event-staffing-compliance - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/event-staffing-ordering - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/examprep-ai - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/permission-manager - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/skill-suggester - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/smart-git-automation - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/antigravity-agent-manager - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/hasdata - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/hasdata-cli - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/linkedin-content-generator - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/accesslint-audit - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/accesslint-diff - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/accesslint-scan - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/composition-patterns - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/debugging-toolkit - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/deploy-to-vercel - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/polis-protocol - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/python-development - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/react-native-skills - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/skill-issue - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/tdd-workflows - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/vercel-cli-with-tokens - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/vercel-optimize - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/vercel-react-view-transitions - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/doc2math - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/moatmri - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/nextjs-seo-indexing - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/schema-markup-generator - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/social-metadata-hardening - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/user-thoughts - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/vibe-code-cleanup - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/vibecode-production-qa-validator - 2026-06-07 + 2026-06-08 weekly 0.7 http://localhost/skill/yield-intelligence - 2026-06-07 + 2026-06-08 weekly 0.7 diff --git a/antigravity-awesome-skills/assets/star-history.png b/antigravity-awesome-skills/assets/star-history.png index d4b9085ea8581f7989887ce89918df4a44e3d30f..52e56d3f88b3b25a173d56a8fabc1e6c09c7c293 100644 GIT binary patch literal 50198 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 literal 50344 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 diff --git a/brooks-lint/AGENTS.md b/brooks-lint/AGENTS.md index c12352fd..8092c999 100644 --- a/brooks-lint/AGENTS.md +++ b/brooks-lint/AGENTS.md @@ -3,7 +3,7 @@ This repository is an AI-powered code quality tool grounded in twelve classic engineering books (e.g., *The Mythical Man-Month*, *Code Complete*, *A Philosophy of Software Design*, *Software Engineering at Google*). ## Core Purpose -**brooks-lint** is a Codex CLI plugin used to diagnose code quality across six "decay risk" dimensions: Cognitive Overload, Change Propagation, Knowledge Duplication, Accidental Complexity, Dependency Disorder, and Domain Model Distortion. +**brooks-lint** is a portable Agent-Skills code quality tool — it runs on any Agent-Skills-compatible agent (Codex CLI, OpenCode, Cursor, Antigravity, pi, and others that read `AGENTS.md` and load `SKILL.md` skills) to diagnose code quality across six "decay risk" dimensions: Cognitive Overload, Change Propagation, Knowledge Duplication, Accidental Complexity, Dependency Disorder, and Domain Model Distortion. ## Skill Integration - **Auto-trigger:** You **must** proactively use the appropriate skill whenever discussing code quality, PR reviews, architecture health, test quality, or technical debt. diff --git a/brooks-lint/CHANGELOG.md b/brooks-lint/CHANGELOG.md index 26c6f27f..5363a48a 100644 --- a/brooks-lint/CHANGELOG.md +++ b/brooks-lint/CHANGELOG.md @@ -4,6 +4,43 @@ All notable changes to brooks-lint are documented here. ## [Unreleased] +### Added + +- **One-command multi-platform installer** — `scripts/install.sh ` + copies the six skills + `_shared/` **flat** into the correct folder for + OpenCode, Cursor, Windsurf, Antigravity, pi, Kiro, GitHub Copilot, Claude, or + the vendor-neutral `~/.agents/skills`, so the `../_shared/` relative reads + always resolve (users can't get the layout wrong). Runs from a clone or via + `curl … | bash -s -- `; `--project` targets the current repo. +- **Per-platform setup guides** — `docs/getting-started.md` plus + `docs/{opencode,cursor,windsurf,antigravity,pi,copilot,kiro}-setup.md`, with + install, invocation, gotchas, and source links for each. Modeled on the + `addyosmani/agent-skills` docs layout (compact README + detailed docs). +- **Multi-platform support in both READMEs** — the EN and zh-CN READMEs now + expose seven additional Agent-Skills agents via collapsible per-platform + entries that link to the docs, plus a verification-status note inviting + community end-to-end reports. Resolves the OpenCode compatibility request (#14). + +- **Factory Droid support** — added `droid` to the installer and a + `docs/factory-droid-setup.md` guide. Droid natively loads `SKILL.md` from + `~/.factory/skills` / `.factory/skills` and reads `AGENTS.md`. +- **`install.sh` now covers Gemini and Codex** (`gemini`, `codex` targets) so a + single command installs every documented platform. + +### Fixed + +- **Gemini CLI manual install was broken** — the old `cp -r skills/* + ~/.gemini/skills/brooks-lint/` nested every `SKILL.md` two levels deep, and + Gemini only discovers skills **one level deep**, so none of the six skills were + found. Corrected to a flat `~/.gemini/skills/` install (EN + zh-CN READMEs). + Also flattened the Codex manual install to match the skill-installer layout. + +### Changed + +- **`AGENTS.md`** now describes brooks-lint as a portable Agent-Skills tool + (runs on any `AGENTS.md`/`SKILL.md`-compatible agent) rather than a + Codex-CLI-specific plugin. + --- ## [1.3.0] - 2026-05-24 diff --git a/brooks-lint/README.md b/brooks-lint/README.md index 8542a41d..9d40e114 100644 --- a/brooks-lint/README.md +++ b/brooks-lint/README.md @@ -226,9 +226,10 @@ cp -r skills/* ~/.claude/skills/brooks-lint/ #### Manual Install ```bash -mkdir -p ~/.gemini/skills/brooks-lint -cp -r skills/* ~/.gemini/skills/brooks-lint/ +mkdir -p ~/.gemini/skills +cp -r skills/* ~/.gemini/skills/ # flat — Gemini discovers skills only one level deep ``` +> Or simply: `./scripts/install.sh gemini` ### Codex CLI @@ -246,9 +247,81 @@ python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-githu #### Manual Install ```bash git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint -mkdir -p ~/.codex/skills/brooks-lint -cp -r /tmp/brooks-lint/skills/* ~/.codex/skills/brooks-lint/ +mkdir -p ~/.codex/skills +cp -r /tmp/brooks-lint/skills/* ~/.codex/skills/ # flat — matches the skill-installer layout ``` +> Or simply: `./scripts/install.sh codex` + +### More platforms — OpenCode · Cursor · Windsurf · Antigravity · pi · Copilot · Kiro · Factory Droid + +brooks-lint ships as standard [Agent Skills](https://agentskills.io). **Any agent that loads Agent +Skills runs all six modes with no conversion** — one command installs them: + +```bash +# pick your platform; --project installs into the current repo instead of your global config +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- +# = opencode · cursor · windsurf · antigravity · pi · kiro · copilot · droid · gemini · codex · agents +``` + +The installer copies the skills **flat** into the right folder for your platform, so the shared +framework (`../_shared/`) always resolves — you can't get the layout wrong. Then just ask +("review this PR", "audit the architecture") and the matching skill auto-triggers from its +`description`. New to skills, or using another agent? See **[docs/getting-started.md](docs/getting-started.md)**. + +
OpenCode + +`./scripts/install.sh opencode` → `~/.config/opencode/skills` (also reads `~/.claude/skills` and +`AGENTS.md`). Full guide: [docs/opencode-setup.md](docs/opencode-setup.md). +
+ +
Cursor (2.4+) + +`./scripts/install.sh cursor` → `~/.cursor/skills` (also `.agents/skills`; reads `AGENTS.md`). +Full guide: [docs/cursor-setup.md](docs/cursor-setup.md). +
+ +
Windsurf (Cascade) + +`./scripts/install.sh windsurf` → `~/.codeium/windsurf/skills` (reads `AGENTS.md`). +Full guide: [docs/windsurf-setup.md](docs/windsurf-setup.md). +
+ +
Antigravity (Google) + +`./scripts/install.sh antigravity --project` → `.agent/skills` (reads `AGENTS.md` / `GEMINI.md`). +Full guide: [docs/antigravity-setup.md](docs/antigravity-setup.md). +
+ +
pi (earendil-works) + +`./scripts/install.sh pi` → `~/.pi/agent/skills`, or point pi's `skills` setting at a clone. +Full guide: [docs/pi-setup.md](docs/pi-setup.md). +
+ +
GitHub Copilot + +`./scripts/install.sh copilot --project` → `.github/skills` (also auto-detects `.claude/skills`; reads +`AGENTS.md`). Full guide: [docs/copilot-setup.md](docs/copilot-setup.md). +
+ +
Kiro (AWS) + +`./scripts/install.sh kiro` → `~/.kiro/skills` (auto-registers `/brooks-review`; reads `AGENTS.md`). +Full guide: [docs/kiro-setup.md](docs/kiro-setup.md). +
+ +
Factory Droid + +`./scripts/install.sh droid` → `~/.factory/skills` (registers `/brooks-review`; reads `AGENTS.md`). +Full guide: [docs/factory-droid-setup.md](docs/factory-droid-setup.md). +
+ +> **🧪 Verification status.** Claude Code, Gemini CLI, and Codex CLI are maintainer-verified. The eight +> platforms above are documented from each tool's official skill spec and verified at the file-layout +> level (the installer is tested), but not yet end-to-end run by the maintainer on every platform. Tried +> one — working **or** broken? [Open an issue](https://github.com/hyhmrright/brooks-lint/issues/new) with +> the platform, version, and what you saw. Another Agent-Skills agent? It almost certainly works the same +> way — tell us and we'll add it. ## Slash Commands @@ -287,6 +360,13 @@ cp -r /tmp/brooks-lint/skills/* ~/.codex/skills/brooks-lint/ The skills also trigger automatically when you discuss code quality, architecture, maintainability, or test health. +### OpenCode · Cursor · Antigravity · pi + +These platforms invoke Agent Skills automatically from each skill's `description` — just ask +("review this PR", "audit the architecture", "where's our worst tech debt?") and the matching mode +runs. For explicit invocation, use the platform's skill-command syntax (e.g. pi registers each skill +as `/skill:brooks-review`; Cursor and OpenCode expose `/brooks-review` once the skill is discovered). + ## Usage ### PR Review diff --git a/brooks-lint/README.zh-CN.md b/brooks-lint/README.zh-CN.md index c0b47ec1..e9264561 100644 --- a/brooks-lint/README.zh-CN.md +++ b/brooks-lint/README.zh-CN.md @@ -226,9 +226,10 @@ cp -r skills/* ~/.claude/skills/brooks-lint/ #### 手动安装 ```bash -mkdir -p ~/.gemini/skills/brooks-lint -cp -r skills/* ~/.gemini/skills/brooks-lint/ +mkdir -p ~/.gemini/skills +cp -r skills/* ~/.gemini/skills/ # 扁平——Gemini 只发现一层深的技能 ``` +> 或直接:`./scripts/install.sh gemini` ### Codex CLI @@ -246,9 +247,78 @@ python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-githu #### 手动安装 ```bash git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint -mkdir -p ~/.codex/skills/brooks-lint -cp -r /tmp/brooks-lint/skills/* ~/.codex/skills/brooks-lint/ +mkdir -p ~/.codex/skills +cp -r /tmp/brooks-lint/skills/* ~/.codex/skills/ # 扁平——与技能安装器布局一致 ``` +> 或直接:`./scripts/install.sh codex` + +### 更多平台——OpenCode · Cursor · Windsurf · Antigravity · pi · Copilot · Kiro · Factory Droid + +brooks-lint 以标准 [Agent Skills](https://agentskills.io) 形式分发。**任何加载 Agent Skills 的 agent +都能无需任何转换运行全部六种模式**——一条命令即可安装: + +```bash +# 选择你的平台;加 --project 装进当前仓库而非全局配置 +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- <平台> +# <平台> = opencode · cursor · windsurf · antigravity · pi · kiro · copilot · droid · gemini · codex · agents +``` + +安装器会把技能**扁平**拷进该平台对应的文件夹,让共享框架(`../_shared/`)始终正确解析——你不可能装错布局。 +装好后直接提问("审查这个 PR"、"审查架构"),对应技能就会依据 `description` 自动触发。 +不熟悉 skills、或用的是别的 agent?见 **[docs/getting-started.md](docs/getting-started.md)**。 + +
OpenCode + +`./scripts/install.sh opencode` → `~/.config/opencode/skills`(同时读取 `~/.claude/skills` 与 +`AGENTS.md`)。完整指南:[docs/opencode-setup.md](docs/opencode-setup.md)。 +
+ +
Cursor(2.4+) + +`./scripts/install.sh cursor` → `~/.cursor/skills`(也读 `.agents/skills`;读取 `AGENTS.md`)。 +完整指南:[docs/cursor-setup.md](docs/cursor-setup.md)。 +
+ +
Windsurf(Cascade) + +`./scripts/install.sh windsurf` → `~/.codeium/windsurf/skills`(读取 `AGENTS.md`)。 +完整指南:[docs/windsurf-setup.md](docs/windsurf-setup.md)。 +
+ +
Antigravity(Google) + +`./scripts/install.sh antigravity --project` → `.agent/skills`(读取 `AGENTS.md` / `GEMINI.md`)。 +完整指南:[docs/antigravity-setup.md](docs/antigravity-setup.md)。 +
+ +
pi(earendil-works) + +`./scripts/install.sh pi` → `~/.pi/agent/skills`,或让 pi 的 `skills` 设置指向一个克隆。 +完整指南:[docs/pi-setup.md](docs/pi-setup.md)。 +
+ +
GitHub Copilot + +`./scripts/install.sh copilot --project` → `.github/skills`(也自动识别 `.claude/skills`;读取 +`AGENTS.md`)。完整指南:[docs/copilot-setup.md](docs/copilot-setup.md)。 +
+ +
Kiro(AWS) + +`./scripts/install.sh kiro` → `~/.kiro/skills`(自动注册 `/brooks-review`;读取 `AGENTS.md`)。 +完整指南:[docs/kiro-setup.md](docs/kiro-setup.md)。 +
+ +
Factory Droid + +`./scripts/install.sh droid` → `~/.factory/skills`(注册 `/brooks-review`;读取 `AGENTS.md`)。 +完整指南:[docs/factory-droid-setup.md](docs/factory-droid-setup.md)。 +
+ +> **🧪 验证状态。** Claude Code、Gemini CLI、Codex CLI 已由维护者验证。上面八个平台依据各工具官方技能规范编写, +> 并已在文件布局层面验证(安装器经过测试),但维护者尚未在每个平台端到端实跑。在某平台试过了——无论成功**还是**失败? +> 请[提一个 issue](https://github.com/hyhmrright/brooks-lint/issues/new),附上平台、版本和你看到的结果。 +> 用的是其它兼容 Agent Skills 的 agent?它几乎肯定以同样方式工作——告诉我们,我们会补上。 ## 斜杠命令 @@ -287,6 +357,12 @@ cp -r /tmp/brooks-lint/skills/* ~/.codex/skills/brooks-lint/ 当你讨论代码质量、架构、可维护性或测试健康时,这些技能也会自动触发。 +### OpenCode · Cursor · Antigravity · pi + +这些平台依据每个技能的 `description` 自动调用 Agent Skills——直接提问("审查这个 PR"、"审查架构"、 +"我们最糟的技术债在哪")就会运行对应模式。需要显式调用时,使用各平台的技能命令语法(例如 pi 把每个技能注册为 +`/skill:brooks-review`;Cursor 与 OpenCode 在技能被发现后暴露 `/brooks-review`)。 + ## 使用 ### PR 审查 diff --git a/brooks-lint/SOURCE.md b/brooks-lint/SOURCE.md index a9f0d7cb..aa65e797 100644 --- a/brooks-lint/SOURCE.md +++ b/brooks-lint/SOURCE.md @@ -1,8 +1,8 @@ # Source - Repo: https://github.com/hyhmrright/brooks-lint -- Ref: 85e4ddbe4b06036b0d0f08e88193a864077261a9 +- Ref: 0e92503911f28ff091b14c017d4345f7a2dd8817 - Remove-Paths: -- Snapshot: 2026-06-02 +- Snapshot: 2026-06-08 - Sync-Mode: copy_skill_dirs - Notes: vendored into playbook branch thirdparty/skill diff --git a/brooks-lint/docs/antigravity-setup.md b/brooks-lint/docs/antigravity-setup.md new file mode 100644 index 00000000..afa98711 --- /dev/null +++ b/brooks-lint/docs/antigravity-setup.md @@ -0,0 +1,40 @@ +# Antigravity Setup + +Google's [Antigravity](https://antigravity.google) uses Claude-compatible +[Agent Skills](https://agentskills.io) and reads `AGENTS.md` / `GEMINI.md`, so all six brooks-lint +modes run with no conversion. + +## Install + +```bash +# project-scoped is the official convention (recommended) +./scripts/install.sh antigravity --project # this repo: ./.agent/skills + +# global +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- antigravity +./scripts/install.sh antigravity # global: ~/.gemini/skills +``` + +Manual equivalent (project): + +```bash +git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint +mkdir -p .agent/skills +cp -r /tmp/brooks-lint/skills/* .agent/skills/ # flat — brooks-* and _shared/ as siblings +``` + +## Invoke + +Ask naturally ("review this PR", "audit the architecture") — the agent selects the matching skill from +its `description`. `AGENTS.md` / `GEMINI.md` carry the Iron Law and Health Score rules. + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): `../_shared/` only resolves when + `_shared/` is a sibling of the `brooks-*` folders. +- The project convention `.agent/skills/` is well documented; the **global** skills path + (`~/.gemini/skills` vs a product subfolder) varies between sources — if the global install isn't + discovered, use the project install. Please report what worked. +- 🧪 Documented per the official [skills](https://antigravity.google/docs/skills) and + [rules & workflows](https://antigravity.google/docs/rules-workflows) docs; community end-to-end + verification welcome — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/docs/copilot-setup.md b/brooks-lint/docs/copilot-setup.md new file mode 100644 index 00000000..6ef1861d --- /dev/null +++ b/brooks-lint/docs/copilot-setup.md @@ -0,0 +1,43 @@ +# GitHub Copilot Setup + +GitHub Copilot has supported [Agent Skills](https://agentskills.io) since December 2025 (coding agent, +Copilot CLI, and VS Code agent mode). It reads `AGENTS.md` and **auto-detects existing `.claude/skills` +folders**, so all six brooks-lint modes run with no conversion. + +## Install + +```bash +# personal (all repos) — one command +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- copilot + +# from a clone +./scripts/install.sh copilot # personal: ~/.copilot/skills +./scripts/install.sh copilot --project # this repo: ./.github/skills +``` + +Manual equivalent (commit to a repo so the cloud agent and reviewers share it): + +```bash +git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint +mkdir -p .github/skills +cp -r /tmp/brooks-lint/skills/* .github/skills/ # flat — brooks-* and _shared/ as siblings +``` + +Copilot discovers skills from `.github/skills`, `.claude/skills`, `.agents/skills` (project) and +`~/.copilot/skills`, `~/.agents/skills` (personal). `./scripts/install.sh agents` (→ `~/.agents/skills`) +is shared with Cursor and pi. + +## Invoke + +Ask naturally in Copilot Chat / CLI ("review this PR", "audit the architecture") — Copilot loads the +matching skill on demand from its `description`. `AGENTS.md` (or `.github/copilot-instructions.md`) +carries the Iron Law and Health Score rules. + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): `../_shared/` only resolves when + `_shared/` is a sibling of the `brooks-*` folders. +- Org/enterprise-level skills were "coming soon" at launch; repo-level `.github/skills` works today. +- 🧪 Documented per the [Agent Skills announcement](https://github.blog/changelog/2025-12-18-github-copilot-now-supports-agent-skills/) + and [docs](https://docs.github.com/en/copilot/concepts/agents/about-agent-skills); community + end-to-end verification welcome — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/docs/cursor-setup.md b/brooks-lint/docs/cursor-setup.md new file mode 100644 index 00000000..8f741764 --- /dev/null +++ b/brooks-lint/docs/cursor-setup.md @@ -0,0 +1,38 @@ +# Cursor Setup + +[Cursor](https://cursor.com) added native [Agent Skills](https://agentskills.io) support in 2.4. It +loads `SKILL.md` skills and reads `AGENTS.md`, so all six brooks-lint modes run with no conversion. + +## Install + +```bash +# simplest — one command (global) +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- cursor + +# from a clone +./scripts/install.sh cursor # global: ~/.cursor/skills +./scripts/install.sh cursor --project # this repo: ./.cursor/skills +``` + +Manual equivalent: + +```bash +git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint +mkdir -p ~/.cursor/skills +cp -r /tmp/brooks-lint/skills/* ~/.cursor/skills/ # flat — brooks-* and _shared/ as siblings +``` + +Cursor also loads `.agents/skills/` / `~/.agents/skills/` and existing Claude/Codex skill folders, so +`./scripts/install.sh agents` works too and is shared with Copilot and pi. + +## Invoke + +Ask naturally ("review this PR", "audit the architecture") and Cursor selects the matching skill from +its `description`, or use the `/brooks-review` slash form once the skill is discovered. + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): `../_shared/` only resolves when + `_shared/` is a sibling of the `brooks-*` folders. +- 🧪 Documented per the official [skills docs](https://cursor.com/docs/skills); community end-to-end + verification welcome — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/docs/factory-droid-setup.md b/brooks-lint/docs/factory-droid-setup.md new file mode 100644 index 00000000..3e4869ac --- /dev/null +++ b/brooks-lint/docs/factory-droid-setup.md @@ -0,0 +1,43 @@ +# Factory Droid Setup + +Factory's [Droid](https://factory.ai) (`droid` CLI) natively loads +[Agent Skills](https://agentskills.io) and reads `AGENTS.md`, so all six brooks-lint modes run with no +conversion. + +## Install + +```bash +# simplest — one command +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- droid + +# from a clone +./scripts/install.sh droid # personal: ~/.factory/skills +./scripts/install.sh droid --project # this repo: ./.factory/skills +``` + +Manual equivalent: + +```bash +git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint +mkdir -p ~/.factory/skills +cp -r /tmp/brooks-lint/skills/* ~/.factory/skills/ # flat — brooks-* and _shared/ as siblings +``` + +Droid discovers skills from `~/.factory/skills` (personal), `.factory/skills` (project), and the legacy +`.agent/skills`, each a single level deep. + +## Invoke + +Ask naturally ("review this PR", "audit the architecture") — Droid auto-loads the matching skill from +its `description` — or use the slash form `/brooks-review` (Droid registers each skill as a command). +`AGENTS.md` carries the Iron Law and Health Score rules. + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): `../_shared/` only resolves when + `_shared/` is a sibling of the `brooks-*` folders, and Droid discovers skills only one level deep. +- Droid ignores Claude-only frontmatter fields (e.g. `allowed-tools`); `name` + `description` + body + are all it needs, so the skills load unchanged. +- 🧪 Documented per the official [skills docs](https://docs.factory.ai/cli/configuration/skills) and + [AGENTS.md docs](https://docs.factory.ai/cli/configuration/agents-md); community end-to-end + verification welcome — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/docs/getting-started.md b/brooks-lint/docs/getting-started.md new file mode 100644 index 00000000..c71f87f5 --- /dev/null +++ b/brooks-lint/docs/getting-started.md @@ -0,0 +1,74 @@ +# Getting Started — brooks-lint on any agent + +brooks-lint is six [Agent Skills](https://agentskills.io) (`SKILL.md` + Markdown guides) plus a +shared `_shared/` framework folder. **Any coding agent that loads Agent Skills can run all six modes +with no conversion** — you just place the `skills/` directory where that agent looks for skills. + +## The one thing that matters: flat layout + +Every skill reads the shared framework via the relative path `../_shared/common.md`. That only +resolves when `_shared/` is a **sibling** of the `brooks-*` folders: + +``` +/ +├── brooks-review/SKILL.md ← reads ../_shared/common.md +├── brooks-audit/SKILL.md +├── … +└── _shared/ ← sibling, no SKILL.md (ignored as a skill, read as files) +``` + +So always copy `skills/*` **flat** — never nest everything under one `brooks-lint/` folder for the +platforms that discover skills with a single-level glob (`skills//SKILL.md`). + +## Simplest install — one command + +The installer copies the skills flat into the correct folder for your platform, so you can't get the +layout wrong: + +```bash +# from a clone +./scripts/install.sh + +# or without cloning +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- +``` + +`` ∈ `opencode · cursor · windsurf · antigravity · pi · kiro · copilot · droid · gemini · +codex · claude · agents`. Add `--project` to install into the current repo instead of your global +config. `agents` targets the vendor-neutral `~/.agents/skills` folder that Cursor, Copilot, pi, Gemini, +and Codex all read. + +## Per-platform guides + +| Platform | Guide | Discovers `SKILL.md` from | Reads `AGENTS.md` | +|----------|-------|---------------------------|:-----------------:| +| OpenCode | [opencode-setup.md](opencode-setup.md) | `~/.config/opencode/skills`, `.opencode/skills`, `~/.claude/skills` | ✅ | +| Cursor | [cursor-setup.md](cursor-setup.md) | `~/.cursor/skills`, `.cursor/skills`, `.agents/skills` | ✅ | +| Windsurf | [windsurf-setup.md](windsurf-setup.md) | `~/.codeium/windsurf/skills`, `.windsurf/skills` | ✅ | +| Antigravity | [antigravity-setup.md](antigravity-setup.md) | `.agent/skills`, `~/.gemini/skills` | ✅ | +| pi | [pi-setup.md](pi-setup.md) | `~/.pi/agent/skills`, `.pi/skills`, settings array | ✅ | +| GitHub Copilot | [copilot-setup.md](copilot-setup.md) | `.github/skills`, `.claude/skills`, `~/.copilot/skills` | ✅ | +| Kiro | [kiro-setup.md](kiro-setup.md) | `.kiro/skills`, `~/.kiro/skills` | ✅ | +| Factory Droid | [factory-droid-setup.md](factory-droid-setup.md) | `~/.factory/skills`, `.factory/skills`, `.agent/skills` | ✅ | + +For Claude Code, Gemini CLI, and Codex CLI, see the [README install section](../README.md#installation). +`./scripts/install.sh gemini` and `./scripts/install.sh codex` also work and use the flat layout these +two require (Gemini discovers skills only one level deep). + +## Any other agent + +If your agent accepts a skills folder or an instruction file, brooks-lint works: + +- **Loads `SKILL.md`?** Point it at a flat `skills/` folder (use `install.sh agents` for the neutral + `~/.agents/skills`). +- **Only reads an instructions file** (`AGENTS.md` / `CLAUDE.md` / a system prompt)? Add the repo's + `AGENTS.md` so the agent learns the Iron Law and scoring, then have it read the relevant + `skills//SKILL.md` on demand. + +## Verification status + +The marketplace-installed platforms (Claude Code, Gemini CLI, Codex CLI) are maintainer-verified. The +seven Agent-Skills platforms above are documented from each tool's official skill spec and verified at +the file-layout level (the installer is tested), but not yet end-to-end run by the maintainer on every +platform. **Tried one? Tell us** — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new) +with the platform, version, and what you saw, working or broken. diff --git a/brooks-lint/docs/kiro-setup.md b/brooks-lint/docs/kiro-setup.md new file mode 100644 index 00000000..1061c384 --- /dev/null +++ b/brooks-lint/docs/kiro-setup.md @@ -0,0 +1,41 @@ +# Kiro Setup + +AWS [Kiro](https://kiro.dev) (IDE & CLI) natively loads Claude-compatible +[Agent Skills](https://agentskills.io), reads `AGENTS.md`, and **auto-registers each skill as a slash +command**, so all six brooks-lint modes run with no conversion. + +## Install + +```bash +# simplest — one command (global) +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- kiro + +# from a clone +./scripts/install.sh kiro # global: ~/.kiro/skills +./scripts/install.sh kiro --project # this repo: ./.kiro/skills +``` + +Manual equivalent: + +```bash +git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint +mkdir -p ~/.kiro/skills +cp -r /tmp/brooks-lint/skills/* ~/.kiro/skills/ # flat — brooks-* and _shared/ as siblings +``` + +Or use the IDE: **Agent Steering & Skills** panel → **+** → **Import a skill** → paste a GitHub URL or +pick a local folder (Kiro copies it into your skills folder). + +## Invoke + +Ask naturally ("review this PR", "audit the architecture"), or use the auto-registered slash command +`/brooks-review`. `AGENTS.md` is always-included and carries the Iron Law and Health Score rules. + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): `../_shared/` only resolves when + `_shared/` is a sibling of the `brooks-*` folders. +- Kiro requires the folder name to equal the skill's `name` (✅ already true here), `name` ≤ 64 chars, + and `description` ≤ 1024 chars (brooks-lint's longest is ~920). +- 🧪 Documented per the official [skills docs](https://kiro.dev/docs/skills/); community end-to-end + verification welcome — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/docs/opencode-setup.md b/brooks-lint/docs/opencode-setup.md new file mode 100644 index 00000000..b9cd9644 --- /dev/null +++ b/brooks-lint/docs/opencode-setup.md @@ -0,0 +1,45 @@ +# OpenCode Setup + +[OpenCode](https://opencode.ai) natively loads [Agent Skills](https://agentskills.io) and reads +`AGENTS.md`, so all six brooks-lint modes run with no conversion. + +## Install + +```bash +# simplest — one command (global) +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- opencode + +# from a clone +./scripts/install.sh opencode # global: ~/.config/opencode/skills +./scripts/install.sh opencode --project # this repo: ./.opencode/skills +``` + +Manual equivalent: + +```bash +git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint +mkdir -p ~/.config/opencode/skills +cp -r /tmp/brooks-lint/skills/* ~/.config/opencode/skills/ # flat — brooks-* and _shared/ as siblings +``` + +OpenCode also discovers Claude-compatible `~/.claude/skills/*/SKILL.md`, so an existing Claude install +(if flat) is picked up automatically. + +## Invoke + +Just ask — OpenCode auto-selects skills from each `description`: + +- "review this PR" → `brooks-review` +- "audit the architecture" → `brooks-audit` +- "where's our worst tech debt?" → `brooks-debt` + +For explicit invocation, `/brooks-review` etc. are available once the skill is discovered. The repo's +`AGENTS.md` carries the Iron Law (Symptom → Source → Consequence → Remedy) and the Health Score rules. + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): skills read `../_shared/`, which only + resolves when `_shared/` sits beside the `brooks-*` folders. +- 🧪 Documented per the official [skills](https://opencode.ai/docs/skills/) and + [rules](https://opencode.ai/docs/rules/) docs; community end-to-end verification welcome — + [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/docs/pi-setup.md b/brooks-lint/docs/pi-setup.md new file mode 100644 index 00000000..bc8e7bfd --- /dev/null +++ b/brooks-lint/docs/pi-setup.md @@ -0,0 +1,39 @@ +# pi Setup + +[pi](https://github.com/earendil-works/pi) (the earendil-works coding agent) natively loads +[Agent Skills](https://agentskills.io) and reads `AGENTS.md` / `CLAUDE.md`, so all six brooks-lint +modes run with no conversion. + +## Install + +```bash +# simplest — one command (global) +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- pi + +# from a clone +./scripts/install.sh pi # global: ~/.pi/agent/skills +./scripts/install.sh pi --project # this repo: ./.pi/skills +``` + +Or **don't copy at all** — point pi at a clone via settings (`~/.pi/settings.json`, or project +`.pi/settings.json`): + +```json +{ "skills": ["/path/to/brooks-lint/skills"] } +``` + +pi can also reuse other tools' skill folders the same way, e.g. `{ "skills": ["~/.claude/skills"] }` +(only if that folder is flat). + +## Invoke + +Ask naturally ("review this PR", "audit the architecture"), or use the auto-registered command form +`/skill:brooks-review`. `AGENTS.md` carries the Iron Law and Health Score rules. + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): `../_shared/` only resolves when + `_shared/` is a sibling of the `brooks-*` folders. +- pi caps `description` at 1024 chars; brooks-lint's longest is ~920, so all six skills load cleanly. +- 🧪 Documented per the official [skills docs](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/skills.md); + community end-to-end verification welcome — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/docs/windsurf-setup.md b/brooks-lint/docs/windsurf-setup.md new file mode 100644 index 00000000..27b7066b --- /dev/null +++ b/brooks-lint/docs/windsurf-setup.md @@ -0,0 +1,36 @@ +# Windsurf Setup + +[Windsurf](https://windsurf.com) (Cascade) natively loads [Agent Skills](https://agentskills.io) and +reads `AGENTS.md`, so all six brooks-lint modes run with no conversion. + +## Install + +```bash +# simplest — one command (global) +curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- windsurf + +# from a clone +./scripts/install.sh windsurf # global: ~/.codeium/windsurf/skills +./scripts/install.sh windsurf --project # this repo: ./.windsurf/skills +``` + +Manual equivalent: + +```bash +git clone https://github.com/hyhmrright/brooks-lint.git /tmp/brooks-lint +mkdir -p ~/.codeium/windsurf/skills +cp -r /tmp/brooks-lint/skills/* ~/.codeium/windsurf/skills/ # flat — brooks-* and _shared/ as siblings +``` + +## Invoke + +Ask naturally ("review this PR", "audit the architecture") — Cascade selects the matching skill from +its `description`. The repo's `AGENTS.md` is read by Windsurf's rules engine and carries the Iron Law +and Health Score rules. (`@skill-name` also references a discovered skill.) + +## Notes + +- **Flat layout** is mandatory (the installer guarantees it): `../_shared/` only resolves when + `_shared/` is a sibling of the `brooks-*` folders. +- 🧪 Documented per the official [Cascade skills docs](https://docs.windsurf.com/windsurf/cascade/skills); + community end-to-end verification welcome — [open an issue](https://github.com/hyhmrright/brooks-lint/issues/new). diff --git a/brooks-lint/scripts/install.sh b/brooks-lint/scripts/install.sh new file mode 100755 index 00000000..b2e2d9eb --- /dev/null +++ b/brooks-lint/scripts/install.sh @@ -0,0 +1,135 @@ +#!/usr/bin/env bash +# +# brooks-lint universal skill installer. +# +# brooks-lint ships as standard Agent Skills (SKILL.md). Most modern coding +# agents discover skills from a per-platform folder with a single-level glob +# (skills//SKILL.md) and read shared files via the relative path +# ../_shared/. This script copies the six skills + _shared/ FLAT into the right +# folder for your platform, so the relative reads always resolve — you can't get +# the layout wrong. +# +# Usage: +# ./scripts/install.sh [--project] +# curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- +# +# Platforms: opencode cursor windsurf antigravity pi kiro copilot droid gemini codex claude agents +# agents = the vendor-neutral ~/.agents/skills folder (read by Cursor, Copilot, pi, Gemini, Codex) +# +# Flags: +# --project install into the current repo (././skills) instead of the global folder +# --dir PATH install into an explicit folder (overrides platform mapping) +# --list print supported platforms and exit +# +set -euo pipefail + +REPO_URL="https://github.com/hyhmrright/brooks-lint.git" +PLATFORMS="opencode cursor windsurf antigravity pi kiro copilot droid gemini codex claude agents" + +err() { printf '\033[31merror:\033[0m %s\n' "$*" >&2; } +info() { printf '\033[36m›\033[0m %s\n' "$*"; } +ok() { printf '\033[32m✓\033[0m %s\n' "$*"; } + +# --- resolve the skills/ source (adjacent to this script, or clone) ---------- +resolve_src() { + local script_dir + script_dir="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" >/dev/null 2>&1 && pwd || true)" + if [ -n "$script_dir" ] && [ -d "$script_dir/../skills" ]; then + local root + root="$( cd "$script_dir/.." && pwd )" + printf '%s' "$root/skills" + return + fi + # Running via curl | bash — clone a shallow copy. + local tmp + tmp="$(mktemp -d)" + info "Cloning brooks-lint into $tmp …" >&2 + git clone --depth 1 "$REPO_URL" "$tmp/brooks-lint" >/dev/null 2>&1 + printf '%s' "$tmp/brooks-lint/skills" +} + +# --- map a platform to its skills folder ------------------------------------- +global_dir() { + case "$1" in + opencode) printf '%s' "$HOME/.config/opencode/skills" ;; + cursor) printf '%s' "$HOME/.cursor/skills" ;; + windsurf) printf '%s' "$HOME/.codeium/windsurf/skills" ;; + antigravity) printf '%s' "$HOME/.gemini/skills" ;; + pi) printf '%s' "$HOME/.pi/agent/skills" ;; + kiro) printf '%s' "$HOME/.kiro/skills" ;; + copilot) printf '%s' "$HOME/.copilot/skills" ;; + droid) printf '%s' "$HOME/.factory/skills" ;; + gemini) printf '%s' "$HOME/.gemini/skills" ;; + codex) printf '%s' "$HOME/.codex/skills" ;; + claude) printf '%s' "$HOME/.claude/skills" ;; + agents) printf '%s' "$HOME/.agents/skills" ;; + *) return 1 ;; + esac +} + +project_dir() { + case "$1" in + opencode) printf '%s' "$PWD/.opencode/skills" ;; + cursor) printf '%s' "$PWD/.cursor/skills" ;; + windsurf) printf '%s' "$PWD/.windsurf/skills" ;; + antigravity) printf '%s' "$PWD/.agent/skills" ;; + pi) printf '%s' "$PWD/.pi/skills" ;; + kiro) printf '%s' "$PWD/.kiro/skills" ;; + copilot) printf '%s' "$PWD/.github/skills" ;; + droid) printf '%s' "$PWD/.factory/skills" ;; + gemini) printf '%s' "$PWD/.gemini/skills" ;; + codex) printf '%s' "$PWD/.codex/skills" ;; + claude) printf '%s' "$PWD/.claude/skills" ;; + agents) printf '%s' "$PWD/.agents/skills" ;; + *) return 1 ;; + esac +} + +# --- arg parsing ------------------------------------------------------------- +PLATFORM="" +SCOPE="global" +EXPLICIT_DIR="" +while [ $# -gt 0 ]; do + case "$1" in + --project|--here) SCOPE="project" ;; + --dir) shift; EXPLICIT_DIR="${1:-}" ;; + --list) printf 'Supported platforms: %s\n' "$PLATFORMS"; exit 0 ;; + -h|--help) sed -n '2,28p' "${BASH_SOURCE[0]:-$0}" | sed 's/^# \{0,1\}//'; exit 0 ;; + -*) err "unknown flag: $1"; exit 2 ;; + *) PLATFORM="$1" ;; + esac + shift +done + +if [ -z "$PLATFORM" ] && [ -z "$EXPLICIT_DIR" ]; then + err "no platform given." + printf 'Supported platforms: %s\n' "$PLATFORMS" >&2 + printf 'Example: ./scripts/install.sh opencode\n' >&2 + exit 2 +fi + +# --- resolve destination ----------------------------------------------------- +if [ -n "$EXPLICIT_DIR" ]; then + DEST="$EXPLICIT_DIR" +elif [ "$SCOPE" = "project" ]; then + DEST="$(project_dir "$PLATFORM")" || { err "unknown platform: $PLATFORM"; exit 2; } +else + DEST="$(global_dir "$PLATFORM")" || { err "unknown platform: $PLATFORM"; exit 2; } +fi + +SRC="$(resolve_src)" +[ -d "$SRC" ] || { err "could not locate skills/ source at: $SRC"; exit 1; } + +# --- copy flat --------------------------------------------------------------- +info "Installing brooks-lint skills" +info " from: $SRC" +info " to: $DEST" +mkdir -p "$DEST" +cp -R "$SRC"/* "$DEST"/ + +count="$(find "$DEST" -maxdepth 2 -name SKILL.md | wc -l | tr -d ' ')" +ok "Installed $count skills (+ _shared/) into $DEST" +info "Flat layout verified: brooks-* and _shared/ are siblings, so ../_shared/ resolves." +echo +info "Next: open your agent and ask \"review this PR\" / \"audit the architecture\"," +info "or invoke a skill directly (e.g. /brooks-review). See docs/-setup.md."