feat: wire Crush + Antigravity harnesses
Some checks failed
release / tag (push) Has been cancelled

Phase 2 of mathias/skills extraction. Adds two new per-tool wirers
alongside Claude Code:

- Crush — ~/.config/crush/skills/<name>/SKILL.md (charmbracelet/crush,
  successor to opencode-ai/opencode which is archived)
- Antigravity — ~/.gemini/antigravity/skills/<name>/SKILL.md (Google
  VS Code extension). Our SKILL.md frontmatter (name + description)
  is already in the format Antigravity expects — no manifest
  translation step needed.

Both wirers added to Taskfile.yml (install:crush + install:antigravity)
and install.sh (wire_crush + wire_antigravity). The aggregate `install`
target now calls all four targets (claude:global, claude:repo, crush,
antigravity). Idempotent symlinks, same shape as the Claude Code wirer.

Per-host env overrides documented in README: SKILLS_REF for tag pinning,
CRUSH_SKILLS_DIR + ANTIGRAVITY_SKILLS_DIR for non-default paths.

Skipped:
- opencode (opencode-ai/opencode): archived, succeeded by Crush; its
  Custom Commands surface is user prompt templates, not system skills
- gitea-resident agents: consume via per-repo .claude/skills or brain
  MCP, no special target needed

Bump-Type: minor
This commit is contained in:
Mathias
2026-05-24 20:51:06 +02:00
parent d6a71e370e
commit b1ff71a7fd
3 changed files with 103 additions and 10 deletions

View File

@@ -17,6 +17,8 @@ REPO_URL="${SKILLS_REPO_URL:-https://gitea.d-ma.be/mathias/skills.git}"
REF="${SKILLS_REF:-main}"
CHECKOUT_DIR="${SKILLS_CHECKOUT_DIR:-$HOME/.local/share/skills}"
CLAUDE_GLOBAL_DIR="${CLAUDE_SKILLS_DIR:-$HOME/.claude/skills}"
CRUSH_DIR="${CRUSH_SKILLS_DIR:-$HOME/.config/crush/skills}"
ANTIGRAVITY_DIR="${ANTIGRAVITY_SKILLS_DIR:-$HOME/.gemini/antigravity/skills}"
log() { printf '[skills] %s\n' "$*"; }
@@ -69,6 +71,28 @@ wire_claude_global() {
done < <(list_skills)
}
wire_crush() {
# Crush reads skills from ~/.config/crush/skills/<name>/SKILL.md.
# Pre-creating the dir is cheap even when Crush isn't installed.
mkdir -p "$CRUSH_DIR"
while IFS= read -r skill; do
[ -n "$skill" ] || continue
link_skill "$CRUSH_DIR" "$skill"
done < <(list_skills)
}
wire_antigravity() {
# Antigravity (Google's VS Code extension) reads global skills from
# ~/.gemini/antigravity/skills/<name>/SKILL.md. Our SKILL.md files
# already carry the required `name` + `description` YAML frontmatter,
# so symlinks are sufficient — no manifest translation step.
mkdir -p "$ANTIGRAVITY_DIR"
while IFS= read -r skill; do
[ -n "$skill" ] || continue
link_skill "$ANTIGRAVITY_DIR" "$skill"
done < <(list_skills)
}
wire_claude_repo() {
# Only wire per-repo when invoked from inside a git repo and it isn't
# the skills repo itself.
@@ -92,6 +116,8 @@ main() {
ensure_checkout
wire_claude_global
wire_claude_repo
wire_crush
wire_antigravity
log "done — $(list_skills | wc -l | tr -d ' ') skill(s) wired at ref=$REF"
}