📦 deps(thirdparty): update snapshots

This commit is contained in:
ci[bot] 2026-06-08 16:02:12 +00:00
parent ac39ab52f3
commit c1a4e4efda
19 changed files with 786 additions and 59 deletions

View File

@ -486,14 +486,14 @@ We officially thank the following contributors for their help in making this rep
## Star History
<a href="https://www.star-history.com/#sickn33/antigravity-awesome-skills&type=date&legend=top-left">
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=sickn33/antigravity-awesome-skills&type=date&legend=top-left&cache_bust=202606060706" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=sickn33/antigravity-awesome-skills&type=date&legend=top-left&cache_bust=202606080744" />
</a>
<a href="https://www.star-history.com/sickn33/antigravity-awesome-skills">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=sickn33/antigravity-awesome-skills&style=landscape1&theme=dark&cache_bust=202606060706" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=sickn33/antigravity-awesome-skills&style=landscape1&cache_bust=202606060706" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=sickn33/antigravity-awesome-skills&style=landscape1&cache_bust=202606060706" />
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=sickn33/antigravity-awesome-skills&style=landscape1&theme=dark&cache_bust=202606080744" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=sickn33/antigravity-awesome-skills&style=landscape1&cache_bust=202606080744" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=sickn33/antigravity-awesome-skills&style=landscape1&cache_bust=202606080744" />
</picture>
</a>

View File

@ -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

View File

@ -2,253 +2,253 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://localhost/</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://localhost/plugins</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/runapi-cli</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/article-illustrations</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/cv-generator</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/open-dynamic-workflows</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/video-content-extractor</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/2slides-ppt-generator</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/anti-sycophancy</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/event-staffing-compliance</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/event-staffing-ordering</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/examprep-ai</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/permission-manager</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/skill-suggester</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/smart-git-automation</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/antigravity-agent-manager</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/hasdata</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/hasdata-cli</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/linkedin-content-generator</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/accesslint-audit</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/accesslint-diff</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/accesslint-scan</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/composition-patterns</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/debugging-toolkit</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/deploy-to-vercel</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/polis-protocol</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/python-development</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/react-native-skills</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/skill-issue</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/tdd-workflows</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/vercel-cli-with-tokens</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/vercel-optimize</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/vercel-react-view-transitions</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/doc2math</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/moatmri</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/nextjs-seo-indexing</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/schema-markup-generator</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/social-metadata-hardening</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/user-thoughts</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/vibe-code-cleanup</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/vibecode-production-qa-validator</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>http://localhost/skill/yield-intelligence</loc>
<lastmod>2026-06-07</lastmod>
<lastmod>2026-06-08</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -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.

View File

@ -4,6 +4,43 @@ All notable changes to brooks-lint are documented here.
## [Unreleased]
### Added
- **One-command multi-platform installer**`scripts/install.sh <platform>`
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 -- <platform>`; `--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

View File

@ -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 -- <platform>
# <platform> = 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)**.
<details><summary><b>OpenCode</b></summary>
`./scripts/install.sh opencode``~/.config/opencode/skills` (also reads `~/.claude/skills` and
`AGENTS.md`). Full guide: [docs/opencode-setup.md](docs/opencode-setup.md).
</details>
<details><summary><b>Cursor</b> (2.4+)</summary>
`./scripts/install.sh cursor``~/.cursor/skills` (also `.agents/skills`; reads `AGENTS.md`).
Full guide: [docs/cursor-setup.md](docs/cursor-setup.md).
</details>
<details><summary><b>Windsurf</b> (Cascade)</summary>
`./scripts/install.sh windsurf``~/.codeium/windsurf/skills` (reads `AGENTS.md`).
Full guide: [docs/windsurf-setup.md](docs/windsurf-setup.md).
</details>
<details><summary><b>Antigravity</b> (Google)</summary>
`./scripts/install.sh antigravity --project``.agent/skills` (reads `AGENTS.md` / `GEMINI.md`).
Full guide: [docs/antigravity-setup.md](docs/antigravity-setup.md).
</details>
<details><summary><b>pi</b> (earendil-works)</summary>
`./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).
</details>
<details><summary><b>GitHub Copilot</b></summary>
`./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).
</details>
<details><summary><b>Kiro</b> (AWS)</summary>
`./scripts/install.sh kiro``~/.kiro/skills` (auto-registers `/brooks-review`; reads `AGENTS.md`).
Full guide: [docs/kiro-setup.md](docs/kiro-setup.md).
</details>
<details><summary><b>Factory Droid</b></summary>
`./scripts/install.sh droid``~/.factory/skills` (registers `/brooks-review`; reads `AGENTS.md`).
Full guide: [docs/factory-droid-setup.md](docs/factory-droid-setup.md).
</details>
> **🧪 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

View File

@ -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)**。
<details><summary><b>OpenCode</b></summary>
`./scripts/install.sh opencode``~/.config/opencode/skills`(同时读取 `~/.claude/skills`
`AGENTS.md`)。完整指南:[docs/opencode-setup.md](docs/opencode-setup.md)。
</details>
<details><summary><b>Cursor</b>2.4+</summary>
`./scripts/install.sh cursor``~/.cursor/skills`(也读 `.agents/skills`;读取 `AGENTS.md`)。
完整指南:[docs/cursor-setup.md](docs/cursor-setup.md)。
</details>
<details><summary><b>Windsurf</b>Cascade</summary>
`./scripts/install.sh windsurf``~/.codeium/windsurf/skills`(读取 `AGENTS.md`)。
完整指南:[docs/windsurf-setup.md](docs/windsurf-setup.md)。
</details>
<details><summary><b>Antigravity</b>Google</summary>
`./scripts/install.sh antigravity --project``.agent/skills`(读取 `AGENTS.md` / `GEMINI.md`)。
完整指南:[docs/antigravity-setup.md](docs/antigravity-setup.md)。
</details>
<details><summary><b>pi</b>earendil-works</summary>
`./scripts/install.sh pi``~/.pi/agent/skills`,或让 pi 的 `skills` 设置指向一个克隆。
完整指南:[docs/pi-setup.md](docs/pi-setup.md)。
</details>
<details><summary><b>GitHub Copilot</b></summary>
`./scripts/install.sh copilot --project``.github/skills`(也自动识别 `.claude/skills`;读取
`AGENTS.md`)。完整指南:[docs/copilot-setup.md](docs/copilot-setup.md)。
</details>
<details><summary><b>Kiro</b>AWS</summary>
`./scripts/install.sh kiro``~/.kiro/skills`(自动注册 `/brooks-review`;读取 `AGENTS.md`)。
完整指南:[docs/kiro-setup.md](docs/kiro-setup.md)。
</details>
<details><summary><b>Factory Droid</b></summary>
`./scripts/install.sh droid``~/.factory/skills`(注册 `/brooks-review`;读取 `AGENTS.md`)。
完整指南:[docs/factory-droid-setup.md](docs/factory-droid-setup.md)。
</details>
> **🧪 验证状态。** 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 审查

View File

@ -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

View File

@ -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).

View File

@ -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).

View File

@ -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).

View File

@ -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).

View File

@ -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:
```
<skills-dir>/
├── 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/<name>/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 <platform>
# or without cloning
curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- <platform>
```
`<platform>` ∈ `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/<mode>/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.

View File

@ -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).

View File

@ -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).

View File

@ -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).

View File

@ -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).

135
brooks-lint/scripts/install.sh Executable file
View File

@ -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/<name>/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 <platform> [--project]
# curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- <platform>
#
# 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 (./.<platform>/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/<platform>-setup.md."