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 –
hexcan read events by default, and create and edit events with permission. Currentlyhexis accessing my FastMail calendar usingicalendar, but Fastmail do offer an MCP server which I will probably move to using instead - Todoist –
hexcan manage my tasks by using the Todoist MCP server, with the goal tools being filtered out - Obsidian – since I try and dump all my knowledge into my vault, allowing
hexto query my vault was a necessity. During developmenthexcan access the vault using Obsidian CLI, which unfortunately does not exist in the headless Obsidian Sync, so I will have to use a tool like NotesMD CLI as an alternative - Web Searching and Fetching – Since me or my vault might be missing information or have information that is out of date, it's important for
hexto be able to search the internet and get the content back. Fetching is done via the wonderful Defuddle while search is done via Kagi's MCP server - Browser – while just getting the content of websites gets the job done most of the time, sometimes I need
hexto "see" the website, which is done using Playwright and a headless Chromium - TTS –
hexis able to voice the output using KittenTTS, which is used for the Watcher integration (more on that later) - Telegram – The main interface of hex is through Telegram, using aiogram, which was recently made even more awesome by the introduction of Rich Messages in Bot 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 –
hexbasically has three memory layers:- Sliding contextual memory + summarization
- Qdrant vector storage for facts and transient memories
- Preferences storage using SQLite
- Tool Sub-agents –
hexuses 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 –
hexemploys a selection of specialists, which are basically separate agents running secondary system prompts that are more verbose than tool agents and are designed forhexto 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 a Watcher device I had laying around and give
hexthe 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 by saying it to me. More on Watcher below. - Skills – for the rest of the things I need
hexto 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 giveshexextra 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 carrier 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.
