dsh-i-have-adhd
ADHD-friendly output for DeepSeek Harness. A DSH bundle port of ayghri/i-have-adhd: lead with the next action, number multi-step work, restate state, suppress tangents, give concrete time estimates, make wins visible.
The ruleset is copied verbatim from upstream commit 1ecea1993b7fce257ffbd686c070948b5e07eda6 (package version 0.4.1, MIT). See LICENSE and skills/i-have-adhd/SKILL.md.
What changes
| Before | After |
|---|---|
| "Great question! Let me think about this. Your auth flow has a few moving pieces..." | "Edit src/auth.ts:42 to update the token validation." then a numbered list, then one next step. |
Use
| Input | Effect |
|---|---|
/i-have-adhd |
Injects the ruleset into the current conversation. Stays in effect until "stop adhd mode" or "normal mode". |
/adhd on |
Turns always-on mode on: the ruleset goes into every system prompt, in every session. Persists across restarts. |
/adhd off |
Turns always-on mode off. On-demand /i-have-adhd still works. |
/adhd status |
Reports the always-on source and whether this session is active. |
stop adhd mode / normal mode |
Disables always-on injection for this session only; the persisted setting is untouched. |
The skill is registered as user-invocable only (modelInvocable: false), matching upstream's disable-model-invocation: true: the model never auto-loads it, and /i-have-adhd is the entry point.
Install
Development source: C:\Users\trevo\Documents\deepseek-harness\plugins\dsh-i-have-adhd. The package is a DSH bundle: package.json declares dsh.bundle.patch, and cordis.patch.yml inserts one row (id: i-have-adhd, name: dsh-i-have-adhd). It has no runtime dependencies.
Path row (simplest, no pnpm needed)
Link the profile's plugins dir to this package, then point a patch row at it:
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\web\plugins\dsh-i-have-adhd" `
-Target "C:\Users\trevo\Documents\deepseek-harness\plugins\dsh-i-have-adhd"
Add to %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml:
- insert:
- id: i-have-adhd
name: './plugins/dsh-i-have-adhd/lib/index.js'
config:
alwaysOn: false
A new module mounts at the next DSH start: HMR reloads patch edits live, but a never-loaded module file needs the restart.
From the Plugins page
- Open Settings -> Plugins in the DSH Web GUI.
- Install a local bundle from the package folder (or a packed
.tgz). - Enable I have ADHD if it is not enabled automatically.
- Restart DSH if the manager reports
restart-required.
From the CLI (pnpm)
dsh plugin --profile web add "file:C:\Users\trevo\Documents\deepseek-harness\plugins\dsh-i-have-adhd"
Then add "dsh-i-have-adhd" to dsh.profile.bundles in %USERPROFILE%\.dsh\profiles\web\package.json (after @deepseek-ai/dsh-web-app), restart DSH, and confirm the row is composed:
dsh --profile web --dump-config | Select-String "i-have-adhd"
pnpm must be on PATH (npm install -g pnpm once; corepack enable hits Program Files permissions). Details: docs/dsh-internals.md.
Configure
alwaysOn defaults to false (on-demand only). Set it in the profile patch layer to make always-on the default:
# ~/.dsh/profiles/web/cordis.patch.yml
- id: i-have-adhd
config:
alwaysOn: true
A /adhd on or /adhd off choice is persisted in ~/.dsh/i-have-adhd.json and overrides the row config in both directions. Delete that file to fall back to the row config. statePath can point the state file elsewhere (useful for tests or multiple profiles):
- id: i-have-adhd
config:
alwaysOn: false
statePath: 'C:\Users\trevo\.dsh\i-have-adhd-web.json'
How it works
| Piece | Registration |
|---|---|
| Skill | ctx.skills.register({ name: 'i-have-adhd', invocation: { modelInvocable: false, userInvocable: true }, ... }) with the bundled SKILL.md body and its directory as resource base. |
| Always-on prompt | ctx.systemPrompt.section({ name: 'i-have-adhd:rules', order: DEPLOYMENT_PERSONA_SUFFIX }). The section text is empty while always-on is off, so it contributes nothing to the prompt. |
| Command | ctx.commands.register({ name: 'adhd', ... }); writes the state file atomically (temp file + rename). |
| Stop phrases | ctx.on('agent/pre-step') marks the speaking agent as off for the session; a later /i-have-adhd token clears that session override. |
The ruleset is injected once per system-prompt assembly while always-on is enabled, so it survives compaction and topic switches. On-demand mode relies on the conversation history the /i-have-adhd gesture creates.
Verify
cd C:\Users\trevo\Documents\deepseek-harness\plugins\dsh-i-have-adhd
node --test test/plugin.test.mjs
The suite covers skill registration and invocation flags, all ten rules, the always-on section, /adhd on|off|status, persisted state, malformed-state fallback, stop phrases, session re-enablement, and bundle packaging.
Limitations
- The on-demand ruleset lives in conversation history; a compaction pass can summarize it away. Use
/adhd onwhen that matters. - Always-on adds roughly 2.3k characters to every request. Turn it off when working on unrelated sessions.
- Stop phrases are matched exactly (after trimming and lower-casing), matching upstream; they do not match prose like "please stop the ADHD mode now".
- Always-on state is global to
$DSH_HOME; the per-session stop-phrase override is in memory and resets when DSH restarts. - Rules and command output are English, like upstream.
Package layout
dsh-i-have-adhd/
package.json # bundle manifest (dsh.bundle.patch)
cordis.patch.yml # inserts the i-have-adhd row
lib/index.js # skill, prompt section, /adhd command, pre-step listener
skills/i-have-adhd/SKILL.md
locale/en.json # Plugins page metadata
icon.svg
test/plugin.test.mjs
docs/dsh-internals.md # install/verify research
LICENSE
Credits
Rules and wording: ayghri/i-have-adhd, MIT, loosely based on The Adult ADHD Tool Kit by J. Russell Ramsay and Anthony L. Rostain. DSH bundle wiring: this package.
No comments yet. Be the first to write one.