Repository navigation
v0.3.0
The observation layer's core: foreman now tells you what every agent is doing — working,
waiting for you, done, or gone — without attaching. Built on the testing foundation laid the
same day (25+ Go tests behind a tmux seam, CI on every PR), and shaken down live against real
Claude Code sessions, including a genuine permission prompt.
Fixed
- Scripted
newno longer prompts (or worse, auto-goes)./dev/nullis a character
device, so the old TTY check misfired onfm <p> new <role> < /dev/null— showing the
go to X? [Y/n]prompt, reading EOF as default-yes, and failing withopen terminal failed.
Now uses a real terminal check, and an EOF/read error on the prompt never means yes. Found by
the observation-layer live shakedown. Closes #28.
Added
-
Observation: reliable participant states. New
Statesnapshot in core —exited(pane
dead),done(the role's command finished and dropped back to the shell),shell(manual
terminal), elseworking. Computed fresh from the tmux server on demand, nothing stored.
Closes #1. -
Observation: the
waitingstate. An agent that wants your attention is detected
title-first — Claude Code sets a braille spinner while busy and✳when idle — with a
small, table-tested pane-content fallback (selector cursor,[y/n]prompts in the last
visible lines) for agents that don't announce themselves. Defaults toworkingwhen unsure.
Closes #2. -
Participant state in
foreman list. The project list gains a STATE column next to the
pane title; the global list marks only the states that want a glance on the role tag —
planner⚠(waiting),build○(done) — soworkingstays visually quiet. Closes #3. -
CI. A GitHub Actions
checkworkflow runsmake check(gofmt + vet + test) on every PR
and push tomain— the automated version of the workflow doc's PR gate. Closes #21. -
Tests for
internal/core. Table-driven tests for project inference (projectByRoot,
CurrentProject— all three sources), config parsing,WorkDirprecedence, window/status
parsing andFindWindow's role-beats-name rule,ListProjectssorting/filtering,HumanAge,
andWindowStatus. Tmux-facing code is tested through a new seam (tmuxRun) that feeds
canned tmux output — the same seam the observation layer will build on.make checkhas
teeth now. Closes #20.