Files
Gabriel Vidal 8dccce2334 feat(ctas): replace the conversation-hook scheduler with end-of-conversation CTAs
A hook resumed every finished run on a timer — unasked-for, and expensive: a
`--resume` never hits the finished run's prompt cache, so each firing re-created
the whole transcript as fresh input tokens. The prompts stay, the scheduler goes.

A CTA is a prompt file plus a button under the last message of a finished
conversation: click loads its prompt into the resume box (editable before it is
sent), long-press fires it at the session in the background. The same prompts are
selectable as `cta:<id>` tags in every composer.

The seeded `complete` CTA also does the post-processing the hook never could
afford: `conv-scaffold` reduces the conversation to markdown — metadata, its
prompts, merged bash/tool/subagent summaries, one squashed diff across every
commit it produced — and one subagent fills in the Summary/Analysis and publishes
it onto `meta.summary`, rendered under the thread.

- backend: ctas.py (store + seeded Complete), scaffold.py (+ /scaffold, PUT
  /summary), /api/ctas CRUD/run/prompt/reorder; hooks.py and its scheduler,
  pending queue and routes deleted (read-only /api/claude-hooks stays)
- frontend: ConversationCtas section, Settings → CTAs, cta tags, CtaBadge
- scripts/conv-scaffold.sh: scaffold + publish CLI

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 21:46:27 +02:00
..