A response style for coding agents (Claude Code, Codex, Gemini) that talk to developers in Spanish: direct, concise and with the concrete thing at hand, so the dev does not have to ask again for a summary or an example.
Status: experiment.
ste-esis a working name until the project settles. If the trial goes well, we decide where it goes next.
The rules adapt ASD-STE100 (the controlled English of aircraft maintenance manuals) to Spanish, plus text diagrams only when the answer has structure. They are the exact text measured by the eval. Vocabulary comes from a glossary with one word per concept.
- Precision wins: no rule justifies dropping a fact or a condition.
- The answer goes in the first sentence.
- Include the command or the concrete example.
- Short sentences.
- Active voice.
- No filler.
- Voseo (Rioplatense Spanish).
- Diagrams only for 3 or more related parts, without repeating them in the text.
The rules themselves are in Spanish, because they shape Spanish answers. Details: skills/ste-es/SKILL.md.
npx skills add joa-adhoc/ste-es -g -y
node ~/.agents/skills/ste-es/scripts/install.mjsThis installs two skills: ste-es and html-plan (see Plans). To install only ste-es, add --skill ste-es.
A skill is loaded on demand, so installing it is not enough: in the eval, an installed but inactive skill was never loaded. install.mjs turns it on for every session by adding one plain-text block to the global instructions of each agent it finds:
- Claude Code:
~/.claude/CLAUDE.md - Codex:
~/.codex/AGENTS.md - Gemini CLI:
~/.gemini/GEMINI.md
It shows what it will change and asks before writing. It backs up each file first (*.ste-es-backup-<time>) and never deletes those backups. It is idempotent and leaves the rest of those files alone. It exits with 1 when you decline, when there is no terminal to ask in, when a write fails, or when a file could not be checked.
node ~/.agents/skills/ste-es/scripts/install.mjs --dry-run # only show the plan
node ~/.agents/skills/ste-es/scripts/install.mjs --yes # apply without asking
node ~/.agents/skills/ste-es/scripts/install.mjs --check # what is installed in each agent (exit 1 if anything is missing)
node ~/.agents/skills/ste-es/scripts/install.mjs --uninstall # remove the block and the old hook (backups stay)Skill scanners can flag a skill whose script writes to an agent's global configuration, because it is how a persistent prompt injection works. This is what install.mjs does and does not do:
- It writes only the block shown above, between
<!-- ste-es:start -->and<!-- ste-es:end -->. The block is text: it asks the agent to load the skill. - It never runs on its own. It adds no hooks, so nothing from this repo executes when a session starts. Updating the skill changes text, not code that runs by itself.
- You run it, see the plan, and confirm. Without a terminal (for example, when an agent runs it) it only shows the plan;
--yesis for scripts you control.
Version 1 added a SessionStart hook that ran this script in every session. If you installed version 1, run install.mjs again: it removes that hook. Until then the hook still starts node in each session, but it only shows you a message with that command. The message goes to you, not to the model.
To skip the script, paste the block into the files above by hand. The skill works the same.
/html-plan <what to build> writes an implementation plan as one interactive HTML page: a tree of claims, each shown by a mockup, state machine, call stack, schema or code, with the decisions placed where they matter. Its structure is used as is. Its prose follows the ste-es rules in Spanish instead of English STE, with a budget of about 500 words: see patches/html-plan-words.md.
Plans use the Adhoc look: themes/adhoc.css holds the brand values and maps html-plan's variables to them, dark only: the page stays dark even where the host forces light, as claude.ai does. To go back to html-plan's own colors, run node scripts/sync-html-plan.mjs --theme anthropic.
skills/html-plan/ is a copy of html-plan by Thariq Shihipar (MIT), pinned to the commit in skills/html-plan/UPSTREAM. Two changes on top: its "Words" section is replaced by the patch above, and the theme is appended to its CSS. To update it, run node scripts/sync-html-plan.mjs, review the diff and commit.
evals/ compares plain Claude Code with this skill: 18 cases, 3 runs per case, isolated Claude Code, Sonnet.
| Plain Claude Code | ste-es | |
|---|---|---|
| Answers in the first sentence | 31% | 89% |
| Follow-up questions | 69% | 54% |
| Tokens to understand | 92.5k | 78.1k |
| Facts / conditions kept | 99.7% / 99.4% | 98.3% / 98.2% |
| Incorrect claims | 28 | 5 |
| Blind preference | 23 | 31 |
Limits: one model only, and the judge and the reader are Claude too. Earlier versions and their results are in the git history.