## What to build Give the client and daemon one enforceable protocol contract so an agent cannot update one side while silently leaving the other behind. ## Acceptance criteria - [ ] The repository declares a single authoritative source for WebSocket message schemas. - [ ] TypeScript and Python protocol definitions are generated from that source or checked against it automatically. - [ ] CI fails with a useful message when message kinds, required fields, optional fields, or value constraints drift. - [ ] Representative client-to-server and server-to-client messages are covered, including rejection of invalid payloads. - [ ] The documented workflow for changing the protocol points to executable commands rather than copied schema documentation. ## Blocked by - None — can start immediately.
What to build
Give the client and daemon one enforceable protocol contract so an agent cannot update one side while silently leaving the other behind.
Acceptance criteria
Blocked by