Adds GET /agents fetch + ListView picker for bare `--new` (TUI mode
without --agent). Three in-place amendments:
- ratatoskr.sessions: new `list_agents()` + `AgentInfo` frozen
dataclass with omit-when-null/empty defaults mirroring SessionInfo's
INV-001/INV-002 origin-conditional pattern. Non-200 responses raise
the existing SessionApiFailed (no new exception).
- ratatoskr.cli: `_parse_args` softens `--agent` from absolute to
mode-conditional — required for `--send --new`, optional for bare
`--new`, forbidden with `--session` (unchanged INV-004).
- ratatoskr.tui: new `AgentPickerApp(App[str | None])` — separate
Textual App (not Screen-within-RatatoskrApp) so list_agents errors
land on real stderr before any alt-screen opens (preserves issue
#6's INV-001). `_resolve_then_run` gains a pre-create branch:
fetch agents → empty list → exit 13; non-200 → exit 20; network
error → exit 21; picker dismissed → exit 0; otherwise thread chosen
agent_id into create_session.
Contract: docs/contracts/issues/8.contract.md (drift-check clean).
Tests: +18 (227 total, was 209). Live smoke against personal Worldtree
(:8081) returned 12 agents; programmatic picker drive auto-picked lofn
and created a real session with `end_user_id="ratatoskr-tui"`.