Skip to main content
The Gemini CLI converter creates skills and TOML commands with support for nested namespaces.

Installation

bunx @every-env/compound-plugin install compound-engineering --to gemini

Output Structure

Writes to .gemini/:
.gemini/
├── skills/
│   ├── agent-name/
│   │   └── SKILL.md      # Agent skills
│   └── existing-skill/   # Pass-through skills
├── commands/
│   ├── simple.toml       # Flat commands
│   └── workflows/
│       └── plan.toml     # Nested commands (workflows:plan)
└── settings.json         # MCP server config
Commands with colons become nested directories. workflows:plancommands/workflows/plan.toml.

Conversion Details

Agents → Skills

Agents are converted to skills:
---
name: plan-specialist
description: Planning agent for complex features
---

## Capabilities
- Break down complex features
- Create detailed plans

You are a planning specialist...

Commands → TOML Files

Commands become TOML files with multi-line string prompts:
description = "Create implementation plan"
prompt = """
You are a planning specialist.
Use the repo-research-analyst skill to: research the feature.

User request: {{args}}
"""
Nested commands:
workflows:plan → commands/workflows/plan.toml
ce:work → commands/ce/work.toml
simple → commands/simple.toml
If a command has argumentHint, {{args}} is appended to the prompt to capture user input.

Content Transformation

Task agent calls:
- Task repo-research-analyst(feature_description)
+ Use the repo-research-analyst skill to: feature_description
Agent references:
- Consult @code-review-agent
+ Consult the code-review-agent skill
Path rewriting:
- ~/.claude/skills/
+ ~/.gemini/skills/
- .claude/
+ .gemini/

MCP Servers

MCP servers are merged into settings.json:
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem"],
      "env": {
        "ALLOWED_PATHS": "/Users/you/projects"
      }
    },
    "remote-api": {
      "url": "https://api.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${TOKEN}"
      }
    }
  }
}
Supports both stdio (command) and remote (url) servers.
Existing settings.json is preserved. Plugin MCP servers are merged into mcpServers object.

TOML Format

Commands use TOML with multi-line strings:
description = "Short description"
prompt = """
Multi-line prompt body.
Line breaks and "quotes" are preserved.
Backslashes (\) are escaped.
"""
Escaping rules:
  • Backslashes: \\\
  • Triple quotes: """\"\"\" (rare in practice)

Name Normalization

Names are normalized to kebab-case:
InputOutput Path
workflows:plancommands/workflows/plan.toml
Plan Reviewcommands/plan-review.toml
nested:cmd:deepcommands/nested/cmd/deep.toml
UPPERCASEcommands/uppercase.toml
Rules:
  • Lowercase only
  • Colons → directory separators
  • Slashes, spaces → hyphens
  • Special characters removed

Example Output

Input (Claude command):
{
  "name": "workflows:plan",
  "description": "Create implementation plan",
  "argumentHint": "<feature description>",
  "body": "You are a planning specialist.\nTask repo-research-analyst(research the feature)."
}
Output (.gemini/commands/workflows/plan.toml):
description = "Create implementation plan"
prompt = """
You are a planning specialist.
Use the repo-research-analyst skill to: research the feature.

User request: {{args}}
"""
Input (Claude agent):
{
  "name": "code-review-agent",
  "description": "Review code for issues",
  "capabilities": ["Identify bugs", "Suggest improvements"],
  "body": "You review code carefully."
}
Output (.gemini/skills/code-review-agent/SKILL.md):
---
name: code-review-agent
description: Review code for issues
---

## Capabilities
- Identify bugs
- Suggest improvements

You review code carefully.

Limitations

  • No hooks support: Gemini CLI uses a different hook format (BeforeTool/AfterTool). A warning is logged if hooks are present.
  • Description truncation: Descriptions are limited to 1024 characters
  • Skills not mirrored: Gemini discovers skills from ~/.agents/skills, so sync avoids duplicates
If your plugin has hooks, they will not be converted. Gemini CLI’s hook format is incompatible with Claude’s event-based hooks.

Sync Support

Sync personal Claude config to Gemini:
bunx @every-env/compound-plugin sync --target gemini
This syncs:
  • MCP servers from ~/.claude/settings.json (merged into .gemini/settings.json)
  • Personal skills are not synced (Gemini auto-discovers from ~/.agents/skills)
  • Personal commands from ~/.claude/commands/ (as TOML files)

See Also

Gemini CLI Documentation

Official Gemini CLI documentation

Sync Command

Sync personal Claude config to Gemini