cd /news/ai-agents/show-hn-i-built-an-ai-agent-to-yell-… Β· home β€Ί topics β€Ί ai-agents β€Ί article
[ARTICLE Β· art-45288] src=0xff.nu β†— pub= topic=ai-agents verified=true sentiment=Β· neutral

Show HN: I built an AI agent to yell at me about my ADHD

A developer with ADHD built an AI agent called 'hex' to help manage executive dysfunction by integrating with calendar, Todoist, Obsidian, web search, browser, TTS, and Telegram. The agent uses memory layers and tool sub-agents to reduce friction in daily task management.

read10 min views1 publishedJun 30, 2026

Warning

This project is a work in progress, so the content in this post will most likely be updated. Last updated 2026-06-30

As I wrote before – I have ADHD. And while the systems that I put in place for myself do help a fair bit, there is still much that is left to chance, which obviously my brain will forget or get overwhelmed by.

So, with the recent AI buzz-word explosion, I've decided to brush up my knowledge of AI and LLMs beyond just installing opencode

or pi

and scouring HuggingFace for new tiny models to run locally, and actually both use agentic coding and utilize agents for tasks that are beyond the "I'm too fucking lazy to read this article; Summarize in two paragraphs" prompt.

If I had more time to spare to this project, most (if not all) of the code would've been written by me, but balancing an active job search, two kids (and learning fucking Swift lol) while trying to keep some of my sanity take most of my available time and desire to do anything else.

I've decided to share a bit about the reasoning behind this monstrosity and some of the execution to try and inspire others – whether you're also working on an ADHD agent or just fucking around with LLMs and need inspiration, maybe this is for you! πŸ€–

hex's toolboxΒΆ #

Given the olympian effort required from me to manhandle my own grey matter, I really don't want to hand-hold hex

and spoon-feed him the entire fucking context behind every single "I want to make sure I go for a walk tomorrow morning" request and all the data it needs to act, so I had to provide it with access to the high-friction bits of ADHD management nightmare:

Calendar–hex

can read events by default, and create and edit events with permission. Currentlyhex

is accessing my FastMail calendar usingicalendar

, but Fastmail do offer anMCP serverwhich I will probably move to using insteadTodoist–hex

can manage my tasks by using theTodoist MCP server, with the goal tools being filtered outObsidian– since I try and dump all my knowledge into my vault, allowinghex

to query my vault was a necessity. During developmenthex

can access the vault usingObsidian CLI, which unfortunatelydoes not exist in the headlessObsidian Sync, so I will have to use a tool likeNotesMD CLIas an alternativeWeb Searching and Fetching– Since me or my vault might be missing information or have information that is out of date, it's important forhex

to be able to search the internet and get the content back. Fetching is done via the wonderfulDefuddlewhile search is done viaKagi's MCP serverBrowser– while just getting the content of websites gets the job done most of the time, sometimes I needhex

to "see" the website, which is done usingPlaywrightand a headless ChromiumTTS–hex

is able to voice the output usingKittenTTS, which is used for the Watcher integration (more on that later)Telegram– The main interface of hex is through Telegram, usingaiogram, which was recently made even more awesome by the introduction of Rich Messages inBot API v10.1

hex's featuresΒΆ #

Tools are one thing, but for hex

to work properly, he needs some other useful features (which some would call basics):

Memory–hex

basically has three memory layers:- Sliding contextual memory + summarization Qdrantvector storage for facts and transient memories- Preferences storage using SQLite

Tool Sub-agents–hex

uses tools via slim sub-agents in order to prevent the entirety of the main context and prompt being used with a simple tool call.Specialists–hex

employs a selection of specialists, which are basically separate agents running secondary system prompts that are more verbose than tool agents and are designed forhex

to delegate requests, maintaining opinion, personality and context detachment from the main agent. A couple of examples below.External (physical) Actions– since there's a high chance my brain will shut down and I'll just ignore the fucking incoming Telegram message, I've decided to use aWatcherdevice I had laying around and givehex

the ability to know when I'm literally in front of my damn screen and to demand I finish that fucking "Fix bathroom light automation" task that's two weeks overdue bysaying it to me. More on Watcher below.Skills– for the rest of the things I needhex

to do by itself, I've added a relatively simple skills system, which loads a prompt appendix if any of theswear wordstrigger words or phrases are used. This giveshex

extra context when it's most likely needed.

Specialist – FreyaΒΆ

I use Freya

to both help plan training days as well as understand and cross-reference sleep with mental state and physical ability for a given day.

---
name: Freya
description: Sleep, health, and training data specialist
tools:
  - calendar
  - fetch
  - kagi_search_fetch
---

**Scope:** Health, sleep, and training data interpretation only. No task management, content writing, or career planning. If asked outside scope: "Not my domain β€” ask hex."

**Tool usage:**
- Use the calendar tool to check upcoming schedule load and identify stressors
- Use fetch and kagi_search_fetch to research health metrics, recovery science, and training data

Health and recovery analyst for Paul. You interpret the Apple Watch / AutoSleep narrative data from his daily notes, training logs, and any other health context he sends.

**Input expectations:**
- Prose health summaries from daily notes (## Health section) β€” narrative text describing sleep fuel, HRV, resting/waking HR, readiness score, energy predictions
- Training/activity data if shared
- Subjective notes from Paul ("felt drained", "head is foggy", "crashed at 3pm")
- Context about his day ahead (calendar load, known stressors, focus needs)

**The core insight:** Everything is interconnected. Poor sleep -> low readiness -> higher overwhelm -> worse executive function. Good recovery -> sharp focus -> better planning decisions. Freya connects the dots between health signals and real-world performance.

**Analysis rules:**
- Don't invent metrics that weren't provided β€” work strictly with what's in the input
- If data is insufficient for a claim, say so
- No pep talks. State the facts, suggest the implication, move on
- When health data contradicts Paul's stated plan, flag it β€” don't just agree

**Tone:** Direct, data-grounded, no corporate wellness bullshit. "Your sleep was shit, here's what the numbers imply for today." No unsolicited lifestyle advice. Paul knows how to sleep better β€” tell him what the data means for his day.

**Return format:**
1. One-line read for today (e.g. "Good recovery β€” lean into deep work" / "Sleep was poor β€” protect your morning")
2. Supporting data points (max 3)
3. Actionable implication for Paul's day (one sentence)

Specialist – CarrieΒΆ

Job hunting is annoying, so sometimes I need something or someone to provide carrie

r advice (get it?) or stop me from applying to something I definitely won't fit in.

---
name: Carrie
description: Career strategy and job search specialist
tools:
  - fetch
  - kagi_search_fetch
---

**Scope:** Career strategy and job search only. No calendar management, content writing, or vault research. If asked outside scope: "Not my domain β€” ask hex."

**Tool usage:**
- Use kagi_search_fetch to research companies, job postings, salaries
- Use fetch to read full job posting pages when URLs are provided

Paul's career advisor. He's a Python developer in Israel seeking remote roles in AI/LLM/internal tools.

**Dealbreakers (auto-reject):**
- Not remote-first (hybrid/in-office required)
- Customer-facing / support / sales-adjacent role
- Not Python or adjacent tech (Go, Rust, TS are fine if the domain is right)

**Example companies Paul likes (priority):** Doist, Kagi, Linear

**Application review checklist:**
- Is it remote-first? (check for "remote" in location, hybrid clauses, timezone requirements)
- Python/back-end fit? (primary stack, bonus if LLM/AI/internal tools)
- AI relevance? (working with LLMs, agents, tooling β€” not just using ChatGPT)
- Avoids support/sales? (support engineer, solutions engineer, customer success are traps)
- Salary transparency? (flag if missing)
- Gut-check fit score: 1-10

**Strategy:**
- Apply Stoic principles β€” focus on what Paul controls (skills, preparation, applications), accept what he doesn't (rejections, timelines, market)
- Keep a running tracker of applications with status and dates
- No false hope. Be realistic. If a job is a reach, say "long shot but worth the reps"
- Paul's been burned by bait-and-switch roles β€” flag any ambiguity in postings (e.g. "remote" with "must be in X city 3 days/week")
- When Paul is discouraged, just state the facts β€” don't pep-talk. He hates empty reassurance.

**Return format:**
1. Fit score (1-10) + key points (max 3)
2. Red flags (if any, else "none")
3. Recommendation: apply / skip / long shot
4. Next action (one sentence)

Watcher Integration – AKA poor-man's Reachy MiniΒΆ

This was, and is somewhat of an ambitious goal, but I'm hoping to get this to work sometime soon.

For the time being, I've disabled the watcher integration as the whole flow is far from painless and requires a summoning circle to get to work.

flowchart TD
    cam["Camera capture<br/>every 5–10 s"] --> post["Send capture and ref to VLM"]
    post --> face{"Face match?"}
    face -->|unknown| drop[Drop; no response]
    face -->|Paul?| cool{"Cooldown<br/>elapsed?"}
    cool -->|no| drop
    cool -->|yes| think["Agent reasoning"]
    think --> tts["TTS β†’ audio file"]
    tts --> url["Return audio URL"]
    url --> play["Speaker playback"]
    play -.->|next poll| cam

    classDef built fill:#d4edda,stroke:#28a745,color:#000
    classDef slow fill:#fff3cd,stroke:#ffc107,color:#000
    classDef broken fill:#f8d7da,stroke:#dc3545,color:#000

    class cam,post,think,drop built
    class face,cool,tts,url slow
    class play broken

The whole thing is a Rube Goldberg machine: custom ESP32 firmware that doesn't actually run on the device yet, a roundtrip with reference and capture images to a vision-model for face matching, TTS generation that blocks the response cycle, and a pull-based polling loop that adds 5–10s of latency on top. The Watcher sits on my desk looking cute while half the pipeline exists only in a markdown plan and the other half times out.

What did I gain?ΒΆ #

While I'm still tweaking the agenda and task handling, hex

became quite indispensable in being able to use my Obsidian vault as a data anchor, while researching and helping me fill in knowledge gaps and fact-checking the existing information, all while maintaining the standard that is right for me and my ADHD.

hex

helps (together with Carrie

the career specialist) filter out jobs (or find ones I missed) in my current job hunt by flagging things I want to avoid, research about companies and their culture and more.

For agenda, hex

highlights any meeting conflicts, suggests removing tasks that are overdue and most likely no longer relevant or suggest prioritizing certain tasks over others depending on how I'm feeling that day.

Keep in mind that not all parts are working as they should, so there is most likely tons of potential still left on the three-legged table.

What would I do differently?ΒΆ #

As the project is still ongoing, the list of things I'd do differently is not exhaustive.

One thing that I would ABSO-FUCKING-LUTELY do differently is ditch DeepSeek-V4

earlier than I have. I cannot even convey the amount of headache I had with trying to mitigate the <||DSML||>

tags leaking, breaking the agent only to find out that this is a widespread issue for a while now.

So in case you're making something similar for yourself – as of 2026-06-30

stay the fuck away from DeepSeek-v4.

Another would be, granted I could afford it, is to perform the trial and error on a locally running model (which is actually the end-goal anyways), but this requires some hard-earned dollarinos leaving my wallet to get a 3090 or better.

And I guess if I had to think of another thing, it would probably be compiling a list of how all my data-points interact between one another BEFORE integrating them and then wondering why the fuck hex

continues to take informational events into account when planning my agenda.

Closing NotesΒΆ #

hex

isn't perfect. Hermes, even with its unsolicited erotica, will probably do a much better job after I'd spend a week setting it up just right. It's a janky, half-finished, DeepSeek-traumatized mess that occasionally forgets to ask me why the fuck I'm messaging it at 2AM. But it's mine, it works for my brain, and it yells at me to go for walks.

Go build something that yells at you.

── more in #ai-agents 4 stories Β· sorted by recency
── more on @fastmail 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/show-hn-i-built-an-a…] indexed:0 read:10min 2026-06-30 Β· β€”