Skip to content

feat(adhd): add ADHD output-shaping plugin (reauthor of i-have-adhd)#774

Merged
kyle-sexton merged 2 commits into
mainfrom
feat/adhd-plugin
Jul 21, 2026
Merged

feat(adhd): add ADHD output-shaping plugin (reauthor of i-have-adhd)#774
kyle-sexton merged 2 commits into
mainfrom
feat/adhd-plugin

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Summary

New adhd plugin — one skill, /adhd:shape — that shapes the assistant's
output for a reader with ADHD (and anyone who wants action-first, low-friction
responses): lead with the concrete next action, number multi-step work,
restate state across turns, cap and rank lists, give concrete time estimates,
make wins visible, keep a flat error tone, and cut preamble, recap, and
closers — plus override rules (explain / destructive-action confirm / debug
spiral / ambiguity) and a pre-send check.

Reauthored — not forked — from ayghri/i-have-adhd (MIT): the ten rules'
substance is preserved and the prose rewritten; the wrapper is adapted to this
marketplace's discovery discipline. Upstream auto-fired on ANY message
(probabilistic always-on via skill selection); ours is on-demand with honest
discovery triggers and no auto-fire, and its body is session-standing (one
invocation shapes every response for the rest of the session).

Design A (skill only). Deterministic zero-invocation always-on is deferred
to a SessionStart hook (off by default) with a recorded trigger, because a
userConfig boolean substitutes only into an already-invoked skill body and
cannot auto-invoke — documented in the plugin README so it is not
re-litigated. The README also documents mutual exclusion with terse-for-tokens
output shapers such as caveman: opposite objectives on the same axis.

Zero-config, zero-prerequisite: no hooks, scripts, MCP, userConfig, bin/,
egress, or cache reach-outs — cleanest plugin-acceptance trust posture.

Verification

claude plugin validate ./plugins/adhd                            # passed
claude plugin validate --strict .                                # passed (catalog)
skill-quality check-skill.sh shape                               # PASS (0 err, 1 benign WARN)
node scripts/generate-catalog.mjs --check                        # in sync
bash scripts/check-changelog-parity.sh --check-bump origin/main  # OK
node scripts/validate-plugin-contracts.mjs                       # OK
bash scripts/check-changed-skills.sh origin/main                 # 0 failed
markdownlint-cli2 (README/CHANGELOG/SKILL)                       # 0 errors
editorconfig-checker                                             # exit 0; LF + final newline

The lone skill-quality WARN is "no Gotchas surface" — expected for a new skill
with no observed failure history.

Related

No linked issue

## Summary

New `adhd` plugin — one skill, `/adhd:shape` — that shapes the assistant's
output for a reader with ADHD (and anyone who wants action-first, low-friction
responses): lead with the concrete next action, number multi-step work,
restate state across turns, cap and rank lists, give concrete time estimates,
make wins visible, keep a flat error tone, and cut preamble, recap, and
closers — plus override rules (explain / destructive-action confirm / debug
spiral / ambiguity) and a pre-send check.

Reauthored — not forked — from ayghri/i-have-adhd (MIT): the ten rules'
substance is preserved and the prose rewritten; the wrapper is adapted to this
marketplace's discovery discipline. Upstream auto-fired on ANY message
(probabilistic always-on via skill selection); ours is on-demand with honest
discovery triggers and no auto-fire, and its body is session-standing (one
invocation shapes every response for the rest of the session).

Design A (skill only). Deterministic zero-invocation always-on is deferred to a
SessionStart hook (off by default) with a recorded trigger, because a
`userConfig` boolean substitutes only into an already-invoked skill body and
cannot auto-invoke — documented in the plugin README so it is not
re-litigated. The README also documents mutual exclusion with terse-for-tokens
output shapers such as caveman: opposite objectives on the same axis.

- `plugins/adhd/.claude-plugin/plugin.json` — new, semver 0.1.0, MIT.
- `plugins/adhd/skills/shape/SKILL.md` — the skill (10 rules + 5 facts + 4
  overrides + pre-send check).
- `plugins/adhd/skills/shape/evals/evals.json` — 5 cases (trigger/happy-path,
  session-standing, destructive-action guardrail, explain override, no-preamble
  anti-pattern).
- `plugins/adhd/README.md`, `plugins/adhd/CHANGELOG.md` — docs + 0.1.0 entry.
- `.claude-plugin/marketplace.json` — registration (category: personal);
  root README catalog regenerated.

Zero-config, zero-prerequisite: no hooks, scripts, MCP, `userConfig`, `bin/`,
egress, or cache reach-outs — cleanest plugin-acceptance trust posture.

## Verification

```
claude plugin validate ./plugins/adhd                            # passed
claude plugin validate --strict .                                # passed (catalog)
skill-quality check-skill.sh shape                               # PASS (0 err, 1 benign WARN)
node scripts/generate-catalog.mjs --check                        # in sync
bash scripts/check-changelog-parity.sh --check-bump origin/main  # OK
node scripts/validate-plugin-contracts.mjs                       # OK
bash scripts/check-changed-skills.sh origin/main                 # 0 failed
markdownlint-cli2 (README/CHANGELOG/SKILL)                       # 0 errors
editorconfig-checker                                             # exit 0; LF + final newline
```

## Related

- Reauthors ayghri/i-have-adhd (MIT): https://github.com/ayghri/i-have-adhd
- Output-shape relative of, and mutually exclusive with, the third-party
  caveman plugin (https://github.com/JuliusBrussee/caveman).

No linked issue

Co-authored-by: Claude Opus <noreply@anthropic.com>
@claude

claude Bot commented Jul 20, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 21s —— View job


Security Review — feat(adhd) plugin

  • Gather PR diff and changed files
  • Review plugin manifest (plugin.json) for trust/permission issues
  • Review skill body (SKILL.md) for injection surfaces or unsafe patterns
  • Review evals (evals.json) for unsafe content
  • Review marketplace catalog entry and README
  • Synthesize and post findings

Scope

Seven files reviewed: plugin.json, SKILL.md, evals.json, README.md, CHANGELOG.md, .claude-plugin/marketplace.json (catalog entry), and README.md (root). All added or modified by this PR.

Findings

No security issues found.

This plugin has the cleanest possible trust posture for a marketplace entry:

Surface Assessment
Code execution (hooks, bin/, scripts) None — absent entirely
Remote MCP servers None
Config secrets or credentials None — zero-config
Cache reach-outs (${CLAUDE_PLUGIN_DATA}) None — stateless
Data egress / network calls None — purely behavioral
External runtime dependencies None
Third-party trust delegation None at runtime

Plugin manifest (plugin.json): metadata fields only — name, version, description, author, license, keywords. The $schema field is an editor-validation hint; the Claude Code runtime ignores it at load time (confirmed in repo CLAUDE.md). No runtime network fetch.

Skill body (SKILL.md): pure markdown instruction text — no tool calls, no template variable substitution, no ${VAR} references, no hardcoded paths or PII. The session-standing scope ("shape every response for the rest of this session") is explicit and user-initiated. Critically, the override rules at lines 119–131 do not suppress safety guardrails — they explicitly require confirmation before destructive actions ("Safety outranks brevity").

Evals (evals.json): declarative test definitions only. The adversarial prompt in eval #3 ("wipe my local branch and force-push over main") is a test input string verifying the safety override — no execution surface.

Marketplace entry: source resolves to a local relative path (./plugins/adhd), category and tags are standard strings. No remote fetch.

Attribution links (in SKILL.md and README.md): informational text referencing the upstream MIT repo — no runtime dependency on external code; content is not fetched at load time.

Summary

Approved from a security standpoint. The plugin ships with zero attack surface expansion: no execution, no egress, no secrets, no external dependencies. Plugin-acceptance criteria from the repo playbook are fully satisfied.

@claude

claude Bot commented Jul 20, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 9s —— View job


PR Review: feat(adhd): add ADHD output-shaping plugin

  • Gather context and understand request
  • Read plugin manifest (plugin.json)
  • Read skill definition (SKILL.md)
  • Read plugin README and CHANGELOG
  • Read marketplace catalog entry
  • Read evals
  • Check alignment with CLAUDE.md design rules
  • Post comprehensive review feedback

Summary

This is a clean, well-designed plugin with the minimal trust surface the platform prescribes. The
core content — the ten communication rules, their five cognitive-science anchors, the override
conditions, and the pre-send check — is substantive and internally consistent. The manifest
structure, skill frontmatter, naming convention, and zero-dependency stance all line up with
existing plugins. One concrete defect found (tag drift), plus two informational notes.


Defect: executive-function tag absent from marketplace catalog

plugin.json keywords include "executive-function" (the most distinctive discoverable tag for
this plugin's use case), but marketplace.json does not:

plugin.json keywords:  [..., "response-style", "executive-function", "brevity", "skill"]
marketplace.json tags: [..., "response-style",                        "brevity", "skill"]

The catalog is the discovery surface; omitting it there silently drops the tag that most precisely
identifies who this plugin is for.

plugins/adhd/.claude-plugin/plugin.json L11–21
.claude-plugin/marketplace.json L409–413

Fix this →


Informational: session-standing behavior depends on model context retention

The SKILL.md body opens with:

"Once invoked, this is a standing instruction: shape every response for the rest of this
session…"

Without a hook injecting the rules on every turn, this relies on the model holding the skill
output in active context through the session. Heavy context compression or a very long session can
cause the standing instruction to fade. This is the exact reason the README's "Deferred" section
documents the SessionStart hook as the right mechanism for guaranteed always-on behavior — and
the README handles this honestly.

The skill-quality checker already surfaced this implicitly ("no Gotchas surface" WARN). Adding a
single Gotcha entry to the SKILL.md would satisfy the checker and give consumers fair warning:

Gotcha: in a long or heavily compressed session, the standing instruction may need to be
re-invoked. /adhd:shape is idempotent — re-invoke freely.

Not a blocking defect; the README's "Deferred" section already covers the mechanism. Consider
adding for completeness on the next bump.


Informational: disable-model-invocation: false is explicit — consistent with repo convention

A few reviewers flag this as redundant noise. It is actually the established repo pattern
(tighten-your-output, orchestrate, and others set it explicitly). No change needed.


Structural checklist

Check Result
Repo-agnostic (no hardcoded paths, repo names, env vars)
Zero-config, zero-prerequisite
Plugin-form-safe (${CLAUDE_PLUGIN_ROOT} / ${CLAUDE_PLUGIN_DATA} only) ✅ n/a — no file access
Explicit semver version in plugin.json 0.1.0
MIT license
No PII / secrets
Skill name follows imperative verb convention (shape)
user-invocable: true
CHANGELOG present
Evals present and cover key behavioral properties ✅ 5 evals
Attribution of upstream MIT work ✅ in plugin.json, SKILL.md, README.md, CHANGELOG.md
Security trust surface (no code exec, no egress, no MCP) ✅ cleanest possible posture
marketplace.json tag parity with plugin.json keywords ❌ missing executive-function

One concrete fix before merge: add "executive-function" to the adhd entry in .claude-plugin/marketplace.json. Everything else is non-blocking.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 47034c9f3e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/adhd/README.md Outdated
Addresses a review finding (Codex P2): MIT requires the original copyright
and permission notice to travel with substantial portions of the work, and
this plugin reauthors ayghri/i-have-adhd — preserving the ten rules'
substance. An attribution line alone does not satisfy that; a proper notice
retention does.

- `plugins/adhd/LICENSE` (new) — MIT text carrying BOTH the upstream
  copyright (Copyright (c) 2026 Ayoub Ghriss, with the source URL) and
  Melodic Software's derivative copyright under one permission notice.
- `plugins/adhd/README.md` — License section now points at the plugin's own
  LICENSE and states why the derivative ships one (pointer, not restatement).

No behavior change; docs/licensing only.

Co-authored-by: Claude Opus <noreply@anthropic.com>
@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 2s —— View job


Security Review — feat(adhd) plugin

  • Gather PR diff and changed files
  • Review plugins/adhd/.claude-plugin/plugin.json
  • Review plugins/adhd/skills/shape/SKILL.md for injection surfaces
  • Review plugins/adhd/skills/shape/evals/evals.json
  • Review plugins/adhd/LICENSE (updated in latest commit)
  • Review marketplace catalog entry and README changes
  • Synthesize and post findings

Scope

Eight files reviewed across both commits on this branch: plugins/adhd/.claude-plugin/plugin.json, plugins/adhd/skills/shape/SKILL.md, plugins/adhd/skills/shape/evals/evals.json, plugins/adhd/LICENSE, plugins/adhd/README.md, plugins/adhd/CHANGELOG.md, .claude-plugin/marketplace.json, and README.md. No GitHub Actions workflow files were modified by this PR.

Findings

No security issues found.

Attack surface inventory

Surface Assessment
Code execution (hooks, bin/, scripts) None — absent entirely
Remote MCP servers None
Config secrets or credentials None — zero-config
Cache reach-outs (${CLAUDE_PLUGIN_DATA}) None — stateless
Data egress / network calls None — purely behavioral
External runtime dependencies None
Third-party trust delegation None at runtime
Template variable injection (${VAR} substitution) Not present
Path traversal in marketplace source field Not present (./plugins/adhd — no ..)
GitHub Actions pull_request_target / workflow_run misuse No workflow files modified
Permission-widening to existing workflows No workflow files modified

Notes on individual files

plugin.json: Metadata only — name, version, description, author, license, keywords. No permissions, hooks, mcpServers, or dependencies keys. The $schema field is an editor-validation hint; the Claude Code runtime ignores it at load time.

SKILL.md: Pure markdown instruction text. No ${VAR} template variable substitution references; the single ${token} at line 99 is inside a backtick-escaped example string illustrating output format — it is not a plugin variable reference and will not be substituted. No hardcoded paths, PII, or secrets. The override rule requiring confirmation before destructive actions (lines 124–126) is a security-positive addition ("Safety outranks brevity").

evals.json: Declarative test definitions only. The adversarial prompt in eval #3 ("wipe my local branch and force-push over main") is a test input string verifying the safety override rule — no execution surface.

LICENSE: Standard MIT license text with dual copyright lines (Ayoub Ghriss + Melodic Software). Added by the latest commit (ecedbc4) to satisfy the upstream MIT requirement. No security concerns.

.claude-plugin/marketplace.json: The new adhd entry uses "source": "./plugins/adhd" — a relative path with no traversal components (..). Tags and category are plain strings. No remote fetch.

README.md and plugins/adhd/README.md: Documentation only. External links to ayghri/i-have-adhd and JuliusBrussee/caveman are attribution and usage-note text — no runtime dependency on external code; nothing is fetched at load time.

Summary

Approved from a security standpoint. The plugin ships with zero attack surface expansion across all eight changed files: no execution, no egress, no secrets, no external dependencies, no workflow modifications. Plugin-acceptance security criteria from the repo playbook are fully satisfied.

@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 24s —— View job


PR Review: feat(adhd): add ADHD output-shaping plugin

  • Gather context and understand request
  • Read PR diff and changed files
  • Review plugin manifest (plugin.json)
  • Review skill body (SKILL.md)
  • Review evals, README, CHANGELOG
  • Check marketplace catalog entry
  • Verify prior review feedback was addressed
  • Post comprehensive review

What this synchronize pushed

One commit: ecedbc4 — "chore(adhd): retain upstream MIT copyright notice in plugin LICENSE". This adds plugins/adhd/LICENSE (dual copyright notice: Ayoub Ghriss + Melodic Software) and updates plugins/adhd/README.md's License section to point to it with explanation. Docs and licensing only; no behavioral change.


Resolved: MIT copyright compliance

The Codex P2 finding has been properly addressed. The LICENSE file now carries both copyright notices under a single MIT permission statement:

Copyright (c) 2026 Ayoub Ghriss (original work, https://github.com/ayghri/i-have-adhd)
Copyright (c) 2026 Melodic Software (reauthored derivative)

The README License section explains why the derivative ships its own LICENSE file, which is the right level of documentation for this requirement. This satisfies the MIT "notice must travel with substantial portions" clause. ✅


Open defect: executive-function still missing from marketplace catalog

The prior Claude review flagged this as a concrete fix required before merge. It remains unaddressed in the synchronize commit. The tag is present in plugin.json keywords but absent from the catalog entry that is actually the discovery surface:

plugins/adhd/.claude-plugin/plugin.json L18:

"keywords": ["adhd", "output", "accessibility", "action-first", "focus", "response-style", "executive-function", "brevity", "skill"]

.claude-plugin/marketplace.json — adhd entry:

"tags": ["adhd", "output", "accessibility", "action-first", "focus", "response-style", "brevity", "skill"]

executive-function is the most distinctive tag for this plugin's audience and the one most likely to be used as a search filter.

Fix this →


Minor observation: copyright year for upstream author

The LICENSE records Copyright (c) 2026 Ayoub Ghriss — but the original ayghri/i-have-adhd repo predates 2026. MIT doesn't require the original creation year (the notice just needs to be present), so this doesn't affect compliance. It is a minor accuracy note only, not a blocking issue.


Informational (still open, non-blocking)

The skill-quality WARN about no Gotchas surface remains. Adding a single Gotcha entry documenting the context-fade risk would both satisfy the checker and give consumers explicit notice that a long or heavily compressed session may need a re-invocation. As noted in the prior review, this is non-blocking — the README's Deferred section covers the mechanism. Consider adding on the next bump.


Status

Item Status
MIT copyright compliance (Codex P2) ✅ Resolved in ecedbc4
executive-function tag in marketplace.json ❌ Still missing — fix before merge
Gotchas / context-fade documentation ℹ️ Non-blocking, deferred to next bump
All other plugin content (manifest, skill, evals, README, CHANGELOG) ✅ No new issues

One concrete fix remaining before merge: add "executive-function" to the adhd entry in .claude-plugin/marketplace.json.

@kyle-sexton
kyle-sexton merged commit d5ef132 into main Jul 21, 2026
22 checks passed
@kyle-sexton
kyle-sexton deleted the feat/adhd-plugin branch July 21, 2026 00:13
kyle-sexton added a commit that referenced this pull request Jul 21, 2026
Forward-merge to clear conflicts from #770/#774 and a playbooks 0.2.1 patch that
landed on main. Resolved: playbooks plugin.json version 0.3.0 (my minor feature
bump supersedes main's 0.2.1 patch); playbooks CHANGELOG keeps both entries
(0.3.0 then 0.2.1). Catalog regenerated (in sync); no skill-quality conflicts.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant