diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json new file mode 100644 index 00000000..9b42491e --- /dev/null +++ b/.agents/plugins/marketplace.json @@ -0,0 +1,20 @@ +{ + "name": "antigravity-awesome-skills", + "interface": { + "displayName": "Antigravity Awesome Skills" + }, + "plugins": [ + { + "name": "antigravity-awesome-skills", + "source": { + "source": "local", + "path": "./plugins/antigravity-awesome-skills" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + } + ] +} diff --git a/README.md b/README.md index 4afd987d..08fe123c 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,15 @@ If you use Claude Code and prefer the plugin marketplace flow, this repository n This installs the same repository-backed skill library through Claude Code's plugin marketplace entrypoint. +### Option C: Codex plugin marketplace metadata + +If you use Codex and prefer a marketplace-style plugin source instead of copying skills into `.codex/skills/`, this repository now ships: + +- `.agents/plugins/marketplace.json` +- `plugins/antigravity-awesome-skills/.codex-plugin/plugin.json` + +The Codex plugin points at the same curated `skills/` tree through a repo-local plugin entry, so the library can be exposed as an installable Codex plugin source without duplicating the catalog. + ## Choose Your Tool | Tool | Install | First Use | diff --git a/docs/users/codex-cli-skills.md b/docs/users/codex-cli-skills.md index d99732b0..63ea34eb 100644 --- a/docs/users/codex-cli-skills.md +++ b/docs/users/codex-cli-skills.md @@ -25,6 +25,8 @@ Install the library into your Codex path, then invoke focused skills directly in npx antigravity-awesome-skills --codex ``` +If you prefer a plugin-style Codex integration, this repository also ships repo-local plugin metadata in `.agents/plugins/marketplace.json` and `plugins/antigravity-awesome-skills/.codex-plugin/plugin.json`. + ### Verify the install ```bash diff --git a/plugins/antigravity-awesome-skills/.codex-plugin/plugin.json b/plugins/antigravity-awesome-skills/.codex-plugin/plugin.json new file mode 100644 index 00000000..d0eff202 --- /dev/null +++ b/plugins/antigravity-awesome-skills/.codex-plugin/plugin.json @@ -0,0 +1,38 @@ +{ + "name": "antigravity-awesome-skills", + "version": "8.10.0", + "description": "Repository-backed Codex plugin for the Antigravity Awesome Skills library.", + "author": { + "name": "sickn33 and contributors", + "url": "https://github.com/sickn33/antigravity-awesome-skills" + }, + "homepage": "https://github.com/sickn33/antigravity-awesome-skills", + "repository": "https://github.com/sickn33/antigravity-awesome-skills", + "license": "MIT", + "keywords": [ + "codex", + "skills", + "agentic-skills", + "developer-tools", + "productivity" + ], + "skills": "./skills/", + "interface": { + "displayName": "Antigravity Awesome Skills", + "shortDescription": "1,328+ reusable skills for coding, security, product, and ops workflows.", + "longDescription": "Install the Antigravity Awesome Skills catalog as a Codex plugin and expose the repository's curated skills library through a single marketplace entry.", + "developerName": "sickn33 and contributors", + "category": "Productivity", + "capabilities": [ + "Interactive", + "Write" + ], + "websiteURL": "https://github.com/sickn33/antigravity-awesome-skills", + "defaultPrompt": [ + "Use @brainstorming to plan a new feature.", + "Use @test-driven-development to fix a bug safely.", + "Use @lint-and-validate to verify this branch." + ], + "brandColor": "#111827" + } +} diff --git a/plugins/antigravity-awesome-skills/skills b/plugins/antigravity-awesome-skills/skills new file mode 120000 index 00000000..5dcab58e --- /dev/null +++ b/plugins/antigravity-awesome-skills/skills @@ -0,0 +1 @@ +../../skills \ No newline at end of file diff --git a/tools/scripts/tests/codex_plugin_marketplace.test.js b/tools/scripts/tests/codex_plugin_marketplace.test.js new file mode 100644 index 00000000..f061766e --- /dev/null +++ b/tools/scripts/tests/codex_plugin_marketplace.test.js @@ -0,0 +1,61 @@ +const assert = require("assert"); +const fs = require("fs"); +const path = require("path"); +const { findProjectRoot } = require("../../lib/project-root"); + +const projectRoot = findProjectRoot(__dirname); +const marketplacePath = path.join(projectRoot, ".agents", "plugins", "marketplace.json"); +const marketplace = JSON.parse(fs.readFileSync(marketplacePath, "utf8")); + +assert.strictEqual( + marketplace.name, + "antigravity-awesome-skills", + "Codex marketplace name should match the repository plugin name", +); +assert.strictEqual( + marketplace.interface?.displayName, + "Antigravity Awesome Skills", + "Codex marketplace display name should be present", +); +assert.ok(Array.isArray(marketplace.plugins), "marketplace.json must define a plugins array"); +assert.ok(marketplace.plugins.length > 0, "marketplace.json must contain at least one plugin"); + +const pluginEntry = marketplace.plugins.find((plugin) => plugin.name === "antigravity-awesome-skills"); +assert.ok(pluginEntry, "marketplace.json must include the antigravity-awesome-skills plugin entry"); +assert.deepStrictEqual( + pluginEntry.source, + { + source: "local", + path: "./plugins/antigravity-awesome-skills", + }, + "Codex plugin entry should resolve to the repo-local plugin directory", +); +assert.strictEqual( + pluginEntry.policy?.installation, + "AVAILABLE", + "Codex plugin entry must include policy.installation", +); +assert.strictEqual( + pluginEntry.policy?.authentication, + "ON_INSTALL", + "Codex plugin entry must include policy.authentication", +); +assert.strictEqual( + pluginEntry.category, + "Productivity", + "Codex plugin entry must include a category", +); + +const pluginRoot = path.join(projectRoot, "plugins", "antigravity-awesome-skills"); +const pluginManifestPath = path.join(pluginRoot, ".codex-plugin", "plugin.json"); +const pluginManifest = JSON.parse(fs.readFileSync(pluginManifestPath, "utf8")); + +assert.strictEqual(pluginManifest.name, "antigravity-awesome-skills"); +assert.strictEqual(pluginManifest.version, "8.10.0"); +assert.strictEqual(pluginManifest.skills, "./skills/"); + +const pluginSkillsPath = path.join(pluginRoot, "skills"); +assert.ok(fs.existsSync(pluginSkillsPath), "Codex plugin skills path must exist"); +assert.ok(fs.statSync(pluginSkillsPath).isDirectory(), "Codex plugin skills path must be a directory"); + +console.log("ok"); diff --git a/tools/scripts/tests/run-test-suite.js b/tools/scripts/tests/run-test-suite.js index b35efed4..454611bf 100644 --- a/tools/scripts/tests/run-test-suite.js +++ b/tools/scripts/tests/run-test-suite.js @@ -14,6 +14,7 @@ const LOCAL_TEST_COMMANDS = [ [path.join(TOOL_TESTS, "apply_skill_optimization_security.test.js")], [path.join(TOOL_TESTS, "build_catalog_bundles.test.js")], [path.join(TOOL_TESTS, "claude_plugin_marketplace.test.js")], + [path.join(TOOL_TESTS, "codex_plugin_marketplace.test.js")], [path.join(TOOL_TESTS, "installer_antigravity_guidance.test.js")], [path.join(TOOL_TESTS, "jetski_gemini_loader.test.cjs")], [path.join(TOOL_TESTS, "npm_package_contents.test.js")],