Meet the attune family — and the dashboard that ties it together
TL;DR: attune-gui 0.5.0 is the
unified local dashboard for the attune-* documentation toolchain. Server-rendered
Jinja2, 65 KB wheel, no npm anywhere. pip install attune-gui and visit
http://localhost:8765/.
The problem
Documentation rots faster than code, and the rate climbs with every package you ship. We maintain a RAG-grounded help system across four packages. On a typical morning, that meant:
- Terminal #1 to run the regen command
- Editor open to a spec we were drafting
- Browser tab on a rendered template to verify it
- Terminal #2 to check which features had stale templates
- Another tab to look at the corpus summaries
- A fifth thing to actually run the test suite
Every context switch is a chance to forget what you were doing.
So we built a single pane for the whole stack.
The attune family
| Package | Role |
|---|---|
attune-rag | RAG pipeline — keyword + semantic retrieval over a Markdown corpus |
attune-help | Runtime that ships with your package; serves help responses with progressive depth |
attune-author | AI-assisted template generator (Claude under the hood) |
attune-gui | Local dashboard tying it all together — this post |
Each package stands alone. attune-gui is what you reach for when you want to see, edit, regenerate, and ship all four at once.
What's in 0.5.0
A sidebar with seven pages. Each one consumes the same JSON API the package already exposes — the dashboard is a thin Jinja2 layer over the existing sidecar.
Health
Cross-layer probe of every attune package: version, import status, dot
indicator. Plus a corpus snapshot — workspace path, template count, whether
summaries.json is present.
Templates
The Markdown templates that drive your help system. Each row shows mtime
staleness (fresh / stale / very stale), tags from frontmatter, and a
manual-pin toggle. Pinning sets manual: true in the file's
frontmatter, and the attune-author regen pipeline respects it — your
hand-tuned templates don't get clobbered by the next AI pass.
Specs (new authoring in 0.4.0)
The spec-driven workflow we use ourselves, now first-class in the UI.
Click + New spec, type a slug, get a starter requirements.md
bootstrapped from TEMPLATE.md. Click + Design to add the next phase
when requirements are done. Phase ordering is enforced server-side — no
tasks before design, no design before requirements. A status dropdown in
the Preview/Edit panel transitions a phase through draft → in-review → approved → complete with an atomic write.
Summaries
Inline-editable view of summaries.json with a persistent banner reminding
you that the file is regenerated by attune-author polish. Edit anyway if
you need to; the warning makes the trade-off explicit.
Living Docs
The opinionated layer. Workspace editor. Manual scan trigger. Health breakdown by persona (End User / Developer / Support). Review queue for auto-applied changes — approve or revert. RAG quality gates for faithfulness and strict accuracy with visible thresholds; ship with confidence or stop the line.
Commands & Jobs
Every registered attune command shows up as a card. Click to run, watch progress in the Jobs page (with a "Last output" column that updates every 4 seconds), cancel mid-run if you change your mind.
Why server-rendered Jinja2
We started with React + Vite. It worked. It also added an npm install
step to the wheel build, a Node toolchain to the contributor README, a
Vite dev server to the dev.sh script, and 122 KB of bundled JS to the
package.
For a single-user, local-only, developer-facing dashboard, none of that
was buying us anything. So 0.5.0 retired the React UI. The wheel went
from 122 KB to 65 KB. The build went from "make sure Node is
installed and run npm install" to "uv sync." Templates auto-reload on
edit. The whole thing is 8 HTML files, 1 CSS file, and ~30 lines of
vanilla JS in a <script> tag.
If you've been waiting for a project that proves you can ship a polished local dashboard without a JS framework — here's one.
Install
pip install attune-gui
attune-gui --open
That's it. The sidecar binds to 127.0.0.1, prints
SIDECAR_URL=http://127.0.0.1:<port>, and opens your browser. Configure
once via the Living Docs → Workspace field, persists to
~/.attune-gui/config.json, survives restarts.
For Anthropic-backed commands (author.regen, author.maintain), drop
your ANTHROPIC_API_KEY in .env — the sidecar auto-loads it from any
of: ./.env, <repo-root>/.env, ~/.attune-gui/.env, ~/.attune/.env.
Use it inside Claude Code
If you live in Claude Code, install the
attune-gui-plugin
to launch the dashboard inside the Cowork preview pane. Type
/attune-gui or just say "open the dashboard" — the skill triggers
automatically.
What's next
- Test coverage for the page templates (currently API-only at 124 tests)
- Spec authoring v2 — split-pane editor with live preview, suggested phase transitions based on completion checklist
- Living Docs auto-scan on save — watch the workspace, scan when you commit
- Quality gate alerts — Slack/email when faithfulness drops below threshold
Roadmap is open: github.com/Smart-AI-Memory/attune-gui/discussions
Links
- 📦 PyPI: https://pypi.org/project/attune-gui/
- 🛠️ Repo: https://github.com/Smart-AI-Memory/attune-gui
- 🔌 Claude Code plugin: https://github.com/Smart-AI-Memory/attune-gui-plugin
- 📝 Changelog: https://github.com/Smart-AI-Memory/attune-gui/blob/main/CHANGELOG.md
— Patrick @ Smart AI Memory
Related Articles
From 18 Workflows to Living Docs — Why We Pivoted
Attune AI grew from a desire to improve user assistance. We treat source code as the origin for help content — generating context-sensitive docs that live where users need them.
Welcome to Smart AI Memory: Building the Future of AI-Human Collaboration
Introducing Attune AI - production-ready tools for building Level 4 Anticipatory Intelligence systems with built-in memory.