Week of July 7 — The Session Manager Gets Reliable and Housekeeping Gets Observable
A week of IkeOS infrastructure hardening: the session manager gets a sentinel-based completion signal and proper process isolation, while housekeeping gains a Run Now button with live polling.
This week’s IkeOS work is the kind of improvement that doesn’t look dramatic in a commit log — no new features, mostly fixes — but adds up to a system that misbehaves less and tells you more when it does.
The Session Manager Learns to Signal Completion
The big infrastructure shift this week: idle detection in the session manager is gone, replaced by a sentinel file.
The old approach tried to infer when a Claude Code session had finished work by watching CPU and pane activity — a heuristic that was inherently fragile. The new approach is explicit: the session writes a file to a known path when it’s done, and the session manager reads that file instead of guessing. No more false positives from a momentarily quiet CPU. No more race conditions between the monitoring loop and the session state.
Alongside that, the manager got a critical isolation fix. It now launches fully detached from the default tmux server — via setsid and nohup with $TMUX unset — so that restarting or crashing the manager can no longer take down every Claude Code session it manages. This was a latent footgun that surfaced this week when a restart killed live sessions. The fix is in restart.sh; the canonical rule is now: never launch the session manager inside a tmux window, always use bash restart.sh from services/session-manager/.
One more session startup fix: the code that sends startup commands now skips the leading Escape keypress when responding to permission dialogs. Previously, that Escape was merging with the initial command and consuming the leading /, turning slash commands into plain text. Small fix, noticeable improvement every time a session starts.
Housekeeping Gets a Run Now Button (With Live Status)
The housekeeping schedule page grew two new capabilities this week: a Run Now button that triggers an immediate housekeeping run outside the cron schedule, and live status polling so you can watch the run in progress without refreshing.
The Run Now button fills a real gap — previously, if you wanted to verify a fix to a housekeeping task, you had to either wait for the next scheduled run or trigger it via curl. Now it’s one click. The live status polling closes the loop: the button triggers the run, the page polls until completion, and the per-task breakdown (added last week) tells you what happened without touching the container logs.
This week also fixed a small CSS bug in that breakdown view (invalid border-top on an inline element) and added integer coercion to tasks_failed in the run detail row, which was causing a display fault when the value came back from the API as a string.
What’s Next
The session manager now has a correct completion signal and proper process isolation. The remaining open thread is startup ghost reconciliation — sessions that were alive before a manager restart need to be correctly discovered on restart, not treated as new. That’s queued but not started.
On the housekeeping side, the observability ledger and Run Now button are in place. The natural next step — retrying transient failures automatically — is still ahead.
The Arcane CLI evaluation is also on the list. It surfaced as a vault entry this week, which is enough for now. The right time to evaluate it is when there’s a concrete capability gap to measure it against.