v0.3.0 — Web mirror
Added
-
Web mirror (opt-in). saikai can mirror its live UI to a phone or another
browser over the LAN — off by default and token-authenticated. It is
read-only until you arm browser control at the terminal with
Shift+F12;then the browser drives saikai by tap (select a row, sort a column), a
single-finger swipe to scroll, an on-screen key bar, and a
terminal-equivalent physical keyboard (arrows, Home/End, F-keys, Ctrl/Alt
combos,
Ctrl+]to leave a pane,Ctrl+Cto interrupt claude). Launch shows ascannable QR code; press
F12to bring it back. -
The mirror is safe by construction: only the local
Shift+F12can enablecontrol (a browser can never arm itself), control auto-disables after
inactivity, a LAN bind stays read-only unless you also set
SAIKAI_MIRROR_ALLOW_LAN_INPUT=1, the per-run write-key for input travels onlyover the authenticated stream (never the URL, QR, or logs), and the status bar
shows a live connected-browser count with a toast on each connect. New env
vars:
SAIKAI_MIRROR,SAIKAI_MIRROR_HOST,SAIKAI_MIRROR_PORT,SAIKAI_MIRROR_ALLOW_LAN_INPUT. -
A shared fictional demo fixture now generates the public screenshots,
deterministic headless GIF, and recording workspace without reading the
caller's real HOME or Claude history.
-
An isolated real-Claude recording guide and asciinema cast auditor reject
private paths, credentials, identities, and unapproved demo projects before
conversion.
-
docs/ARCHITECTURE.mdis now the canonical contributor reference for moduleboundaries, history semantics, PTY lifecycle, and concurrency invariants.
Changed
-
**The live-pane memory gate now reasons per-OS instead of projecting
Windows' commit-charge model onto Linux/macOS.** Linux: commit headroom
(
CommitLimit − Committed_AS) is consulted only under strict overcommit(
vm.overcommit_memory=2) — under the default heuristic mode the limit isnot enforced and
Committed_ASroutinely exceeds it on a healthy machine,which read as negative headroom and falsely closed the gate. A new
pressure check (
SAIKAI_MAX_MEM_PRESSURE, default 10) reads Linux PSI(
/proc/pressure/memorysome avg10, the stall-time metric systemd-oomdacts on) and macOS's kernel pressure level (gates on critical), refusing
a new pane when tasks are measurably stalling regardless of occupancy
numbers. The memory-load high-water default is now 95 on Linux/macOS
(85 stays on Windows): the POSIX load % is derived from the same
availability figure as the physical floor, so the old shared default
closed the gate while ~15% of RAM was still genuinely available.
-
The public story now leads with a one-line "Mission control for Claude Code"
value statement and the hero demo — which opens on the cross-project session
list — with the
claude --resumerationale moved just below. -
Help, Settings, and the READMEs explain the visual grammar consistently:
title color groups context and ASCII symbols report state.
-
Contributor-facing agent files are concise entrypoints instead of duplicate
copies of the concurrency manual.
Removed
-
The incomplete global LLM cluster mode and its dangling UI/CLI controls.
-
Internal launch-marketing notes and completed implementation plans from the
public repository surface.
Fixed
-
The filter bar no longer mis-sizes: the Sort/Status/Age dropdowns are wide
enough that long labels (e.g. "Alphabetically", "All time") no longer wrap,
and the search box is capped so it does not expand to dwarf them.
-
Claude Desktop session sync (
--sync-desktop) derives its store locationper-OS (macOS
~/Library/Application Support, Linux XDG) instead of only theWindows path, so it no longer reports "not found" on macOS where Desktop runs.
-
The mirror-URL host-clipboard copy on Linux tries
wl-copy(Wayland), thenxclip, thenxsel, instead of assumingxclipis installed. -
Public docs, in-app marker help, contributor test commands, and CI now agree
with the current marker semantics, terminal-support boundaries, and complete
tests/test_*.pysuite. -
**Tree mode no longer chains unrelated same-repo sessions into one long
list.** Parent assignment treated "same cwd + recent" as kinship and scored
a
main↔mainbranch match as strong evidence, so in a single-repositoryhistory every session linked to its nearest predecessor. A parent now
requires continuation evidence — a shared feature branch (
main/master/detached
HEADcount as no-information), or title/topic overlap — andsessions without such evidence stay roots. Genuine continuation chains
(e.g. a series of sessions iterating on the same prompt) still nest.
-
Help no longer claims that the Textual Last column is color-coded when it is
rendered as plain text.