camelot 0.2.0
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), andlog(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.