one agent,
every tool

Write it once. morf converts and installs your agents, skills, rules, prompts, hooks and MCP servers into every AI coding tool - each in its native format.

$ npm i -g @romivol/morf
View on GitHub →
ClaudeCursorKilo CopilotWindsurfOpenCode
morf — install
# why

Every AI tool speaks its own dialect.

A skill, an agent, a rule — each tool wants a different shape, a different folder, different frontmatter. Today you copy files around and hand-fix each one, then do it again for the next tool. morf is the translator: one command, converted for every tool you use.

# conversion

The same agent, reshaped for each tool.

Others copy your file as-is and hope it works. morf rewrites the frontmatter, permissions and paths into each tool's own format. Pick a target to see what morf produces:

sourcebug-finder.md
---
name: bug-finder
description: Finds bugs
tools: [Read, Grep, Bash]
model: sonnet
---
# Bug Finder
Reviews diffs for logic
errors and edge cases…
morfed →cursor

    
# features

Built to move between tools.

convertrewrites, doesn't copy

Real format conversion

Frontmatter, permissions, event names and paths are rewritten per tool — the only manager that truly adapts agents.

primitivesskills · agents · rules · prompts · hooks · mcp

Every primitive

Not just rules, not just skills — all of it, each written to the shape its tool expects.

targets

Every major tool

Claude, Cursor, Kilo, Copilot, Windsurf and OpenCode — install to one, several, or all at once.

±no-config

Zero config

No manifest to learn. morf install <url> and you're done. A manifest is optional, never required.

any-host

Any git host

GitHub, GitLab, or any git URL — public or private. Install by URL or short name.

MIT

Open source

Zero runtime dependencies. Auditable, forkable, and yours.

# how it works

Clone, parse, convert, route.

morf reads each primitive once, then emits a native version for every target you asked for.

01
clone
fetch the repo
02
parse
read primitives + frontmatter
03
convert
reshape per tool
04
route
write to each native path
primitiveclaudecursorkilocopilotwindsurfopencode
Skills
Agents
Rules
Prompts
Hooks
MCP
✓ converted  ·  ↝ routed  ·  — not supported by tool
# commands

Simple commands, all the way down.

$ morf install <url>
clone & convert into every detected tool
$ morf install <repo> --agent <name> --target claude
install one agent into Claude
$ morf install <repo> --skill <name> --target cursor
install one skill into Cursor
$ morf list --all
see what's installed, in every tool
$ morf update --all
pull latest for everything you installed
$ morf config default <tool>
set your primary target once
# who it's for

Made for people who switch tools.

"I built a great agent in Claude - now I want it in Cursor too."
One command. morf reshapes its frontmatter and drops it in, correctly.
"Our team uses three different AI tools and everyone's config drifts."
Install from one repo to all tools — the same source, converted for each.
"I keep a personal library of skills and rules I reuse everywhere."
Keep them in one git repo. morf installs them anywhere in seconds.
# comparison

One command. Every tool. Every primitive.

multi-toolconverts agentsall primitiveszero-configany git host
morf
APM
Ruler
copy-paste by hand

Ruler does rules. APM does packaging. morf does all of it — and it's the only one that actually converts your agents.

# faq

Good to know.

Does morf change my original files?

No. morf reads your source repo and writes converted copies into each tool's directory. Your source is never modified.

What happens for a tool that doesn't support a primitive?

morf marks it and skips only that piece — everything else still installs. For example, a tool without a hooks system shows "not supported" for hooks and installs the rest normally.

Do I need a manifest or config file?

No. morf install <url> works with zero config. A default target and optional manifest exist for convenience, but nothing is required to start.

Which git hosts work?

Any. GitHub, GitLab, self-hosted — public or private. Install by full URL, or by short name once a repo is in the registry.

Will it overwrite something I edited locally?

No. If morf detects local changes to an installed item, it skips it and tells you to re-run with --force if you really want to overwrite.

What happens when a repo updates?

Re-run morf install <url> to pull the latest version. morf updates installed items in place, skips anything you've edited locally, and leaves everything else untouched.

# roadmap

Where morf is headed.

shippedSkills + agents conversion for all 7 tools — Claude, OpenCode, Kilo, Cursor, Copilot, Windsurf & Codex (Codex is skills-only by design — it has no native per-agent file format)
nextRules, prompts, hooks & MCP-server conversion (full 6-primitive matrix)
nextPublic registry with search & short-name installs
nextLockfile & morf sync for reproducible setups
nextVersioning & tags · morf publish flow

Write once. morf it everywhere.

$ npm i -g @romivol/morf