Local services and host daemons for Baldur.
  • Rust 53.6%
  • TypeScript 31%
  • CSS 11%
  • Shell 3.5%
  • HTML 0.9%
Find a file
Kai 7c882130f4 fix(deck): tolerate a UTF-8 BOM in settings.json
Found by editing the file the obvious way: PowerShell's
`Set-Content -Encoding utf8` writes a BOM, serde_json treats it as a
syntax error, and every preference silently reverted to defaults. Notepad
does the same thing.

The recovery path worked exactly as designed — the file was preserved as
settings.json.bad rather than overwritten — but "you used the wrong
editor" is not corruption, and hand-editing this file is a workflow the
docs explicitly describe. The BOM is now stripped before parsing.

Verified after the fix: a BOM-free file with dockCorner topLeft docks the
orb at 18,18 on launch and an accentColor of #dca561 restyles the
launcher, with settings.json left intact.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 18:53:41 -04:00
.hermes/plans docs: initial plan for tmux-console service 2026-08-16 14:46:56 -04:00
apps/tmux-hud fix(deck): tolerate a UTF-8 BOM in settings.json 2026-08-16 18:53:41 -04:00
scripts docs: update AGENT.md files + README for Tauri world 2026-08-16 16:57:30 -04:00
.gitignore chore: delete v1 python bridge + web ui (superseded by Tauri app) 2026-08-16 16:29:02 -04:00
AGENT.md chore: delete v1 python bridge + web ui (superseded by Tauri app) 2026-08-16 16:29:02 -04:00
IDEA.md chore: scaffold project + project AGENT.md 2026-08-16 14:53:26 -04:00
README.md feat(deck): control-deck orb + launcher, and fix the blank pop-out 2026-08-16 17:12:37 -04:00

local_tools

Local desktop tools for Baldur (Windows 11, user shado).

Everything here is single-host and unauthenticated by design. See AGENT.md for the architecture and conventions.

Apps

Name What it does
tmux-hud "Deck" — an always-on-top orb that expands into a launcher, with a pop-out terminal per tmux session

Quickstart

One binary, no daemon, no container, no ports.

./scripts/build-tmux-hud.sh
./apps/tmux-hud/src-tauri/target/release/tmux-hud.exe

Or run it with hot reload while working on it:

./scripts/dev-tmux-hud.sh

The build also produces an installer at apps/tmux-hud/src-tauri/target/release/bundle/nsis/.

Using the deck

It starts as a small orb docked above the taskbar, badged with the number of live tmux sessions. Click it to expand into the launcher; drag it to move it.

In the launcher:

  • Click a session to open its active window in a pop-out.
  • pin toggles always-on-top, ▾ collapses back to the orb, ✕ quits.
  • The box at the bottom creates a new detached session; ✕ on a row kills one.

The pop-out is the actual working surface: it renders the tmux window's output and takes input either by typing straight into the terminal or via the send box.

It is a monitor, not an attached terminal. It polls capture-pane and sends with send-keys, so there's no echo until the next poll, no live cursor, and full-screen TUIs won't be usable. That's a deliberate v1 trade — see apps/tmux-hud/AGENT.md.

The orb is deliberately not tmux-branded: the intent is a general control deck for local tooling, with tmux as its first source.

Requirements

  • Rust (stable) and VS Build Tools with the C++ workload — the build scripts expect them at F:/rust-toolchain and F:/vs-buildtools/BuildTools.
  • Node 20+.
  • WebView2 (ships with Windows 11).
  • tmux on PATH. Set TMUX_HUD_TMUX if the app can't find it — a GUI process launched from Explorer doesn't inherit Git Bash's PATH.

Adding a new tool

Create apps/<name>/, give it an AGENT.md, and add scripts/dev-<name>.sh and scripts/build-<name>.sh wrappers so nobody has to remember the toolchain setup.

Every meaningful directory gets its own AGENT.md. See AGENT.md §2.

Publishing

./scripts/publish-to-forgejo.sh

Requires $FORGEJO_TOKEN in the environment. Pushes to https://forgejo.j4f.org.uk/hraisikai/local_tools.