Testing against a live agy session confirmed the plugins.json "entries"
mechanism documented for agy does not reliably surface a plugins/<name>/
bundle as a plugin: hooks and MCP servers inside it are never loaded, and
only a stray skill occasionally surfaces via agy's generic skill-walk
("No plugins are currently loaded or discoverable in the active context").
Add scripts/install_agy.py, which instead pushes a generated dist/agy
into the locations confirmed to actually work: symlinks each skill into
~/.gemini/config/skills/<name>/ (or a project's .agents/skills/ with
--project) and merges each plugin's mcpServers/hooks into the shared
global mcp_config.json/hooks.json without touching unrelated entries.
Supports --uninstall to cleanly remove exactly what was added.
generate_plugins.py's --install-local now shells out to it for the agy
side instead of printing the broken plugins.json instructions.
Also fixes plugins/core-essentials/mcp.json, which had been hand-added
directly under the repo root (never discovered by the generator) with
invalid JSON (missing the outer object) and no env-var indirection for
its GitHub/Gitea tokens; moved under the plugin and wired up with
${VAR} placeholders instead.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014YVWWAnvR5TDQzmfY3RXG9
Replace the skills-only SSoT (skills/<name>/SKILL.md) with plugins/<name>/,
where a plugin can bundle skills, MCP servers, lifecycle hooks, rules,
commands, and agents. scripts/generate_plugins.py now discovers plugins
from one or more layered --source roots and emits real per-target trees
(dist/claude-code/** + .claude-plugin/marketplace.json, dist/agy/**),
translating hooks.json/mcp.json between Claude Code's and agy's actual
schemas instead of only fanning out flat skill lists.
Adds a private-overlay build path (--source/--private-repo/--out/
--install-local) so a second, non-public repo (PII, tokens, personal-only
plugins) can extend or override the public plugin set without either repo
touching the other's history — private builds default to a gitignored
dist-private/ and never land in tracked output.
Drops install.sh and descriptions.json: both only ever covered skills and
pre-date the native plugin marketplace; both tools now install the plugin
marketplace the documented way (Claude Code's /plugin marketplace add,
agy's plugins.json entries). CI path filters move to plugins/**, and the
workflow gains workflow_dispatch for a manual re-trigger.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014YVWWAnvR5TDQzmfY3RXG9
Document docs-sync-audit, date-time, and technical-devlog-scribe; update the stale ship-it phase 1 reference from readme-sync-audit to docs-sync-audit.
- Replace Gemini CLI with Antigravity CLI throughout (--gemini kept as
hidden fallback flag; GEMINI_SKILLS_DIR honoured as legacy env var)
- Default install dir updated to ~/.gemini/antigravity-cli/skills
- Add ANTIGRAVITY_SKILLS_DIR env var with GEMINI_SKILLS_DIR fallback
- Add -l/--list flag: lists available skills with one-line descriptions
- Add descriptions.json mapping skill names to short descriptions;
fetch_descriptions() prefers a local copy when running from a clone,
falls back to remote URL for curl-pipe installs
- Document ship-it skill in README (was missing since its addition)
- Fix Manual Install cd path: claude-skills → ai-skills
Adds a [!TIP] callout above the curl examples noting that
https://url.rootiest.dev/skills can be substituted for the full raw
URL, with a short e.g. showing the pattern.
Introduces a standalone skill installer script and project landing page
documentation covering all three skills in the repository.
install.sh:
- Downloads and installs SKILL.md files from the remote repository into
the appropriate local directory for Claude Code (~/.claude/skills/) and/or
Gemini CLI (~/.gemini/skills/)
- Supports --claude/-c and --gemini/-g flags to target one or both tools;
defaults to both when neither is specified
- Accepts positional skill name arguments or --all/-a to install every
available skill; named arguments always take precedence over --all
- Discovers available skills at runtime via the Gitea contents API, with
automatic fallback to a depth-1 sparse git clone when the API is
unreachable or returns no results; JSON parsing uses jq, then python3,
then an awk fallback in order of availability
- Validates skill names against path traversal (../) and slash injection
before any download is attempted
- Supports CLAUDE_SKILLS_DIR and GEMINI_SKILLS_DIR environment variable
overrides for non-default install locations
- Checks for curl and git dependencies at startup and exits with a clear
error listing any missing tools
- Cleans up any temporary clone directory on exit via a trap on EXIT
- Displays colorized output (Bold/Cyan headers, Green success, Yellow
warnings, Red errors) when stdout is a terminal; disables all ANSI codes
automatically when piped or redirected
- Includes a fully formatted --help/-h page documenting all flags,
environment variables, and usage examples
README.md:
- Landing page covering project purpose, all three skills with per-skill
purpose and execution protocol summaries, and a full Installation section
- Installation section documents the standard curl pipe form
(curl -sL URL | bash -s -- args) with six ready-to-use one-liner examples
covering all major flag combinations
- Flags & Options table, Environment Variables table, and a Manual Install
section for users who prefer to inspect before running
- Table of contents with anchor links for all major sections
- License section referencing GPL-3.0-or-later