CtrlK
BlogDocsLog inGet started
Tessl Logo

punkdev/cc2oc

Add and ship OpenCode support for one Claude Code plugin at a time. Includes core migration to a reviewable `opencode-plugin/` adapter, maintainer-facing docs, and follow-up CI/versioning setup for package publishing or skill-copy drift checks.

92

1.25x
Quality

92%

Does it follow best practices?

Impact

97%

1.25x

Average score across 2 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

cc2oc — Claude Code → OpenCode migration tile

Tessl tile (tessltest3/cc2oc, v0.1.0) that adds local OpenCode support to one existing Claude Code plugin at a time. Produces a reviewable opencode-plugin/ adapter package with hooks ported by intent, MCP config migrated to opencode.jsonc, plugin skills packaged when needed, and tests proving parity. Stops before CI and publishing; those land in a separate follow-up skill so the local migration stays auditable on its own.

Repository shape

This repo is a tile, not an application. There is no build, no lint target, no test runner at the root. The tile bundles three skills, supporting docs, eval scenarios, and vendored Tessl tooling. The skills/ content is the deliverable.

  • tile.json — skill registry (registers the three skills below).
  • tessl.json — vendored dependencies: nine tessl-labs/* tiles for evals/audit/optimization, plus anthropics/skills (skill-creator) and uinaf/skills (skill-audit).
  • skills/ — three skills described below.
  • docs/maintainer-explanations.md, docs/versioning-and-release.md — reusable maintainer-facing snippets and CI guidance referenced by the skills.
  • evals/instructions.json, evals/summary.json — instruction inventory (14 rules) and scenario summary (caveman + claude-mem). Fixtures live under each scenario directory.

Skills workflow

Skills run in order. Each phase has a hard stop before the next.

  1. migrate-plugin (skills/migrate-plugin/SKILL.md) — primary migration skill. Triggers when the user says "port a Claude plugin to OpenCode", "add OpenCode support", or the target repo has .claude-plugin/, .mcp.json, or plugin-local .claude/skills/. Writes a reviewable opencode-plugin/ package, optional opencode.jsonc MCP config, and OPENCODE_SUPPORT.md to the target repo. Stops before any CI, PR, or publishing automation.
  2. docs (skills/docs/SKILL.md) — polishes README, OPENCODE_SUPPORT.md, PR notes, install instructions, and caveats for maintainers reviewing the adapter. Documentation only; no automation.
  3. ci-setup (skills/ci-setup/SKILL.md) — proposes versioning, publishing, and skill-drift CI after the local adapter and tests work. Requires explicit user approval before writing any workflow files.

Future skill: debug-plugin for diagnosing migrated plugin behavior after user/manual testing exposes issues.

Hard bounds (enforced by skills)

  • No CI, GitHub Actions, release workflows, npm publishing, or sync automation in migrate-plugin. Hand those off to ci-setup.
  • opencode-plugin/ is the neutral package root. .opencode/ only as an explicitly documented local dogfooding shim.
  • MCP config stays separate from opencode-plugin/package.json. OpenCode plugin packages do not install MCP servers.
  • No claimed parity for hook blocking, prompt/context injection timing, compaction, worker lifecycle, transcript semantics, or MCP setup unless tests prove it.
  • Do not fork Claude/OpenCode skill text unless incompatibility is concrete. If package-local copies are needed, document and test the source-of-truth relationship.
  • Never include agent metafiles (.claude/, .codex/, .serena/, .tessl/tiles/, etc.) in published opencode-plugin/ files.

Commands

The only first-party tooling is three Python validators used by migrate-plugin. Run from any working directory; pass the target repo path:

python3 skills/migrate-plugin/scripts/inspect_repo.py <repo> --format markdown
python3 skills/migrate-plugin/scripts/validate_skills.py <repo> --format markdown
python3 skills/migrate-plugin/scripts/validate_opencode_package.py <repo> --format markdown

inspect_repo.py produces the surface inventory (skills, hooks, MCP, commands, agents, package metadata). validate_skills.py checks SKILL.md frontmatter parses and required fields exist. validate_opencode_package.py checks the generated opencode-plugin/ package shape (ESM, main/exports, keywords, files allowlist).

Evals

Eval scenarios and instructions live in evals/:

  • evals/instructions.json — 14 structured instructions covering classification, asset inventory, skill validation, hook porting, plugin-code triggers, package layout, testing, and maintainer boundaries.
  • evals/summary.json — two scenarios (migrate-plugin-caveman-*, migrate-plugin-claude-mem-*) with 100% instruction coverage.
  • evals/migrate-plugin-*/fixture/ — fixture data for each scenario.

Run, analyze, and improve evals via the vendored Tessl skills: tessl__setup-skill-performance (baseline), tessl__optimize-skill-performance (debug + fix loop), tessl__eval-improve (targeted fixes), tessl__compare-skill-model-performance (cross-model). All vendored under .tessl/tiles/ per tessl.json.

When working in this repo

Work happens primarily in skills/*/SKILL.md and the supporting references/, assets/, and scripts/ under skills/migrate-plugin/. The skill activation rules live in the YAML frontmatter — keep description accurate to ensure correct triggering. Do not add CI, publishing automation, or release workflows to this tile itself; the tile teaches target repos how to handle those, but its own publication is managed via Tessl tooling.

Workspace
punkdev
Visibility
Public
Created
Last updated
Publish Source
CLI
Badge
punkdev/cc2oc badge