A LinkedIn agent that writes in your voice
Voice calibration, a weekly cadence and a final human pass.

An agent can draft LinkedIn posts that sound like you, on one condition: it works from your real writing, a fixed weekly plan and a check at the end, and you stay the one who presses publish. Without those three pieces you get the same smooth, slightly breathless post everyone else is getting from the same models. With them, the agent does the blank-page part and you spend your time on the last 10 minutes of editing, which is where a post becomes yours.
This is how the LinkedIn lever behind Derrick works. I co-founded Derrick, and its marketing runs on Claude agents; the whole system is described in the chapter on the marketing agent team. Here I only take the LinkedIn part, in a form you can rebuild with any model.
Calibrate the voice on what you actually wrote
A voice file is not a list of adjectives. “Direct, friendly, expert” describes every LinkedIn account on earth and gives the model nothing to imitate. What works is observation: collect 20 to 40 texts you wrote yourself, without a ghostwriter, and describe what they do.
Good sources are your best posts, long emails to clients, Slack messages where you explained something, and transcripts of you talking. Ask the model to extract patterns, then correct its reading by hand, because it will flatter you.
# voice.md
## How I write
- Sentences are short. One idea per sentence. Paragraphs of 1 to 3 lines.
- I open on the result or the mistake, never on a question.
- I give the real number or I say "I don't have the number".
- I name tools and steps precisely ("the header play button", not "the feature").
- I end on what the reader can do Monday, not on a moral.
## Never
- Em dashes. Emojis as bullets. "Game-changer", "unlock", "dive into".
- "It's not X, it's Y."
- Fake suspense ("Here's what happened next").
- Any price, feature or number that is not in product-facts.md.
## Real samples (do not copy, imitate the rhythm)
<3 to 5 short excerpts of your own posts>
Two rules matter more than the rest. The banned list has to come from your drafts, so add to it every time you delete the same phrase twice. And product facts live in their own file that the voice file points to, so a price change is made once. The memory chapter of this guide explains where each fact should live.
Give each day an archetype
“Write me a LinkedIn post” is too open. The model drifts toward the average post. A weekly cadence where each day has a fixed type solves this, and it also stops you from posting product news four days in a row.
The cadence we run for Derrick looks like this:
| Day | Archetype | What the post needs before it can be written |
|---|---|---|
| Monday | Playbook | A process the reader can follow step by step |
| Tuesday | Data | A number with its source, or a clearly labelled observation |
| Wednesday | Contrarian take | A common belief and the evidence against it |
| Thursday | Product | A feature that exists today, checked in the product |
| Friday | Founder story | A real event from the week, with what it taught |
| Saturday | Community | A customer story or a question to the audience |
The third column is the useful one. Each archetype has an input requirement, and the agent refuses to write when it is missing. A data post without a source is the fastest way to publish something false under your name.
Write each archetype as a short spec the agent loads with the voice file:
archetype: data
length: 120 to 220 words
structure:
- line 1: the number and what it measures
- body: how it was measured, what it means for the reader
- last line: one action
required_input:
- source: URL or internal file path
- date of the measurement
refuse_if:
- no source is given
- the number is rounded from memory
Feed it raw material, not topics
The agent cannot know what happened to you this week. If you only give it topics, it fills the gap with generic stories, and generic stories are the main tell of an AI-written post.
The fix is a running log. I keep a build log: each notable thing we build is written down when it is built, with what it is, why we did it and the lessons. It was set up to feed build-in-public posts, which makes it the natural input for the Friday founder story.
A weekly routine can then look like this:
Step 0. Check that voice.md, product-facts.md and build-log.md are readable.
If one is missing, stop and notify. Do not write from memory.
Step 1. Read this week's build-log entries and notes/inbox.md.
Step 2. For each day Monday to Saturday, pick one input that meets
the archetype's required_input. If none does, write "no input"
for that day instead of a post.
Step 3. Draft each post with voice.md and the archetype spec.
Step 4. Run the lint and the judge, then the humanize pass.
Step 5. Save drafts to drafts/<week>.md. Do not publish.
The routine proposes. It does not post. Publishing stays a human action, which also keeps you on the right side of LinkedIn’s own rules on automation, which you should read yourself. Scheduling and step 0 are covered in the routines chapter.
Two checks before you read the draft
Every text we send out passes two gates. The first is mechanical: a lint that rejects em dashes, banned words, competitor names and prices that do not match the facts file. It is a dumb script, which is what you want, because it is never tired and never convinced.
#!/bin/sh
# lint.sh draft.md : exits 1 if a banned pattern is found
grep -nP '\x{2014}|\x{2013}|game-changer|unlock|delve|seamless' "$1" && exit 1
grep -nE '[0-9]+([.,][0-9]+)? ?€' "$1" | while read -r line; do
echo "price to check against product-facts.md: $line"
done
exit 0
The second is a judge: another model call, in a blank context, that only sees the draft, the voice file and a short grid (does it sound like the samples, is every claim backed by an input, is there one clear action). The agent that wrote the post never grades it. A humanize pass then runs last on every text to remove the remaining AI tells. The full method, with frozen test cases to catch regressions after you change the voice file, is in the quality check chapter.
Some errors no lint will catch: on 10 November 2026 a Derrick post said “filter, then enrich” about a gesture the product did differently, which only a check in the product could show (the quality check chapter tells the story and the rule we kept).
Your pass, and what to measure
Read each draft out loud. Anything you would not say in a meeting goes. When you correct the same thing twice, the correction goes into voice.md as a rule, not into a mental note. A reminder is not an action: the fix has to live in the instructions.
Measure two different things. Output is what the agent produced: drafts per week, share you published, how much you rewrote. Outcome is what the posts brought: profile visits from your target accounts, replies in DMs, meetings that started from a post. If output rises and outcome does not move, more posts are not the answer. Measuring what an agent brings in shows how to set up that weekly comparison.
Your next step: pick 30 texts you wrote yourself, write voice.md from them, and run one archetype for two weeks before adding the others.