Roadmap
Dates are intentions, not promises. For the current feature and compatibility status, see the overview and changelog. Releases are small and frequent; 0.1.0 (2026-10-15) is the first milestone.
M0: design — done for v0
- Architecture document
- Initial decisions recorded (ADR 0001–0007)
- RFCs opened for the remaining open questions in
architecture.md - OS Skills manifest format v1 (v0 is in use)
M1: the agent seat — mechanism proven, in daily use on the dev machine
- slate-desktop: transient seat with virtual pointer and keyboard
- Per-window capture via ext-image-copy-capture, cropped to the window geometry
- MCP server: windows / screenshot / click / move / scroll / type / key / close / focus / window_set / arrange / launch / seats / status / takeover_cancel
- Unicode typing via generated keymaps; ASCII through a real US keymap (Firefox ignores made-up keycodes); key combos
- Long-lived agent seat:
slate-desktop daemonas a supervised user service (apps only honour seats present at their start) - User-seat fallback for first-seat-only toolkits (GTK4), gated as Confirm
- Takeover indicator: panel blinks "controlling", sway
controllingmode, Esc hands control back and blocks retries - Focus-aware input: per-seat focus from the compositor, focus-then-verify before typing, post-action screenshots
- The agent's background screen: headless output,
desktop_launch where,desktop_show/desktop_hide, per-output pointers - Demos: Claude Code and Codex drive a terminal and Firefox through the agent seat from slash
- AT-SPI2: elements, read, element actions and EditableText over the bus; GTK3, GTK4, Firefox verified
- sway patch: security-context clients see only the agent seat (ADR 0007)
- Ghost cursor rendering (sway patch)
- Toolkit compatibility list: Qt, Chromium/Electron, Flatpak (GTK3 and foot verified; GTK4 needs the user seat)
M2: slated — core done
- Approval broker serving Claude Code's permission-prompt tool
- Tier policy (Observe / Reversible / Confirm), command-aware shell classifier,
~/.config/slate/policy.toml -
/auto on|off: per-session bypass, audited - Audit log,
slate audit,/audit,/tasks - btrfs snapshot before the first non-observe call of a task,
/undo,/undo --preview, pruning - Memory: remember / recall / forget MCP tools,
/rememberand/memories, listed at the start of every task - systemd user service, notifications for terminal tasks, quiet tasks for the prompt
- Root for system changes with the user's consent: sudo through the
slate-askpassdialog - Codex approvals (Codex exec has no approval channel yet; runs under its sandbox)
- Session context server (active windows, recent outputs); context is a per-turn delta today
- Agent identity: separate uid / Landlock / cgroup
M3: slash — done for v0
- Input routing: bare /
//!/@ - Backend adapters: Claude Code (stream-json, session resume, hooks, permission tool, MCP) and Codex (exec --json, thread resume, MCP)
-
!in the real shell on a pty; output captured for the agent; cwd and exported env persist - Login-shell compatibility: non-interactive execs the POSIX shell; installed as
/run/current-system/sw/bin/slash - Answer-first rendering, tool calls as one-liners,
/verbose, streaming text,thinkingevents when the backend streams reasoning - Model selection (default sonnet),
/model,/agent -
slash --serve: JSON-lines session protocol for GUI clients - Identity prompt: slash is the shell of SlateOS; per-turn context delta
- Conversation history across prompt sessions
M3b: the desktop
- Phase 1: sway as a stacking desktop, waybar, fuzzel, mako, wallpaper, greetd autologin,
services.slate.desktop.enable - Phase 2: the Slate prompt (Siri-style overlay: one exchange at a time, approvals as buttons, passive reappearance, click-elsewhere dismiss), panel status module, settings app (display with confirm-or-revert and a HiDPI preset, sound, network, memories)
- Phase 3: SlateOS identity, quiet dark theme (Inter, JetBrains Mono, Font Awesome), AI settings page (backend, models, sign-in, verbose, bypass approvals)
- Slate's own notification surface for terminal tasks (mako today)
- Rust rewrite of the prompt and settings once the design settles
- Agent-aware window markers and "hand this window to the agent"
M4: SlateOS as a product
- NixOS module + flake:
services.slate.enable, login shell, user services, desktop profile, SlateOS branding - Base distribution: NixOS (ADR 0004)
- Root with consent (sudo askpass); polkit agent for GUI requests still open
- Compositor patches upstreamed or carried (seat filtering, ghost cursor)
- Base OS Skills: browser, files, mail, calendar, printing, Bluetooth, power
- Installable image and installer (homes as user-owned btrfs subvolumes, skills preinstalled, agent sign-in on first boot)
-
0.1.0, the first milestone (2026-10-15)
Later
- Multi-agent, multi-seat
- Skill sharing
- Non-wlroots compositor support if the protocols land upstream