Review of PR #38
What the PR does
On Windows, an Obeya started without a console window of its own (a scratch Obeya, or one started without a terminal) opened a new console window for every program it ran. With Windows Terminal as the default terminal, every git call flashed a window that took the keyboard focus, several times a second while agents were working. Now Obeya starts every program hidden by default. Programs that are meant to be seen (Explorer, the terminal for a login) still open a window.
Contributor's demo: the demo video on their page (36 Terminal windows in 5 minutes before the fix, none after).
What was checked
- Merged onto the current
mainwithout conflicts. Typecheck is clean, and all 1735 tests pass. - The diff contains only this change, nothing unrelated.
- Bun's node-compatible process functions go through the same hidden-by-default path, but they say explicitly whether a window should show. So programs meant to be visible (Explorer, a login terminal) stay visible. Verified with a probe on Bun 1.4.3.
- The agents' Claude Code processes and the remote-session ssh start hidden. No part of Obeya starts a program before the default is set.
- It works with Obeya's stall monitor, which also wraps program starts.
- Codex reviewed it as a second reviewer and found the same two points, nothing more.
- Not tested on Windows here (no Windows machine). The contributor measured it on a real Windows desktop.
Open points
Installing the narration voice from the settings, and playing a voice sample there, run uv/Python
without the hide flag (plugin/skills/demo/lib/voices.ts, its exec). Each of
these steps opens a console window for a few seconds to minutes. This happens rarely, not
several times a second like git, but the PR says every program runs without a window. The fix is one option:
windowsHide: true.
The new paragraph in docs/design/running-obeya.md describes the old behaviour in the past
tense and puts the decision (a default for all calls rather than an option on each call, 2026-11-01)
in the running text. By the repo's rules, the description stays in the present tense, and the
decision goes in the chapter's Decisions list.