{
  "markdown": "<p align=\"center\">\n  <img src=\".github/assets/hero.png\" alt=\"Attention Control: air traffic control discipline for agent output, written for a reader with ADHD. Two flight progress strips. The unstyled reply overruns a single box and falls off the edge. The Attention Control reply splits into four fields: ACTION, EDIT, STATE, NEXT.\" width=\"100%\">\n</p>\n\n<p align=\"center\">\n  <strong>Attention Control</strong><br>\n  <em>Air traffic control discipline for agent output.</em><br>\n  <em>Written for a reader with ADHD.</em>\n</p>\n\n<p align=\"center\">\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/github/license/aaddrick/attention-control?style=flat\" alt=\"License\"></a>\n  <a href=\".github/workflows/plugin-load-check.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/aaddrick/attention-control/plugin-load-check.yml?label=plugin%20loads&style=flat\" alt=\"Plugin load check\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.linkedin.com/in/aaddrick/\">Connect on LinkedIn!</a>\n</p>\n\n<p align=\"center\">\n  <strong>English</strong> ·\n  <a href=\".github/readme/README.zh-CN.md\">简体中文</a> ·\n  <a href=\".github/readme/README.ja.md\">日本語</a> ·\n  <a href=\".github/readme/README.ko.md\">한국어</a> ·\n  <a href=\".github/readme/README.vi.md\">Tiếng Việt</a> ·\n  <a href=\".github/readme/README.pt-BR.md\">Português (BR)</a>\n</p>\n\n## Install\n\n<details open>\n<summary><strong>Claude Code</strong></summary>\n\nClaude Code is the only agent here with a native output style slot. Run these\ntwo commands in your terminal:\n\n```bash\nclaude plugin marketplace add aaddrick/attention-control\n```\n\n```bash\nclaude plugin install attention-control@attention-control\n```\n\nThen run `/config`, select **Output style**, and pick **Attention Control**. It\ntakes effect after `/clear` or the next session.\n\nTo skip the picker, add `outputStyle` to `~/.claude/settings.json`. It is a\ntop-level key. It does not go inside `env`, `permissions`, or any other block:\n\n```json\n{\n  \"model\": \"opus\",\n  \"env\": { \"EXAMPLE_VAR\": \"1\" },\n  \"outputStyle\": \"Attention Control\"\n}\n```\n\n`model` and `env` stand in for keys you may already have. Keep them. Add the\n`outputStyle` line beside them.\n\nFor one session instead of every session, use the skill the plugin also ships:\n\n```\n/attention-control:attention-control\n```\n\nSay \"stop attention control\" to turn it off.\n\n</details>\n\n<details>\n<summary><strong>Codex</strong></summary>\n\nCodex has no output style slot, so the rules ship as a skill.\n\n```bash\ncodex plugin marketplace add aaddrick/attention-control --ref main\n```\n\n```bash\ncodex plugin add attention-control@attention-control\n```\n\nInside Codex, `/plugins` opens the plugin browser instead.\n\nStart a new thread, then type the skill:\n\n```\n$attention-control:attention-control\n```\n\nCodex prefixes a plugin skill with the plugin name. Say \"stop attention control\"\nto turn it off. For every turn instead, put the always-on snippet from\n[INSTALL.md](./INSTALL.md#the-always-on-snippet) in `~/.codex/AGENTS.md`.\n\n</details>\n\n<details>\n<summary><strong>Cursor, Gemini CLI, Copilot, Zed, and manual install</strong></summary>\n\nSee [INSTALL.md](./INSTALL.md). None of them has an output style slot, so the\nrules ship as a skill, a rules file, or an `AGENTS.md` block. On a skill route,\ntype `/attention-control` and say \"stop attention control\" to turn it off.\n\n</details>\n\n## What it does\n\nAir traffic control phraseology exists for one reason: a distracted human under\nload will mishear an instruction. Aviation solved this with two disciplines.\nControlled vocabulary makes each word mean one thing. Fixed message shape puts\nthe instruction first and the background last.\n\nThis style applies both disciplines to your coding agent. The agent leads with\nthe action you can run, and writes each sentence so one word means one thing.\n\nThe style targets one reader: a reader with ADHD. That reader is where the shape\nrules come from. See [Why the shape rules exist](#why-the-shape-rules-exist).\n\n## What changes\n\n<table>\n<tr>\n<td width=\"50%\">\n\n### Before\n\n> Great question! Let me take a look. It seems like the auth flow has a few\n> moving pieces here. Looking at `src/auth.ts`, the token verification logic\n> could possibly be utilizing a deprecated API — the `verifyToken` function\n> around lines 42-58 has been implemented against an older `jsonwebtoken`\n> signature. One approach that might be considered would be updating the\n> package and refactoring that function. By the way, your dependency versions\n> in general could probably use a review at some point. Hope this helps! Let me\n> know if you'd like me to dig deeper into any of this.\n\n</td>\n<td width=\"50%\">\n\n### After\n\n> Run `npm install jsonwebtoken@latest`.\n>\n> I changed `src/auth.ts:47`. `verifyToken` now names the algorithm:\n>\n> `jwt.verify(token, secret, { algorithms: [\"HS256\"] }, callback);`\n>\n> Run `npm test -- auth.spec.ts`. It takes about 10 seconds.\n>\n> The old call named no algorithm. `jsonwebtoken` v9 rejects an unsigned token\n> unless you pass `algorithms: [\"none\"]`.\n>\n> Next: paste the first failing line if a test fails.\n\n</td>\n</tr>\n</table>\n\n## The two layers\n\n**Shape** decides what you say and in what order. 11 rules:\n\n1. Lead with the next action.\n2. Do the work you own.\n3. Number multi-step work.\n4. End with one concrete next action.\n5. Suppress tangents.\n6. Restate state every turn.\n7. Give time estimates in concrete units.\n8. Show what now works.\n9. State errors flat.\n10. Cap lists at 5 items.\n11. No preamble, no recap, no closer.\n\n**Language** decides how each sentence reads. The short version:\n\n- One word, one meaning. One action, one verb. No rotating synonyms.\n- Standard verbs: \"check\", \"make sure\", \"start\", \"stop\", \"use\", \"show\", \"find\", \"change\", \"remove\", \"need\".\n- Active voice. Name the actor.\n- Simple tenses only. No perfect tense, no auxiliary stacks.\n- 20 words per instruction, 25 per explanation. Noun clusters capped at 3 words.\n\nFull text: [`output-styles/attention-control.md`](./output-styles/attention-control.md).\n\n## Why the shape rules exist\n\nFive facts about ADHD reading drive all 11 shape rules. Each fact below names\nthe rules it produces.\n\n| The fact | What the agent does |\n|---|---|\n| **Working memory is small.** Anything not on screen is gone. | It never writes \"keep in mind X\". It restates the state every turn: \"Step 3 of 5 done: I changed the schema. Next: run `scripts/backfill.py`.\" (rules 6, 10) |\n| **Knowing the answer is not doing the answer.** Work dies in the gap between the two. | It does the work it owns instead of handing it back. It gives the command, not the label. \"Add the missing header\" is a label. `Authorization: Bearer ${token}` is a fix. (rules 1, 2, 3) |\n| **Starting is the hardest step.** | The first line is small, obvious, and doable now. The last line names one action that takes under two minutes. \"Open the file\" counts. (rules 1, 4) |\n| **Time estimates feel uniform.** \"A bit of work\" and \"a few hours\" register the same. | It writes \"about 15 minutes if tests cover this, an afternoon if not\". It never writes \"some work\". (rule 7) |\n| **Dopamine is scarce.** A buried win does not register. | After a change, it names the result in concrete terms: \"Login works with magic links. Run `npm run dev` and open `/login`.\" (rule 8) |\n\nTwo more rules protect attention itself. Rule 5 suppresses tangents, so one open\nthread stays one open thread. Rule 11 removes the preamble and the closer, so\nthe answer starts on line 1.\n\nThis is why the style is not \"be terse\". Terseness that drops the command, the\nnumber, or the condition costs the reader a round trip, and a round trip costs\nthe thread. Rule 9 follows from the same logic: an error gets a location, a\ncause, and a fix, with no \"Uh oh\" in front of it. Alarm is not information, and\nit competes with the information for the same attention.\n\nYou need no ADHD diagnosis for this to help. A tired reader, a reader on a\nphone, and a reader with 40 open tabs all read the same way.\n\n## What it leaves alone\n\nFour targets, one rule each. Code, commands, file paths, identifiers, and error\nmessages stay verbatim. Quoted text stays verbatim. Code comments and commit\nmessages match the style of the repository around them. Only the prose the agent\nwrites itself follows this style.\n\nThose are instructions, not a lock. An output style is system prompt text, and\nnothing outside the model enforces it. Treat the boundary as a strong default,\nand check the output when it matters.\n\nAccuracy beats brevity. A rule never removes a fact, a number, a condition, or a\nscope qualifier. A hedge that carries real uncertainty stays.\n\n## Evals\n\nThe harness compares response quality against an unstyled baseline. It does not\nmeasure length.\n\n```bash\npython3 scripts/run_evals.py validate\n```\n\n```bash\npython3 scripts/run_evals.py plan --trials 3\n```\n\n24 cases, 6 scored dimensions, and a release gate that blocks a candidate that\nregresses correctness or safety.\n\nThe judge is the weak point, so the harness targets it. `blind` hides the\ncondition and balances the positions. The judge scores every group twice with\nthe order reversed, then reports how often the two passes disagree. The runner\nruns in an empty directory and reads none of your config. Design notes and the\nmeasurements behind them: [evals/README.md](./evals/README.md).\n\n## Tune it\n\nFork, edit `output-styles/attention-control.md`, then regenerate every\nagent-specific copy:\n\n```bash\npython3 scripts/sync_style.py\n```\n\nSwap your copy in, one command at a time:\n\n```bash\nclaude plugin uninstall attention-control\n```\n\n```bash\nclaude plugin marketplace remove attention-control\n```\n\n```bash\nclaude plugin marketplace add <your-username>/attention-control\n```\n\n```bash\nclaude plugin install attention-control@attention-control\n```\n\n## Credits\n\nThis style combines two existing works. Neither author takes part in this\nproject.\n\n**Shape layer:** [`i-have-adhd`](https://github.com/ayghri/i-have-adhd) by\nAyoub G. (MIT). The eval harness derives from the same project.\n\n**Language layer:** the\n[`asd-ste100` output style](https://gist.github.com/L1nefeed/4164ecaaf77879e76dca3c06f142f1c2)\nby [L1nefeed](https://github.com/L1nefeed), itself a condensation of\n[ASD-STE100](https://www.asd-ste100.org/) Simplified Technical English, Issue 9.\n\nThis project reproduces no text from the ASD specification. The ASD does not\ncertify, endorse, or sponsor it. Details in [NOTICE.md](./NOTICE.md).\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n",
  "bytes": 10464,
  "sha": "9b160a9978e7bf3a5c15a14980c909d3913147494513acbe29447103201259a9",
  "repo_slug": "aaddrick/attention-control",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_aaddrick_attention_control_4f71dc3c/readme"
}