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 README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ read at runtime from a small **project profile** you fill in during onboarding.

| Layer | Contents | How it's delivered |
|---|---|---|
| **Skills** (`skills/`) | `rig-doctor`, `rig-debug`, `rig-spike`, `rig-tidy`, `rig-issue`, `rig-worktree`, `rig-review` (`find`/`fix`), `rig-plan`, `rig-task`, `rig-sprint`, `rig-epic` | Copied into `<project>/.claude/skills/` |
| **Skills** (`skills/`) | `rig-doctor`, `rig-debug`, `rig-spike`, `rig-tidy`, `rig-issue`, `rig-worktree`, `rig-review` (`find`/`fix`), `rig-plan`, `rig-task`, `rig-sprint`, `rig-epic` | Copied into `<project>/.claude/skills/` (or `.agents/skills/` for non-Claude agents — see "Works with your agent" below) |
| **Agents** (`agents/`) | `rig-debugger`, `rig-reviewer`, `rig-architect`, `rig-qa`, `rig-coder` | Copied into `<project>/.claude/agents/` |
| **Support docs** (`templates/`) | starter `REVIEWER.md` (+ `REVIEWER.scope-template.md`), `label-mapping.md` | Copied into `<project>/.claude/` (only if absent) |
| **Scripts** (`scripts/`) | `setup-worktree.sh`, `remove-worktree.sh`, `mint-gh-app-token.sh`, `scope-reviewer.ts`, `set-session-name.sh` (Claude-only) | Copied into `<project>/.claude/scripts/` |
Expand All @@ -26,7 +26,7 @@ your agent's own conventions via **targets** (auto-detected from repo markers):
| Target | Delivered as | Covers |
|---|---|---|
| **`claude-code`** | `.claude/skills/<name>/`, `.claude/agents/`, `.claude/scripts/` (native skills + subagents) | Claude Code |
| **`agents-md`** | a neutral `.rig/` dir (alongside the shared config profile) + an idempotent `## Rig` index injected into `AGENTS.md` ("read `.rig/skills/<name>.md` and follow it") | Codex, Cursor, Gemini, Amp, Zed, Jules — any `AGENTS.md`-reading agent |
| **`agents-md`** | `.agents/skills/<name>/` — the standard cross-agent Agent Skills layout, auto-discovered natively (no index needed) — plus `.rig/agents/`, `.rig/scripts/`, `.rig/REVIEWER.md` for the pieces the standard doesn't cover, and a minimal `## Rig` pointer block injected into `AGENTS.md` (config + persona adoption) | Codex, Cursor, Gemini CLI, Copilot, Rovo Dev — any agent that scans `.agents/skills/` or reads `AGENTS.md` |

For agents without subagents, the `.rig/agents/` personas are adopted **inline**
rather than delegated — the skills reference roles through the `agents.*`
Expand Down
40 changes: 19 additions & 21 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@
#
# Targets (adapters):
# claude-code -> .claude/skills/<name>/, .claude/agents/, .claude/scripts/
# agents-md -> .rig/skills/<name>.md + .rig/agents/ + .rig/scripts/, and an
# idempotent "## Rig" index injected into AGENTS.md. Works for
# any AGENTS.md-reading agent (Codex, Cursor, Gemini, Amp,
# Zed, Jules, ...).
# agents-md -> .agents/skills/<name>/ (the cross-agent Agent Skills
# standard, auto-discovered natively by Codex, Cursor,
# Gemini CLI, Copilot, Rovo Dev, ...), plus .rig/agents/,
# .rig/scripts/, .rig/REVIEWER.md for the pieces the
# standard doesn't cover, and a minimal idempotent "## Rig"
# pointer block injected into AGENTS.md (config profile +
# persona-adoption note - no per-skill listing, since
# .agents/skills/ is self-discovered).
#
# With no --target, the target agent(s) are auto-detected from repo markers
# (falling back to claude-code). Repeat/comma-separate to install several.
Expand Down Expand Up @@ -64,8 +68,9 @@ fi
detect_targets() {
local found=()
if [[ -d "$TARGET/.claude" || -f "$TARGET/CLAUDE.md" ]]; then found+=(claude-code); fi
if [[ -f "$TARGET/AGENTS.md" || -d "$TARGET/.cursor" || -f "$TARGET/.github/copilot-instructions.md" \
|| -f "$TARGET/GEMINI.md" || -d "$TARGET/.windsurf" ]]; then found+=(agents-md); fi
if [[ -f "$TARGET/AGENTS.md" || -d "$TARGET/.agents" || -d "$TARGET/.cursor" \
|| -f "$TARGET/.github/copilot-instructions.md" || -f "$TARGET/GEMINI.md" \
|| -d "$TARGET/.windsurf" ]]; then found+=(agents-md); fi
if [[ ${#found[@]} -eq 0 ]]; then found=(claude-code); fi # safe default
printf '%s\n' "${found[@]}"
}
Expand Down Expand Up @@ -125,15 +130,10 @@ install_claude_code() {
}

# --- Adapter: agents-md (universal) ------------------------------------------
skill_desc() { # extract the frontmatter description of a skill, unquoted
grep -m1 '^description:' "$RIG_DIR/skills/$1/SKILL.md" 2>/dev/null \
| sed -E 's/^description:[[:space:]]*//; s/^"//; s/"[[:space:]]*$//' || true
}

install_agents_md() {
echo "[agents-md] skills -> .rig/skills/*.md"
echo "[agents-md] skills -> .agents/skills/<name>/ (cross-agent Agent Skills standard)"
for s in "${SKILLS[@]}"; do
if [[ -f "$RIG_DIR/skills/$s/SKILL.md" ]]; then copy_no_clobber "$RIG_DIR/skills/$s/SKILL.md" "$TARGET/.rig/skills/$s.md"
if [[ -d "$RIG_DIR/skills/$s" ]]; then copy_no_clobber "$RIG_DIR/skills/$s" "$TARGET/.agents/skills/$s"
else echo " unknown skill: $s" >&2; fi
done
echo "[agents-md] agents -> .rig/agents/, scripts -> .rig/scripts/"
Expand All @@ -153,15 +153,13 @@ install_agents_md() {
block="$(
echo "## Rig"
echo
echo "This project uses [Rig](https://github.com/agent-rig/rig) skills — self-contained"
echo "markdown procedures. **When a request matches a skill's triggers, read that"
echo "file and follow it.** Project config lives in \`.rig/config.json\`."
echo "This project uses [Rig](https://github.com/agent-rig/rig) skills, delivered as"
echo "standard Agent Skills under \`.agents/skills/\` — your agent discovers and"
echo "invokes them automatically from each skill's trigger description; nothing to"
echo "do here to use them."
echo
for s in "${SKILLS[@]}"; do
[[ -f "$RIG_DIR/skills/$s/SKILL.md" ]] || continue
echo "- **$s** — $(skill_desc "$s")"
echo " → read \`.rig/skills/$s.md\` and follow it."
done
echo "Project config lives in \`.rig/config.json\` — read it for the test command,"
echo "base branch, tracker, and review-bot settings before running any skill."
echo
echo "**Roles/subagents:** personas live in \`.rig/agents/\` (rig-reviewer, rig-coder,"
echo "rig-architect, rig-qa, rig-debugger). If your agent supports subagents,"
Expand Down
59 changes: 41 additions & 18 deletions skills/rig-onboard/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,19 @@ Read, don't ask. Gather:
from repo markers to delivery **targets** (may be more than one):
- `.claude/` or `CLAUDE.md` → **`claude-code`** (native: `.claude/skills/`,
`.claude/agents/`).
- `AGENTS.md`, `.cursor/`, `.github/copilot-instructions.md`, `GEMINI.md`, or
`.windsurf/` → **`agents-md`** (universal: skills/agents/scripts under the
neutral `.rig/` dir — the same home as the config profile — plus a `## Rig`
index injected into `AGENTS.md`; works for Codex, Cursor, Gemini, Amp, Zed,
Jules…). If none detected, default to `claude-code`; if unsure, ask.
- **Existing `.claude/`**: note any skills/agents already present so you can warn
before overwriting.
- `AGENTS.md`, `.agents/`, `.cursor/`, `.github/copilot-instructions.md`,
`GEMINI.md`, or `.windsurf/` → **`agents-md`** (universal: skills land in
`.agents/skills/<name>/` — the standard cross-agent "Agent Skills" layout
that Codex, Cursor, Gemini CLI, Copilot, and Rovo Dev auto-discover
natively, so no per-skill index file is needed; agents/scripts/review
patterns stay under `.rig/`, the same home as the config profile, since
nothing else standardizes those; plus a minimal `## Rig` pointer block
injected into `AGENTS.md`). If none detected, default to `claude-code`; if
unsure, ask.
- **Existing `.claude/` or `.agents/skills/`**: note any skills/agents already
present so you can warn before overwriting. Also check for a legacy
`.rig/skills/*.md` flat-file layout from a pre-`.agents/skills/` onboarding —
see "Re-running" below.

Summarize what you found in a short table before moving on.

Expand Down Expand Up @@ -120,17 +126,23 @@ skill/agent/catalog without diff-and-confirm.
`<target>/.claude/agents/`; `RIG_DIR/scripts/*` → `<target>/.claude/scripts/`
(`chmod +x`); and starter `REVIEWER.md` / `label-mapping.md` →
`<target>/.claude/` **only if absent**.
- **`agents-md`:** the payload lives under `.rig/` — the same dir as the shared
config profile, so there's one rig home (not a `rig/`-vs-`.rig/` pair). Copy
each chosen skill's `SKILL.md` → `<target>/.rig/skills/<name>.md`; agents →
`<target>/.rig/agents/`; scripts → `<target>/.rig/scripts/`; starter docs →
`<target>/.rig/` (if absent). Then inject an idempotent `## Rig` section into
`<target>/AGENTS.md` (between `<!-- rig:start -->` / `<!-- rig:end -->`
markers — replace any existing block, don't duplicate) that lists each
installed skill with its one-line description and trigger phrases and says
"read `.rig/skills/<name>.md` and follow it", plus a note that subagent-less
agents should adopt the `.rig/agents/` personas inline. Set
`review.patternsFile` in the profile to `.rig/REVIEWER.md` for this target.
- **`agents-md`:** skills are delivered as full directories — copy each chosen
`RIG_DIR/skills/<name>/` → `<target>/.agents/skills/<name>/` (same shape as
the `claude-code` copy, just a different root). This is the location the
target agent already scans on its own, so **no per-skill index or "read and
follow" pointer is written** — the agent auto-discovers each skill from its
`SKILL.md` frontmatter `description`. Everything the standard doesn't cover
keeps living under `.rig/` (the same dir as the shared config profile, so
there's still one rig home for non-skill pieces): agents →
`<target>/.rig/agents/`; scripts → `<target>/.rig/scripts/`; starter docs
(`REVIEWER.md`, `label-mapping.md`) → `<target>/.rig/` (if absent). Then
inject/refresh an idempotent `## Rig` section into `<target>/AGENTS.md`
(between `<!-- rig:start -->` / `<!-- rig:end -->` markers — replace any
existing block, don't duplicate). Keep this block short: a pointer to
`.rig/config.json` for project settings, and a note that subagent-less
agents should adopt the `.rig/agents/` personas inline — it no longer
enumerates skills. Set `review.patternsFile` in the profile to
`.rig/REVIEWER.md` for this target.

## 5. Offer CI (optional, gated on consent)

Expand All @@ -157,3 +169,14 @@ secrets setup you can't do for them). See `ci/README.md#review-bot-bundle`.
Onboarding is idempotent-ish: re-running detects the existing
`.rig/config.json`, offers to update it, and only copies pieces that are
missing or that the user explicitly asks to refresh. Use it to pull kit updates.

Projects onboarded before this change may still have the old flat
`.rig/skills/<name>.md` files and a `## Rig` block that lists them by name.
Re-running onboarding delivers skills into `.agents/skills/<name>/` and
replaces the `## Rig` block (it's idempotent between the markers), but it will
**not** delete the old `.rig/skills/*.md` files on its own — `copy_no_clobber`
and the rest of the install path only ever add files, never remove them. Point
this out in your Step 1 summary and Step 6 wrap-up, and — because you're
interactive and a human is present to confirm — offer to delete the now-dead
`.rig/skills/` directory for them. Don't delete it silently, and don't do this
from `install.sh` (non-interactive, no consent to delete).
Loading