Files
Gabriel Brown 34bc1663ed Give opencode the same agent instructions, rules and MCP servers as Claude Code
opencode already reads skills from ~/.claude/skills and ~/.agents/skills, so
those needed nothing. The rest did.

The manifest now links agents/AGENTS.md to ~/.config/opencode/AGENTS.md as
well, beside the Claude Code and Codex names.

opencode keeps its MCP servers in its own JSON config, with no file to point
a symlink at, so link-mcp now writes them there too. It builds one entry per
row of user/agents/mcp/servers with the same tokens it gives Claude Code,
and adds ~/.claude/rules/*.md under instructions, since opencode does not
read that directory by itself. Only those two keys change. The file is
written private and swapped in whole because it now holds tokens, and a
config with JSONC comments is left alone with a warning rather than
rewritten without them.
2026-10-07 01:06:44 -04:00

55 lines
3.3 KiB
Plaintext

# What in user/ goes where, and in what form.
#
# <kind> <source under user/> <destination>
#
# kind is one of:
# link symlink the destination at the source, so editing either edits the
# repository. Use this for anything you want to update once and have
# change everywhere -- and for anything a tool writes into, because a
# skill installed on this machine should land in the checkout.
# linkdir symlink each child of the source into the destination, which is
# created as a real directory. Use this where the destination holds
# more than this one source -- ~/.claude/skills also carries Panama's
# own shipped skills -- so it cannot be a symlink to any single place.
# copy copy once, and never touch it again if the destination exists. Use
# this for files a machine legitimately diverges on.
#
# Lines beginning with # are comments and blank lines are ignored. ~ in a
# destination is this user's home.
#
# Nothing here is linked unless this machine said yes to the interview's
# question about personal content -- see setup/scripts/link-user. That is what
# keeps a repository somebody else can clone from also being one that installs
# Gabriel's agent instructions on their machine.
# ── Agents ───────────────────────────────────────────────────────────────────
# One file, three names. Claude Code reads CLAUDE.md, Codex and opencode read
# AGENTS.md, and before this they were byte-identical copies waiting to disagree.
link agents/AGENTS.md ~/.claude/CLAUDE.md
link agents/AGENTS.md ~/.codex/AGENTS.md
link agents/AGENTS.md ~/.config/opencode/AGENTS.md
# Skills, at both paths that look for them. Each tracked skill is linked from
# this checkout so edits stay shared and `panama update` offers to commit them.
#
# Both destinations also hold skills Panama itself ships, put there by the
# link-skills stage, so both are real directories with one link per skill. This
# stage runs after that one, so a personal skill wins a name collision.
linkdir agents/skills ~/.agents/skills
linkdir agents/skills ~/.claude/skills
link agents/rules ~/.claude/rules
# ── SSH ──────────────────────────────────────────────────────────────────────
# Host aliases only. Keys are per-machine and are never tracked; this is the
# file that makes `ssh server` work the moment a machine is set up, and it is
# what the SSH Hosts launcher command reads.
link ssh/config ~/.ssh/config
# ── Espanso ──────────────────────────────────────────────────────────────────
# The personal expansion triggers. Copied rather than linked, because this is a
# file each machine may add its own triggers to. It lands before setup-identity
# runs, and that stage only seeds a file that does not exist yet, so what is
# tracked here wins over the name and email the interview would have written.
copy espanso/identity.yml ~/.config/espanso/match/identity.yml