{
  "markdown": "# Portable Agent / Skill / Tool / Hook Generator\n\nA skill for **Claude Code, GitHub Copilot, Gemini CLI, and OpenCode** that helps\nyou build agents, skills, tools, and hooks that work across all four providers\ninstead of hand-maintaining four divergent, drifting copies.\n\n## The idea\n\nThere's no universal standard for agent/skill/tool/hook definitions across AI\ncoding assistants yet. This repo takes the practical approach:\n\n1. Write **one neutral markdown source** per artifact — provider-agnostic\n   language, no hardcoded tool names or provider-specific syntax.\n2. Generate a **thin adapter per provider** that either points at that source\n   or embeds it verbatim (never paraphrased) in whatever shape that provider\n   expects.\n3. Be honest about the limits: **skills and agents** port at high fidelity\n   (all four providers consume markdown instructions in some form). **Tools**\n   port best as a single **MCP server** rather than four reimplementations.\n   **Hooks** port worst — each provider's event model genuinely differs, and\n   some providers may have no equivalent at all. The method says so instead of\n   faking parity.\n4. **Verify, don't guess.** Provider schemas change; the method requires\n   checking each provider's current docs before generating its adapter, and\n   flags anything generated from memory instead of verified.\n\nThe actual method lives in one place — [`CORE.md`](CORE.md) — written with no\nprovider-specific syntax. Every provider's entry point is a pointer to it, not\na copy, so editing the method only ever happens once:\n\n| Provider | Entry point |\n|---|---|\n| Claude Code | [`SKILL.md`](SKILL.md) |\n| GitHub Copilot | [`copilot-instructions.md`](copilot-instructions.md) |\n| Gemini CLI | [`GEMINI.md`](GEMINI.md) + [`gemini-extension.json`](gemini-extension.json) |\n| OpenCode | [`opencode-agent.md`](opencode-agent.md) |\n\n## Overview\n\n**Where the providers diverge, and the one real cross-provider standard (MCP)\nfor tools.**\n\n![Where providers diverge and the MCP standard](assets/portability-infographic.png)\n\n**The generator's own method — write a neutral source, decide the mechanism\nper artifact type, generate adapters, verify against current docs — plus the\nhonest portability ceiling per artifact type (skill/agent: high, tool: medium\nvia MCP, hook: low).**\n\n![The method: 5 steps and portability by artifact type](assets/portable-skill-infographic.png)\n\n**Architecture: every provider adapter points at (or embeds verbatim) the same\n`CORE.md` — edited once, never re-authored per provider.**\n\n![Architecture: single source, four entry points](assets/portable-skill-architecture.png)\n\n## How to use this skill\n\n1. **Install it** for whichever provider(s) you use — see [Install](#install)\n   below. Claude Code is the primary entry point; the other three are thin\n   adapters pointing at the same method.\n2. **Trigger it** with a natural request, e.g.:\n   - \"Make this skill portable across providers.\"\n   - \"Create an agent that works in Claude Code, Copilot, Gemini CLI, and OpenCode.\"\n   - \"Add OpenCode/Gemini support to this tool too.\"\n3. **The agent follows `CORE.md`'s five steps** for you:\n   1. Writes one neutral markdown source for your agent/skill/tool/hook —\n      provider-agnostic language, no hardcoded tool names.\n   2. Decides the honest portability mechanism for that artifact type (see the\n      table in the second image above).\n   3. Generates a thin adapter per provider you asked for, each pointing at or\n      embedding the neutral source verbatim — never a paraphrase.\n   4. Verifies each provider's *current* schema/discovery path before writing\n      its adapter, rather than generating from stale memory.\n   5. Lints the neutral source for anything provider-specific that leaked in.\n4. **Check the output.** You should get back: one neutral source file, one\n   adapter per requested provider, an MCP server if a tool was involved, and\n   an explicit note anywhere full parity wasn't possible (most often hooks).\n5. **Edit only `CORE.md`** going forward. If the method changes, regenerate\n   the adapters from it rather than hand-editing each one — that keeps all\n   four providers in sync by construction.\n\n## Install\n\n### Claude Code\n\n```bash\ngit clone https://github.com/deepakkj/portable-agent-skills-hooks-tools-generator-skill.git \\\n  ~/.claude/skills/portable-agent-skills-hooks-tools-generator-skill\n```\n\nClaude Code auto-discovers skills under `~/.claude/skills/` (or a repo-local\n`.claude/skills/`). It triggers on prompts like \"make this portable\" or\n\"create an agent that works across providers.\"\n\n### GitHub Copilot\n\nCopy `copilot-instructions.md`'s content into your project's\n`.github/copilot-instructions.md`, or reference this repo's copy alongside\n`CORE.md`.\n\n### Gemini CLI\n\nClone this repo as a Gemini CLI extension directory (it already contains\n`gemini-extension.json` with `contextFileName: GEMINI.md`). See the\n[Gemini CLI extensions docs](https://github.com/google-gemini/gemini-cli) to\nconfirm the current install path before relying on it — provider extension\nformats change, and this repo's `gemini-extension.json` should be re-verified\nagainst current docs (see the caveat below).\n\n### OpenCode\n\nCopy `opencode-agent.md` into OpenCode's agent directory per its current\ndiscovery convention.\n\n## ⚠️ Verification caveat\n\nThe Gemini CLI (`gemini-extension.json`) and OpenCode (`opencode-agent.md`)\nadapter *shapes* in this repo were written from general knowledge of those\ntools' formats, not verified line-by-line against current docs at authoring\ntime. `CORE.md` Step 4 explicitly instructs an agent to verify each provider's\ncurrent schema before trusting an adapter's shape — do the same before\ndepending on these two files' exact format. Claude Code's `SKILL.md`\nfrontmatter and Copilot's `copilot-instructions.md` convention are stable and\nverified.\n\n## Contributing\n\nThe neutral method in `CORE.md` is the single source of truth. If you improve\nit, regenerate the four adapters from the updated method rather than editing\nthem independently — that's the whole point of the design.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n",
  "bytes": 6133,
  "sha": "e344c16a917e2902cd6207616c86acd3c92c9514518353d1b7e57c3784807bff",
  "repo_slug": "deepakkj/portable-agent-skills-hooks-tools-generator-skill",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_deepakkj_portable_agent_skills_hooks_too_a6fe35ff/readme"
}