Plan budget
Turn your coding agent into a full product team — composable skills across research, marketing, product, and process. One install, every editor (Claude Code, Cursor, Codex, Windsurf, Gemini CLI, VS Code).
npx -y skills add hungv47/meta-skills --skill plan-budgetAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 13 stars13 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Allocates a paid-marketing budget across channels — CAC/LTV-aware mix, marginal-return reasoning, min-viable-spend floors, and reallocation triggers, with a quantitative critic gate. Use when you have $X/mo and must decide where it goes. Not for channel selection (use plan-campaign), numeric funnel targets (use plan-funnel), per-channel ad copy (use write-ad), or scoring past results (use measure-results).
SKILL.md
9.8 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
Plan Budget — Orchestrator
Allocates a fixed paid budget across already-selected channels: CAC/LTV-aware mix, marginal-return reasoning over diminishing-returns curves, min-viable-spend floors, and explicit reallocation triggers. Multi-agent allocate → constraint-check → critic pipeline. Capability metadata lives in routing.yaml. Agent table + 3 routes + 7-dim rubric: references/agent-manifest.md. Methodology, marginal-return model, scope boundary, history: references/playbook.md.
Core question: Does every dollar sit where its next dollar earns the most — and is every CAC/LTV number sourced, not guessed?
Critical Gates — load first
- Never fabricate CAC or LTV. Every channel's CAC/LTV is sourced (
measure-results.forsvn/performance/*.tsv, operator-supplied + labeled, or a cited external benchmark) or it does not enter the math. A channel with no sourced CAC and no measure-results history → it is a hypothesis lane (capped test budget, labeledcac: unsourced), never an allocation backed by a number. Zero sourced inputs →NEEDS_CONTEXT(recommend running ads +measure-resultsfirst); do NOT invent a CAC. - Hard-block Pre-Dispatch inputs. Total budget · objective (acquisition / retention / mixed) · ≥1 channel with a sourced CAC/LTV · time horizon · the selected channel set (from
plan-campaign). Missing any → BLOCK and ask one question. Missing the channel set → defer toplan-campaignfirst (this skill allocates across selected channels; it does not select them). - Marginal return, not average. Allocation is driven by each channel's next-dollar return (marginal CAC at the proposed spend on its diminishing-returns curve), never by average CAC alone. A channel cheap on average but already past its saturation knee gets less, not more. Even-split-without-reason is an automatic critic FAIL.
- Every channel respects its floor and its §0 veto. Below min-viable monthly spend a channel cannot exit the learning phase — allocate the floor or allocate zero, never a sub-floor sliver. Never allocate to a channel whose
plan-campaignlaunch-channel pack §0 veto fires for this ICP/stage without an explicit override + reason. - No autonomous spend — ever. Output is a plan. It never moves money, never connects to an ad manager, never toggles a campaign. The publish/spend gate is hard-stopped for a human (
gate_class: review; spend is human-owned).
Quality Gate — 7 dimensions
Full rubric + Pass/Fail bands: references/rubric.md. Critic logic + rewrite routing: agents/critic.md.
- Gate: Total ≥49/70 AND every dim ≥6. Total 49-55 with all dims ≥6 = PASS as
DONE_WITH_CONCERNS. Any dim <6 = FAIL. - The seven dims: Input integrity (sourced CAC/LTV) · Marginal-return soundness · Diminishing-returns respect · Floor + veto compliance · Concentration balance · Reallocation triggers · Objective fit. Max 2 rewrite cycles; cycle 3 auto-surfaces with the scorecard.
Before Starting
Apply references/_shared/before-starting-check.md. Recommended context:
| Artifact | Source | Required? |
|---|---|---|
.forsvn/performance/*.tsv | measure-results | Strongly recommended — sourced CAC per channel; the substrate that keeps Gate 1 honest |
docs/forsvn/artifacts/marketing/campaign-plan.md | plan-campaign | Recommended — the selected channel set + per-channel network + §0 vetoes |
research/icp-research.md | research-icp | Recommended — LTV inputs (retention shape, ACV, payback tolerance) |
research/product-context.md | research-icp | Recommended — pricing / margin for LTV; objective framing |
docs/forsvn/experience/{business,product}.md | (any skill) | Optional — persisted CACs / prior allocations |
Pre-Dispatch + Mode
Run canonical Pre-Dispatch (references/_shared/pre-dispatch-protocol.md). Needed dimensions: total budget (monthly) · objective (acquisition / retention / mixed) · time horizon (allocation period in months) · selected channel set (from campaign-plan or operator) · per-channel CAC (sourced — value + source label) · per-channel LTV or payback ceiling · per-channel current spend + observed saturation signal (optional but sharpens the curve) · constraints (channels off-limits, max-concentration cap, min-viable floors if non-default).
Cold Start (7-question) + Missing-Input Hard Blocks (5 conditions) + the sourced-vs-unsourced CAC classification: references/procedures/pre-dispatch.md.
Mode (references/_shared/mode-resolver.md): budget: deep. --fast collapses the allocator's curve-fitting to a coarser three-band (under/at/over saturation) pass and skips the second constraint sweep. --fast does NOT skip Cold Start, Critical Gates 1-5, Missing-Input Hard Blocks, the CAC-fabrication ban, or the critic floor.
Session execution profile (single-vs-multi): inherit per references/_shared/execution-policy.md.
Routes
Three routes — A (quick: ≤3 channels, operator-supplied CACs), B (full: campaign-plan + measure-results grounded), C (called by another skill — reuses a cached allocation or runs Route B if stale). Full dispatch graphs: references/agent-manifest.md.
Artifact Contract
- Path:
docs/forsvn/artifacts/marketing/plan-budget/[date]-[slug].md(allocation table + marginal-return rationale + reallocation triggers). Single artifact per run; overwrite on re-run unless version preservation via[date]-[slug].v[N].md. - Lifecycle:
pipeline— re-run on a CAC update, a budget change, a new channel selection, or a fired reallocation trigger. - Frontmatter:
skill,version,date,status,stack: marketing,review_surface, the v3 instruction core (id,type,keywords) + domain fieldstotal_budget,objective,horizon_months,channels,cac_sourcing(sourced | mixed | hypothesis-only),critic_total. Per-field rules:references/format-conventions.md. - Consumed by:
plan-campaign(per-channel execution weight),write-ad(per-network spend context),measure-results(closes the loop — did the allocation's predicted CACs hold?). - Cross-stack contract: schema changes require atomic update of
format-conventions.md§ "Frontmatter field order" + § "Field values" — never silently drift.
Anti-Patterns
Read references/anti-patterns.md before any allocation ships. Section 1 — Allocation (even-split-without-reason · sunk-cost doubling-down · average-CAC instead of marginal · over-concentration · ignoring channel saturation · sub-floor slivers · allocating into a §0-veto channel). Section 2 — Input integrity (fabricated CAC · stale CAC shipped silently · unsourced external benchmark dressed as own data · LTV inflated to justify a channel). Section 3 — Process (no reallocation trigger · objective-mismatch allocation · collapsing into plan-campaign). Each row carries a falsifiable detection rule the critic applies.
Durable Rules (protected)
<!-- SLOW_UPDATE_START --> <!-- No pinned rules yet. Populate via the slow-update workflow (see references/slow-update-fence.md). Each pinned rule must (a) be procedural not instance-specific, (b) be earned from a regression or critic-flagged failure, (c) cite the artifact / decision record that justified pinning. --> <!-- SLOW_UPDATE_END -->Completion Status
- DONE — allocation across the selected channels with marginal-return rationale + reallocation triggers, critic PASS, every CAC/LTV sourced.
- DONE_WITH_CONCERNS — delivered with a flagged risk (one hypothesis lane on an unsourced CAC, thin saturation data, total 49-55 with all dims ≥6) named in the artifact.
- BLOCKED — total budget, objective, time horizon, or the selected channel set missing and unresolvable.
- NEEDS_CONTEXT — zero sourced CAC inputs and no
measure-resultshistory; recommend running ads +measure-resultsfirst, ORplan-campaignto select channels. Never fabricate a CAC to proceed.
Execution
This skill never spends. The allocation is a brief for a human to enter into the ad managers themselves. No Assisted/Direct execution fork — there is no render or publish step. The reallocation triggers tell the operator when to re-invoke (a channel's measured CAC breaches its trigger, the budget changes, or plan-campaign reselects channels).
Worked Example
End-to-end Route B (a real $6,000/mo split across 4 channels — Meta / Google Search / LinkedIn / newsletter — with marginal-CAC curves, two channels at their saturation knee, one hypothesis lane on an unsourced CAC, a min-viable floor binding on LinkedIn, per-channel reallocation triggers, constraint-checker bounce on an over-concentration cap, critic PASS 60/70) + a cycle-2 FAIL (fabricated CAC) trace: references/examples/plan-budget-walkthrough.md.
What ships with it: 20 files
170.4 KB alongside SKILL.md, 1 of them executable
agents/
- allocator.md8.5 KB
- constraint-checker.md6.7 KB
- critic.md7.7 KB
references/
- agent-manifest.md4.2 KB
- anti-patterns.md10.3 KB
- examples/plan-budget-walkthrough.md10.9 KB
- format-conventions.md5.9 KB
- marginal-return-model.md6.3 KB
- playbook.md5.6 KB
- procedures/dispatch-mechanics.md5.1 KB
- procedures/pre-dispatch.md5.9 KB
- rubric.md8.5 KB
- _shared/before-starting-check.md9.8 KB
- _shared/execution-policy.md7.0 KB
- _shared/mode-resolver.md11.0 KB
- _shared/performance-data.md15.8 KB
- _shared/pre-dispatch-protocol.md20.2 KB
- _shared/reviewable-artifact-contract.md13.3 KB
scripts/
- bootstrap-experience.tsruns3.6 KB
- routing.yaml4.1 KB