Adopt files you copied by hand
Many projects began by copying an agent (subagent) or a skill from GitHub into .claude/ or .cursor/.
Those copies drift from their source, and nobody remembers where they came from.
palm takes them over. You name each source once, and the lock tracks the file from then on.
When you finish, palm owns both files. The identical skill needed nothing, and the edited agent is replaced with your version still in git:
$ palm install mattpocock/skills tddi ref ^1.2 saved to palm.yaml (latest tag v1.2.3); edit ref: to track main+ skill tdd .claude/skills/tdd/ 2 files from mattpocock/skills v1.2.3 cursor reads .claude/skills; no second copy adopted 2 files already there (the same content)1 installed. Commit palm.yaml, palm.lock.yaml and .claude/ together.$ palm install cursor/plugins/pstack comment-sickoi ref main saved to palm.yaml; edit ref: to pin a tag! agent comment-sicko .claude/agents/comment-sicko.md 1 file from cursor/plugins/pstack main (claude: installed; cursor: failed)x agent comment-sicko from cursor/plugins/pstack → cursor: refusing to overwrite .cursor/agents/comment-sicko.md palm install cursor/plugins/pstack agent:comment-sicko --force1 partial.$ palm install cursor/plugins/pstack comment-sicko --force~ agent comment-sicko .claude/agents/comment-sicko.md, .cursor/agents/comment-sicko.md 2 files from cursor/plugins/pstack main1 re-rendered.$ git status --short M .cursor/agents/comment-sicko.md?? .claude/agents/?? .gitignore?? palm.lock.yaml?? palm.yamlThe session ran against palm’s test fixtures, which mirror mattpocock/skills and cursor/plugins.
Before you start
Section titled “Before you start”- Commit your current files, so
git diffshows what palm changes. - Know or find the repository each copy came from.
- Set the targets with
palm init. It detects them from the folders you already have, and prints the evidence for each.
-
Take stock of the harness folders.
Terminal window find .claude .cursor .github .codex .gemini .opencode .agents -type f 2>/dev/nullFolder Holds files for .claude/agents,.claude/skills,.claude/rulesClaude Code .cursor/agents,.cursor/rulesCursor .github/agents,.github/instructionsGitHub Copilot .codex/agents,.gemini/agents,.opencode/agentsCodex, Gemini CLI and OpenCode .agents/skillsevery harness except Claude Code .mcp.json,.vscode/mcp.json,.cursor/mcp.jsonMCP servers -
Install each entity from its source over your copy.
Terminal window palm install mattpocock/skills tddA copy that matches what palm would write is adopted. palm records it in the lock and writes nothing. The comparison reads the frontmatter as data and ignores trailing whitespace, so a copy that differs only in quoting or line ends still matches.
-
Look at each file palm refuses.
Terminal window palm install cursor/plugins/pstack comment-sickopalm never overwrites a file it did not write. The error names the file and the command that replaces it. Compare your copy with the source. If your change matters, keep it in your own source under a new name (step 5), since the source’s entity keeps its own name.
-
Replace the rest with
--force.Terminal window palm install cursor/plugins/pstack comment-sicko --forcegit diff--forcereplaces your copy and records it in the lock.git diffshows exactly what changed. -
Move files you wrote yourself into an in-repo source.
palm has no import command for your own files.
git mvdoes the job and keeps the history.Terminal window mkdir -p agent-kit/agentsgit mv .claude/agents/release-captain.md agent-kit/agents/palm install ./agent-kit release-captainpalm declares
./agent-kitinpalm.yamland writes the agent back for every target, now as a generated file. From then on you editagent-kit/agents/release-captain.md, and a barepalm installrenders the change.
MCP servers and hooks work the same way.
A server or hook entry you wrote by hand that matches palm’s is adopted, never added a second time.
One that differs blocks the install until you pass --force, and palm keeps every other entry in the file.
A project with a skills-lock.json or an apm.yml gets one hint from palm init and palm check: palm 0.3 imports those files.
Until then, install each entry by name as above.
Check the result
Section titled “Check the result”palm get --filespalm checkpalm get --files lists every file palm now owns with the entity that wrote it.
palm describe <path> answers the same question for one file.
Next steps
Section titled “Next steps”- Publish your own source turns
./agent-kitinto a repository other projects install from. - Share a team baseline commits the result for everyone.