Budget season · Prepare
Budget Owner Packet Builder
Turns last year's actuals into a pre-filled budget request for every department head: their real starting numbers and no more than three asks.
Free, no email
Quick answer
01What it does
Classifies every line of last year's actuals as committed, discretionary, or one-time, then asks owners only about the discretionary lines.
02What you give it
Twelve months of actuals by department, monthly if you have it. A guardrail per department, a headcount roster, and contract dates improve it.
03What you get back
A summary line, one pre-filled packet per department with no more than three asks, a send-ready message for each owner, and a master tracker.
Say this to run it
- “Build the owner packets”
- “Send budget requests to department heads”
- “Prep the budget kickoff”
- “Turn these actuals into budget templates”
- “What should I ask each department for?”
- “Pre-fill the budget templates”
- “I need to collect budget inputs”
Add it to Claude
- 01
Download the file
owner-packet-builder.skill, 24 KB
- 02
Add it in Claude
Customize › Skills › Add, then upload the file.
- 03
Attach your actuals and ask
“Build the owner packets.”
- 01
Copy the prompt
The skill and its reference files, as one prompt.
- 02
Paste it into a new Claude chat
Use this when your Claude admin blocks skill uploads.
- 03
Attach your actuals and ask
“Build the owner packets.”
- 01
Download the file
owner-packet-builder.skill, 24 KB
- 02
Unzip it into your skills folder
unzip owner-packet-builder.skill -d ~/.claude/skills/ - 03
Ask in Claude Code
“Build the owner packets.”
What you get back
This is the format every run returns, from the skill's own template.
Output · references/packet-template.md
Output Formats
Produce output in exactly these structures and in this order. The consistency is the point: comparable packets across departments and across cycles.
1. Run summary
One block, before the packets.
Departments processed: {n}
Lines classified: {n} — {n} committed · {n} discretionary · {n} one-time · {n} unclassified
Combined flat-line baseline: ${X}
Combined guardrail: ${Y} (or "not provided")
Combined gap: ${Z}
Materiality threshold used: top {n} lines / {n}% of discretionary spendIf anything blocked the run — unmapped cost centers, missing monthly detail, no guardrails — list it here as Needs your input before the packets.
2. The packet — one per department
Use this exact structure. Plain business English. No finance jargon.
📋 {Department} — FY{YY} Budget Request
Owner: {Name} Due: {date}
Your starting point: ${baseline}
That's last year's spend, with one-time costs taken out and everything else carried forward flat. It's a starting point, not a target.
{If guardrail provided:} Your guardrail: ${guardrail} — a gap of ${gap} {above / below}.
Already locked — no action needed
These are under contract or otherwise fixed. We've carried them forward. Just check nothing here looks wrong.
| Line | Last year | Next year | Why it's locked |
|---|---|---|---|
| {line} | ${amount} | ${amount} | {reason, ≤10 words} |
{Flag any renewal falling inside the plan year with a ⚠ and a one-line note.}
Taken out — one-time last year
We removed these because they looked like one-offs. If any of them are happening again, say so.
| Line | Last year | Why we removed it |
|---|---|---|
| {line} | ${amount} | {reason, ≤12 words} |
What we need from you
{Exactly three asks — or one, if the department has no discretionary spend.}
1. Are these changing?
| Line | Last year | Carried forward | Continuing / Up / Down? | Why |
|---|---|---|---|---|
| {line} | ${amount} | ${amount} |
2. Closing the gap
Your baseline is ${baseline} and your guardrail is ${guardrail}, a gap of ${gap}. {One sentence framing the direction.} Where would you take it from — or what would you need in order to get there?
{Omit this ask if no guardrail was provided, and add: "We don't have your guardrail yet — we'll follow up with it separately."}
3. Anything else?
New programs, new hires, new vendors, anything you know about that isn't in last year's numbers. Also worth flagging: {list any UNCLASSIFIED or immaterial lines worth a mention, or "nothing specific — just anything we've missed"}.
Everything below is the full detail if you want it — every line, tagged.
| Line | Last year | Next year | Tag | Reason |
|---|---|---|---|---|
| {line} | ${amount} | ${amount} | COMMITTED / DISCRETIONARY / ONE-TIME / UNCLASSIFIED | {reason} |
3. Master tracker — finance's copy
One table, all owners, after the packets.
| Department | Owner | Baseline | Guardrail | Gap | Asks | Lines flagged | Due | Sent |
|---|---|---|---|---|---|---|---|---|
| {dept} | {name} | ${X} | ${Y} | ${Z} | {1–3} | {n one-time excluded, n renewals, n unclassified} | {date} | ☐ |
Below the table, note:
- Materiality threshold used, so the run is reproducible
- Unmapped lines, if any cost center couldn't be assigned to an owner
- Missing guardrails, listed by department
Formatting rules
- Every dollar figure traces to a line in the provided actuals. No derived estimates.
- Round to whole dollars, or to $K where the source is at that precision. Never invent precision the source doesn't have.
- If a number is unknown, write
[unknown]— never zero, never a placeholder that reads as real. - Tables get headers even when they have one row.
- Keep every "why" and "reason" cell under a dozen words. If it needs more, it belongs in an ask.
Inside the skill
Five plain-text files you can read before you install.
references/classification-rubric.md--- name: owner-packet-builder description: >- Turns last year's actuals into ready-to-send budget request packets for every department head — pre-filling their starting numbers, classifying every line as committed, discretionary, or one-time, and asking only the questions that genuinely need a human answer. Use whenever someone is kicking off an annual budget or planning cycle and needs to collect bottom-up inputs from budget owners. Triggers include "build the owner packets", "send budget requests to department heads", "prep the budget kickoff", "turn these actuals into budget templates", "what should I ask each department for", "pre-fill the budget templates", "I need to collect budget inputs", or uploading an actuals export or P&L and asking to start budget season. metadata: author: "Aleph - getaleph.com" version: "1.0.0" --- # Budget Owner Packet Builder ## What this skill does Budget season goes wrong in the first week. Finance emails a blank template to twenty department heads who do this once a year, don't work in finance, and have no idea what number they're starting from. Three weeks of chasing follows. This skill fixes the kickoff. It takes last year's actuals and produces, for each department, a **pre-filled packet** the owner can respond to in ten minutes: their real starting numbers, what's already locked, what's actually up for discussion, and no more than **three asks**. The discipline that makes it work: **classify every line before you ask about it.** Committed costs get *stated*, not asked. One-time costs get *excluded and shown*. Only discretionary lines become questions. Most budget templates ask about everything, which is why they come back late and wrong. ## When to use it - Kicking off an annual budget or planning cycle - Preparing bottom-up input requests for department heads or cost-center owners - Rebuilding a budget template that came back late, empty, or wrong last cycle - Reforecast cycles where you need fresh inputs from owners mid-year ## Inputs **Required** - **Last twelve months of actuals**, broken out by cost center or department — `.xlsx`, `.csv`, a Sheets export, or a pasted P&L. Monthly detail is strongly preferred: the classification rubric depends on month-by-month patterns. **Strongly recommended** - **Top-down guardrail per department** (the number each owner should plan within). Without it, skip the gap ask and say so in the packet. **Optional, improves output** - Headcount roster (names/roles/start dates/loaded cost) — lets you separate existing comp from planned hires - Known committed contracts and renewal dates - Last year's owner submissions, to flag who historically pads If monthly detail is missing, say so and proceed with reduced confidence in the classification — mark affected lines `UNCLASSIFIED` rather than guessing. ## Workflow Run these in order. Do not skip step 2 — the classification is the skill. 0. **Validate the input.** Confirm you have historical actuals broken out by department or cost center. If you've been handed a *forward-looking budget* instead of actuals, stop: this skill builds requests *from* history. Say so and ask for the actuals. (A draft budget that needs reviewing is a different job — that's `/budget-pressure-tester`.) 1. **Split and map.** Group every line by cost center, then map each cost center to a named owner. If ownership is ambiguous, list the unmapped lines and ask — never assign an owner by guessing. 2. **Classify every line** against the three-way rubric in `references/classification-rubric.md`: **committed / discretionary / one-time**. Apply the detection heuristics in that file. Record the reason for each classification — the reason appears in the packet, so the owner can push back. 3. **Build the baseline.** For each department: carry committed lines forward flat, exclude one-time lines, and carry discretionary lines forward flat as a starting point. This is a *starting point*, not a recommendation. Then compute the gap between that baseline and the department's guardrail. 4. **Reduce to three asks.** Use the consolidation rules in the rubric file to turn many discretionary lines into at most three questions. Committed lines are stated. One-time lines are shown as excluded with the reason. 5. **Write the packet and the message.** Produce output in exactly the formats defined in `references/packet-template.md` and `references/message-templates.md`. Plain business English throughout — the reader is a marketing lead or an engineering director, not a finance person. 6. **Produce the master tracker** — one row per owner, per `references/packet-template.md`. This is finance's copy: who was asked for what, and when it's due. 7. **Offer the next step.** Offer to (a) adjust the materiality threshold and re-run, (b) draft the follow-up nudge for owners who haven't responded, or (c) hand off to `/submission-reviewer` as submissions come back — it reviews each one against history, guardrail and peers the moment it lands. ## Hard rules These are not stylistic preferences. Breaking them is what makes budget templates come back wrong. - **Never invent a number.** Every figure in a packet traces to a line in the actuals the user provided. If something is unknown, write `[unknown]` and ask. - **Never ask about a committed line.** If the cost is contractually locked, stating it and asking "is this changing?" invites a wrong answer from someone who doesn't know the contract terms. - **Never silently drop a one-time cost.** Excluding $80K of migration spend from the baseline without showing it is how the number gets challenged later. Show it, exclude it, say why. - **Never exceed three asks per packet.** If you have four, you haven't consolidated. - **Write for a non-finance reader.** No "opex," no "run-rate," no "FY27E." If a sentence needs finance fluency to parse, rewrite it. - **Show your classification reason.** The owner is allowed to disagree, and they're sometimes right. ## Output format Every run produces four artifacts, in this order: 1. **A summary line** — departments processed, lines classified, total baseline, total gap 2. **One packet per department** — exactly per `references/packet-template.md` 3. **One send-ready message per owner** — exactly per `references/message-templates.md` 4. **The master tracker** — one table, all owners The formats are fixed on purpose. Comparable packets across departments and across cycles are the point of running this as a skill rather than writing each request by hand. ## A note on scope This skill handles the *kickoff* — turning history into a good ask. It stops when the packets go out. What happens next is a coordination problem, not a document problem: answers arrive over weeks, get validated against guardrails, need follow-up when they don't arrive, and every change needs a record. A skill runs when you run it — it doesn't know that engineering still hasn't replied, or that a number moved while you were in a meeting. That ongoing orchestration is where a connected FP&A platform like Aleph takes over. Keep this skill focused on producing the best possible ask.
# The Three-Way Classification Rubric Every line in the actuals gets exactly one label: **COMMITTED**, **DISCRETIONARY**, or **ONE-TIME**. The label determines how the line is treated in the packet: | Label | Baseline treatment | Owner treatment | |---|---|---| | **COMMITTED** | Carried forward flat | **Stated**, not asked | | **DISCRETIONARY** | Carried forward flat as a starting point | **Asked** — this is where the conversation belongs | | **ONE-TIME** | **Excluded** | **Shown as excluded**, with the reason | If a line genuinely can't be classified from the data available, label it `UNCLASSIFIED`, carry it forward flat, and add it to the "anything else" ask. Never guess a classification to avoid an unclassified line. --- ## COMMITTED — the owner cannot change this by deciding to The test: **if the owner said "cut it," would it actually go away next month?** If no, it's committed. Typical contents: - Software and SaaS under contract extending into the plan year - Facilities and leases - Insurance, statutory and regulatory costs - Compensation for people **already employed** (not planned hires) - Volume-driven costs tied to an already-agreed driver (payment processing, hosting that scales with usage) - Committed vendor minimums **Detection heuristics** - Present in **all twelve months** with variance under ~10% month to month - Amount is a round or repeating figure (monthly subscription pattern) - Vendor or account name matches known committed categories (rent, lease, insurance, a named SaaS vendor) - Payroll accounts where headcount is flat across the period **How to treat it in the packet:** state the number and the reason in one line. If a renewal date falls inside the plan year, say so — that is the one legitimate reason to flag a committed line for discussion. > Cloud hosting — $424K. Committed. Contract runs through the plan year. --- ## DISCRETIONARY — the owner decides whether, and how much The test: **could a reasonable owner spend zero here next year without breaching a contract?** If yes, it's discretionary. Typical contents: - Programs and campaigns (events, advertising, content, sponsorships) - **Planned** headcount not yet hired - Travel, entertainment, team offsites - Training and development - Contractors and consultants on non-committed engagements - New tools not yet under contract **Detection heuristics** - **Lumpy** month to month; zero in one or more months - Coefficient of variation across months is high (roughly >0.4) - Account or description names in program vocabulary: campaign, event, conference, sponsorship, travel, offsite, training, consulting, agency - Spend clusters around specific months (a conference in May, a campaign in Q4) **How to treat it in the packet:** this is the only category that becomes a question — subject to the consolidation rules below. --- ## ONE-TIME — happened last year, shouldn't carry forward by default The test: **was there a specific, finished reason this cost existed?** If yes, it's one-time. Typical contents: - Implementations, migrations, system rollouts - One-off projects with a stated end - Severance, legal settlements, restructuring costs - Overlapping vendor costs during a transition (paying for both tools for four months) - A one-time event the company hosted or sponsored once - Equipment or capex-like purchases that don't repeat annually **Detection heuristics** - Appears in **three or fewer consecutive months** and nowhere else in the period - Amount is an outlier against that account's own median month (roughly >3×) - Description contains: implementation, migration, onboarding, setup, one-time, transition, severance, settlement, legal fees, rollout, launch - A vendor appears for a defined window and then stops entirely **How to treat it in the packet:** exclude it from the baseline, show it as excluded, and state the reason. If there is any chance it recurs, fold it into the "anything else" ask rather than assuming. > Cloud migration — $80K, excluded. One-time project completed in Q2. Tell us if > something similar is planned for next year. --- ## Consolidation rules — getting to three asks Most departments have more discretionary lines than anyone will answer questions about. Reduce them like this. **Step 1 — Rank discretionary lines by dollar value.** **Step 2 — Set the material set.** Take lines from the top until you've covered 80% of total discretionary spend for that department, capped at 8 lines. Anything below that is immaterial for questioning purposes. **Step 3 — Build exactly three asks:** 1. **The changes.** For the material lines only: is each one continuing as-is, going up, or going down — and why. Present them as a short list, not a spreadsheet. 2. **The gap.** "Your flat-line baseline is $X. Your guardrail is $Y. That's a gap of $Z — how would you close it?" Skip this ask entirely if no guardrail was provided, and note in the packet that the guardrail is outstanding. 3. **Anything else.** New programs, new hires, new vendors, anything they know about that isn't in last year's numbers. This is also where immaterial lines and any `UNCLASSIFIED` lines get swept up. **If a department has no discretionary spend at all** (rare, but happens for some G&A cost centers), the packet has one ask: confirm the committed lines are still right, and flag anything new. **Never add a fourth ask.** If something feels like it needs its own question, it belongs inside ask 1 or ask 3. --- ## Materiality threshold Default: **80% of discretionary spend, capped at 8 lines.** Offer to adjust when: - A department has very few, very large lines → a lower cap reads better - A department has many small lines and the 80% cut leaves 8 lines that are all small → raise the dollar floor instead and sweep more into ask 3 - The user asks for a tighter or looser ask State the threshold you used in the master tracker so the run is reproducible.
# Output Formats
Produce output in exactly these structures and in this order. The consistency is the
point: comparable packets across departments and across cycles.
---
## 1. Run summary
One block, before the packets.
```
Departments processed: {n}
Lines classified: {n} — {n} committed · {n} discretionary · {n} one-time · {n} unclassified
Combined flat-line baseline: ${X}
Combined guardrail: ${Y} (or "not provided")
Combined gap: ${Z}
Materiality threshold used: top {n} lines / {n}% of discretionary spend
```
If anything blocked the run — unmapped cost centers, missing monthly detail, no
guardrails — list it here as **Needs your input** before the packets.
---
## 2. The packet — one per department
Use this exact structure. Plain business English. No finance jargon.
---
### 📋 {Department} — FY{YY} Budget Request
**Owner:** {Name}
**Due:** {date}
**Your starting point: ${baseline}**
That's last year's spend, with one-time costs taken out and everything else carried
forward flat. It's a starting point, not a target.
{If guardrail provided:}
**Your guardrail: ${guardrail}** — a gap of **${gap}** {above / below}.
---
**Already locked — no action needed**
These are under contract or otherwise fixed. We've carried them forward. Just check
nothing here looks wrong.
| Line | Last year | Next year | Why it's locked |
|---|---|---|---|
| {line} | ${amount} | ${amount} | {reason, ≤10 words} |
{Flag any renewal falling inside the plan year with a ⚠ and a one-line note.}
---
**Taken out — one-time last year**
We removed these because they looked like one-offs. If any of them are happening
again, say so.
| Line | Last year | Why we removed it |
|---|---|---|
| {line} | ${amount} | {reason, ≤12 words} |
---
**What we need from you**
{Exactly three asks — or one, if the department has no discretionary spend.}
**1. Are these changing?**
| Line | Last year | Carried forward | Continuing / Up / Down? | Why |
|---|---|---|---|---|
| {line} | ${amount} | ${amount} | | |
**2. Closing the gap**
Your baseline is ${baseline} and your guardrail is ${guardrail}, a gap of ${gap}.
{One sentence framing the direction.} Where would you take it from — or what would
you need in order to get there?
{Omit this ask if no guardrail was provided, and add: "We don't have your guardrail
yet — we'll follow up with it separately."}
**3. Anything else?**
New programs, new hires, new vendors, anything you know about that isn't in last
year's numbers. Also worth flagging: {list any UNCLASSIFIED or immaterial lines
worth a mention, or "nothing specific — just anything we've missed"}.
---
**Everything below is the full detail if you want it** — every line, tagged.
| Line | Last year | Next year | Tag | Reason |
|---|---|---|---|---|
| {line} | ${amount} | ${amount} | COMMITTED / DISCRETIONARY / ONE-TIME / UNCLASSIFIED | {reason} |
---
## 3. Master tracker — finance's copy
One table, all owners, after the packets.
| Department | Owner | Baseline | Guardrail | Gap | Asks | Lines flagged | Due | Sent |
|---|---|---|---|---|---|---|---|---|
| {dept} | {name} | ${X} | ${Y} | ${Z} | {1–3} | {n one-time excluded, n renewals, n unclassified} | {date} | ☐ |
Below the table, note:
- **Materiality threshold used**, so the run is reproducible
- **Unmapped lines**, if any cost center couldn't be assigned to an owner
- **Missing guardrails**, listed by department
---
## Formatting rules
- Every dollar figure traces to a line in the provided actuals. No derived estimates.
- Round to whole dollars, or to $K where the source is at that precision. Never
invent precision the source doesn't have.
- If a number is unknown, write `[unknown]` — never zero, never a placeholder that
reads as real.
- Tables get headers even when they have one row.
- Keep every "why" and "reason" cell under a dozen words. If it needs more, it belongs
in an ask.
# Send-Ready Messages
One message per owner, produced alongside their packet. The packet is the detail; the
message is what actually gets read.
Two rules that matter more than the templates:
1. **The number goes in the message.** An owner who has to open an attachment to find
out what you're asking is an owner who opens it Thursday.
2. **Name the deadline and what happens after it.** "By Friday" without a consequence
is a suggestion.
---
## Slack version (default)
Short. Written like a colleague, not a system.
```
Hey {first name} — kicking off FY{YY} budget for {department}.
I've pre-filled it from last year so you're not staring at a blank template. Your
starting point is ${baseline} — that's last year with the one-time stuff stripped out.
{If guardrail: Your guardrail is ${guardrail}, so we're ${gap} {over/under}.}
Three things I need from you:
1. {Ask 1, one line}
2. {Ask 2, one line}
3. {Ask 3, one line}
Everything already under contract is locked and carried forward — you don't need to
look at it unless something's wrong.
Full detail here: {link/attachment}
Need it by {date} so I can consolidate before {next milestone}.
```
**Slack variants**
- *If the gap is large and negative (they need to cut):* add one line acknowledging it
— "I know that's a real cut, happy to talk through it before you respond."
- *If there's a renewal inside the plan year:* add "One thing to flag: {vendor} renews
in {month} — worth deciding now whether we re-up."
- *If no guardrail yet:* replace the guardrail sentence with "I don't have your target
yet — I'll follow up. You can still answer 1 and 3."
---
## Email version
Same content, slightly more structure, for owners who don't live in Slack.
```
Subject: FY{YY} budget for {department} — three questions, due {date}
{First name},
We're kicking off FY{YY} planning. I've pre-filled your budget from last year's
actuals so you're starting from real numbers rather than a blank sheet.
Your starting point: ${baseline}
{Your guardrail: ${guardrail} — a gap of ${gap}}
I only need three things from you:
1. {Ask 1}
2. {Ask 2}
3. {Ask 3}
Anything already under contract — {examples} — is locked and carried forward. You
don't need to review it unless something looks wrong.
I also removed ${one-time total} of costs that looked like one-offs last year
({examples}). If any of those are happening again, let me know.
The full detail is attached. I need your response by {date} so I can consolidate
before {next milestone}.
Thanks,
{Sender}
```
---
## The follow-up nudge
Generate on request, not by default. Owners who haven't responded get one nudge that
makes it easy to respond, not one that adds guilt.
```
Hey {first name} — still need {department}'s numbers when you get a minute.
If it helps: the only one I really need is #{n} ({the single most material ask}).
The rest I can carry forward as-is and we can adjust later.
{date} is when I have to consolidate.
```
Keep it to three lines. If a second nudge is needed, that's a conversation, not a
message — say so to the user rather than generating another one.
---
## Tone rules
- **Second person, first name, contractions.** These go to colleagues.
- **No finance vocabulary.** Not "opex," not "run-rate," not "FY27E," not "variance."
- **Never imply the owner did something wrong last year.** Late submissions are usually
a template problem, and this skill exists because of that.
- **State the ask count up front** ("three things"). It's the single biggest driver of
whether someone opens it now or later.
- **No more than one paragraph of context** before the asks.
WHAT THIS FILE IS ================= owner-packet-builder.skill — Turns last year's actuals into pre-filled, ready-to-send budget request packets for every department head. A .skill file is Anthropic's packaging format for Claude Skills. It is a standard ZIP archive, nothing more. If you are reading this in a text editor, you are looking at the raw bytes of that archive — this build is intentionally uncompressed so the contents stay human-readable. LOOK INSIDE YOURSELF ==================== Rename the file from .skill to .zip and extract it, or run: unzip owner-packet-builder.skill Every file inside is plain-text markdown — the instructions Claude reads. There is no executable code in this package. WHAT'S INSIDE ============= SKILL.md references/classification-rubric.md references/packet-template.md references/message-templates.md README.txt (this file) WHAT IT DOES ============ Budget season goes wrong in the first week: finance emails a blank template to twenty department heads who do this once a year and don't work in finance. Three weeks of chasing follows. This skill fixes the kickoff. It classifies every line in last year's actuals as committed, discretionary, or one-time — then states the committed ones, excludes the one-time ones, and asks about only the discretionary ones. Each owner gets their real starting number and no more than three questions. WHAT YOU GIVE IT ================ Required: last twelve months of actuals by cost center (.xlsx, .csv, or pasted) Recommended: your top-down guardrail per department Optional: headcount roster, known contracts and renewal dates WHAT YOU GET BACK ================= One pre-filled packet per department, with no more than three asks A send-ready Slack or email message per owner, with the deadline attached Every line tagged committed / discretionary / one-time, with the reason A master tracker: who was asked for what, and when it's due HOW TO USE IT ============= Upload this file as-is to Claude: Settings -> Skills -> Add. Or add it in Claude Cowork or Claude Code. From Aleph (getaleph.com), the FP&A platform. The full guide: https://www.getaleph.com/claude-skills-library Questions: marketing@getaleph.com
Related skills
Skill · Review · Free
Submission Reviewer
Reviews each submission as it lands and drafts your reply to the owner.
Get the skillSkill · Track · Free
Budget Change Digest
Shows what moved between two budget versions, and what nobody explained.
Get the skillSkill · Review · Free
Budget Pressure-Tester
A CFO-grade review of your draft budget, returned as a readiness scorecard.
Get the skill