v1.2.0 — Agent Graph
A live Agent Graph tab for Claude Code sessions, Hyprland-native release banners, and the agent stack fully split behind its own opt-in install layer.
Highlights
Agent Graph — every Bash/Read/Edit call your Claude Code session makes lands on a live, zoomable node graph as it happens, colored by tool category and session and fading with recency. Finished sessions aren't gone — scrub back through the whole run with the replay transport, now animated instead of snapping to the end state:
agent-polish.mp4
aphotic whatsnew — Hyprland-native release-note banners (hyprctl notify, the same mechanism Hyprland uses for its own announcements), shown once automatically the first time you land on a new version.
Opt-in: how the agent stack turns on
None of this installs or runs unless you ask for it. It all lives behind the installer's ai layer:
- At install time, the interactive wizard now leads with a preset menu (
Everything/Daily driver/Cherry-pick) instead of walking every layer question cold — pickingEverythingor hand-enablingaiis what turns this on. Scriptable installs useinstall.sh --with ai(or--with gaming,dev,ai,exploitetc.) instead of the prompts. - What "on" actually does:
install.shwires Claude Code's hooks into~/.claude/settings.json(merged withjq, never clobbering hooks you already have) and enables a 15-minute local usage-tracking timer. Nothing here reads or transmits prompts/responses — only aggregate token counts and tool-call metadata (name, duration, session id) ever leave the hook. - On the shell side,
services/InstallProfile.qmlreadsaphotic.toml's[install] layersand gates every AI surface on it — the bar's agent icon, AI Chat, Intelligence, and the new Agent Graph tab are absent, not just idle, when the layer is off. A fresh git clone with noaphotic.tomlyet is treated as "on" so a first-timeqs -c aphoticrun still shows the full shell. - Turning it off is symmetric — de-select
aion a re-run ofinstall.sh(oraphotic ai/ editaphotic.tomldirectly) and the installer removes the hook entries it previously added and disables the timer. Nothing is left half-wired.
See docs/AGENT_TRACKING.md for the full contract (event schema, the three files the hook writes, replay format) if you're extending it or wiring up a second provider.
Also in this release
- Dock bar: fixed pointer input dying outside a narrow band in the middle of the pill, and window-overlay/right-edge icon clipping
- Dock bar: scroll-to-volume and real per-app status icons
- Media bar icon: right-click opens the player; live per-session agent status wired into the popout
- CLI: fixed a duplicate-daemon spawn, an SDDM permission edge case, and
aphotic aiprofile handling - Installer: stopped forcing
nvidia-open-dkmson top of an already-installed driver - A beta-status disclaimer, plus assorted stale-README fixes
Full history: docs/ROADMAP.md and the README Roadmap section.
Note: this release also folds in the last batch of work from the now-retired test staging branch — see CONTRIBUTING.md for the current (PR-only, direct-to-main) workflow going forward.