Ben Follington 75e1bac231 docs(godot skills): rewrite godot-interactive for bridge protocol v4.0
The godot-interactive skill was written against the pre-v4.0 bridge and had
drifted into being actively misleading:

- Documented the global /tmp/godot_* paths. v4.0 puts command/response/
  screenshot/instance files in a per-project directory (slug =
  <dir-name>-sha1(abspath)[:8], overridable with $GODOT_MCP_DIR) precisely
  because two projects running at once ate each other's commands with no error.
- Claimed screenshots are 640x360 while input is 1920x1080, and that screenshot
  pixels must never be used as click coordinates. The bridge now resizes the PNG
  to canvas size so that mapping is the identity.
- Claimed a 2s periodic screenshot timer. There is none — the readback was a
  recurring 15-40ms main-thread stall. Captures are on demand only, and
  screenshots_enabled defaults to false.
- Never mentioned that an occluded window renders nothing while the bridge keeps
  serving its last frame, which is the single most expensive trap in this loop.
- Missing game_console, game_call_method, game_type_text and the settle param
  entirely.

Rewritten around the four failure modes that silently lie to you, plus the
dev-console pattern (generalised out of par52) that makes the loop fast. Shorter
overall: eight near-identical walkthroughs of the same launch/click/screenshot
loop collapsed into one.

The bundled bridge template was still v3.0 with hardcoded global paths — i.e.
following the setup instructions installed a bridge the current server cannot
find. Replaced with the v4.0 bridge, with the disable env var generalised to
GODOT_MCP_DISABLE_BRIDGE.

Also added the two headless traps to the godot skill next to --check-only: a new
class_name failing until --import, and sandboxed headless Godot dying on
user://logs in a way that reads as a segfault or a test timeout.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AEYCkTVtm2L2wnRzLxyfxc
2026-08-30 13:42:21 +10:00
2026-02-07 18:53:57 +10:00
2025-09-04 19:37:42 +10:00
2025-07-05 14:25:31 +10:00
2025-07-08 16:21:02 -07:00

Terma (གཏེར་མ)

CC BY-SA 4.0

A highly-opinionated library of philosophy and process for developing software with LLMs.

Works with any agent that reads SKILL.md — Claude Code, Codex, Cursor, Gemini CLI, Zed, Copilot and others — and installs as a Claude Code plugin marketplace. Both read the same files.

Installation

Any agent — Claude Code, Codex, Cursor, Gemini CLI, Zed, Copilot and others, via the skills CLI:

npx skills add bfollington/terma

Add -s convergent-planning,surface-forks to take only some, or -l to list what's there without installing.

For every project on the machine rather than the current one, install globally:

npx skills add bfollington/terma -g --skill '*' --agent '*' -y

Skills land in ~/.agents/skills/ — that is the real content, and the directory to back up or edit. How each agent picks them up from there varies: some get a symlink farm of their own (~/.claude/skills/ is symlinks pointing back into .agents), while others — Codex among them — read ~/.agents/skills/ directly and get no per-agent directory at all. An empty ~/.codex/skills/ is not a failed install.

Update later with npx skills update -g. The repo is the source, so local edits under ~/.agents/skills/ are overwritten on the next update — change plugins/ and push instead.

Claude Code, as a plugin marketplace:

/plugin marketplace add <git-url-or-local-path>
/plugin install terma@terma
/plugin install terma@tsal

Or during development:

claude --plugin-dir ./plugins/terma --plugin-dir ./plugins/tsal

Both work off the same files — the skills CLI reads .claude-plugin/marketplace.json to find the plugin roots, so there is one source of truth and no duplication.

Pick one for Claude Code rather than running both: the plugin presents skills as terma:surface-forks and a global install presents the same skill as surface-forks, so together they show up twice. The one thing only the plugin carries is plugins/terma/agents/ — the skills CLI installs skills, not subagents, so a global install leaves those 6 behind. Copy them to ~/.claude/agents/ if you want them.

What's in it

Skills, not procedures. Each one is an index card of crystallized wisdom meant to change how a situation is seen before anything is done — dense enough to be worth loading, narrow enough to compose with the others. Most fire on their own when the situation calls for them.

Thinking about change

Skill The idea
surface-forks Find what a change collides with before making it, then name the routes through
convergent-planning A plan is a sequence of ambiguity collapses; a step nothing could contradict is not a step
concurrent-change What can happen at once is decided by what the pieces must agree on
idea-to-prototype Open, then close, then open — and find the fastest thing that would settle it

Thinking about code

Skill The idea
writing-code Values over places, data over ceremony, the program as the story of what it does
domain-modeling The model is a claim about the world; the words are the model
decomposition Boundaries isolate change, not enable reuse — cut by what changes together
implement Always know the distance to the last checkpoint; stop rather than compensate
code-review Not whether the code is good — what it will cost the next person to change it
investigate-debug The discipline of not knowing yet; every action should divide the possibilities

Getting oriented, and everything else

Skill The idea
orient Build a model that predicts, not a summary that covers
research Answer the question actually asked, at a confidence stated honestly
ideate A deck of moves — good thinking is playing the right card at the right time
authoring-skills Say the thing that is not already known; cut rather than append
skill-improver Turn real friction into a change, usually a sharper sentence rather than a new one

plan routes to whichever of the planning skills the moment calls for.

Patterns

  • feature dev: orient, plan, surface-forks, implement, code-review
  • research: orient, research
  • something is broken: investigate-debug
  • a new idea: ideate, idea-to-prototype

Structure

.claude-plugin/marketplace.json   # Marketplace manifest
plugins/terma/                    # Process & philosophy plugin
  .claude-plugin/plugin.json      # Plugin manifest
  agents/                         # Subagent definitions
  skills/                         # One directory per skill, each a self-contained SKILL.md
plugins/tsal/                     # Domain-specific skills plugin
  .claude-plugin/plugin.json      # Plugin manifest
  skills/                         # Domain skills (bevy, godot, strudel, etc.)

Customizing

Edit anything under plugins/terma/ or plugins/tsal/. Each skill is self-contained — there are no shared includes to chase, so a skill can be rewritten or deleted without touching anything else. authoring-skills describes what a good one looks like if you want to add your own.

CANDIDATES.md lists skills worth writing and the reasoning for each, deliberately unwritten until real friction calls for them.

License

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

S
Description
This skill should be used when working with Shadertoy shaders, GLSL fragment shaders, or creating procedural graphics for the web. Use when writing .glsl…
Readme CC-BY-SA-4.0 490 KiB
Languages
GDScript 37.1%
Shell 26.6%
Python 15.5%
Lua 8.6%
JavaScript 7.9%
Other 4.3%