配置转换工具

将Claude代码配置(设置、子代理、MCP、技能)转换为OpenCode配置、代理和技能的工具。

  • by OpeOginni
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 OpeOginni/oc-convert

使用说明

oc转换

转换 克劳德代码 配置(设置、子代理、MCP、技能)到 OpenCode 配置+代理+技能。

  • 输入(克劳德):
    • 设置
      • ~/.claude/settings.json
      • ~/.claude/settings.local.json
      • ./.claude/settings.json
    • 代理
      • ~/.claude/agents/*.(json|md)
      • ./.claude/agents/*.(json|md)
    • 技能
      • ~/.claude/skills/<skill-name>/SKILL.md
      • ./.claude/skills/<skill-name>/SKILL.md
    • 主控程序
      • ~/.mcp.json
      • ./.mcp.json
    • 内存/规则(可选)
      • CLAUDE.md
      • .claude/CLAUDE.md
      • CLAUDE.local.md
      • .claude/rules/*.md
      • .cursor/rules/*.md
      • .cursor/rules/*.mdc
  • 输出(OpenCode):
    • 配置: opencode.json
    • 代理人: .opencode/agent/<agent-name>.md
    • 技能: .opencode/skill/<skill-name>/SKILL.md

用法

无需安装即可运行(推荐)

# Bun
bunx oc-convert

# Node
npx oc-convert

您可以选择:

  • 一切 (设置+代理+MCP+技能)
  • 仅设置/仅代理/仅MCP/仅技能
  • 要包含哪些文件

转换一个文件(非交互式)

# Convert one Claude agent file → one OpenCode agent markdown
bunx oc-convert --agent .claude/agents/my-agent.md

# Convert ONE Claude settings file → opencode.json
bunx oc-convert --settings .claude/settings.json

# Convert ONE Claude skill → one OpenCode skill folder
bunx oc-convert --skills .claude/skills/my-skill

输出目录

默认情况下,输出会写入运行CLI的目录。在其他地方写作:

bunx oc-convert --output ./my-output-dir

什么被转化(重要行为)

  • 设置:
    • permission → OpenCode权限映射(包括bash命令通配符)
    • 故意不延续模型 (Claude/OpenCode模型名称不同)
  • 代理:
    • 支持Markdown+frontmatter和JSON代理
    • 故意不延续模型
  • 主控程序:
    • stdio → OpenCode local
    • http → OpenCode remote
    • environment/headers/url/command/args 转换env插值(见下文)
  • 技能:
    • 写 .opencode/skill/<skill-name>/SKILL.md
    • OpenCode只能识别 name, description, license, compatibility, metadata 在YAML frontmatter中
    • 克劳德的 allowed-tools 保存在 metadata.claudeAllowedTools 并作为简短的注释添加到正文中

Env插值转换(克劳德→ OpenCode)

克劳德风格的字符串如下:

"${API_BASE_URL:-https://api.example.com}/mcp"

转换为OpenCode样式的令牌:

"{env:API_BASE_URL}/mcp"

注:Claude的默认/回退(:-...)是 掉落 因为OpenCode不支持回退语法。

权限转换说明

  • Bash命令权限:
    • Bash(npm run lint) → "bash": { "npm run lint": "allow" }
    • Bash(git:*) → "bash": { "git *": "allow" }
  • WebFetch:
    • Claude可以指定域(例如。 WebFetch(domain:github.com)),但OpenCode只是工具级的。
    • 我们将WebFetch规则转换为工具级别 webfetch 允许/拒绝。

重写

如果目标文件已存在(opencode.json 或代理降价),CLI将 警告 并在覆盖之前询问。

开发/建造

# Install deps
bun install

# Dev (runs directly with Bun)
bun run start:dev

# Bundle for publishing (tsup)
bun run build