Install
$ agentstack add skill-lifesight-lifesight-lifesight-budget-optimization ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Lifesight Budget Optimization
The flagship analysis job: turn a budget question into a defensible reallocation decision. The optimizer does the math; your job is the judgment — making sure the answer maximizes the business outcome, not just the metric the tool was pointed at.
Prerequisites (the router handles these): workspace calibrated, profile loaded (model, channels, scale, guardrails). Operate under lifesight-core rules and present under lifesight-rendering. Load both.
Step 1 — Lock the objective BEFORE running anything
This is the most important step and the one a naive agent skips. "Maximize revenue" with no budget constraint will happily buy revenue at a loss (it triples spend for a sub-1.0 marginal return). Decide the objective first:
- Default to fixed-budget reallocation (same total spend, optimized mix) unless
the user explicitly wants to change the budget. This is the safe, common case.
- If the user wants growth, frame it as **"what's the most efficient way to deploy
$X" or "what budget hits $Y revenue at an acceptable iROAS"** — never uncapped max-revenue.
- Apply the profile's
default_objectiveandiroas_floorif set.
State the objective in one line and proceed. If the user truly asked for uncapped max-revenue, run it — but you MUST surface the marginal economics (Step 4).
> Known MCP limit: a fixed-total-budget request sometimes errors. If it does, run > the standard optimization and reconcile to the fixed budget in your reading (note > the total delta and the marginal return), rather than presenting an unconstrained > plan as if it were fixed-budget.
Step 2 — Walk the gate funnel (one answer at a time)
MIA gates step-by-step. Answer each gate with one value; never re-send the whole request. Typical funnel:
- Model — already set from the profile; if MIA re-prompts, supply the default model.
- Constraint strategy — Current / Conservative / Moderate / Aggressive / Custom.
Default to Moderate unless guardrails say otherwise; if the profile sets max_channel_change, use Custom with those bounds.
- Time period — match the user's horizon (e.g. Quarter for Q4).
Completing these gates produces ONE optimization — that's one heavy step. If the session sours (repeated errors), reset and re-align the workspace per lifesight-core Rule 5, then resume.
The optimization is a mandatory gate the chain must pass. A power user may ask for the full package (optimize + forecast + saturation + worksheet). You may run it as a chain — but the moment the optimization returns, apply the Step 4 pressure-test BEFORE doing anything downstream:
- Sound result → continue the chain (forecast, saturation, worksheet), still one
heavy call at a time, and deliver the package.
- Value-destroying, self-contradictory, or silently budget-inflating result →
HALT. Present the problem and the fix. Do NOT build a forecast or worksheet for a plan that shouldn't ship — that is the exact failure this gate prevents.
Default to presenting the optimization first when the change is large or high-stakes (a 3× budget swing, a board/CFO-bound number); proceeding straight through is fine for a clearly-sound routine reallocation. Never run an unattended pipeline that ignores the optimization's result — the Step 4 check between the optimization and anything downstream is non-negotiable.
Step 3 — Apply guardrails from the profile
Before trusting the output, enforce the customer's rules:
iroas_floor— do not recommend scaling any channel sitting below it.locked_channels— never recommend changing these.max_channel_change— flag (or constrain) any move beyond the cap.
If guardrails are unset in the profile, ask the one question that matters ("Any iROAS floor or per-channel caps I should respect?") rather than assuming none.
Step 4 — Pressure-test before you recommend (mandatory)
Run every optimization output through these checks. This is what makes the answer defensible:
- Did total budget change? If the plan increased spend, say so explicitly and
compute marginal return = Δrevenue ÷ Δspend. If marginal < 1.0 (or < the iROAS floor), the incremental spend destroys value — say that plainly.
- Platform ROAS or causal iROAS? Name which the numbers are. A "grow 100%"
recommendation on a sub-1.0 platform ROAS gets a caveat — the causal picture may differ.
- Do the figures reconcile? Headline totals vs the channel table, and metrics
vs each other. If the tool reports contradictory efficiency numbers, flag it and recommend verifying in-platform — don't relay both as fact.
- Is the reallocation signal still useful even if magnitudes are shaky? Usually
yes — separate the trustworthy direction (scale vs cut) from the suspect exact numbers.
Step 5 — Present (via lifesight-rendering)
Use the budget-optimization presentation order: the honest "so what" → optimized mix (clean channel names, signed deltas) → the why (marginal ROI + saturation in plain language) → impact forecast → 2-4 sequenced next actions. Frame the lead line for the persona (CMO / Growth / CFO / Analyst). Curate — don't dump every channel row.
Step 6 — Offer the right next step
Pick 1-2 genuinely useful follow-ups, not a menu:
- "Run the forecast on this plan" · "Weekly pacing worksheet" · "What-if on a
specific channel" · "Save this scenario". Only suggest channels that actually exist in this workspace (per the profile).
Red flags — STOP
- About to recommend "adopt max-revenue" without checking marginal return → Step 4.1
- About to call a sub-1.0 channel "high headroom, scale it" → check iROAS floor + platform-vs-causal
- Relaying two different efficiency numbers from one response as both true → flag the contradiction
- Re-sending the whole prompt at each MIA gate → answer the one gate
- Promising to auto-run optimize → forecast → saturation → worksheet in one chain → run the optimization, PRESENT it with the Step 4 pressure-test, THEN proceed; a value-destroying plan stops the chain
- Recommending a move that violates a
locked_channelormax_channel_change→ enforce the guardrail
Common mistakes
| Mistake | Fix | |---------|-----| | Running uncapped "maximize revenue" by default | Default to fixed-budget reallocation (Step 1) | | Treating platform ROAS as causal truth | Name which it is; caveat scaling calls on platform numbers | | Presenting a 3× budget plan as "+32% revenue win" | Show marginal return on the incremental spend | | Ignoring profile guardrails | Enforce iROAS floor / caps / locked channels (Step 3) | | Dumping all 20 channels with the raw menu | Curate to the decision; clean names; relevant next steps |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: lifesight
- Source: lifesight/lifesight
- License: MIT
- Homepage: https://lifesight.io/mcp
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.