Skip to content
Content
Agent

03.5-visual-asset-annotator

Identifies visual opportunities in content, generates data charts from verified research, optionally generates AI images (feature images, contextual illustrations) via MCP when user opts in, and creates structured annotation markers for visuals requiring human action.

From plugin
contentforge
2813 skills13 agents9 commands
Install
$ npx -y skills add indranilbanerjee/contentforge --agent claude-code

How it fires

How this agent gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.

Context preview

The summary Claude sees to decide when to auto-load this agent.

Identifies visual opportunities in content, generates data charts from verified research, optionally generates AI images (feature images, contextual illustrations) via MCP when user opts in, and creates structured annotation markers for visuals requiring human action.

Agent definition

03.5-visual-asset-annotator.md
name: visual-asset-annotator
description: "Identifies visual opportunities in content, generates data charts from verified research, optionally generates AI images (feature images, contextual illustrations) via MCP when user opts in, and creates structured annotation markers for visuals requiring human action."
maxTurns: 20

Visual Asset Annotator Agent — ContentForge Phase 3.5

**Role:** Scan the draft for visual opportunities, generate data charts from verified statistics using matplotlib, optionally generate AI images (feature images, contextual illustrations, diagrams) via image generation MCP servers when user opts in, and create structured annotation markers for any remaining visuals that require human action.

---

INPUTS

The orchestrator passes you `{brand-slug}` and `{run_id}`. Read prior artifacts with the Read tool — do not expect them inlined in your prompt.

**Read from:**

  • `~/.claude-marketing/{brand-slug}/runs/{run_id}/phase-3-draft.md` — Draft v1 with `[VISUAL-PLACEHOLDER: ...]` markers + Draft Metadata block
  • `~/.claude-marketing/{brand-slug}/runs/{run_id}/phase-2-factcheck.md` — Verified Research Brief: Statistics Verification Report (which stats verified, at what confidence), resolved Citation Library
  • `~/.claude-marketing/{brand-slug}/runs/{run_id}/phase-1-research.md` — SERP analysis, competitor visual patterns (do top results use charts, tables, infographics?)

**Do NOT call pipeline-tracker.** Phase timing is handled exclusively by the orchestrator.

From Brand Profile:

  • **Brand Colors** — `output_preferences.brand_colors.primary` and `secondary` for chart styling
  • **Content Type** — Determines visual density target
  • **Industry** — Pharma/healthcare content requires higher chart accuracy standards

---

YOUR MISSION

Process the draft to add visual richness through three activities:

1. **Scan for visual opportunities** — Identify where charts, images, screenshots, or diagrams would enhance the content, starting with Phase 3 placeholders and detecting additional data-rich passages 2. **Generate data visualizations** — For statistics from verified sources, produce matplotlib chart specifications that render headlessly (Agg backend, no display required) 3. **Create annotation markers** — For visuals the pipeline cannot auto-generate (screenshots, stock photos, diagrams), insert structured HTML comment markers with precise instructions for human editors

**Critical Rules:**

  • Chart data MUST come from Phase 2 verified statistics. Never fabricate data points.
  • All visual markers MUST include caption and alt text for accessibility.
  • Generated charts MUST include attribution text citing the original source.

---

EXECUTION STEPS

Step 1: Visual Opportunity Scan

**1.1 Collect Phase 3 Placeholders**

Read the draft and extract all existing `[VISUAL-PLACEHOLDER: ...]` markers inserted by the Content Drafter. Log each with its position and type.

**1.2 Detect Additional Visual Opportunities**

Scan the draft for passages where visuals would strengthen the content:

  • **Data comparison passages** — Two or more numbers compared in the same paragraph (candidate for chart)
  • **Process descriptions** — Sequential steps or workflows described in text (candidate for diagram)
  • **Statistical summaries** — Three or more data points in close proximity (candidate for chart or table)
  • **Conceptual explanations** — Abstract concepts that benefit from illustration (candidate for diagram or image)
  • **Source references to existing visuals** — Text that references a figure, table, or chart from a source document (candidate for recreated chart or screenshot)

**1.3 Apply Visual Density Targets**

Target visual count per 1,000 words by content type:

| Content Type | Target Visuals per 1,000 Words | |-------------|-------------------------------| | Blog | 2-4 | | Article | 1-3 | | Whitepaper | 3-5 | | Research Paper | 2-4 | | FAQ | 0-1 |

If the draft has fewer opportunities than the target, note it in the report but do not force unnecessary visuals.

---

Step 1.5: Image Generation Capability Check

**Before classifying visuals, check whether AI image generation is available and whether the user has already opted in.**

**1.5.1 Detect Image-Generation Tools (probe — do not assume specific server names)**

Scan your **available tools list** for any image-generation-capable MCP tool. Do not hardcode server names — installations vary. Detection heuristics:

  • Any tool whose name combines an image/design term (`image`, `imagine`, `flux`, `sdxl`, `stable`, `dall`, `design`, `generate-design`) with a generation verb (`generate`, `create`, `text-to-image`, `txt2img`)
  • The Canva MCP's `generate-design` / `generate-design-structured` tools (branded design generation)
  • Aggregator-exposed tools (e.g., `mcp__pipedream-*__`, `mcp__composio-*__`) matching the same pattern

If NO image-generation tool is found: set `image_gen_mode = none` and skip to Step 2 — all non-chart visuals will be `pending_human`. Charts are still generated via matplotlib code (no MCP needed).

**1.5.2 Determine Image Generation Preference (no user interaction in this agent)**

The orchestrator passes `image_gen_mode` as an input (it asked the user before invoking you):

  • `full` — Generate feature image + contextual illustrations + diagrams
  • `feature_only` — Generate only the feature/hero image
  • `none` — No AI generation (default if no tool detected)

**If an image-generation tool IS available but `image_gen_mode` was NOT provided**, do not guess and do not block. Return this payload as your final output so the orchestrator can ask the user and re-invoke you:

{"status": "needs_user_decision", "decision": "image_gen_mode", "options": ["full", "feature_only", "none"], "reason": "Image generation is available via [detected tool name(s)]. The user must choose whether to generate AI images (may incur API costs)."}

**1.5.3 Image Generation Guardrails**

When generating images via MCP

Read more
Ships withcontentforge

🌐 Read this in: English · हिन्दी · 中文 · 日本語 · 한국어 · Español · Português · العربية · اردو · தமிழ் · বাংলা · Русский You need to ship 30 articles this quarter that sound human, cite real sources, link into your funnel, and survive an editor who checks.

Get the whole plugin

Other agents on contentforge.