---
url: "https://www.reddit.com/r/ClaudeAI/comments/1w7tb2v/i_built_a_claude_code_plugin_for_my_adhd_brain_it/"
title: I built a Claude Code plugin for my ADHD brain — it remembers the things I forget mid-conversation
source_kind: reddit
subreddit: ClaudeAI
author: shahijohn
captured: "2026-10-21T21:38:08+00:00"
comment_tree: true
topics: [agent-tooling, claude-code, adhd, memory]
summary: A developer built claude-adhd, a Claude Code plugin that acts as external memory for ADHD users, surfacing forgotten tasks, setting reminders, and offering focus modes, with local-only storage.
status: ok
---

I have ADHD , and my biggest problem with Claude Code isn't the coding. It's that I forget everything. Tasks I said I'd do "later", ideas I floated last week, questions Claude asked me that I never answered, sessions that died mid-decision. All gone the moment I close the terminal.
So I built a plugin called claude-adhd that acts as external memory.
When I open a session it quietly surfaces my 1-3 most stale forgotten threads, and flags anything that's been sitting there over 2 weeks. If I commit to a task mid-chat, Claude silently records it and marks it done when it's actually finished. No todo app to maintain, which is important because I have never once maintained a todo app for more than 3 days.
You can also set reminders by just saying them. " Remind me tomorrow at 3pm to check the deploy" or " every session remind me to run tests first " — they show up naturally in the conversation when they're due. There's a focus mode too, /focus 25 ship-the-release, and if the chat drifts off task it pulls you back. When time's up you get a little wrap-up of what got done.
The part I'm most careful about is not making it annoying. Random nudges are capped at 2 per session with a 3-day cooldown per item, and the model only brings things up when it actually fits the conversation. If it feels like nagging, people will uninstall it in a day.
There's also "I'm fried" mode — tasks get energy tags, and when you have no energy it only offers the low-effort ones. And a local dashboard with stats and streaks, though honestly the streak counter is just dopamine bait and I love it.
Everything stays on your machine. No telemetry, no API keys, no dependencies beyond Node.
It's in test mode and I've mostly just been dogfooding it myself, so I'd genuinely love feedback from other ADHD brains. What would actually help you? What would be too annoying?
Install if you want to try:
/plugin marketplace add shaheer-00/claude-adhd
/plugin install claude-adhd@claude-adhd
Repo: https://github.com/shaheer-00/claude-adhd
Feedbacks are most welcome

---

## Comments

**ClaudeAI-mod-bot:** TL;DR of the discussion generated automatically after 30 comments.
The consensus is a huge thumbs-up for this plugin. The community, especially fellow ADHD-havers, loves the idea of an "external memory" that doesn't require maintaining yet another app. The "two-week guilt flag" for stale tasks was a particularly relatable and praised feature.
The real gold of this thread, however, is the high-level technical deep-dive that went down:
- A user ( Ok_Gur_9033 ) dropped a killer question: How do you capture tasks that were never even written down in the first place? They pointed out that their own repo had zero TODO markers, meaning the forgotten work never landed anywhere a tool could find it.
- OP came back with a detailed explanation of the plugin's two-layer capture system: a live component that records commitments as you make them, and a backstop indexer that scans past chat logs for intent phrases and, brilliantly, for sessions that ended on an unanswered question from Claude .
- The user then suggested a genius method to benchmark the plugin's accuracy: run it against a repo's documentation and git log to see if it can find "intended" work and match it to actual commits.
- OP actually went and did it , reporting back with full transparency. The original logic didn't work well on prose, so they rebuilt it and achieved 81% recall, openly sharing the misses and limitations. It was a masterclass in how to handle constructive feedback.
Other users also shared their own custom solutions, from single-task project managers to a full Jira-style ticket system for Claude, but the thread agreed that OP's approach uniquely solves the problem of capturing the tasks you'd otherwise forget to even put on a list.
Oh, and someone pointed out that OP and their main critic both "talk like Claude," and we can't unsee it now.

**[unknown]:** [deleted]

**SilentDanni:** Yes it is too much, but that's basically what ADHD people do. Instead of solving the problem we prioritise and do something else cause our brains crave the dopamine spikes since we're usually starved of it...

**shahijohn:** Yes, and then we forget everything else too. the struggle

**shahijohn:** That's so good. it actually worked for you. usually ADHD people fix their problems themselves, but the biggest issue as far as I know, we forget the main project and move to this kind of side projects and started polishing this non stop and by the end of the day, we have a lot of solutions but main project haven't even started yet. So, sometimes using already made tools will solve this.
I mean, different people have different needs and solutions but you are really fortunate to solve your problem on your own

**[unknown]:** [deleted]

**Fast_Conference_4057:** Why would we read your response if you’re not willing to write it yourself

**shahijohn:** that was indeed my fault. I apologize to them.

**Neonbluefox:** I've built some adhd friendly things with Claude too, like a personal assistant running my calendar and todoist (without me running todoist, very important). I don't think I'd be a good beta tester for what you've built, though, because it is a solution for people that talk enough to Claude about their lives that Claude should know what's happening without other sources of input. I'm not a programmer, I don't use Claude code often, so I think that's why.
In any case, happy it works for you though! Neurodivergent high five!

**shahijohn:** Thanks for the feedback friend 😄. Very happy to hear you manage to make some useful tools. You can check our my claude skill (not ADHD but might be helpful - shaheer-00/claude-cbt-companion: A Claude skill that acts as a CBT-informed supportive chat companion — distortion detection, structured reframes, firm boundaries. No app, no fine-tuning.

**Neonbluefox:** As a psychiatrist I respect what this skill does, but it's not for me. I'm in analysis 3*/w and that's enough therapy for me for now. Still! Thank you for sharing! I think AI will have a lot of helpful ways to support us chaos folk, I'm grateful for it.

**shahijohn:** Glad to hear that 😊

**Aggravating-Vast-822:** When everyone is neurodivergent no one is neurodivergent.

**[unknown]:** [deleted]

**shahijohn:** True 😄 But we gotta try

**germanthoughts:** I would love to know what you use to build the UI. Looks very clean.

**shahijohn:** it's actually poor Vanilla HTML/CSS/JS, no framework. and I'm very glad you found the design very clean 😂
If you are using AI or claude code, you can give below prompt or details to make your UI on similar style - Hope it help..
---------------------------
ARCHITECTURE
- Single static index.html: all CSS in one <style> block, all JS in one <script> block. No framework, no build step, no CDN.
- One server.mjs using only node:http (zero npm deps). Binds 127.0.0.1 only — never 0.0.0.0.
- Server serves the HTML at GET / and exposes a JSON API:
GET /api/ping (health), GET /api/state (full state JSON), plus POST routes for each user action (e.g. /api/add, /api/mark).
- Data lives in [your storage: JSON file / SQLite / etc.].
- Frontend polls /api/state every few seconds; actions POST then re-poll. No websockets needed.
STYLE (dark glass, quiet-premium)
- :root design tokens: --bg #07080c, --text #eceff5, --muted #9aa3b5, --accent #5b8cff,
--accent-soft rgba(91,140,255,.13), semantic colors for states (open amber #e6b450, done green #3ecf8e, danger #ff6b6b).
- Panels: subtle vertical gradient background rgba(255,255,255,.038)→.018, 1px border rgba(255,255,255,.065),
border brightens on hover (.16), layered s
- Body: 2-3 large radial gradient color washes (accent/blue top-right, green bottom-left) over solid bg.
- One fixed film-grain overlay via inline SVG feTurbulence at ~3% opacity, pointer-events none, own compositor layer.
- Radius system locked: cards 14px, buttons/
- Font: system stack ("Segoe UI Variable", Segoe UI, Roboto), 14px/1.55, tabular-nums for all numbers.
- Restyle browser surfaces: custom ::selection, :focus-visible, caret-color, ::-webkit-scrollbar.
- Micro-interactions: ease cubic-bezier(.16,one subtle pulse/ping animation for "live"indicators. No bouncy or flashy motion.

**[unknown]:** [deleted]

**shahijohn:** Half agree, and the disagreement is about what the plugin is for.
On the premise: it doesn't stuff the chat into memory. Capture is one-line summaries, hard-capped at 200 characters, and the session-start digest is three items max. The transcript backstop reads full transcripts but only stores the extracted line. The whole design fights the junk-drawer problem you're describing — the live capture layer deliberately refuses to record questions or brainstorming noise for exactly that reason.
On the framing: the plugin doesn't claim the model has ADHD. The user does. The failure mode it targets is the human reopening the terminal on Tuesday with no memory of Monday's open threads — no amount of in-context state management fixes that, because the context is already gone. The digest header literally says "user may have ADHD," never the model.
But you found a real gap: mid-session, the plugin does nothing. The digest fires once at session start, and if a session runs long, earlier decisions do rot with nothing catching them. Fair hit.
On the scratch file itself — the pattern is sound but it collides with two things. Claude Code already has a native todo system that tracks in-session task state, so the uncovered slice is decisions and constraints rather than tasks (the "we chose X over Y" stuff that silently stops constraining you 40k tokens later). And "rewrite every few turns" means a hook firing and a model write on every turn, which is where your own junk-drawer warning bites — a model-maintained file accumulates cruft faster than a human-maintained one, because nothing feels like deletion when it's auto-regenerated.
The shape I'd actually consider: a decisions file that the plugin rewrites at defined boundaries (session start, task completion) rather than every few turns, with the same 3-line cap discipline as the digest. Same idea, fewer writes, and the cap does the anti-junk-drawer work structurally instead of by vigilance.

**Ok_Gur_9033:** Went looking in my own repo for the things I said I would do later. There are none. Zero TODO and zero FIXME markers across 211 source files.
That is not discipline. It means the forgotten work never landed anywhere a tool could find it. It stayed in the session and then in nothing.
So surfacing is only as good as capture. Does yours record a commitment only when I phrase it as one, or does it also catch the thing I asked about once and never came back to?

**shahijohn:** This is exactly the right question, and you're right that surfacing is only as good as capture. It's two layers:
Live capture: every prompt, the plugin injects a standing instruction so Claude records a task the moment you commit to one, and marks it done when finished. That's intent-judgment in context, not keyword matching — "I'll deal with that after the release" lands even though it's not phrased like a todo.
Backstop: an indexer scans your past session transcripts (~/.claude/projects/*.jsonl) with heuristics for the things people actually say — "I'll X later", "we should try", "what if we", "remind me to", "next step", TODO markers, plus unanswered questions and sessions that died on a question you never answered. So the thing you asked about once and never came back to is exactly one of the extraction origins (it's called pending-reply, it catches sessions ending on an unanswered assistant question).
The honest gaps:
- purely implicit commitments — the thing you half-thought about and never said out loud in any form — don't land anywhere, because there's nothing to land
- the live layer depends on the model actually running the record command. It does most of the time, but not always, and it errs on the side of not recording (questions and brainstorming are explicitly excluded so it doesn't spam the index with noise)
If you install it on the repo where you know the forgotten things live, I'd genuinely like to know what it catches vs misses. That recall ratio is the number I care most about and can't measure alone.

**Ok_Gur_9033:** The pending-reply origin is the one I would not have thought of, and it is the strongest idea in there.
On the recall ratio, you may not need a volunteer. I looked at the other half of my own repo after posting. Zero TODO markers in the code, but 41 future intent phrases across 19 markdown files. That set has a ground truth attached, because each one either turns up in a later commit or it does not.
Point the extractor at a repo's docs and git log instead of a person's transcripts and the recall number becomes something you can compute on your own.
Do the heuristics port to prose, or are they tuned to transcript shape?

**Jamator01:** You guys both talk like Claude.

**kidsmeal:** Its just two people screenshotting the reply and saying "can you answer please?"

**shahijohn:** Shhhh 😰

**shahijohn:** Honest answer: about half of them port, and the half that doesn't is the part I'd want to rebuild anyway.
The trigger patterns split cleanly. TODO markers, "next step", "we should X", "idea:", "what if we" — those fire on prose as-is. But a chunk of the list is first-person conversational: "I'll get to that later", "remind me", "don't let me forget", "add it to my todo list". Documentation never talks like that. The structural checks are more transcript-bound than the patterns — the extractor only reads messages between 12 and 600 characters (chat-message sizing; a roadmap bullet sails past that), and two of the three origins have no prose analog at all. "Question" origin means the user asked something and the next two exchanges contained no tool use. "Pending reply" means the session literally ended on Claude asking a question. Neither concept exists in a markdown file.
And to be clear about the current state: the indexer only reads session transcripts, never repo files. So this is a port with a new heuristic set, not a config flag I can flip tonight.
The one piece that ports cleanly is the done-detector, which is the opposite of what I expected. It's just term-overlap: pull the content words out of the intent phrase, look for them in later text that also contains a completion verb. Swap "later sessions" for "later commits" and it mostly works — commit messages even use the same verbs, modulo some form-widening (transcripts say "fixed", commits say "fix:").
Your harness idea is stronger than you're pitching it, too. It doesn't just measure extractor recall — those 41 phrases with commit ground truth test the done-detector as well. If an intent landed in a commit three weeks later, did the detector mark it done? That's both halves of the pipeline scored off one dataset, and you've already done the expensive part by labeling the 41 by hand.
One caveat: the intents that never turn up in a commit are ambiguous — some got forgotten, some got dropped on purpose, and git can't tell you which. So I'd count extraction recall against all 41, but treat the committed subset as the only clean ground truth for the done-detection half.
If the repo's public, drop a link and I'll run the port against your 41 and post the numbers here, including the bad ones. Otherwise I'll build it against my own docs first and report back either way.

**Ok_Gur_9033:** Repo is private, so no link. The 600 character ceiling is the part I would check first anyway, because it is the one I can put a number on. Those 41 intent phrases sit in 41 paragraphs. 19 of them run past 600 characters. Median 535, longest 2210. So on prose the window drops close to half the hits before a pattern gets to run.
Chat messages are short because someone is typing them in the moment. Written down, the commitment usually lands at the end of a long paragraph explaining why it exists.
Is the 600 there for cost, or because longer messages were producing false positives?

**shahijohn:** Setup: my main repo, 11 markdown files (~85KB of docs), and I hand-labeled the future-intent phrases before running the extractor so I couldn't anchor on its output. 21 distinct items — launch-checklist entries, open placeholder lists, deferred features, things blocked on me. Excluded one 300KB build-plan doc as a different genre; it's 200+ checkboxes of work that already shipped and would have swamped everything.
Straight port of the transcript patterns: recall 1/21. You called it. The lexical overlap is real (TODO, "next step", "we should") but docs never phrase intent that way — they use bare imperatives ("Replace them all in site.ts"), TBD lists, and sections literally titled "Blocked on the owner". None of which the transcript patterns see.
So I rebuilt the heuristic set around how docs actually mark intent, and the thing that works is structural, not lexical: section scope. Everything under an "Open Items", "Roadmap", or "Before you launch" heading is future intent by placement, regardless of phrasing. Which is a nice echo of what you liked about pending-reply — structure over wording. With that plus TBD/later/outstanding/blocked-on as lexical markers: recall 17/21 (81%).
The four misses are all the same shape: conditionally-deferred work. "Add pagination when a section outgrows one page." "If we ever outgrow static, revisit." The intent is real but gated on a condition, and I haven't found a marker that catches it without opening the floodgates.
Your harness caught a second thing you didn't promise: the done-detector degrades on prose. Its term-overlap threshold assumes transcript-length summaries, so a two-word intent like "Domain name." matches any commit sharing one word plus a verb. Of its 10 commit matches on my repo I'd call maybe 5 or 6 real. Fixable (scale the threshold for short phrases), but it's a real finding — the port isn't free even where the idea transfers.
And one blind spot in the git-log ground truth itself: config-value work never lands in a commit. "Replace the placeholder tokens" and "set the real domain" are either done silently in a dashboard somewhere or not done at all — git can't tell you which. So the committed subset of your 41 is clean ground truth for done-detection, but absence of a commit is not proof of absence of work.
Caveat on my numbers: the v2 heuristics are tuned on this corpus, so it's my development set. Your 41 are the held-out test set, and the harness is now in the repo (node scripts/prose.mjs <repo>) — so either drop the link and I'll run it, or run it yourself and tell me where it's wrong.

**Ok_Gur_9033:** Ran your four misses against my own docs. 199 markdown files, 19,712 lines. 560 lines carry when, once, if or until. Only 64 of those also carry a future verb. Keying on the gate word alone is 560 hits for maybe 64 real ones, which is the flood you were worried about.
What separates them here is not the phrasing. It is whether the condition names something you could go and check today. "When a section outgrows one page" names a threshold. "If we ever outgrow static" names nothing. Ever is the tell, not if.
Does that split your four?

**Repulsive-Giraffe997:** thats why we have backlogs or md files xd

**Torix_xiroT:** https://github.com/BeMuCa/jaira
Backlog you said? Next step is Tickets. Welcome to vibe-corp-Life

**shahijohn:** ha, the md file approach already got field-tested in this thread — first guy who commented went looking in his own repo and found zero TODOs in 211 source files. 41 "we should eventually..." phrases scattered across 19 markdown files that nothing ever brings back up. that's the backlog solution running live.
backlog needs two things: you remember to write stuff down the moment you think of it, and you actually go back and read it later. both are exactly what my brain breaks first lol. that's the whole reason i built this — capture happens in the conversation so there's nothing to remember to write, and the digest brings stuff to me next session so there's nothing to remember to re-read.
backlog is a destination, this thing's the courier 🔥

**Torix_xiroT:** For me I would not say adhd Is the issue, but Claude is. I Tell him to do stuff, he tells me he is done, then I Start doing more stuff and sometime in the future I realize, he just Wrote specs and did not implement yet..
And I also tend to throw multiple ideas in, so I would have about 10 ideas that I had to keep in mind at once.
Since I was at work when I came up with the idea, I created jaira:
https://github.com/BeMuCa/jaira
Tasks are wrapped into Tickets, with context of why the task was given and dods.
Then when you start a ticket, Claude (or Even better subagents) start to Push the tickets through the lanes until a Lane is reached where a human is needed (Review, question that come up)
You can create your own lanes, and your own rules. That way you always have a fixed routine when working through tasks (e.g. Critique, Code optimize, testing Lane).
You open the Bord and You always See what the State of a given task is. And You Can Reference the Task via Ticket id, no need to describe it.
Oh edit: newest Feature is an epic Board Layer, you Write the topics as bubbles, and can Match Tickets to them. (Ui for example, then throw everything you had in mind in it) Good to sort stuff. Tickets Sorted to a bubble get the bubbles color

**shahijohn:** Hmm, maybe u r on planning mode, and not on manual or edit on etc. Check that as well, as far as known, claude don't do what you described. but the idea seems to be good. I will check this out for sure

**[unknown]:** [deleted]

**shahijohn:** lol 14 is not a scientific number, it's roughly when my own unfinished stuff starts haunting me
it's hardcoded right now but you're right that it shouldn't be, everyone's guilt threshold is different

**felix_blume_:** I have the exact same problem. I now work with the wafinder skill and beads ticket tracker together with the "bead me up Scotty" GUI for beads and a way to present plans in a more visual way (visual explainer, ok annotator and diagram designer skill) It works like a charm for keeping me on top of things. I am currently working on decision capture and long term knowledge base creation once an epic is closed. Am planning on implementing a global workflow (not just project scoped) and in-session "idea-capture" and an on-the go timeline for what we are working on, what has been done and what is yet to be done. I'm really interested in bough as well to represent session progress in a diagram.

**shahijohn:** Glad you found a solution yourself. The struggle of ADHD is only understood by ADHD people. For knowledge base solution, maybe check this, another person recommended me from comment section. AgriciDaniel/claude-obsidian: Self-organizing AI second brain for Obsidian + Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain Markdown you own. AI note-taking, personal knowledge management (PKM), and an open-source Notion alternative. Based on Karpathy's LLM Wiki pattern.

**Retro21:** Be fascinated to have a chat about trading and see how it's helping you - I use chatgpt because I found Claude kept making mistakes! Really it would just be nice to chat about what we've each done, I feel like I've done loads but have avoided actually trading because I've been using it to build and test 😅

**shahijohn:** Haha actually that was a project about trade, rather than chatting about trades 😄. I heard deepseek had the best results for trades but i don't know. (I created a node.js project to track my trades and store them - thats the project you see on the screen)

**Retro21:** Ah the search goes on to find a like minded soul!
Keep at it my bro. Isn't it great to finally finish projects 😁💪

**shahijohn:** Yes it is. So, have you made any system to help your trade ? like any webapps or stuff to see graph or calenders

**Retro21:** Of course, I've made a whole website. It tracks loads. And then turned it into an app, that also tracks loads.
Now I just need to sit down and trade 😅

**[unknown]:** [deleted]

**shahijohn:** It seems really a lot of people facing similar problems and having their own solutions. Thanks for checking out, will be happy to hear feedbacks

**kidsmeal:** The amount of ADHD Claude users that all build their own tool for managing their ADHD instead of using any existing ones should be studied, anyways I also have ADHD and built my own tool too, also taking the best name lol ClaudHD 😅

**shahijohn:** The fun fact is, ADHD people make a lot of tools and solutions, and then forget to use them. Alas, the struggle is real

**mac725:** Interesting

**shahijohn:** ❤️

**HighDefinist:** Hm... can this really do substantially more than just occasionally doing some cleanup prompt like "Check all the sessions of the last week for any features/fixes/etc... I suggested, but which we did not eventually either implement, or note down, or explicitly dismiss"?

**shahijohn:** actually once you install the plugin, it will automatically store those forgotten stuffs. you can see them in the local host url or it reminds you once in a while you using claude code. As for code scanning and finding from already existing projects, the result isnt 100% guaranteed

**Mac_Daddy_35:** This looks great, but you missed an opportunity to name it ClaudHD.

**shahijohn:** Haha, alas, before I could get the chance, people started to use this. Also, from comment section, I learned that someone had already made a tool with same name. Lucky them 🔥

**Asly97:** How does it differentiate between something that you want to revisit and an idea that you've intentionally dropped? I can see the value in keeping track of loose ends, but I'd also want an easy way to mark one as settled so that it doesn't continually resurface.

**shahijohn:** Well, it have both UI(Localhost) as well and you can actually see stuffs there. You can mark as done and it removes it (you can actually see it in the screenshot attached to this post)

**sanchez2673:** cbt companion? 🤔

**shahijohn:** It seems you checked my other project as well 👍. That one is a skill for Claude, and not a Claude code Plugin. 😄

**atquest:** 😂 I think he wants to be assured its “cognitive behaviour therapy” and not cockandballtorture

**Still_Percentage_937:** everyone has ADHD today seems to be a trend

**Su_ButteredScone:** Hard not to with technology and distractions as they are. I went from being able to read a book for 6h straight when I was younger to hardly being able to watch a YouTube video for 5 minutes before my brain is jumping to another thing now. Even video games take more attention than I'm capable of these days.

**WeAreSalvation:** Seems you should focus more on making sure your fingers are working correctly than casting aspersions

**shahijohn:** 👀 👀
