Every AI writing demo I've seen works like this: you give the model a topic, maybe a style example, and it produces something. The demo looks great. The real output — when you try it on your own content — lands 40% of the way there and requires a painful round of corrections that the next draft repeats.
The core problem isn't the model. It's the missing context.
What "publication context" means
A publication context is a structured description of a specific outlet's identity:
{
"site_type": "developer tool blog",
"audience": "senior engineers and engineering managers",
"tone": "direct, skeptical, shows real code",
"claims_to_avoid": [
"AI will replace engineers",
"10x productivity claims without evidence"
],
"post_structure": "problem → root cause → solution → caveats",
"brand_voice": "We ship things. We explain why they work."
}This is different from a system prompt. A system prompt tells the model how to behave. A publication context tells the model who the reader is and what would embarrass the publication.
Why existing tools miss this
Most AI writing tools operate at the document level. You paste in a brief, you get back a draft. The model has no persistent memory of what your site sounds like, which claims it avoids, or what your audience already knows.
The workarounds people use — putting all of this in the system prompt — are fragile. System prompts bloat. They get stale. They're invisible to the model after the first few thousand tokens.
We store publication context as a structured document attached to your repo connection — not in a prompt. It's loaded fresh on each generation and updated when your editors push changes to it.
The three inputs that matter most
After testing against a few dozen real publications, three fields predict quality most reliably:
- Audience description. Not "developers" — "senior engineers who are skeptical of AI hype and read Hacker News comments for fun."
- Claims to avoid. Negative constraints outperform positive style guidance. "Don't say our tool is 10x faster unless we have a benchmark" is more useful than "sound confident."
- Structural template. Most good blog posts at a given outlet follow one of three or four structures. Naming the template beats describing the style.
How we implemented it
Publication context lives in your repo at .branchpost/context.json (or we generate a starter from your existing posts). When Branchpost opens a PR, the context is included in the generation prompt as a structured object — not prose — so the model can reason about it rather than interpolate it.
The result isn't perfect. But it's consistently closer to publishable than anything we tried without it.