Agents — Master Index
Leadmetrics v3 uses a single-function agent design: every agent does exactly one thing, has one input schema, one output schema, and one system prompt short enough to fit on a page. The Activity Planner chains them into pipelines. Agents stay small and testable.
Architecture at a Glance
SETUP CHAIN (once per tenant)
Client Researcher ──┐
├──► Context File Writer ──► Client Context File
Competitor Researcher ──┘
STRATEGY CHAIN (once, on context approval)
Strategy Writer ──► Deliverable Planner ──► Goals + Monthly Plan
ORCHESTRATION (each deliverable period)
Activity Planner ──► dispatches tasks to workers below
SEO CHAIN
Keyword Researcher ──► Content Brief Writer
Site Auditor
Backlink Researcher ──► Backlink Outreach Writer
CONTENT CHAIN
Blog Writer · GBP Post Writer · Social Post Writer
Email Writer · Landing Page Writer
Google Ads Writer · Meta Ads Writer
Content Repurposer · Blog Image Generator
PLANNING & ANALYSIS
Social Calendar Planner · Ads Analyst
Report Writer · Anomaly Detector
RESEARCH (Ollama/local — cost-free)
Topic Researcher ──► Research Note Writer
CONTENT QUALITY
Content Auditor
REACTIVE (event-triggered)
Review Response Writer
SYSTEM / LIVE
Blog AI Agent · Billing AgentAgent Index
Setup Chain
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Client Researcher | client-researcher.md | Domain URL → client research notes | agent__client-researcher | Sonnet 4.6 | Free+ |
| Competitor Researcher | competitor-researcher.md | Competitor domains → competitor analysis | agent__competitor-researcher | Sonnet 4.6 | Free+ |
| Context File Writer | context-file-writer.md | Research notes → Client Context File | agent__context-file-writer | Sonnet 4.6 | Free+ |
Strategy Chain
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Strategy Writer | strategy-writer.md | Context File → strategy document | agent__strategy-writer | Sonnet 4.6 | Free+ |
| Deliverable Planner | deliverable-planner/index.md | Strategy → goals + deliverable volumes | agent__deliverable-planner | Sonnet 4.6 | Free+ |
Orchestration
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Activity Planner | activity-planner/index.md | Deliverable plan → activity pipeline | agent__activity-planner | Sonnet 4.6 | Free+ |
SEO Chain
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Keyword Researcher | keyword-researcher.md | Domain/industry → keyword clusters | agent__keyword-researcher | Sonnet 4.6 | Free+ |
| Content Brief Writer | content-brief-writer.md | Keyword cluster → SEO content brief | agent__content-brief-writer | Sonnet 4.6 | Free+ |
| Site Auditor | site-auditor.md | Domain URL → technical SEO audit report | agent__site-auditor | Sonnet 4.6 | Pro+ |
| SEO Optimizer | — | Blog post → 10-dim SEO score + AEO recommendations | agent__seo-optimizer | Sonnet 4.6 | Pro+ |
| Backlink Researcher | backlink-researcher.md | Niche + existing links → prospect list | agent__backlink-researcher | Sonnet 4.6 | Pro+ |
| Backlink Outreach Writer | backlink-outreach-writer.md | Single prospect → outreach email | agent__backlink-outreach-writer | Sonnet 4.6 | Pro+ |
| Directory Submitter | — | Backlink opportunity → Playwright form submission | agent__directory-submitter | Playwright | Pro+ |
Content Chain
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Blog Writer | blog-writer.md | SEO brief → full blog post | agent__blog-writer | Sonnet 4.6 | Free+ |
| GBP Post Writer | gbp-post-writer.md | Business info + topic → GBP post | agent__gbp-post-writer | Sonnet 4.6 | Free+ |
| Social Post Writer | social-post-writer.md | Platform + brief → single post | agent__social-post-writer | Sonnet 4.6 | Pro+ |
| Email Writer | email-writer.md | Campaign brief → email newsletter | agent__email-writer | Sonnet 4.6 | Pro+ |
| Landing Page Writer | landing-page-writer.md | Product brief → landing page copy | agent__landing-page-writer | Sonnet 4.6 | Pro+ |
| Google Ads Writer | google-ads-writer.md | Campaign + keywords → RSA copy set | agent__google-ads-writer | Sonnet 4.6 | Pro+ |
| Meta Ads Writer | meta-ads-writer.md | Campaign + audience → ad copy variants | agent__meta-ads-writer | Sonnet 4.6 | Pro+ |
| Content Repurposer | content-repurposer.md | Approved content → derivative formats (social, email, ad copy, thread, carousel, landing page) | agent__content-repurposer | Sonnet 4.6 | Pro+ |
| Blog Image Generator | blog-image-generator.md | Post title + brand colours → hero/inline images | agent__blog-image-generator | Azure GPT Image | Pro+ |
Planning, Analysis & Reporting
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Social Calendar Planner | social-calendar-planner.md | Strategy + platforms → monthly calendar | agent__social-calendar-planner | Sonnet 4.6 | Pro+ |
| Ads Analyst | ads-analyst.md | Ads performance data → analysis report | agent__ads-analyst | Sonnet 4.6 | Pro+ |
| Report Writer | report-writer.md | All channel data + goals → monthly report | agent__report-writer | Sonnet 4.6 | Pro+ |
| Custom Report Writer | — | On-demand user prompt → structured natural-language report | agent__custom-report-writer | Sonnet 4.6 | Pro+ |
| Anomaly Detector | anomaly-detector.md | Metrics vs prior period → alerts | agent__anomaly-detector | Haiku 4.5 | Pro+ |
Research (Ollama/local)
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Topic Researcher | topic-researcher.md | Industry + recent topics → topic ideas | agent__topic-researcher | gemma3:4b | Agency+ |
| Research Note Writer | research-note-writer.md | Topic → stats + citations + notes | agent__research-note-writer | gemma3:4b | Agency+ |
Content Quality
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Content Auditor | content-auditor.md | Published blog post → health score + refresh context | agent__content-auditor | Sonnet 4.6 | Pro+ |
Reactive
| Agent | Doc | Input → Output | Queue | Model | Plan |
|---|---|---|---|---|---|
| Review Response Writer | review-response-writer.md | Single review → draft response | agent__review-response-writer | Sonnet 4.6 | Pro+ |
System Agents (Live)
| Agent | Doc | Trigger |
|---|---|---|
| Blog AI Agent | — | New BlogRequest record |
| Billing Agent | — | Billing event |
Runtime — Where Agents Run
All agents run as BullMQ workers inside a dedicated background process: apps/servers/agents.
[API / Next.js] ──enqueue job──► [Redis / BullMQ queue]
│
[apps/servers/agents polls]
│
[picks up job → calls adapter]
│
[adapter spawns LLM subprocess]
│
[result written back to DB]Entry point: apps/servers/agents/src/index.ts
To start in dev:
cd apps/servers/agents && pnpm devWorker files (in packages/agents/src/workers/):
| Worker file | Agents handled |
|---|---|
setup.worker.ts | client-researcher → competitor-researcher → context-file-writer |
strategy.worker.ts | deliverable-planner |
activity.worker.ts | activity-planner |
strategy-writer.worker.ts | strategy-writer |
blog-writer.worker.ts | blog-writer |
blog-faq-writer.worker.ts | blog-faq-writer (sub-step, no AgentConfig) |
content.worker.ts | gbp-post-writer, email-writer, and other content agents (generic dispatcher) |
content-repurposer.worker.ts | content-repurposer |
social-post-writer.worker.ts | social-post-writer |
landing-page-writer.worker.ts | landing-page-writer |
backlink-outreach-writer.worker.ts | backlink-outreach-writer |
directory-submitter.worker.ts | directory-submitter (Playwright, no LLM) |
seo-optimizer.worker.ts | seo-optimizer (Anthropic SDK direct) |
custom-report-writer.worker.ts | custom-report-writer |
performance-report-writer.worker.ts | performance-report-writer |
website-crawler.worker.ts | website-crawler (SEO/audit crawler) |
tenant-website-crawler.worker.ts | tenant-web-crawler (tenant own-site → RAG ingestion) |
opportunity-matcher.worker.ts | opportunity-matcher |
ai-visibility-seeder.worker.ts | ai-visibility-seeder |
search-term-classifier.worker.ts | search-term-classifier |
linkedin-ads-optimizer.worker.ts | linkedin-ads-optimizer |
meta-ads-optimizer.worker.ts | meta-ads-optimizer |
insights/insight-worker-base.ts | shared base for all 8 channel insight workers |
insights/channel-score-explainer.worker.ts | channel-score-explainer (no AgentConfig) |
| Infrastructure (no LLM, no AgentConfig) | |
rag-ingestion.worker.ts | Qdrant document ingestion |
social-publisher.worker.ts | Social API publishing |
newsletter-sender.worker.ts | Email sending via Resend |
github-source-sync.worker.ts | GitHub repo → RAG sync |
search-term-sync.worker.ts | Google Ads search term pull |
tenant-delete.worker.ts | Multi-step tenant deletion |
Scaling: queues are shared across all tenants. Run multiple replicas of the server-agents container in production — BullMQ distributes jobs across all active instances automatically.
Agent Event Protocol (Apr 2026)
Every worker emits agent:started and agent:completed (or agent:failed) events via publishAgentEvent. These are persisted to the AgentRun DB table and broadcast via Redis pub/sub to the manage portal’s Execution Queue dashboard.
agent:started must include:
inputPrompt: prompt, // full prompt stringagent:completed must include:
inputTokens: result.usage?.inputTokens, // nested under .usage — NOT result.inputTokens
outputTokens: result.usage?.outputTokens,
transcript: result.transcript, // full AdapterExecutionResult transcript arrayThe transcript field captures every turn of the Claude Code session (assistant messages, tool_use, tool_result, system, user, error). All LLM-calling workers emit this as of Apr 2026. Runs before that date have transcript: null in the DB.
Standard Agent Doc Structure
Every agent doc follows the same sections:
- Overview — function, type, model, queue, cost, plan, status
- Input — TypeScript interface + field descriptions
- Output — TypeScript interface + sample output
- How It Works — numbered steps
- System Prompt — the actual prompt used
- Skills Injected — which skill files + their content
- Tools Required — external APIs and methods
- HITL Gates — where human review happens
- Guardrails — output validators
- Cost Profile — token estimates
- Error Handling — failure modes and responses
Superseded Agents — Replacement Map
The old multi-function agents have been deleted. For reference, here is how they mapped to the new single-function agents:
| Old agent (deleted) | Replaced by |
|---|---|
| Onboarding Agent | Client Researcher + Competitor Researcher + Context File Writer |
| Strategy Agent | Strategy Writer + Deliverable Planner |
| SEO Specialist | Keyword Researcher + Content Brief Writer + Site Auditor + Backlink Researcher |
| Copywriter | Blog Writer + GBP Post Writer + Social Post Writer + Email Writer + Landing Page Writer |
| Social Media Manager | Social Calendar Planner + Social Post Writer |
| Paid Ads Manager | Google Ads Writer + Meta Ads Writer + Ads Analyst |
| Data Analyst | Report Writer + Anomaly Detector |
| Content Researcher | Topic Researcher + Research Note Writer |
| Review & Reputation Agent | Review Response Writer |