Skip to content

camelot 0.2.0

Choose a tag to compare

@trans trans released this 22 Sep 00:29
· 21 commits to main since this release

The daemon: camelot now remembers what you've been doing, not just what's on screen.

New commands

  • daemon — background service (systemd user unit included: systemctl --user enable --now camelot). Keeps the bus connection warm, records window switches, focus changes and edits into an in-memory history, and answers every command over a private socket. When it's running, the CLI and the MCP tools go through it; when it isn't, everything works as in 0.1.
  • recent — a digest of the last minute (or -s N): windows, focus, edits folded per widget with count, span and the last text typed. Also an MCP tool, so an agent can ask "what was I just doing?"
  • status — daemon state: uptime, history fill, recording on/paused, log location, ignore list.
  • pause / resume — stop and restart recording without stopping the daemon. reload — re-read the config in place. These are user controls and deliberately not MCP tools.

Privacy

  • ~/.config/camelot/config.yaml: ignore (app-name globs: redacted everywhere, never recorded), retention (default 30m — history is time-bounded as well as count-bounded, and in memory only), text: false (record that you typed, not what), and log (opt-in durable JSONL record, off by default, 0600).
  • Password fields stay redacted in snapshots and in the event stream.

Browsers work out of the box when the daemon runs: it turns on toolkit-accessibility at startup if needed (logged; accessibility: false opts out; never turned off).

Under the hood

  • One command runner behind the CLI, MCP and the daemon socket, so they cannot drift.
  • The event pump waits on GLib's own fds inside Crystal's event loop — no polling, no second thread, ~0.2% CPU idle.
  • Builds against both current (2.60) and LTS (2.52) libatspi.