Skip to Content
AgentsDeliverable PlannerDeliverable Planner

Deliverable Planner

[Live] · agent__deliverable-planner · Claude Sonnet 4.6

Converts the approved marketing strategy into concrete monthly deliverable commitments — specifying what gets produced, how much, and on which channels — and writes the Goal and Deliverable records that drive the production pipeline.


Overview

FunctionConvert approved strategy into concrete monthly deliverable volumes by channel and content type
TypeStrategy
ModelClaude Sonnet 4.6
Queueagent__deliverable-planner
Concurrency5
Timeout5 min
Est. cost / task~$0.35
PlanFree+ (all tenants)

Triggers

Trigger typeWhenWho initiates
Scheduled / cronAuto-triggered when tenant admin approves the strategy document for the first timePlatform scheduler (event-chained from Strategy Writer approval)
Human on-demand”Refresh Plan” button in Dashboard → Strategy → Deliverable Plan; also auto-triggered when strategy is refreshed and re-approvedTenant admin
Activity Planner dispatchNot applicable — Deliverable Planner runs before the Activity Planner; Activity Planner reads the output of this agent

Input

interface DeliverablePlannerInput { tenantId: string; approvedStrategy: string; // Full Markdown of the approved strategy document planType: 'free' | 'pro' | 'agency' | 'enterprise'; connectedChannels: string[]; // Active OAuth channel slugs budgetHint?: string; // Optional — e.g. "~$2,000/month ad spend" from onboarding monthlyHours?: number; // Optional — agency capacity scoping (e.g. 20 hours/month) existingDeliverables?: DeliverableRecord[]; // Only on refresh — current commitments for comparison } interface DeliverableRecord { type: string; // e.g. "blog_post", "gbp_post", "social_post" monthlyVolume: number; platforms: string[]; }

Output

interface DeliverablePlannerOutput { tenantId: string; generatedAt: string; // ISO 8601 timestamp goals: GoalRecord[]; // Goal records to create in the database deliverables: DeliverableSpec[]; // Deliverable records to create in the database monthlyCostEstimate: number; // Estimated Leadmetrics credit cost per month changesSummary?: string; // Only on refresh — what changed vs existing plan planningNotes: string; // Rationale, trade-offs, assumptions made } interface GoalRecord { title: string; // e.g. "Grow organic search traffic by 40%" metric: string; // e.g. "Google Search Console impressions" targetValue: string; // e.g. "+40%" timeframeMonths: number; // e.g. 6 channel?: string; // Primary channel this goal tracks against linkedDeliverableTypes: string[]; // Which deliverable types contribute to this goal } interface DeliverableSpec { type: string; // Canonical deliverable type slug (see deliverable-types list) label: string; // Human-readable e.g. "SEO Blog Post" monthlyVolume: number; // How many per month platforms: string[]; // e.g. ["google_search", "website"] priority: 'high' | 'medium' | 'low'; rationale: string; // One sentence explaining why this volume on this channel agentQueue: string; // Which agent will produce it e.g. "agent__blog-writer" estimatedCostPerUnit: number; // In platform credits }

Sample output excerpt

{ "goals": [ { "title": "Grow organic search traffic by 40% in 6 months", "metric": "Google Search Console impressions", "targetValue": "+40%", "timeframeMonths": 6, "channel": "google_search", "linkedDeliverableTypes": ["blog_post", "gbp_post"] }, { "title": "Generate 25 additional booked enquiries per month from website", "metric": "Website contact form submissions", "targetValue": "+25/month", "timeframeMonths": 3, "channel": "website", "linkedDeliverableTypes": ["blog_post", "google_ads_copy"] } ], "deliverables": [ { "type": "blog_post", "label": "SEO Blog Post", "monthlyVolume": 4, "platforms": ["website", "google_search"], "priority": "high", "rationale": "4 posts/month builds keyword coverage at a sustainable pace; aligns with the pricing-transparency content opportunity identified in strategy.", "agentQueue": "agent__blog-writer", "estimatedCostPerUnit": 2 }, { "type": "gbp_post", "label": "Google Business Profile Post", "monthlyVolume": 8, "platforms": ["google_business_profile"], "priority": "high", "rationale": "2 posts/week maintains GBP freshness signal for Ipswich and Brisbane local pack rankings.", "agentQueue": "agent__gbp-post-writer", "estimatedCostPerUnit": 1 }, { "type": "google_ads_copy", "label": "Google Ads RSA Copy Set", "monthlyVolume": 1, "platforms": ["google_ads"], "priority": "medium", "rationale": "Monthly copy refresh for emergency plumbing and blocked drain campaigns to maintain Quality Score.", "agentQueue": "agent__google-ads-writer", "estimatedCostPerUnit": 2 } ], "monthlyCostEstimate": 21, "planningNotes": "Plan is calibrated for a Pro plan with 20 hours/month agency capacity. Blog volume reduced from a possible 6/month to 4/month to leave capacity for GBP management and ad copy. LinkedIn was excluded — no evidence the target audience (homeowners) discovers tradies via LinkedIn." }

How It Works

  1. Receive job — BullMQ dequeues the job with the approved strategy Markdown, plan type, connected channels, and optional scoping hints.

  2. RAG: uploaded targets — Call rag_search against the Client Documents dataset for “deliverable targets”, “content volume”, “publishing schedule”, “monthly output”. If the tenant or agency has uploaded a content plan, scope document, or SOW, these are loaded to anchor the volume decisions.

  3. Plan and channel filtering — Map planType and connectedChannels to the canonical list of available deliverable types. Only deliverable types that have a corresponding agent queue and are available on the tenant’s plan are candidates. No deliverables are planned for disconnected channels.

  4. LLM planning call — Send approved strategy + RAG context + plan/channel constraints to Claude Sonnet 4.6 with the Deliverable Planner system prompt. Model returns the full DeliverablePlannerOutput JSON.

  5. Goal extraction validation — Cross-check that every goal in the strategy document is represented by at least one deliverable. If a goal has no linked deliverable type, the model is re-prompted to either add a deliverable or explain why the goal is not addressable given the plan constraints.

  6. Cost estimate calculation — Worker sums monthlyVolume × estimatedCostPerUnit across all deliverables to produce monthlyCostEstimate. If this exceeds the plan’s monthly credit limit, the model is re-prompted to reduce volumes or de-prioritise low-priority deliverables.

  7. Persist — Goal records written to the goals table. Deliverable specs written to the deliverable_templates table. Both keyed by tenantId. Previous plan archived if existingDeliverables was provided. An AgentRun record is created at job start (agent:started) and updated on completion/failure (agent:completed / agent:failed) so the run is visible in the Execution Queue.

  8. Trigger downstream — Creates an approval record for the tenant admin. On approval, the Activity Planner can begin creating activity pipelines against this plan.


System Prompt

You are a senior digital marketing account manager. You have been given an approved marketing strategy document for a client. Your job is to convert it into a concrete monthly deliverable plan — specific content types, volumes per channel, and priorities. TENANT SETTINGS: {{TENANT_SETTINGS}} PLAN TYPE: {{PLAN_TYPE}} CONNECTED CHANNELS: {{CONNECTED_CHANNELS}} MONTHLY CAPACITY HINT: {{MONTHLY_HOURS}} hours/month BUDGET HINT: {{BUDGET_HINT}} APPROVED STRATEGY: {{APPROVED_STRATEGY}} CLIENT CONTEXT FILE: {{CLIENT_CONTEXT}} UPLOADED SCOPE DOCUMENTS: {{RAG_CONTEXT}} AVAILABLE DELIVERABLE TYPES FOR THIS PLAN: {{AVAILABLE_DELIVERABLE_TYPES}} Your output must: 1. Create a GoalRecord for each SMART goal in the strategy — extract the metric, target value, and timeframe precisely 2. Create a DeliverableSpec for each content type that should be produced monthly 3. Set monthlyVolume based on: (a) what the strategy recommends, (b) the plan capacity, (c) any uploaded scope documents 4. Only include deliverable types available on the {{PLAN_TYPE}} plan 5. Only include channels that are in the {{CONNECTED_CHANNELS}} list 6. Write a one-sentence rationale for each deliverable volume decision 7. Write planningNotes explaining any trade-offs, assumptions, or things excluded and why Be conservative. It is better to plan a sustainable volume the client can be proud of than an ambitious volume that gets missed. If monthlyHours is provided, ensure the total workload is achievable within that capacity. Output must be valid JSON matching the DeliverablePlannerOutput schema.

Skills Injected

Skill filePurpose
client-context-file.mdAlways injected — provides business type, channels, and audience context to inform appropriate content volumes
deliverable-types.mdCanonical list of all deliverable types, their agent queues, plan availability, and typical monthly volume ranges

deliverable-types.md — content

# Deliverable Types — Canonical Reference ## Content Deliverables | Type slug | Label | Agent queue | Min plan | Typical monthly range | Cost / unit | |---|---|---|---|---|---| | `blog_post` | SEO Blog Post | `agent__blog-writer` | Free | 2–8 | 2 credits | | `gbp_post` | Google Business Profile Post | `agent__gbp-post-writer` | Free | 4–12 | 1 credit | | `social_post` | Social Media Post | `agent__social-post-writer` | Pro | 8–30 | 1 credit | | `email_newsletter` | Email Newsletter | `agent__email-writer` | Pro | 1–4 | 2 credits | | `landing_page` | Landing Page Copy | `agent__landing-page-writer` | Pro | 0–2 | 3 credits | | `google_ads_copy` | Google Ads RSA Set | `agent__google-ads-writer` | Pro | 1–3 | 2 credits | | `meta_ads_copy` | Meta Ads Copy Set | `agent__meta-ads-writer` | Pro | 1–3 | 2 credits | ## Research Deliverables | Type slug | Label | Agent queue | Min plan | Notes | |---|---|---|---|---| | `keyword_cluster` | Keyword Research Cluster | `agent__keyword-researcher` | Free | Usually 1/month; feeds blog content | | `content_brief` | SEO Content Brief | `agent__content-brief-writer` | Free | 1 per blog post planned | ## Analysis Deliverables | Type slug | Label | Agent queue | Min plan | Notes | |---|---|---|---|---| | `monthly_report` | Monthly Performance Report | `agent__report-writer` | Pro | Always 1/month if on Pro+ | | `social_calendar` | Social Media Calendar | `agent__social-calendar-planner` | Pro | 1/month; required before social_post batch | ## Volume Guidelines **Conservative (recommended for new clients):** - Blog: 2/month - GBP: 4/month (1/week) - Social: 8–12/month (2–3/week) **Standard:** - Blog: 4/month - GBP: 8/month (2/week) - Social: 16–20/month (4–5/week) **Aggressive (Agency/Enterprise only):** - Blog: 6–8/month - GBP: 12/month (3/week) - Social: 24–30/month (daily) ## Dependency Rules - `blog_post` requires a `content_brief` — always plan 1 content brief per blog post - `social_post` batch requires a `social_calendar` — always plan 1 calendar/month if social posts are planned - `google_ads_copy` requires at least 1 `keyword_cluster` to have been run

RAG Usage

DatasetQuery exampleWhen used
Client Documents"deliverable targets", "content volume", "publishing schedule", "monthly output", "scope of work"Step 2 — loads any uploaded scope documents or content plans that specify output targets
Website ContentNot queriedNot applicable at this stage
Published ContentNot queriedExisting content performance is addressed at strategy level, not planning level
Competitor ResearchNot queriedCompetitor data already incorporated via strategy document

Tools Required

ToolMethodPurposeRequired?
rag_searchsearchQuery Client Documents for uploaded scope and content volume targetsYes

No external web tools are called. This agent is a pure planning step.


HITL Gates

Gate 1 — Deliverable plan review The deliverable plan is surfaced to the tenant admin in Dashboard → Strategy → Deliverable Plan. They see:

  • A table of each deliverable type with monthly volume and channel
  • The total monthly credit estimate
  • The goals with their linked deliverable types

Admin actions:

  • Adjust monthly volumes per deliverable type (slider/number input)
  • Enable or disable specific deliverable types
  • Approve the plan (“Start producing content”)

Approval triggers the Activity Planner to create the first month’s activity pipeline.

Gate 2 — Credit limit warning If monthlyCostEstimate exceeds the tenant’s monthly credit allocation by more than 20%, the approval UI shows a warning: “This plan may use more credits than your monthly allowance. Consider reducing volumes or upgrading your plan.” The admin can still approve with the warning.


Guardrails

  • deliverables array must contain at least 1 entry.
  • Every goal in the strategy must be linked to at least 1 deliverable type in linkedDeliverableTypes.
  • monthlyVolume for any deliverable type must not exceed the maximum defined in the deliverable-types matrix.
  • Only deliverable types available on the tenant’s plan are included — validated post-generation.
  • agentQueue values must exactly match the canonical queue names in the deliverable-types matrix.
  • If monthlyHours is provided, the total volume must not imply more than monthlyHours × 3 agent-hours (rough heuristic: ~3 agent-hours per deliverable unit).

Tenant Settings Used

SettingHow it’s used
planFilters available deliverable types; constrains volumes to plan entitlements
connectedChannelsExcludes deliverable types requiring disconnected channels
tenantIdKeys the goal and deliverable records in the database
industryUsed by the model to sanity-check volume suggestions (local service vs B2B have different norms)

Cost Profile

Avg input tokens~8,000 (strategy document + RAG + system prompt)
Avg output tokens~800
Est. cost / task~$0.35

Error Handling

ErrorResponse
Approved strategy is empty or missingFail immediately; surface error: “Cannot plan deliverables — no approved strategy found”
All deliverable types are filtered out (plan or channel mismatch)Fail with HITL gate: “No deliverables available for your current plan and connected channels. Connect channels in Dashboard → Integrations to enable content production.”
Cost estimate exceeds plan credit limit by >50%Re-prompt with hard cap instruction; if still over after retry, surface HITL warning and require explicit admin acknowledgement
Goal has no linkable deliverable typeNote in planningNotes: “Goal ‘[title]’ cannot be addressed through content deliverables on this plan. Consider upgrading or addressing this goal through other means.”
RAG returns no resultsProceed without scope documents; note in planningNotes
LLM returns malformed JSONRetry once with strict JSON-only instruction; if still failing, log and create HITL flag

© 2026 Leadmetrics — Internal use only