Skip to content
Development
Skill

/agent-porting

Migrate an agent from Claude Code, Codex, DeepSeek Harness, Qoder, Qwen Code, WorkBuddy or another coding agent into a new PenguinHarness Agent — read its instructions, Skills, commands, MCP servers, hooks and memory, write them in the Agent zip layout without copying a secret,

From plugin
penguin-harness
3.2k40 skills

Claude Code

$ npx -y skills add Prism-Shadow/penguin-harness --skill agent-porting --agent claude-code

SKILL.md

agent-porting.SKILL.md
name: agent-porting
description: Migrate an agent from Claude Code, Codex, DeepSeek Harness, Qoder, Qwen Code, WorkBuddy or another coding agent into a new PenguinHarness Agent — read its instructions, Skills, commands, MCP servers, hooks and memory, write them in the Agent zip layout without copying a secret, import the folder with `penguin agent import`, and report what did not map.
version: 2026.11.10.1

Agent Porting

An agent set up in another coding tool is a handful of files: instructions, Skills, slash commands, subagent definitions, MCP servers, hooks, and the notes the tool wrote to itself. A PenguinHarness Agent is files too, and its export is a zip of its directory. This skill writes the other tool's files into that same layout in a scratch folder, then imports the folder with `penguin agent import`, which creates a **new** Agent in the Project. The source is never changed.

To bring a few Skills into the current Agent instead, use `skill-porting`; to turn another tool's plugin into a server-wide plugin package, use `plugin-porting`. Both sit beside this skill.

Before you start

  • When the message names no source, ask which tool the agent comes from, where its files are (the default user directory, a project folder, or both) and, when the tool has subagents, which one is meant. Read nothing until that is clear. When the message names a tool or a path, as the prompt from **Import agent** 「导入 Agent」 → **Migrate from another framework** 「从其他框架迁移」 does, go ahead and list your assumptions in the report.
  • Paths are on the machine you run on, which is the server's. When the source lives on another computer, ask the user to copy it here first.
  • The Project is the one the prompt names; without one, ask. Pick the new Agent's id: 2–64 characters, a lowercase letter first, then lowercase letters, digits and `_`. Check `penguin agent ls --project-id <project>` for a collision.
  • Build the folder in this Session's scratchpad, at `<scratchpad>/agent-port/<id>/`, called `<port>` below. Use absolute paths. It is an intermediate, not a deliverable.

1. Read the source, all of it

Read the files themselves, not a summary, and read what they point at: an `@path` import, a file a rule or a command names, every script a Skill or a hook runs. User-level files come first, then the project's. List a tree with `find <dir> -maxdepth 3 -type f -not -name '*.jsonl'`, which leaves transcripts out.

Never invent a layout. When a directory below is missing, say so and move on; when nothing is there at all, ask. The layouts were checked against each tool's documentation on 2026-11-04. When a path is not where this says, list the tool's directory and map by shape.

**Secrets.** Never open a tool's "never" files, transcripts and history (`*.jsonl`), or a credential store (`.env`, `*.env`, `.envrc`, `auth.json`, `*credentials*`, `*token*.json`, `*.pem`, `*.key`, `id_rsa*`, `.netrc`, `.npmrc`, `.pypirc`). Whatever a command prints becomes part of this Session's Trace. Where a configuration you port holds a credential (an MCP server's `env` value or header, a token in a hook command), keep only its key name: never repeat the value in a command, a file you write, or your reply.

Claude Code

Home `~/.claude/` (or `$CLAUDE_CONFIG_DIR`); project files at the repository root and in its `.claude/`.

  • **Instructions**: `~/.claude/CLAUDE.md`, `~/.claude/rules/**/*.md`; the project's `CLAUDE.md` or `.claude/CLAUDE.md`, `CLAUDE.local.md`, `.claude/rules/**/*.md` (a rule's `paths:` frontmatter scopes it). The project's `AGENTS.md` only when no `CLAUDE.md` exists.
  • **Skills**: `~/.claude/skills/<name>/`, `.claude/skills/<name>/`. **Commands**: `~/.claude/commands/**/*.md`, `.claude/commands/` (`$ARGUMENTS`, `$N`, `$<name>`).
  • **Subagents**: `~/.claude/agents/*.md`, `.claude/agents/*.md`; frontmatter `name`, `description`, `tools`, `model`, `effort` and more; the body is its prompt.
  • **MCP**: `mcpServers` at the top of `~/.claude.json` and under `projects["<absolute path>"]`; `.mcp.json` at the project root. An entry has `type` (`stdio`, `http`, `sse`), `command`, `args`, `env`, `url`, `headers`; values may hold `${VAR}` or `${VAR:-default}`. Read only those keys of `~/.claude.json` (for example with `jq`): the rest is account state.
  • **Hooks**: `hooks` in `~/.claude/settings.json`, `.claude/settings.json` and `.claude/settings.local.json`: event → `[{ matcher, hooks: [{ type, command, timeout }] }]`.
  • **Settings**: `model`, `effortLevel`, `permissions`.
  • **Memory**: `~/.claude/projects/<project>/memory/MEMORY.md` plus topic files, `<project>` being the repository path with every non-alphanumeric character turned into `-`.
  • **Never**: `~/.claude/.credentials.json`, `projects/<project>/*.jsonl`, `history.jsonl`, `file-history/`.

Codex

Home `~/.codex/` (or `$CODEX_HOME`); project `.codex/` in a trusted repository.

  • **Instructions**: `~/.codex/AGENTS.override.md`, else `~/.codex/AGENTS.md`; then in each directory from the repository root down to the working directory, one file: `AGENTS.override.md`, else `AGENTS.md`, else a name `project_doc_fallback_filenames` lists.
  • **Skills**: `~/.agents/skills/<name>/`, and `.agents/skills/` in the working directory and each parent up to the repository root; skip one that `[[skills.config]]` sets to `enabled = false`. **Prompts**: `~/.codex/prompts/*.md` (`$1`…`$9`, `$ARGUMENTS`, `$NAME`).
  • **Subagents**: `~/.codex/agents/*.toml`, `.codex/agents/*.toml` (`name`, `description`, `developer_instructions` as its prompt, `model`, `model_reasoning_effort`), or `[agents.<name>]` in `config.toml`.
  • **MCP**: `[mcp_servers.<name>]` in `~/.codex/config.toml` and `.codex/config.toml`, also inside `[profiles.<name>]`: `command`, `args`, `env`, `env_vars`, `cwd`; or `url`, `bearer_token_env_var`, `http_headers`, `env_http_headers`.
  • **Hooks**: `~/.codex/hooks.json`, `.codex/hooks.json`, or `[hooks]` in either `config.toml`, in Claude Code's shape, `timeout` in
Read more
@prism-shadow
Ships withpenguin-harness

🐧 Unified and Stable RSI Platform

Stars on GitHub

Momentum

stars in total
3.2k
Star history of Prism-Shadow/penguin-harness on GitHub, a chart by star-history.com

Other skills on penguin-harness.

a2ui

a2ui

Make a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that…

company-hr

company-hr

Run HR for a PenguinHarness organization — guarantee every employee has an enabled calendar event, hire and offboard employees…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react3d252k
@facebook@facebookInstall Skill

Questions about agent-porting.

Which coding agents can use agent-porting?
agent-porting installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.