specs/005-agent-manifests-proc/tasks.md
Tasks: Agent Manifests + Live /proc Refresh
Input: spec.md + plan.md (this dir)
Seams under test: agent::parse_manifest; OverlayAdapter as
AgentAdapter; Ctx::adapter routing; procscan helpers against own pid;
socket-level promotion/cwd/malformed tests; integration status output.
Phase 1: Setup
- T001 Add
toml = "0.8"tosignaltty-agent/Cargo.toml(workspace already pins it viasignaltty-plugin).
Phase 2: Foundational
- T002 [US1]
Manifest+parse_manifestincrates/signaltty-agent/src/manifest.rs(RED: valid/legacy-compat/bad kind/bad enum/unknown-fields-ignored; GREEN). - T003 [US1]
OverlayAdapter+ field-by-field fallthrough + unit tests (identify merge, lifecycle override vs builtin, session key, resume template, display override, channel passthrough). - T004 [US1]
detect_kind_with_overlays+agents_dir()inpaths.rs(SIGNALTTY_AGENTS_DIRoverride) +Config.agents_dir. - T005 [US2]
procscan.rs:deepest_descendant,proc_argv0,proc_cwd,scan(change-onlypane.updated) + unit tests against own pid (no fixtures that depend on machine state).
Phase 3: US1 - Manifest overlays (P1) 🎯 MVP
- T006 [US1] Server startup load (isolated per-file failures, logged) +
Ctx::adapter(); route hook-event/report-session/decision-answer/spawn detection through it. - T007 [US1] Integration: manifest maps
sleep→codex in temp agents dir → spawn promotes at spawn; hook override hook works; malformed file doesn't block startup. - T008 [US1]
integration statuslists manifests (name/kind/file).
Phase 4: US2 - Live /proc refresh (P2)
- T009 [US2] 10s tick in
server.rs(scan→ broadcast +mark_persistonly when non-empty). - T010 [US2] Integration: generic
sleeppane with no manifest keeps kind but gets cwd; with manifest promotes to codex with onepane.updated(subscribe + assert single event); cwd change viash -c 'cd /tmp; sleep 30'visible within 15s.
Phase 5: Polish
- T011 Docs:
docs/07-agents.mdmanifest section +docs/adr/0009-agent-manifests.md. - T012 Gates: fmt, clippy (zero new), full tests; commits
area: what.