
Search by name, tag, category or type
Source and install need .
pnpm dlx shadcn@latest add @assembli/reply-composerA calm reply composer where an agent drafts in your voice. The draft is plain, editable text; Redraft changes what the reply does, its tone and length. A line the agent proposes waits as ghost text until you press Tab, and the sources it drew on sit one click away. Sends report who wrote how much; an agent at the controls can only request approval.
Other props pass through to the root element.
threadId*
string
subject*
string
to*
Person[]
cc
Person[]
me
Person
Default ME
The mailbox owner; signs the draft.
intents*
ReplyIntent[]
defaultIntent
string
defaultTone
ReplyTone
Default "warm"
defaultLength
ReplyLength
Default "medium"
context
ContextSource[]
Default []
voiceNote
string
Shown above the sources, e.g. "Learned from 214 of your sent emails".
draft
(request: DraftRequest) => AsyncIterable<string> | Promise<string>
Your model. Return the whole draft (it is revealed progressively) or stream chunks. Without it the draft is composed from the intent's body with composeDraft.
actor
Actor
Default { kind: "human", name: ME.name }
Who is operating the composer. An agent can't send: its Send becomes a request for approval.
agent
MailAgent
Default REPLIES
The agent that writes drafts.
sendLaterOptions
SendLaterOption[]
Default LATER
onAction
(action: MailAction) => void
| Description | |||
|---|---|---|---|
| threadId* | string | – | |
| subject* | string | – | |
| to* | Person[] | – | |
| cc | Person[] | – | |
| me | Person | ME | The mailbox owner; signs the draft. |
| intents* | ReplyIntent[] | – | |
| defaultIntent | string | – | |
| defaultTone | ReplyTone | "warm" | |
| defaultLength | ReplyLength | "medium" | |
| context | ContextSource[] | [] | |
| voiceNote | string | – | Shown above the sources, e.g. "Learned from 214 of your sent emails". |
| draft | (request: DraftRequest) => AsyncIterable<string> | Promise<string> | – | Your model. Return the whole draft (it is revealed progressively) or stream chunks. Without it the draft is composed from the intent's |
| actor | Actor | { kind: "human", name: ME.name } | Who is operating the composer. An agent can't send: its Send becomes a request for approval. |
| agent | MailAgent | REPLIES | The agent that writes drafts. |
| sendLaterOptions | SendLaterOption[] | LATER | |
| onAction | (action: MailAction) => void | – |