Agent skill
forecast-call-prep
Prepare the executive summary for a weekly forecast call by reconciling rep commits against historical close-rate models and surfacing material variance.
Filed under CRM and RevOps.
From elijeangilles/revops-skills · 6 skills · 9 · pushed 2026-06-02
What it does when it runs
Prepare the executive summary for a weekly forecast call by reconciling rep commits against historical close-rate models and surfacing material variance. Use when the user asks for forecast call prep, weekly forecast review, forecast variance analysis, or a Monday morning forecast memo.
Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/elijeangilles/revops-skills.git /tmp/revops-skills git -C /tmp/revops-skills sparse-checkout set "skills/forecast-call-prep" mkdir -p ~/.claude/skills/forecast-call-prep cp -R "/tmp/revops-skills/skills/forecast-call-prep/." ~/.claude/skills/forecast-call-prep/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from elijeangilles/revops-skills/blob/03e75e257d0da95a87e33e8d1aa81bb32c8b951b/skills/forecast-call-prep/SKILL.md, which is licensed MIT (repository). 1,205 words, 23 headings.
Forecast Call Preparation
What this skill does
Produces a one-page executive summary for a weekly forecast call. Reconciles three views of the quarter:
- Rep commit (what the reps say they will close)
- Pipeline-weighted forecast (sum of open opportunity amount times stage probability)
- Historical model forecast (rep commit adjusted by that rep's calibration over the last 12 weeks)
Surfaces the deltas that materially move the quarter. Names the deals worth discussing on the call. Recommends a position for the leader to take into the meeting.
Upstream context
This skill is typically invoked by salesforce-revops-audit when the audit's Forecast Hygiene dimension scores below 85. It can also be run directly when the user knows they need a forecast call memo. If you have not run the audit and the user is asking broadly about RevOps health rather than a specific forecast call, recommend running salesforce-revops-audit first.
When to invoke
Invoke when the user says any of:
- "prep me for the forecast call"
- "weekly forecast variance"
- "forecast call memo"
- "where are we vs commit"
- "what's at risk this quarter"
- "Monday morning forecast prep"
Do not invoke for:
- Long-range planning (next quarter, next year)
- Comp plan analysis
- Individual deal forensics (use
deal-investigatorinstead) - Pipeline hygiene scanning (use
pipeline-hygiene-auditinstead)
Data sources, in order of preference
The skill works against any of these sources. Pick the first one available:
-
Salesforce MCP: if a Salesforce MCP server is connected, query opportunities with the SOQL in Appendix A and forecast history from the
Forecast__ccustom object or equivalent. -
CSV files: if the user has
opportunities.csvandforecast_history.csv(matching the schema inexamples/data_schema.md), parse those directly. -
Sample data: if neither of the above, use the bundled synthetic dataset at
data/in this repo. Tell the user you are using sample data and what they would need to provide for a real run.
Column discernment
Real Salesforce exports rarely match canonical names exactly. Custom suffixes (__c), renamed fields, and different cases are normal. Before parsing any data file, read docs/column_mapping.md and use it to map the export's actual headers to the canonical fields this skill needs.
Procedure (full detail in docs/column_mapping.md):
- Normalize each header in the export (lowercase, strip
__c, replace_and.with space, drop noise tokens). - Score each header by token overlap against the canonical field's
header_tokens, subtracting forexclusion_tokenshits. - Confirm the top candidate with a value fingerprint (pull two or three sample rows and check the values against the catalog's
value_fingerprint). - If two headers tie above threshold, ask the user one question to disambiguate. If no header passes for a required field, ask the user to name the column. Do not guess.
Print a one-line Mapping Report under the memo's "The number" section: Mapped N of M required fields from <source>. Unmapped: <list or none>.
Process
Step 1: Acquire data
Get three things:
- All open opportunities with close date on or before the current quarter end
- Each rep's last 12 weeks of forecast submissions (commit, best case, pipeline)
- Each rep's quarter-to-date closed-won total
Step 2: Compute three forecast views
For each rep, calculate:
Rep commit (qtd + open commit)
rep_commit = sum(closed_won_qtd) + sum(open_opps where forecast_category == "Commit").amount
Pipeline-weighted forecast
weighted = sum(closed_won_qtd) + sum(open_opps where !is_closed)(amount * probability / 100)
Historical model forecast Compute each rep's calibration ratio over the last 12 weeks:
calibration_ratio = average(actual_closed_won / commit_amount) for weeks where commit > 0
Then:
model_forecast = sum(closed_won_qtd) + (open_commit_amount * calibration_ratio)
If a rep has less than 8 weeks of history, flag them as "insufficient data" and use 1.0 as their ratio with a confidence warning.
Step 3: Identify material variance
A rep's forecast has material variance if any of these are true:
- Delta between rep commit and model forecast exceeds 15%
- Rep commit exceeds best case from prior week by more than 20% (sandbagging release)
- Rep commit dropped from prior week by more than 20% (commit pull)
- Pipeline-weighted forecast is less than 70% of rep commit (thin coverage)
For each variance, identify the top 2-3 opportunities driving it.
Step 4: Write the memo
Output the memo using exactly this structure:
# Forecast Call Memo, Week of [date]
## The number
- Team commit: $X,XXX,XXX ([change] vs last week)
- Pipeline-weighted: $X,XXX,XXX
- Historical model: $X,XXX,XXX
- Confidence: [High | Medium | Low] based on [reason]
## What to discuss on the call
### Risks (forecast is at risk of missing)
1. **[Rep name]**: [one sentence on what's off]. Top deals to pressure-test: [opp name 1, opp name 2].
2. ...
### Upsides (forecast may be conservative)
1. **[Rep name]**: [one sentence]. Top deals worth pulling forward: [opp name 1, opp name 2].
2. ...
### Coverage concerns
1. **[Rep name]** has pipeline-weighted of $X vs commit of $Y. Coverage ratio [N]x.
This is the deal-by-deal review needed.
## Recommended position for the call
[2-3 sentence recommendation for the leader. Should this team be calling commit,
calling best case, or signaling risk to the CRO. Be direct.]
## Appendix: rep calibration over 12 weeks
[Table showing each rep's average commit accuracy, with their profile if known:
"runs hot," "runs cold," "calibrated," "wildcard"]
Step 5: Guardrails on the output
- Do not list every flagged opp. Cap at 3 risks, 3 upsides, 3 coverage concerns.
- Do not editorialize beyond what the data supports. If a rep looks bad, say so factually. Do not soften.
- Do not recommend specific actions for individual reps. That is the manager's job.
- If data quality is poor (more than 30% of open opps have stale activity or missing fields), flag this at the top of the memo and recommend
pipeline-hygiene-auditbefore the next forecast call.
What good output looks like
See examples/sample_output.md for a worked example using the bundled synthetic data.
What to avoid
- Padding the memo with executive-speak. The CRO can read.
- Hedging recommendations. Take a position.
- Listing every deal. Surface the material ones.
- Treating the historical model as ground truth. It is one of three views, not the answer.
- Recommending the user do
pipeline-hygiene-auditif data quality is fine. Only flag this if data quality is genuinely poor.
Appendix A: SOQL for Salesforce MCP
If using the Salesforce MCP, the queries are:
-- Open opportunities in current quarter
SELECT Id, Name, Account.Name, OwnerId, Owner.Name, Amount, StageName,
Probability, ForecastCategoryName, CloseDate, LastActivityDate,
NextStep, CreatedDate, IsClosed, IsWon
FROM Opportunity
WHERE IsClosed = false
AND CloseDate <= LAST_DAY_OF_QUARTER
ORDER BY OwnerId, Amount DESC
-- Closed-won this quarter
SELECT OwnerId, Owner.Name, SUM(Amount) total
FROM Opportunity
WHERE IsWon = true AND CloseDate = THIS_QUARTER
GROUP BY OwnerId, Owner.Name
-- Forecast history (if Forecast__c object exists, or equivalent)
SELECT Rep__c, Week_Of__c, Commit_Amount__c, BestCase_Amount__c, Pipeline_Amount__c
FROM Forecast__c
WHERE Week_Of__c = LAST_N_WEEKS:12
ORDER BY Rep__c, Week_Of__c DESC
If the Forecast__c object does not exist in the user's org, ask the user where forecast history is stored or fall back to using current data only with a confidence warning.
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- discovery-call-prep by composio-community · 2
- call-prep by cjf-iii · 1
- discovery-call-prep by devangk003 · 0
- sales-call-prep by edupegoretti · 0
- discovery-call-prep by vell-admin · 0
- sales-prep by zubair-trabzada · 1,318
- meeting-prep-cc by BrianRWagner · 416
- event-prep by markster · 64
Need help setting it up?
This page tells you what forecast-call-prep does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.