Rich forms the agent asks the user to fill, replacing Claude Code's
interactive AskUserQuestion for spawned sessions:
- backend/forms.py + /api/forms REST (create / list / get with waitSecs
long-poll / submit / cancel), JSON sidecar store at /data/forms.json,
'form' SSE events; field types: text textarea number select multiselect
radio checkbox slider file date, answers validated server-side
- conversation viewer renders the ask-form Bash call as a live inline form
card (submit with confirm recap, cancel, file uploads via /api/upload);
answers stay in the thread read-only after submit; wait/cancel subcommands
render as compact status strips; new 'Form cards' visibility switch
- ?form=<id> query param (the notification deep link) opens the form
focused in a full-screen modal
- sidecar disallows AskUserQuestion on spawned claude runs
(SIDECAR_DISALLOWED_TOOLS to override)
- mock backend: /api/forms routes + seeded pending/submitted/cancelled
forms and kitchen-sink thread cards (SEED_VERSION 7)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>