Docs/Guides

Long-form drafts

Outline, draft and revise long documents.

Long documents — reports, proposals, chapters — come out best when you build them in passes instead of asking for everything at once. This guide shows the workflow in the Vaelor workspace, and the same pattern over the API.

1. Start with an outline#

Ask for structure before prose. An outline is cheap to change, and it gives every later request a shared map.

Text
I'm writing a 3,000-word proposal to fund a community bike workshop.
Audience: city council. Tone: practical, numbers-first.
Give me a section outline with one sentence per section on what it must prove.

Push back on the outline until it's right: merge sections, reorder them, or cut the ones that don't earn their place.

2. Draft one section at a time#

Each reply is capped at about 4,096 tokens (roughly 3,000 words), so drafting section by section keeps every part detailed and inside the limit.

Text
Draft section 3, "Costs and funding", at about 500 words.
Use a table for the first-year budget.

Use Medium for drafting. Switch to High with reasoning on for sections that need careful argument or numbers that must add up.

3. Revise with specific instructions#

Vague feedback gets vague edits. Say what to change and why.

  • "Cut this to 300 words; keep the budget table."
  • "The second paragraph assumes the council knows what a co-op is. Explain it in one sentence."
  • "Rewrite the opener so it leads with the waiting-list number."

4. Attach your sources#

Upload the reports, spreadsheets or notes the draft depends on, and ask the model to cite them. Attached documents are parsed to text and count toward input tokens.

Over the API#

Keep the conversation in your own storage and send it as context on every chat request. Send the outline as the first assistant turn so every section stays consistent.

TypeScript
const context = [
  { role: 'user', content: 'Outline a 3,000-word proposal for a community bike workshop.' },
  { role: 'assistant', content: outline }
]

for (const section of sections) {
  const draft = await chat({ text: `Draft "${section}" at about 500 words.`, context, model: 'medium' })
  context.push({ role: 'user', content: `Draft "${section}".` }, { role: 'assistant', content: draft })
}

Context counts as input tokens on every request. For very long documents, send the outline and the neighbouring sections rather than the whole draft.

Was this page helpful?

Questions? Contact support

Last updated October 20, 2026