{
  "markdown": "# Terma (གཏེར་མ)\n[![CC BY-SA 4.0][cc-by-sa-shield]][cc-by-sa]\n\n[cc-by-sa]: http://creativecommons.org/licenses/by-sa/4.0/\n[cc-by-sa-shield]: https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg\n\nA highly-opinionated library of philosophy and process for developing software with LLMs.\n\nWorks with any agent that reads `SKILL.md` — Claude Code, Codex, Cursor, Gemini CLI,\nZed, Copilot and others — and installs as a Claude Code plugin marketplace. Both read\nthe same files.\n\n## Installation\n\n**Any agent** — Claude Code, Codex, Cursor, Gemini CLI, Zed, Copilot and others,\nvia the [skills CLI](https://skills.sh):\n\n```\nnpx skills add bfollington/terma\n```\n\nAdd `-s convergent-planning,surface-forks` to take only some, or `-l` to list what's\nthere without installing.\n\nFor every project on the machine rather than the current one, install globally:\n\n```\nnpx skills add bfollington/terma -g --skill '*' --agent '*' -y\n```\n\nSkills land in `~/.agents/skills/` — that is the real content, and the directory to\nback up or edit. How each agent picks them up from there varies: some get a symlink\nfarm of their own (`~/.claude/skills/` is symlinks pointing back into `.agents`),\nwhile others — Codex among them — read `~/.agents/skills/` directly and get no\nper-agent directory at all. An empty `~/.codex/skills/` is not a failed install.\n\nUpdate later with `npx skills update -g`. The repo is the source, so local edits under\n`~/.agents/skills/` are overwritten on the next update — change `plugins/` and push\ninstead.\n\n**Claude Code**, as a plugin marketplace:\n\n```\n/plugin marketplace add <git-url-or-local-path>\n/plugin install terma@terma\n/plugin install terma@tsal\n```\n\nOr during development:\n\n```\nclaude --plugin-dir ./plugins/terma --plugin-dir ./plugins/tsal\n```\n\nBoth work off the same files — the skills CLI reads `.claude-plugin/marketplace.json`\nto find the plugin roots, so there is one source of truth and no duplication.\n\nPick one for Claude Code rather than running both: the plugin presents skills as\n`terma:surface-forks` and a global install presents the same skill as `surface-forks`,\nso together they show up twice. The one thing only the plugin carries is\n`plugins/terma/agents/` — the skills CLI installs skills, not subagents, so a global\ninstall leaves those 6 behind. Copy them to `~/.claude/agents/` if you want them.\n\n## What's in it\n\nSkills, not procedures. Each one is an index card of crystallized wisdom meant to change how a\nsituation is seen before anything is done — dense enough to be worth loading, narrow enough to\ncompose with the others. Most fire on their own when the situation calls for them.\n\n**Thinking about change**\n\n| Skill | The idea |\n|-------|----------|\n| `surface-forks` | Find what a change collides with before making it, then name the routes through |\n| `convergent-planning` | A plan is a sequence of ambiguity collapses; a step nothing could contradict is not a step |\n| `concurrent-change` | What can happen at once is decided by what the pieces must agree on |\n| `idea-to-prototype` | Open, then close, then open — and find the fastest thing that would settle it |\n\n**Thinking about code**\n\n| Skill | The idea |\n|-------|----------|\n| `writing-code` | Values over places, data over ceremony, the program as the story of what it does |\n| `domain-modeling` | The model is a claim about the world; the words are the model |\n| `decomposition` | Boundaries isolate change, not enable reuse — cut by what changes together |\n| `implement` | Always know the distance to the last checkpoint; stop rather than compensate |\n| `code-review` | Not whether the code is good — what it will cost the next person to change it |\n| `investigate-debug` | The discipline of not knowing yet; every action should divide the possibilities |\n\n**Getting oriented, and everything else**\n\n| Skill | The idea |\n|-------|----------|\n| `orient` | Build a model that predicts, not a summary that covers |\n| `research` | Answer the question actually asked, at a confidence stated honestly |\n| `ideate` | A deck of moves — good thinking is playing the right card at the right time |\n| `authoring-skills` | Say the thing that is not already known; cut rather than append |\n| `skill-improver` | Turn real friction into a change, usually a sharper sentence rather than a new one |\n\n`plan` routes to whichever of the planning skills the moment calls for.\n\n## Patterns\n\n- feature dev: `orient`, `plan`, `surface-forks`, `implement`, `code-review`\n- research: `orient`, `research`\n- something is broken: `investigate-debug`\n- a new idea: `ideate`, `idea-to-prototype`\n\n## Structure\n\n```\n.claude-plugin/marketplace.json   # Marketplace manifest\nplugins/terma/                    # Process & philosophy plugin\n  .claude-plugin/plugin.json      # Plugin manifest\n  agents/                         # Subagent definitions\n  skills/                         # One directory per skill, each a self-contained SKILL.md\nplugins/tsal/                     # Domain-specific skills plugin\n  .claude-plugin/plugin.json      # Plugin manifest\n  skills/                         # Domain skills (bevy, godot, strudel, etc.)\n```\n\n## Customizing\n\nEdit anything under `plugins/terma/` or `plugins/tsal/`. Each skill is self-contained — there are\nno shared includes to chase, so a skill can be rewritten or deleted without touching anything else.\n`authoring-skills` describes what a good one looks like if you want to add your own.\n\n`CANDIDATES.md` lists skills worth writing and the reasoning for each, deliberately unwritten\nuntil real friction calls for them.\n\n## License\n\nThis work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).\n",
  "bytes": 5730,
  "sha": "9cb40ef3a26536cfea7aa978e52bde6dec471a0a33d06b543933679dd5a0f04c",
  "repo_slug": "bfollington/terma",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/skl_bfollington_terma_shadertoy_aac3116e/readme"
}