Skip to content

feat(reply-drafts): prepare replies you owe across all channels#175

Open
yustme wants to merge 2 commits into
Raven-Scout:mainfrom
yustme:feat/reply-drafts
Open

feat(reply-drafts): prepare replies you owe across all channels#175
yustme wants to merge 2 commits into
Raven-Scout:mainfrom
yustme:feat/reply-drafts

Conversation

@yustme

@yustme yustme commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

Scout now prepares draft replies for conversations where you owe an answer, on the background runs, so you can review them in /scout-work (or the macOS app), lightly edit, and send them yourself. Scout never sends and never creates a native Gmail/Slack draft — a text file in the vault is the only output.

What it detects

Two loop types, across every enabled channel (Gmail, Slack, Linear, GitHub, WhatsApp/Messages):

  • direct-debt — someone asked you something and you have not replied.
  • promise-answered — you promised to follow up, asked elsewhere, and the answer has now arrived (Scout pairs the promise with the answer).

How it works

  • New core phase phases/core/reply-drafts.md (briefing + consolidation) — runs after the connector scans and the action-items list, verifies the debt is real (reads the thread tail, applies the cold-outreach / leave-state filters), then writes one drafts/<TAG>.md per loop and ensures a matching action-item row with a (reply drafted → [[drafts/<TAG>]]) pointer.
  • drafts/<TAG>.md frontmatter is the contract the app + /scout-work key on: tag, channel, loop_type, to, thread_ref, subject, status, created, context_answer_ref. Status vocabulary is draft | sent | dismissed.
  • templates/drafts/README.md.tmpl documents the contract and is seeded into the vault; drafts/ + drafts/archive/ are scaffolded on install.
  • /scout-work gains a Reply item type: it shows the full drafted text and accepts sent / edit: … / dismiss / skip. It never calls a send tool.

Hard constraint

Scout only ever writes draft text and flips status:. No sending, no native drafts — that stays the user’s action.

Tests

  • Assembly: the phase lands in SKILL.md (briefing + consolidation), after action-items, and is excluded from DREAMING.md / RESEARCH.md.
  • Bootstrap: drafts/ + drafts/archive/ + drafts/README.md are scaffolded on install.
  • Full unit suite green (864 passed).

Companion

Paired with the macOS app PR (Raven-Scout/Scout) that adds a Reply Drafts section rendering these files and flipping their status.

Scout now detects open conversational loops where the user owes someone a
reply and prepares a ready-to-send draft into drafts/<TAG>.md. Two loop types:
direct-debt (someone asked, no reply yet) and promise-answered (promised ->
asked elsewhere -> answer arrived). Reviewed in /scout-work; the user always
sends himself — Scout never sends or creates native drafts.

- phases/core/reply-drafts.md: detection + drafting synthesis phase
  (mode: briefing+consolidation, runs after action-items)
- templates/drafts/README.md.tmpl: draft file contract, seeded into vault
- bootstrap: scaffold drafts/ + drafts/archive/, seed README
- commands/scout-work.md: Reply item type (show draft, sent/edit/skip/dismiss,
  no send tool ever)
- tests: assembly + scaffolding coverage
Email/Slack/WhatsApp draft bodies are now plain sendable text (no markdown,
no headings/bullets/backticks, no HTML comments) so they look right when sent
as-is; markdown stays allowed only for linear/github. Recipients/CC/subject
live in frontmatter — adds a cc: field to preserve the thread's other
recipients instead of dropping them or listing them inline.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant