01 — The operating principle
Noise becomes a shortlist before a human looks at it
Two jobs, one pipeline: find the opportunity, then draft the content. Each step hands off to the next automatically.
The first stage was already turning news into a scored Opportunity Board. The second takes the best opportunity nobody has acted on yet and turns it into a ready-to-use brief — angle, hook, keywords, a publish-ready LinkedIn post, formats and a call to action.
Keeping them apart means a new source (Reddit, search, YouTube) plugs into stage one without touching the writer, and the writer's voice can change without risking the scoring.
02 — What shipped
Three parts: a writer, a fact-checker, and a lock
All three run on tools we already pay for — the AI writer is Claude, the board is Google Sheets, history lives in a small database. No new platform to learn.
Content Brief Agent new
Picks the top un-briefed opportunity from the board and hands the team a finished draft: editorial angle, scroll-stopping hook, target keywords, a publish-ready LinkedIn post, recommended formats, and a CTA.
Live Web Search new
Before writing, it runs a live web search (via Tavily) so every brief is grounded in current, real facts — not the model guessing. One test brief surfaced a real "90% of calls answered in 20 seconds" stat.
Secured trigger
The engine only runs for authorized requests — a secret key guards the trigger, so it can't be fired, and can't burn budget, by anyone who stumbles on the address.
03 — Inside the engine
Six steps, each one tunable without a rebuild
Each brief is assembled by a short chain of steps. Here is what each does, in plain terms, and what you would change to tune it.
The trigger — when it runs
Kicks the engine off. Today it runs on demand; it can also run on a daily schedule (e.g. every morning at 7am).
Tweak: schedule vs. on-demand, and the time of dayPick the opportunity
Looks at the Opportunity Board and grabs the highest-scoring opportunity that doesn't have a brief yet. Run it again and it moves to the next one.
Tweak: which opportunity it prioritises — score, topic, recencyLive web search
Searches the web for current facts on that topic and feeds the results to the writer, so the brief cites real details instead of guessing.
Tweak: how many results, depth, and the search phrasingThe AI writer (Claude)
Reads the opportunity plus the live search results and writes the brief. Its house style — voice, rules, which formats to recommend, LinkedIn post length — all lives in one instruction block.
Tweak: the system prompt — tone, rules, formats, lengthClean, structured output
Forces the writer to return tidy, labelled fields — angle, hook, keywords, LinkedIn post, key messages, CTA, priority — every time, so it drops straight into columns.
Tweak: which fields a brief containsSave & file it
Writes the finished brief to the Content Briefs tab of the Google Sheet and keeps a copy in a small database for history.
Tweak: where briefs land — sheet, tab, or another destination04 — Data to action
The engine removes the blank page, not the editor
Predict
- Noise → a shortlist. The market is scanned for you; you see a ranked list of what's worth acting on, not a firehose.
- Consistent judgment. The same scoring rubric applies every time, regardless of who is on shift.
Create
- A draft, not a blank page. Every opportunity arrives with a usable first draft — angle, post, keywords — so the team edits instead of starting cold.
- Grounded in real facts. Live web search means briefs reference current, verifiable details.
Decide
- A running record. Every opportunity and brief is logged and dated — a searchable trail of what we spotted and drafted.
- Scales without more work. Adding a new source feeds the same engine — no rebuild.
This does not publish anything, and it does not replace an editor. A human still decides what goes out, fact-checks each brief against the sources it cites, and adjusts for brand. What the engine removes is the blank page and the hour of scanning that used to precede it — it narrows the shortlist and attaches the reasoning.
05 — Configuration
Most changes are a sentence, not a sprint
self-serve means just tell me the new value. build means a small edit to the workflow on my side.
| What you'd change | Where it lives | Example | Effort |
|---|---|---|---|
| Who we track — competitors & topics | The news search query | Add "Zoom CX", drop a rival | self-serve |
| How strict scoring is | Score thresholds | Only surface 60+ instead of 40+ | self-serve |
| Brand voice & rules | The writer's system prompt | "More provocative hooks, UK spelling" | self-serve |
| LinkedIn post length / format mix | The writer's system prompt | "Shorter posts, always suggest a video" | self-serve |
| Fields in a brief | The structured-output list | Add "suggested headline", "hashtags" | build |
| Where briefs land | Google Sheet / tab | A different sheet, or add email | build |
| How often it runs | The trigger | Daily 7am, or on a button | build |
| The search provider key | Secret store (.env) | Rotate the Tavily key | build |
For the technical record — the actual pieces & where secrets live
Two new n8n workflows: Content Brief Agent (the writer) and Tavily Search (agent tool) (the fact-checker it calls). They read from the existing Signal Spine and its Opportunity Board.
All secrets — the AI key, the search key, the Google service account, and the trigger's guard key — live only in a gitignored .env file and n8n's encrypted credential store. None are written into the workflow itself, so nothing sensitive is exposed if a workflow is exported or shared. Voice, rules and formats are edited in the writer's system prompt; scoring rubric and thresholds live in the Signal Spine.
One operational note: the search helper must stay published for the writer to run — the deploy scripts handle this ordering automatically.
06 — Evidence
Unedited output from a live run
This is exactly what lands in the Content Briefs tab — ready for a human to review, fact-check and post.
07 — What's in the way
Two things, neither of them technical
It runs today as a working prototype on a local install — enough to demo and to generate real briefs, which it has. Ordered by what unlocks the most. Each needs a named person, not more engineering.
| Component | Status | Note |
|---|---|---|
| Signal Spine — news → scored board | live | running unattended |
| Content Brief Agent — writes briefs | live | 11 briefs generated |
| Live web grounding (Tavily) | live | verified against a real run |
| Secured trigger + safety review | live | guard key in place |
| Daily opportunities ping | blocked | channel undecided — see below |
| Company shared n8n | not started | waits on the channel decision |
| Blocker | What it costs us | What's needed | Owner |
|---|---|---|---|
| 1 Daily ping channel undecided | Briefs are written but nobody is nudged — the team must remember to open the Sheet | Pick one: Teams, Telegram, or email | You |
| 2 Still on a local install | Runs only when a laptop is on — no unattended morning delivery | Move onto the company's shared n8n | AP |
Blocker 1 is a single word back to me: Teams, Telegram, or email. That one answer unblocks blocker 2 as well — the migration is only worth doing once the delivery channel is settled, so nothing else moves until it lands.
08 — Questions
Asked and answered
Is the content ready to publish as-is?
No. It's a strong first draft, not a final. Treat every brief as a fast starting point a human reviews, fact-checks against the sources it cites, and adjusts for brand — then posts. The engine removes the blank page, not the editor.
Could it invent facts?
Yes, in principle — that is the real risk with any LLM. The live web search exists specifically to reduce it: the writer is told to ground claims in the search results and the opportunity data, and to keep a claim general when it cannot confirm a specific number. That lowers the rate; it does not make it zero. Every brief still warrants a human fact-check before anything goes out.
What does it cost to run?
It rides on tools we already have — Claude and Google Sheets — plus a search tool with a free tier. Cost scales with how many briefs we generate; a daily run is inexpensive. Exact numbers once we settle the cadence, which depends on the channel decision above.
Where does our data go?
The opportunity board and briefs live in our Google Sheet and in Supabase, our private managed Postgres database. (At the time of writing this was Turso; persistence moved to Supabase on 2026-07-21 — see 009.) The AI writer (Claude) and the search tool see the topic text we send them to do their job. No credentials or secrets are ever placed in the content.
Can we change what it tracks or how it sounds?
Yes — see §05. Who we track, how strict scoring is, and the brand voice are all quick changes; just tell me the new direction.
What's the single next step?
Name the channel for the daily "here are today's opportunities" message — Teams, Telegram, or email. That unblocks the migration to shared n8n, which is the last step to a system that nudges the team every morning without anyone opening a sheet.