Releases: Indexasp74/AutoADHD
Release list
v1.1.0: The Reviewer actually runs now, and a stale daemon stops silently eating your commits
v1.1.0: The Reviewer actually runs now, and a stale daemon stops silently eating your commits
Since v1.0.0 the pipeline kept extracting notes just fine — but two separate bugs meant the QA layer behind it wasn't trustworthy, and one long-running background process could silently discard real work with zero error output. Both are root-caused and fixed here, along with a batch of self-healing-loop deadlocks and billing correctness fixes.
The Reviewer QA agent had never actually run
run-reviewer.shusedset -euo pipefail, and its own vault-stats check (grep -rl "status: inbox" Inbox/ | wc -l) exits 1 when there's nothing unprocessed — which is the normal, healthy state. That silently killed the whole script before any QA happened, every time the vault was caught up.- A second bug was hiding behind the first: markdown backticks in the agent's own prompt string were interpreted as shell command substitution, so even a fixed run would have crashed trying to "execute"
source_agentas a command. - Together,
review-log.mdhad no real entries in about six months, despite extraction running the whole time. - The Reviewer is now also wired into the direct-extraction path (Telegram text notes, Advisor-triggered extraction, retry-failed) — previously it only ran from the voice pipeline and the backlog drainer, so anything extracted outside those two paths skipped QA entirely.
/reviewin Telegram was also broken: review-item filenames longer than Telegram's 64-byte callback-data limit crashed the entire keyboard, not just the long one. Fixed with a short hashed id per item.
A stale background daemon was discarding voice-memo commits with no error at all
- Long-running processes (the voice watcher, the Telegram bot) fix their environment at startup and never re-read
.env— unlike cron-triggered agents, which get a fresh environment every run. - If a daemon had been running since before
VAULT_GIT_DIR(two-repo mode) was configured, it kept committing against the engine repo's own.git, where the vault-content folders are gitignored by design. Every commit call saw "nothing to stage" and returned success — extraction "worked," the note was marked processed, and the actual content never landed anywhere durable. - A new startup guard checks the real invariant directly (whether the vault-content folder is gitignored by whichever repo git resolves to) and aborts loud, with a Telegram alert, instead of losing work silently. If you have long-running daemons up when you change
.env, restart them — this guard will now tell you if you forgot.
Self-healing loop deadlocks
- Retrospective and Implementer could deadlock each other in two-repo mode: Implementer intentionally leaves certain engine self-heals uncommitted for human review, and Retro refused to run on any dirty worktree. Root cause was actually one level deeper — Retro's "anything changed since last run" check only counted commits in the engine repo, so in two-repo mode it saw zero activity most nights and silently skipped, even with a full backlog of real vault changes.
- Extraction retries could deadlock on a single auto-regenerated file:
Meta/MANIFEST.mdis rewritten every run and never committed, but wasn't on the clean-worktree guard's whitelist, so it could trip every retry in a loop. - Fixed two silent crashes that were quietly killing Retrospective's and Task-Enricher's heartbeats.
Billing correctness
invoke-agent.sh's "subscription" strategy could still get billed as metered API, because the CLI picked up an inheritedANTHROPIC_API_KEYfrom.enveven when you intended to run on your Pro/Max login. Now unset before that path runs (opt out withPREFER_API_BILLING=1).- Telegram's fast triage mode depended on prepaid API credits for streaming; once those ran out, every message hard-failed instead of falling back. Triage now runs on the same subscription-backed CLI path as everything else by default.
Also in this release
drip-extract.sh: a budget-paced backlog drainer that spreads unprocessed notes across a nightly low-usage window instead of bursting into the session limit, with a self-correcting backstop if it trips one anyway.- The Extractor now gets a pre-built Canon index injected directly into its prompt for duplicate-checking, instead of exploring the vault with
find/grepon every note. - Vault persona and language-detection rules are now generic/configurable rather than hardcoded to a single person or language — easier to adapt after the "make it yours" personalize step.
AutoADHD - Windows Compatible with Obsidian integration
v1.0.0: Runs on Windows/WSL, plus monitoring, Obsidian sync, and a public/private split
AutoADHD began as a macOS-only system. This forked release makes it run on Windows under WSL2, shows you
whether the agents are actually firing, mirrors your knowledge base into Obsidian, and lets you keep
the system public while your vault stays private.
Runs on WSL2, not just macOS.
- cron replaces launchd. install-cron.sh sets up every scheduled job.
- GPU transcription on NVIDIA/CUDA (previously Apple Silicon only).
- Fixed the macOS-isms that silently broke on Linux: BSD sed -i '', stat -f %m (it returned garbage
and crashed the briefing), and launchd-only health checks. - A venv-aware cron wrapper loads .env and the Python environment for every job.
- macOS still works. The changes are additive.
The pipeline stays up
- Telegram bot token fix. It read the wrong variable and exited on startup, so it never ran.
- Voice watcher is now a persistent poller, not the launchd one-shot that died instantly on WSL.
- A setsid-based keepalive restarts the bot and watcher if they drop.
- Whisper honors WHISPER_LANGUAGE and defaults to English. It was hardcoded to German.
Heartbeat monitoring
- Every agent writes a heartbeat on a successful run.
- The daily briefing surfaces stale agents. Scheduled agents alarm when overdue. On-demand agents
report last-run without false alarms.
Obsidian integration
- A configurable one-way publish drops your Canon, Thinking, Articles, and a live HOME dashboard
into a dedicated folder in your Obsidian vault. - Daily briefings land in your Obsidian inbox.
- Hard guards keep the publish scoped to its own folder. It never touches the rest of your vault.
Cost reporting
- cost-report.sh prices agent activity from the token log at current API rates and projects a
monthly figure, so you can weigh metered API against a flat subscription.
Public system, private vault (optional)
- A two-repo split keeps the engine in a public repo and your personal notes in a separate private
repo, both in one working tree. - Opt in with VAULT_GIT_DIR. Leave it unset and behavior is unchanged.
- Full guide in Meta/Two-Repo-Setup.md.
New configuration (see .env.example)
OBSIDIAN_VAULT, OBSIDIAN_SUBDIR, OBSIDIAN_INBOX, OBSIDIAN_PUBLISH, WHISPER_LANGUAGE, WHISPER_DEVICE,
VAULT_GIT_DIR.
Notes
- The repo ships the system only. Bring your own vault (single-repo), or set up a private vault repo
(two-repo).