# How the 'i-have-adhd' AI Skill Modifies Coding Assistant Output for Focus and Action

> Discover how the i-have-adhd AI skill transforms coding assistant output into concise, actionable steps. Boost your focus and code faster with this ADHD-friendly tool.

- Repository: [Ayoub Ghriss/i-have-adhd](https://github.com/ayghri/i-have-adhd)
- Tags: deep-dive
- Published: 2026-09-02

---

**The 'i-have-adhd' AI skill is a persistent output-shaping layer that rewrites every model reply into a concise, numbered, immediately actionable format—eliminating preambles, closing pleasantries, and tangential prose so developers with ADHD can execute without cognitive overhead.**

The `i-have-adhd` skill, developed in the repository `ayghri/i-have-adhd`, transforms how coding assistants communicate by injecting behavioral rules directly into the system prompt. Unlike prompting tricks that must be repeated each turn, this skill creates durable, session-wide changes to the assistant's voice—making every response scannable, bounded, and executable in a single glance.

---

## Source of Truth: SKILL.md Defines All Behavioral Rules

All ten directives that reshape the assistant's output live in a single canonical file: **[`skills/i-have-adhd/SKILL.md`](https://github.com/ayghri/i-have-adhd/blob/main/skills/i-have-adhd/SKILL.md)**.

This markdown file enumerates concrete, enforceable rules including:

- **"Lead with the next action"** — the very first line must be immediately executable
- **"Number multi-step tasks"** — sequential numbering for any procedure with more than one step
- **"Give specific time estimates"** — concrete duration predictions, not vague ranges
- **"No preamble or closing pleasantries"** — eliminate "Sure, I'd be happy to help..." and "Let me know if you need anything else"
- **One bounded action per step** — each numbered item must be completable in isolation
- **End with exactly one more short actionable item** — a final, concrete next move

The file also contains a **Persistence** section instructing the model to maintain this style until explicitly disabled.

---

## Plugin Architecture: How Rules Inject Into the System Prompt

The OpenCode plugin **`.opencode/plugins/i-have-adhd.mjs`** implements the injection mechanism. It reads [`SKILL.md`](https://github.com/ayghri/i-have-adhd/blob/main/SKILL.md), strips its YAML front-matter, and appends the rule body to the model's system prompt via the `experimental.chat.system.transform` hook.

### Two Activation Modes

The plugin supports both on-demand and persistent activation:

| Mode | Trigger | Behavior |
|------|---------|----------|
| **On-demand** | `/i-have-adhd` command | Rules load for current session only |
| **Always-on** | `~/.config/opencode/.i-have-adhd-always` file exists | Rules injected on every turn automatically |

### The Injection Process

When activated, the plugin:

1. Concatenates a short header ("ADHD MODE ACTIVE …") with the full rule body from [`SKILL.md`](https://github.com/ayghri/i-have-adhd/blob/main/SKILL.md)
2. Passes this combined string to `experimental.chat.system.transform`
3. The OpenCode runtime appends it to the system prompt sent to the language model

This mirrors the behavior in **`hooks/always-on.mjs`** (used by Claude Code), which demonstrates equivalent always-on injection logic that the OpenCode plugin replicates.

---

## Activation and Deactivation Commands

### Activate On-Demand

```bash
/i-have-adhd

```

Runs the command to load ADHD mode for the current session only.

### Enable Always-On Mode

```bash
touch ~/.config/opencode/.i-have-adhd-always

```

Creates the flag file that triggers automatic rule injection on every assistant turn, persisting across sessions.

### Disable Always-On Mode

```bash
rm ~/.config/opencode/.i-have-adhd-always

```

Removes the flag file, returning to standard assistant behavior.

---

## Transformed Output: Before and After Effect

Because the rules become part of the system prompt, the language model automatically restructures every reply. Here's how the 'i-have-adhd' AI skill modifies coding assistant output in practice:

**Generic response:**
> "I'd be happy to help you fix the authentication bug. First, you'll want to make sure you have the right dependencies installed. The jsonwebtoken package is commonly used for this. Once that's set up, you can look at your auth file and make some changes to the verifyToken function. Let me know if you need more assistance!"

**ADHD-mode response:**

```

Run `npm install jsonwebtoken`, then edit `src/auth.ts:42`.

1. Open `src/auth.ts`.
2. Replace `verifyToken` (lines 42‑58) with the snippet below.
3. Run `npm test -- auth.spec.ts`.

About 15 minutes if tests already exist.
Login now works with magic links. Try: `npm run dev`, open `/login`.

```

The transformation enforces four structural requirements:
1. **Immediate executable lead** — no throat-clearing, no context-gathering questions
2. **Numbered single-action steps** — each item bounded and completable
3. **Concrete time estimate** — "About 15 minutes" not "a while"
4. **Single final action** — one more concrete move, then hard stop

---

## Persistence Model: Session vs. Permanent Control

The skill uses two layered persistence mechanisms:

- **Model-level persistence**: The rules themselves instruct the assistant to maintain ADHD mode until the user says "stop adhd mode" or "normal mode"—allowing the model to exit for the current session
- **File-level persistence**: The `~/.config/opencode/.i-have-adhd-always` flag controls whether the plugin automatically re-injects rules on every new session

This design lets users toggle behavior by utterance (fast, temporary) or by filesystem state (durable, cross-session).

---

## Key Files and Their Roles

| File | Purpose |
|------|---------|
| [`skills/i-have-adhd/SKILL.md`](https://github.com/ayghri/i-have-adhd/blob/main/skills/i-have-adhd/SKILL.md) | Canonical rule set defining output transformation requirements |
| `.opencode/plugins/i-have-adhd.mjs` | Plugin implementing command handler and system prompt injection |
| [`opencode.json`](https://github.com/ayghri/i-have-adhd/blob/main/opencode.json) | Plugin declaration for OpenCode runtime auto-loading |
| `hooks/always-on.mjs` | Reference implementation showing Claude Code equivalent behavior |

---

## Summary

- **[`skills/i-have-adhd/SKILL.md`](https://github.com/ayghri/i-have-adhd/blob/main/skills/i-have-adhd/SKILL.md)** contains ten concrete directives that restructure assistant output into actionable, numbered, time-bounded steps
- **`.opencode/plugins/i-have-adhd.mjs`** implements the injection mechanism via `experimental.chat.system.transform`, supporting both `/i-have-adhd` on-demand command and always-on flag-file activation
- The **`~/.config/opencode/.i-have-adhd-always`** file enables persistent, cross-session behavior without repeated commands
- Output transformations include: leading with executable commands, numbered single-action steps, specific time estimates, elimination of preambles/closings, and exactly one final actionable item
- The skill demonstrates how system prompt engineering can create durable, persona-level modifications to AI assistant behavior

---

## Frequently Asked Questions

### How do I activate the 'i-have-adhd' skill temporarily?

Type `/i-have-adhd` in your OpenCode session. The plugin loads [`SKILL.md`](https://github.com/ayghri/i-have-adhd/blob/main/SKILL.md), strips its YAML front-matter, and injects the rules into the current session's system prompt. This lasts until you exit the session or say "stop adhd mode".

### What file controls permanent always-on behavior?

The empty flag file at `~/.config/opencode/.i-have-adhd-always`. Create it with `touch` to enable automatic rule injection on every turn across all sessions; delete it with `rm` to disable. The plugin checks for this file's existence in its initialization logic.

### Can the model exit ADHD mode without deleting the flag file?

Yes. The [`SKILL.md`](https://github.com/ayghri/i-have-adhd/blob/main/SKILL.md) rules include a Persistence directive instructing the model to honor utterances like "stop adhd mode" or "normal mode". This disables the style for the current session only, while the flag file remains for future sessions.

### Where does the actual output transformation happen?

In the language model itself, because the `i-have-adhd.mjs` plugin appends the full ruleset to the system prompt via `experimental.chat.system.transform`. The model receives "ADHD MODE ACTIVE …" followed by the ten directives, then generates compliant output without additional post-processing.