{
  "markdown": "# Skill Porter\n\nUniversal tool to convert Claude Code skills to Gemini CLI extensions and vice versa.\n\n## Overview\n\nSkill Porter automates the conversion between Claude Code skills and Gemini CLI extensions, enabling developers to write once and deploy to both platforms with minimal effort.\n\n### Key Features\n\n- **Bidirectional Conversion**: Claude → Gemini and Gemini → Claude\n- **Smart Analysis**: Automatically detects source platform and structure\n- **Metadata Transformation**: YAML frontmatter ↔ JSON manifest conversion\n- **MCP Integration**: Preserves Model Context Protocol server configurations\n- **Configuration Mapping**: Converts between environment variables and settings schemas\n- **Tool Restriction Conversion**: Transforms allowed-tools (allowlist) ↔ excludeTools (denylist)\n- **Validation**: Ensures output meets platform requirements\n- **Optional Features**: PR generation, fork setup, migration tools\n\n## Installation\n\n```bash\nnpm install -g skill-porter\n```\n\nOr use directly with npx:\n\n```bash\nnpx skill-porter convert ./my-skill --to gemini\n```\n\n## Quick Start\n\n### Convert Claude Skill to Gemini Extension\n\n```bash\nskill-porter convert ./my-claude-skill --to gemini --output ./my-gemini-extension\n```\n\n### Convert Gemini Extension to Claude Skill\n\n```bash\nskill-porter convert ./my-gemini-extension --to claude --output ./my-claude-skill\n```\n\n### Validate Conversion\n\n```bash\nskill-porter validate ./my-converted-skill\n```\n\n## Usage\n\n### As a CLI Tool\n\n```bash\n# Basic conversion\nskill-porter convert <source-path> --to <claude|gemini>\n\n# With output directory\nskill-porter convert ./source --to gemini --output ./destination\n\n# Analyze without converting\nskill-porter analyze ./skill-or-extension\n\n# Validate existing skill/extension\nskill-porter validate ./path\n\n# Make universal (works on both platforms)\nskill-porter universal ./my-skill\n\n# Create PR to add dual-platform support\nskill-porter create-pr ./my-skill --to gemini\n\n# Fork with dual-platform setup\nskill-porter fork ./my-skill --location ~/my-forks/skill-name\n```\n\n### As a Universal Skill/Extension\n\nskill-porter itself works on both platforms!\n\n**Claude Code:**\n```bash\n# Install as skill\ngit clone https://github.com/jduncan-rva/skill-porter ~/.claude/skills/skill-porter\ncd ~/.claude/skills/skill-porter\nnpm install\n```\n\nThen in Claude Code:\n```\n\"Convert my skill at ./my-skill to Gemini extension\"\n\"Make this Claude skill compatible with Gemini CLI\"\n```\n\n**Gemini CLI:**\n```bash\ngemini extensions install https://github.com/jduncan-rva/skill-porter\n```\n\nThen in Gemini:\n```\n\"Port this skill to work with Claude Code\"\n\"Create a universal version of this extension\"\n```\n\n## Architecture\n\nSkill Porter leverages the fact that both platforms use the Model Context Protocol (MCP), achieving ~85% code reuse:\n\n```\nShared Components (85%):\n├── MCP Server (100% reusable)\n├── Documentation (85% reusable)\n├── Scripts & Dependencies (100% reusable)\n\nPlatform-Specific (15%):\n├── Claude: SKILL.md + .claude-plugin/marketplace.json\n└── Gemini: GEMINI.md + gemini-extension.json\n```\n\n### Conversion Process\n\n1. **Detect**: Analyze source to determine platform\n2. **Extract**: Parse metadata, MCP config, documentation\n3. **Transform**: Convert between platform formats\n4. **Generate**: Create target platform files\n5. **Validate**: Ensure output meets requirements\n\n## Platform Mapping\n\n| Claude Code | Gemini CLI | Transformation |\n|-------------|------------|----------------|\n| `SKILL.md` frontmatter | `gemini-extension.json` | YAML → JSON |\n| `allowed-tools` (whitelist) | `excludeTools` (blacklist) | Logic inversion |\n| `.claude-plugin/marketplace.json` | `gemini-extension.json` | JSON merge |\n| Environment variables | `settings[]` schema | Inference |\n| `SKILL.md` content | `GEMINI.md` | Content adaptation |\n\n## Examples\n\nSee the `examples/` directory for complete working examples with before/after comparisons.\n\n### Example 1: Code Formatter (Claude → Gemini)\n\n**Before** (Claude skill):\n- `SKILL.md` with YAML frontmatter\n- Allowed tools: Read, Write, Bash\n- MCP server with environment variables\n\n**After** (Gemini extension):\n```bash\nskill-porter convert examples/simple-claude-skill --to gemini\n```\n- `gemini-extension.json` with manifest\n- Excluded tools: All except Read, Write, Bash\n- Settings schema inferred from env vars\n- MCP paths use `${extensionPath}`\n\n### Example 2: API Connector (Gemini → Claude)\n\n**Before** (Gemini extension):\n- `gemini-extension.json` with settings\n- Excluded tools: Bash, Edit, Write\n- Secret settings for API keys\n\n**After** (Claude skill):\n```bash\nskill-porter convert examples/api-connector-gemini --to claude\n```\n- `SKILL.md` with YAML frontmatter\n- Allowed tools: All except Bash, Edit, Write\n- Environment variable documentation generated\n- `.claude-plugin/marketplace.json` created\n\n### Example 3: Universal Conversion\n\n**skill-porter itself** is universal - it converted itself!\n\n```bash\ncd skill-porter\nskill-porter analyze .\n# Result: Platform: universal (high confidence)\n```\n\nSee `examples/README.md` for detailed before/after comparisons and conversion explanations.\n\n## Optional Features\n\n### Generate Pull Request\n\nAutomatically create a PR to add dual-platform support to a repository:\n\n```bash\n# Convert and create PR in one step\nskill-porter create-pr ./my-skill --to gemini\n\n# Options\nskill-porter create-pr ./my-skill \\\n  --to gemini \\\n  --base main \\\n  --remote origin \\\n  --draft  # Create as draft PR\n```\n\n**What it does:**\n1. Converts the skill/extension to target platform\n2. Creates a new branch (`skill-porter/add-dual-platform-support`)\n3. Commits changes with detailed commit message\n4. Pushes to remote\n5. Creates PR with comprehensive description\n\n**Requirements:**\n- GitHub CLI (`gh`) installed and authenticated\n- Git repository with remote configured\n\n**PR includes:**\n- ✅ Complete description of changes\n- ✅ Benefits explanation\n- ✅ Testing checklist\n- ✅ Installation instructions for both platforms\n- ✅ Link to skill-porter documentation\n\n### Fork and Setup\n\nCreate a fork with dual-platform configuration ready for development:\n\n```bash\nskill-porter fork ./my-skill --location ~/my-forks/skill-name\n```\n\n**What it does:**\n1. Creates fork directory at specified location\n2. Copies or clones the repository\n3. Ensures both Claude and Gemini configurations exist\n4. Sets up symlinks for Claude Code (if applicable)\n5. Provides installation instructions for Gemini CLI\n\n**Use cases:**\n- Maintain separate development fork\n- Test on both platforms simultaneously\n- Contribute dual-platform support to external repos\n\n## Development\n\n```bash\n# Clone repository\ngit clone https://github.com/jduncan-rva/skill-porter\ncd skill-porter\n\n# Install dependencies\nnpm install\n\n# Run in development mode\nnpm run dev\n\n# Run tests\nnpm test\n```\n\n## Contributing\n\nContributions welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## Project Structure\n\n```\nskill-porter/\n├── src/\n│   ├── index.js              # Main entry point\n│   ├── cli.js                # CLI interface\n│   ├── analyzers/\n│   │   ├── detector.js       # Platform detection\n│   │   └── validator.js      # Output validation\n│   ├── converters/\n│   │   ├── claude-to-gemini.js\n│   │   ├── gemini-to-claude.js\n│   │   └── shared.js         # Shared conversion logic\n│   ├── templates/\n│   │   ├── skill.template.md\n│   │   ├── gemini.template.md\n│   │   └── manifests.js      # Manifest templates\n│   └── utils/\n│       ├── file-utils.js\n│       ├── metadata-parser.js\n│       └── mcp-transformer.js\n├── tests/\n├── examples/\n├── SKILL.md                  # Claude Code skill interface\n├── package.json\n└── README.md\n```\n\n## License\n\nMIT\n\n## Acknowledgments\n\n- Built on the [Model Context Protocol](https://modelcontextprotocol.io)\n- Inspired by the universal extension pattern demonstrated in [database-query-helper](https://github.com/jduncan-rva/database-query-helper)\n- Supports [Claude Code](https://code.claude.com) and [Gemini CLI](https://geminicli.com)\n\n## Support\n\n- **Issues**: https://github.com/jduncan-rva/skill-porter/issues\n- **Discussions**: https://github.com/jduncan-rva/skill-porter/discussions\n\n---\n\nMade with ❤️ for the Claude Code and Gemini CLI communities\n",
  "bytes": 8219,
  "sha": "81f5c147e05232aeeed08f433c1a669894b9b21c3ebf344abff4bffd5ac61a66",
  "repo_slug": "jduncan-rva/skill-porter",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_jduncan_rva_skill_porter_bf2b8ebc/readme"
}