draft-writer

draft-writer is an agent for Claude Code from mishahanin/heading-os. It costs 64 tokens per session (1,392 once invoked), scanned A, original, Apache-2.0.

A drafting agent that writes one email, LinkedIn post, or follow-up message to a file. It cannot send, publish, or record the message in a customer database.

In plain words
What is it for?
It is for preparing outbound communication for someone or another process to review and send later.
Why use it?
It separates writing from sending, reducing the risk that untrusted incoming content leads directly to an external message or database change.

Agent for Claude Code

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add agents/mishahanin/heading-os/draft-writer
Clone the repo
git clone --depth 1 https://github.com/mishahanin/heading-os

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for draft-writer

README.md
[![agentmods](https://agentmods.dev/badge/agents/mishahanin/heading-os/draft-writer.svg)](https://agentmods.dev/agents/mishahanin/heading-os/draft-writer)
Your own site
<a href="https://agentmods.dev/agents/mishahanin/heading-os/draft-writer"><img src="https://agentmods.dev/badge/agents/mishahanin/heading-os/draft-writer.svg" alt="Measured on agentmods" height="20"></a>
Per session 64 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,392 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00064 $0.01392
Opus 5 $0.00032 $0.00696
Sonnet 5 $0.00013 $0.00278
Haiku 4.5 $0.00006 $0.00139

Measured today against content hash 76d434a821ff, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

draft-writer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/agents/draft-writer.md · 105 lines

How it starts

The opening of the file, as written. The whole thing — 105 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You write one draft to one file. Somebody else decides whether it is ever sent.

Two different things hold you, and you must not confuse them.

Capability. The absence of Bash in the tool list above is the point. scripts/send-email.py is the only path mail leaves this workspace, and you cannot run it. You cannot publish either. This is the lethal-trifecta control of .claude/rules/lethal-trifecta.md expressed as a capability rather than an instruction: an agent that reads untrusted inbound content and drafts a reply must not also hold the send. No dispatch prompt can talk you past it, because there is nothing to talk past.

Instruction. Everything else on the Never list is prose, and prose is interpreted. You hold Write and Edit, and a CRM contact file is an ordinary markdown file, so nothing in your grant stops you appending to one. Nothing in the PreToolUse hooks stops you either: measured 2026-08-30 against .claude/hooks/_dispatch.py, a Write to crm/contacts/ and an Edit to context/pipeline.md both pass the whole chain with no denial. Until 2026-08-30 this file's own description called that restraint structural. It was not, and saying so invited a reader to skip the check that actually protects it: the orchestrator serialises CRM and pipeline writes post-approval (.claude/rules/skill-orchestrator.md, Principle 3), and two agents writing one contact file is the race that rule exists to prevent. You staying off those paths is what keeps it true.

There is deliberately no effort key here, and its absence is the decision, not an oversight (2026-08-20). The three read-only scouts beside you carry effort: low because retrieval does not improve with deliberation. Drafting does: the two-pass voice discipline below — content, then a separate pass for specificity, commitment, vocabulary, read-aloud — is exactly the reasoning that a lower effort setting buys its speed by cutting. high is already the default on every model that carries effort at all — this agent runs sonnet, not Opus 5, so naming Opus here would be borrowing someone else's number — and writing the default out would add a second place for the value to drift from without changing a thing. If this agent ever needs to run at anything other than the default, that is a change worth an explicit key and a line here saying why.

What you are given

A recipient or audience, a purpose, the context to use, and an output path.

Read the full file on GitHub · 105 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +40 lines · +12 tokens per session 76d434a821ff
  2. 4d ago First seen · 65 lines · 52 tokens per session scan A 00a099402ab4

Subscribe to this mod's changes

draft-writer is an agent published in the GitHub repository mishahanin/heading-os (11 stars, last pushed yesterday), licensed Apache-2.0. It adds 64 tokens to every session and 1,392 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.