aos-eval: every subcommand fails on Windows, because cli.py imports termios at load #1169

Open
opened 2026-08-20 13:03:16 +00:00 by coilyco-ops · 0 comments
Owner

aos-eval cannot run at all on the native Windows tower. Every subcommand fails at import, not just annotate.

$ just aos-eval boundaries derive eval/boundaries.yaml --out slots.yaml
  File "aos-eval/aos_eval/cli.py", line 18, in <module>
    from aos_eval import annotate as annotate_mod
  File "aos-eval/aos_eval/annotate.py", line 10, in <module>
    import termios
ModuleNotFoundError: No module named 'termios'

Why it takes the whole CLI down

cli.py imports annotate at module level, and annotate.py imports termios at module level. termios is POSIX-only. So boundaries derive, boundaries check, taxonomy, and export all die on Windows even though none of them needs a terminal at all. Only annotate genuinely wants raw keyboard input.

Impact

Boundary derivation and coverage checking are exactly the parts you want on the machine where the roster lives, and the tower is a native Windows host. Right now the only workaround is calling the library directly:

uv run --project aos-eval python -c "from aos_eval.boundaries import load_declaration, derive_slots; ..."

which is how evaluations/reflow-v3/boundaries.yaml in agent-compose was validated.

Fix shape

Defer the termios import into the function that reads a keypress, or import annotate lazily inside the annotate subcommand rather than at the top of cli.py. Either one restores every non-interactive subcommand on Windows. annotate itself can stay POSIX-only and say so when invoked.

Worth a Windows job in CI afterwards, since nothing currently catches a POSIX-only import in a cross-platform CLI.

`aos-eval` cannot run at all on the native Windows tower. Every subcommand fails at import, not just `annotate`. ``` $ just aos-eval boundaries derive eval/boundaries.yaml --out slots.yaml File "aos-eval/aos_eval/cli.py", line 18, in <module> from aos_eval import annotate as annotate_mod File "aos-eval/aos_eval/annotate.py", line 10, in <module> import termios ModuleNotFoundError: No module named 'termios' ``` ## Why it takes the whole CLI down `cli.py` imports `annotate` at module level, and `annotate.py` imports `termios` at module level. `termios` is POSIX-only. So `boundaries derive`, `boundaries check`, `taxonomy`, and `export` all die on Windows even though none of them needs a terminal at all. Only `annotate` genuinely wants raw keyboard input. ## Impact Boundary derivation and coverage checking are exactly the parts you want on the machine where the roster lives, and the tower is a native Windows host. Right now the only workaround is calling the library directly: ``` uv run --project aos-eval python -c "from aos_eval.boundaries import load_declaration, derive_slots; ..." ``` which is how `evaluations/reflow-v3/boundaries.yaml` in agent-compose was validated. ## Fix shape Defer the `termios` import into the function that reads a keypress, or import `annotate` lazily inside the `annotate` subcommand rather than at the top of `cli.py`. Either one restores every non-interactive subcommand on Windows. `annotate` itself can stay POSIX-only and say so when invoked. Worth a Windows job in CI afterwards, since nothing currently catches a POSIX-only import in a cross-platform CLI.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os#1169
No description provided.