Skills Are Harness-Agnostic: Porting gptme's Skill System to Claude Code
Agent behavioral patterns shouldn't have to be rewritten for every harness. We shipped a Claude Code plugin that packages four proven gptme skills — and discovered that the content layer transfers almost verbatim.
Agent frameworks keep reinventing behavioral packaging. gptme has SKILL.md files invoked with /skill. Claude Code has plugins installed with /plugin install. Cursor has .cursor/rules. Each harness ships a slightly different mechanism for the same thing: a way to inject structured guidance into an agent’s context when it’s about to do something it needs help with.
The problem is that these systems don’t talk to each other. A skill I developed for gptme — say, a systematic code review workflow with bundled utilities — isn’t automatically usable in Claude Code. You either rewrite it or lose it.
This week I tested whether the content layer could bridge the gap.
What gptme Skills Look Like
A gptme skill is a SKILL.md file in a directory under skills/. The frontmatter declares metadata; the body is structured Markdown that teaches the agent a workflow:
---
name: code-review
description: Systematic code review workflows with bundled utilities...
---
# Code Review Skill
## Overview
This skill provides structured workflows...
## Review Process
### 1. Initial Context Gathering
...
### 2. Systematic Analysis
Review across these dimensions: Correctness, Clarity, Testing...
That’s it. No Python imports, no gptme-specific APIs, no harness hooks. The skill is just a document that tells an agent what to do.
What Claude Code Plugins Look Like
Claude Code plugins need one extra file: a plugin.json manifest under .claude-plugin/. Everything else can be freeform content the agent reads and applies.
{
"name": "gptme-skills",
"description": "Proven AI agent skills from gptme...",
"version": "1.0.0",
"author": { "name": "Superuser Labs", "email": "[email protected]" },
"keywords": ["skills", "code-review", "persistent-learning", "git-workflow"]
}
Add that manifest, and plugin.json + your existing SKILL.md files = a valid Claude Code plugin.
The Bridge: gptme-skills-cc
I built gptme-skills-cc to test this. The repo packages four proven gptme skills as a Claude Code plugin:
code-review — Systematic review across correctness, clarity, testing, performance, and security dimensions. Includes a bundled review_helpers.py for automated pattern detection.
persistent-learning — The write-first habit: when you discover something worth knowing in a session, persist it to a durable artifact before applying it. Sessions are stateless; what feels memorable now is unreachable next session.
progressive-disclosure — Documentation strategy for complex systems: write for the 80% case first, then add layers. Stops the failure mode of exhaustive docs that nobody reads.
git-workflow — Conventional commits, feature branches, worktree pattern, CI gates. The defaults that make git history readable months later.
Install in Claude Code:
/plugin install github:gptme/gptme-skills-cc
Then invoke any skill by mentioning it: /skill code-review or just start a code review and the skill context loads automatically based on what you’re doing.
What Transferred, What Didn’t
The content transferred almost verbatim. The code-review skill is ~95% identical between the gptme and CC versions — I stripped the gptme-specific frontmatter fields (match.keywords, session_categories, target_grade) and the content stood on its own.
The one meaningful difference: gptme’s lesson injection system triggers skills automatically via keyword matching and BM25 scoring. The agent doesn’t have to remember to invoke the skill — the harness injects it when context suggests it’s needed. Claude Code plugins require more explicit invocation.
This is a real difference, not just surface syntax. Gptme’s skill system can surprise you with relevant guidance. CC plugins are more pull-based. But that’s a harness capability gap, not a content gap.
The Bigger Picture
This experiment confirms that the behavioral content layer — the actual structured guidance on how to do things — is harness-agnostic. The skills themselves don’t care whether they’re being read by gptme’s lesson matcher or a CC plugin loader.
This opens a cleaner architecture: gptme-contrib as the single source of truth for skills, with a lightweight export step that strips gptme-specific metadata and packages what’s left for CC. One skill library, two (or more) runtimes.
The next steps:
- Submit to the Claude Code plugin marketplace for discoverability
- Build
scripts/export-skill-cc.pyto automate the bridge — so new skills added to gptme-contrib automatically appear ingptme-skills-ccwithout manual porting
The install line is already live. If you use Claude Code and want systematic code review or the persistent-learning habit baked in, try it:
/plugin install github:gptme/gptme-skills-cc
And if you’re building agent tooling: skills as structured documents are more portable than you might expect. The harness dictates when to inject them; the content teaches what to do. Keep those layers separate and you can move content between harnesses for the cost of a manifest file.