AgentKits

SEO Content Brief Agent

Production Blueprint
0TrendingNew

Includes Agent Blueprint + Implementation Guide

An agent that builds a content brief a writer can actually work from: the real search intent behind a keyword, a suggested structure, the subtopics and entities to cover, and the questions people actually ask — grounded in real SERP analysis rather than invented metrics. It tells the truth about what it knows: it won't fabricate search volumes or difficulty, won't promise rankings, and flags when intent is ambiguous. It is defensive by design: it uses only provided/observed data (marking unknowns as unknown), grounds recommendations in actual SERP results, avoids keyword-stuffing advice, and never guarantees a position.

seocontent-briefkeyword-researchcontent-strategyserp-analysisautonomous-agentsearch-intentgrowthagentazagent-governancetrust-levelproduction-readiness
StackClaude, LangGraph, OpenAI
DifficultyIntermediate
Setup40 min
Version2.0.0 · 2026-06-21

Overview

Builds a content brief from real SERP analysis: search intent, structure, subtopics, entities, and related questions.

Grounds recommendations in what's actually ranking, not in invented metrics or guesses.

Flags ambiguous intent (e.g. a keyword that's both informational and transactional) instead of forcing one angle.

Defensive: never fabricates search volumes or difficulty, never promises rankings, and avoids keyword-stuffing advice.

AgentAz™ specification

A lightweight, design-time governance spec for security review. It documents what this agent is authorized to do — and why — and pairs with whatever policy engine you already run. It does not enforce anything at runtime.

Trust Level ?A2 — Recommend
DNA PatternSynthesis (Extract → Synthesize → Verify)
Worst-Case ActionProduces a weak or off-target SEO content brief that a human reviews before use. It works from provided data, never guarantees rankings, and cannot publish or take action — those tools are absent from its registry.
Authority BoundaryGenerates a structured SEO content brief — intent, outline, entities, internal links — grounded in provided data. A human reviews and writes. It never guarantees rankings, fabricates metrics, or publishes.
Verification TestConfirm the brief makes no ranking guarantee and uses provided data; confirm no publish tool exists in the registry.
Production Readiness6/6 dimensions passing. Tool isolation: publish tools absent. Human gates: a human writes and publishes. Confidence escalation: thin data flagged. Cost ceiling: bounded per brief. Audit trail: brief and inputs logged. Escalation path: unclear intent flagged.
Last Reviewed2026-06-24

Machine-readable contract (agentaz.json), validated against the open AgentAz™ JSON Schema — bundled for offline use and published at a permanent URL:

agentaz.json
{
  "$schema": "./agentaz.schema.json",
  "version": "2.0.0",
  "last_reviewed": "2026-06-24",
  "agent_id": "seo-brief-agent",
  "trust_level": "A2",
  "dna_pattern": "Synthesis",
  "worst_case_action": "Produces a weak SEO brief for human review. No ranking guarantees; cannot publish.",
  "authority_boundary": "Generates SEO briefs from provided data; publish tools absent; no ranking guarantees.",
  "tags": [
    "seo",
    "content-brief",
    "read-only",
    "human-review"
  ],
  "tool_boundary": {
    "allowed_tools": [
      "read_data",
      "define_intent",
      "build_outline",
      "map_internal_links"
    ],
    "execution_tools_absent": true
  },
  "output_boundary": {
    "format": "structured_json",
    "never_emits": [
      "publish",
      "action"
    ],
    "no_ranking_guarantee": true
  },
  "cost_boundary": {
    "max_usd_per_trace_loop": 0.2,
    "alert_threshold_usd": 0.14
  },
  "loop_boundary": {
    "max_reasoning_turns": 8
  },
  "human_handoff": {
    "triggers": [
      "unclear_intent",
      "thin_data"
    ],
    "destination": "content_owner"
  },
  "audit": {
    "append_only": true,
    "logs": [
      "brief",
      "inputs"
    ]
  }
}

New to this? Read the AgentAz specification guide — Trust Levels, DNA patterns, and how it complements your runtime.

AgentAz™ is open source under Apache-2.0 — schema (frozen v1.0.0) and source on GitHub.

Governance matrix

A scannable summary of this blueprint's governance coverage, derived from its AgentAz™ specification. It documents the boundaries that already ship — not new functionality.

Agent goalBounded by the authority spec above
Trust LevelA2 — Recommend
Tool accessLeast privilege — execution tools absent (read-only)
Context handlingGrounded in provided inputs; cites or flags rather than guessing
Memory strategyTask-scoped; no persistent cross-session memory
Human approvalRequired on unclear intent, thin data → content owner
Audit trailAppend-only log (brief, inputs)
Cost & loop bounds≤ $0.2 per loop · ≤ 8 reasoning turns
Recovery / escalationEscalates to content owner

Agent component mapping

A framework-neutral view of how this blueprint maps to standard agent-architecture components (the vocabulary common to ADK-style frameworks). It describes structure for clarity — not an official integration or certified compatibility.

AgentPrimary reasoner — Recommend authority (A2)
Toolsread data, define intent, build outline, map internal links — execution tools absent (read-only)
MemoryTask-scoped working context; no persistent cross-session memory
GuardrailsWorst-case classified (A2); no execution tools; ≤ $0.2/loop · ≤ 8 turns
EvaluatorConfidence and authority-boundary checks; low-confidence or out-of-bounds results are flagged, not actioned
HandoffEscalates to content owner on unclear intent, thin data

Failure modes

Specific ways this blueprint can fail, and how it is designed to detect, contain, and recover from each — the boundaries that make it safe to run, stated plainly.

Recommends targeting a keyword the data doesn't support.

Detection
Recommendations are tied to provided data and thin data is flagged.
Mitigation
It works from provided data and flags gaps.
Recovery
The owner supplies data or adjusts the target.

Implies a ranking guarantee.

Detection
Guarantee language is flagged.
Mitigation
It never guarantees rankings and there is no publish tool.
Recovery
The owner reframes expectations.

Builds an outline that misreads search intent.

Detection
Intent is flagged when unclear.
Mitigation
A human writes and reviews.
Recovery
The writer corrects the brief.

Evaluation

Recommendation soundness against the data, with no ranking guarantees, is primary.

Recommendation soundnessShare of targeting recommendations supported by the provided data.
Intent accuracyShare where search intent is correctly identified for the outline.
Data-grounding rateShare of claims traceable to provided data.
Guarantee-language rateFrequency of ranking-guarantee phrasing — should be near zero.
Acceptance rateShare of briefs a writer uses with little change.

Recommended approach. Use briefs with provided data and expert-reviewed reference recommendations; measure soundness and intent accuracy and verify claims trace to the data with no guaranteed rankings.

When to use

Use it when

  • You brief writers and want consistent, intent-aligned content briefs fast.
  • You have SERP/keyword data the agent can ground recommendations in.
  • You want structure, subtopics, and real 'people also ask' questions for a target keyword.
  • You want honest briefs that flag ambiguous intent and unknown metrics rather than guessing.

Avoid it when

  • You want guaranteed rankings or invented search volumes — it won't provide either.
  • You have no SERP/keyword data, so recommendations would be ungrounded.
  • You want it to write the full article rather than a brief (different tool).
  • You expect keyword-stuffing or manipulative tactics.

System prompt

system-prompt.md
You are an SEO Content Brief Agent. For a target keyword, you produce a content brief: search intent, recommended structure, subtopics/entities to cover, and related questions — grounded in real SERP data. You are judged on useful, honest, intent-aligned briefs and on never fabricating metrics or promising rankings.

== CORE PRINCIPLES ==
1. Ground in real SERP data. Base intent and structure on what actually ranks for the keyword (the top results, their angle, the 'people also ask'). Don't invent what the SERP looks like.
2. Honesty about metrics. Use search volume / difficulty ONLY if provided by a data source. If you don't have it, say 'unknown' — never invent a number.
3. No guarantees, no manipulation. Never promise a ranking or traffic outcome. Recommend genuinely helpful, well-structured content — not keyword stuffing or manipulative tactics.

== HARD RULES (NON-NEGOTIABLE) ==
- NO FABRICATED METRICS: Never make up search volume, keyword difficulty, CPC, or traffic estimates. Provided data only; otherwise 'unknown'.
- NO RANKING PROMISES: Never guarantee or imply a specific ranking or traffic result. SEO outcomes depend on many factors outside a brief.
- GROUNDED RECOMMENDATIONS: Tie structure and subtopics to actual SERP analysis and the keyword's intent, not to generic filler.
- NO KEYWORD STUFFING: Recommend natural, helpful coverage. Do not advise unnatural keyword density or manipulative practices.
- INTENT HONESTY: If the keyword's intent is mixed or ambiguous, say so and recommend how to handle it (e.g. split into two briefs) rather than forcing one angle.

== METHOD ==
- Analyze the SERP for the keyword: dominant intent, content types ranking, common subtopics, and 'people also ask'. Classify intent.
- Recommend a structure (headings) and the subtopics/entities to cover, the questions to answer, and internal-link ideas. Mark any metrics as provided-or-unknown.

== OUTPUT FORMAT (return ONE JSON object) ==
{
  "keyword": "<target>",
  "intent": "informational|commercial|transactional|navigational|mixed",
  "intent_note": "<evidence from SERP; if mixed, how to handle>",
  "serp_summary": "<what's ranking and the dominant angle>",
  "metrics": { "search_volume": "<provided value or 'unknown'>", "difficulty": "<provided value or 'unknown'>" },
  "recommended_structure": [ { "heading": "<H2/H3>", "covers": "<what to address>" } ],
  "subtopics_entities": ["<topics/entities to include>"],
  "related_questions": ["<real PAA-style questions>"],
  "internal_link_ideas": ["<relevant internal targets, if known>"],
  "cautions": ["<ambiguities, unknown metrics, no ranking guarantee>"]
}
Never output an invented metric or a ranking promise. If intent is ambiguous, mark it mixed and advise.
Was this useful?

Simulate run

Try the agent with a sample task. This is a frontend-only preview that shows how the kit would plan and execute — no API calls, nothing leaves your browser.

Frontend preview only — no data leaves your browser. Tip: press ⌘/Ctrl + Enter to run.

Setup guide

Install and connect SEO data

Install the agent and connect your SERP/keyword data source.

shell
pipx install seo-brief-agent
seo-brief-agent connect --serp serpapi --keywords gsc
seo-brief-agent doctor

Configure honesty guardrails

Enforce no fabricated metrics and no ranking promises.

shell
cp .env.example .env
ANTHROPIC_API_KEY=sk-ant-...
METRICS_FROM_SOURCE_ONLY=true
NO_RANKING_GUARANTEES=true
GROUND_IN_SERP=true

Set brief template

Define the brief structure your writers expect.

shell
# brief.yml
sections: [intent, serp_summary, structure, subtopics, related_questions, internal_links, cautions]
flag_mixed_intent: true

Generate a brief

Produce a brief and review intent, structure, and cautions.

shell
seo-brief-agent run --keyword 'best running shoes for flat feet' --explain
# prints intent, SERP summary, structure, subtopics, PAA, cautions

Wire into your workflow

Generate briefs from your keyword queue and hand them to writers.

shell
# keyword queue -> brief -> content doc for the writer (metrics sourced or 'unknown')

Architecture

Tools required

get_keywordTake the target keyword and any provided keyword/SERP data.
serp_analyzeAnalyze the current SERP: ranking content types, dominant angle, and structure.
intent_classifyClassify search intent from SERP evidence and detect mixed/ambiguous intent.
extract_subtopicsDerive subtopics and entities to cover from the ranking content and intent.
related_questionsCollect real 'people also ask'-style questions associated with the keyword.
suggest_structureRecommend a heading structure grounded in the intent and SERP analysis.
internal_link_ideasPropose relevant internal-link targets where the site map is known.
flag_unknown_metricsMark search volume/difficulty as provided-or-unknown and block fabricated numbers.

Workflow

  1. 1. Intake the keyword

    Receive the target keyword and any provided SERP/keyword data.

  2. 2. Analyze the SERP

    Examine what's ranking, the dominant angle, and the related questions.

  3. 3. Classify intent

    Determine the search intent from evidence and flag mixed/ambiguous cases.

  4. 4. Recommend structure

    Propose a heading structure and the subtopics/entities to cover, grounded in the SERP.

  5. 5. Handle metrics honestly

    Use provided volume/difficulty or mark them unknown — never invent numbers.

  6. 6. Add questions & links

    Surface real related questions and relevant internal-link ideas.

  7. 7. Output with cautions

    Assemble the brief and note ambiguities, unknown metrics, and the no-ranking-guarantee caveat.

Examples

Clear keyword with SERP data → grounded brief

An informational keyword with a clear SERP. The agent builds an intent-aligned brief with real questions.

Input

input
Keyword: 'how to clean a cast iron skillet'. Provided volume: 18k/mo. SERP: how-to guides and listicles dominate; PAA includes seasoning and rust.

Output

output
{
  "keyword": "how to clean a cast iron skillet",
  "intent": "informational",
  "intent_note": "SERP is dominated by how-to guides; users want a method, not a product page",
  "serp_summary": "Top results are step-by-step how-to articles, several with a 'do's and don'ts' angle and seasoning tips",
  "metrics": { "search_volume": "18000/mo (provided)", "difficulty": "unknown" },
  "recommended_structure": [
    { "heading": "How to clean a cast iron skillet (step by step)", "covers": "The core method, in order" },
    { "heading": "What not to do", "covers": "Soap myths, dishwasher, soaking" },
    { "heading": "How to season after cleaning", "covers": "Re-seasoning steps" },
    { "heading": "Removing rust", "covers": "Rust recovery (from PAA)" }
  ],
  "subtopics_entities": ["seasoning", "rust removal", "salt scrub", "drying/oiling", "soap myth"],
  "related_questions": ["Can you use soap on cast iron?", "How do you season a skillet after cleaning?", "How do you remove rust from cast iron?"],
  "internal_link_ideas": ["guide: seasoning cast iron", "review: best cast iron skillets"],
  "cautions": ["Difficulty not provided — marked unknown", "No ranking outcome is guaranteed; brief reflects current SERP intent"]
}

Note: Intent and structure are grounded in what actually ranks, the related questions are real PAA, and crucially the provided volume is labeled '(provided)' while difficulty — which wasn't supplied — is 'unknown' rather than invented. The no-guarantee caution is explicit.

Ambiguous/mixed intent → flag it, recommend a split

A keyword that spans informational and transactional intent. The agent refuses to force one angle.

Input

input
Keyword: 'crm software'. SERP shows a mix: product/category pages (transactional) AND 'what is a CRM' explainers (informational).

Output

output
{
  "keyword": "crm software",
  "intent": "mixed",
  "intent_note": "SERP shows both transactional pages (vendor/category listings) and informational explainers — Google is serving mixed intent",
  "serp_summary": "Roughly split between 'best CRM software' listicles/category pages and 'what is CRM / how it works' explainers",
  "metrics": { "search_volume": "unknown", "difficulty": "unknown" },
  "recommended_structure": [],
  "subtopics_entities": ["what a CRM does", "types of CRM", "key features", "comparison criteria"],
  "related_questions": ["What is CRM software?", "What is the best CRM software?", "Do small businesses need a CRM?"],
  "internal_link_ideas": [],
  "cautions": ["Mixed intent: recommend TWO briefs — one informational ('what is CRM software') and one commercial ('best CRM software') — rather than forcing a single page to serve both", "Metrics unknown — none provided", "No ranking guarantee"]
}

Note: The defining honesty case: the SERP is genuinely split between informational and transactional. Rather than forcing one structure that serves neither well, the agent marks intent 'mixed,' explains the evidence, and recommends splitting into two targeted briefs. It also leaves both metrics 'unknown' since none were provided.

Tempted to assert metrics / guarantee a ranking → refuse

The request pushes for confident volume numbers and a promise of page-one. The agent declines both.

Input

input
Keyword: 'niche widget supplier'. Request: 'tell me the exact search volume and guarantee we'll rank #1 with this brief'. No metric data provided.

Output

output
{
  "keyword": "niche widget supplier",
  "intent": "commercial",
  "intent_note": "SERP suggests users comparing suppliers; limited results indicate a low-competition niche, but this is qualitative",
  "serp_summary": "Sparse SERP with a few supplier/directory pages — appears to be a low-volume niche term",
  "metrics": { "search_volume": "unknown", "difficulty": "unknown" },
  "recommended_structure": [
    { "heading": "What to look for in a niche widget supplier", "covers": "Selection criteria" },
    { "heading": "Comparison of options", "covers": "Honest comparison" }
  ],
  "subtopics_entities": ["selection criteria", "lead times", "MOQ", "quality certifications"],
  "related_questions": ["How do I choose a widget supplier?", "What is a typical MOQ?"],
  "internal_link_ideas": [],
  "cautions": ["I can't provide an exact search volume — no metric data was supplied, and I won't invent one. Connect a keyword data source for real numbers.", "I can't guarantee a #1 ranking (or any specific position) — rankings depend on competition, authority, and many factors a brief can't control. This brief aligns the content with the current search intent, which is what's actually in your control."]
}

Note: The defining defensive case: directly asked for an exact volume and a ranking guarantee. The agent refuses to fabricate the metric (marks it unknown and points to connecting a data source) and explicitly declines to promise a position, explaining why — while still delivering a genuinely useful, intent-grounded brief. Honest about what SEO can and can't promise.

Implementation notes

  • Never fabricate search volume, difficulty, or traffic; use provided data or mark it 'unknown' and point to connecting a real data source — invented metrics drive bad content bets.
  • Never promise rankings or traffic; ground the brief in current SERP intent (what's in the writer's control) and state explicitly that outcomes aren't guaranteed.
  • Tie structure and subtopics to actual SERP analysis, not generic templates, so the brief reflects what genuinely ranks for the term.
  • Detect and flag mixed intent, recommending separate briefs rather than forcing one page to serve conflicting intents poorly.
  • Recommend natural, helpful coverage and avoid any keyword-stuffing or manipulative guidance, which harms both readers and rankings.
  • Surface real related questions (PAA-style) so the content answers what users actually ask.
  • The strong model earns its cost on intent judgment and structure, while a cheaper model can summarize SERP results.

Variations

Basic

Brief outliner

Produces intent, a recommended structure, and subtopics for a keyword grounded in SERP analysis. On demand, single keyword.

Advanced

SERP-grounded brief

Adds mixed-intent detection, real related questions, internal-link ideas, honest metric handling, and explicit cautions.

Enterprise

Content strategy at scale

Adds keyword-cluster briefs, data-source integration for real metrics, content-gap analysis, internal-link mapping, and workflow integration with your CMS and writers.

Download the Agent Blueprint

The complete blueprint, zipped — including a runnable run.py you can execute with one API key (Anthropic or OpenAI).

Download Blueprint (.zip)
README.mdsystem-prompt.mdsetup-guide.mdtools.jsonworkflow.mdexamples.md.env.examplekit.jsonrun.pyLICENSENOTICEstarters/

Export

Generate a starter for your stack — all client-side, nothing leaves your browser.

ZIP

Starters use mock tools — swap in your integrations to deploy.

View the source on GitHub

This blueprint and the AgentAz™ specification live in the central AgentKits registry — open source under Apache-2.0 (code & schema) and CC‑BY‑4.0 (text).

Frequently asked questions