agentleFS
TrustPagerTrustPager/Business_Operating_System/skills/price-my-work/SKILL.md

Price My Work

Skill8 starsChanged 5 months agoMITView on GitHub

Turn the costs of a common job into a priced breakdown you can stand behind — line items, your margin shown openly, the total, and the assumptions written down so the number holds up when a customer asks how you got there. Keyless, works from what you type in. The pricing engine quote-from-photo and write-a-proposal lean on.

The file

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 8 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read the profile first, don't ask cold: If ./CLAUDE.md exists, read it before asking anything.

    line 37
  2. Very specific:

    Only ask cold for what the profile genuinely doesn't hold.

    line 46
  3. Distinctive:

    If a number is missing, ask one plain question for it rather than inventing it.

    line 69
  4. Distinctive:

    If they genuinely don't track something (say, overheads), price what you have and note that overheads aren't included, don't silently …

    line 70
  5. Distinctive:

    Keep it to the numbers (no full breakdown yet, that's Step 3).

    line 82
  6. Distinctive:

    The capacity check: If the owner has said they're booked out or turning work away, the capacity rule applies (price, not volume, per §8.3): …

    line 97
  7. Distinctive:

    Never anchor on the competition: Never price from "competitor average minus a bit" (§8.5).

    line 106
  8. Distinctive:

    Add up the cost base, apply the margin, and show every step so nothing is a black box.

    line 112
  9. Distinctive:

    Default to margin unless the owner says markup, and say which you used in one line.

    line 126
  10. Very specific:

    If ./CLAUDE.md exists, append (never overwrite) dated, labelled line(s) to the ## How the business is running block.

    line 210
  11. Distinctive:

    Never invent a cost: Every figure comes from the owner.

    line 228
  12. Very specific:

    Never a same-scope discount: If the owner wants a cheaper number, change the scope or the payment shape (per knowledge/business-method.md …

    line 235

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Price My Work

An owner describes a job they do all the time, types in what it costs them (materials, hours, labour rate, overheads), and says the margin they want. You give back a priced breakdown they can stand behind: every line shown, the margin shown openly as its own number, the total, and the assumptions written down so when a customer asks "how did you get to that?" the answer is right there on the page.

This is pure reasoning over what the owner types — no accounts, no files, no catalogue. It runs cold on day one. It's also the pricing engine other apps borrow: when quote-from-photo or write-a-proposal needs a defensible number, this is the maths underneath.

Step 1 — Take in the job and the costs

Read the profile first, don't ask cold. If ./CLAUDE.md exists, read it before asking anything. Pull the labour rate, overheads, trade context, and close rate the system already holds (check the ## How the business is running block and the trade/what-they-sell notes), and pre-fill them as labelled guesses to confirm rather than blank questions to re-ask:

From your profile I've got labour at $85/hr, travel and consumables as your usual overheads, and you win about 90% of quotes. Still right for this job?

Only ask cold for what the profile genuinely doesn't hold. If a ## How to talk to me register is present, match the read-back to it (terse owners get the guesses in one tight line, no preamble).

The owner describes one job (this skill prices one job per run — if they hand you a list, price the first and offer to do the rest one at a time). Gather what you need, and ask for only the pieces that are actually missing:

  • The job — what it is, in their words ("supply and lay 40m² of laminate", "full interior repaint, three-bed", "10-hour wedding shoot").
  • Materials — items and their cost to the owner (what they pay, not what they charge). Quantities where they matter.
  • Labour — hours, and the rate per hour. If a crew, hours per person or a total crew-hours figure works. If you're on the job yourself, count your own hours in here too at a fair rate, even if you don't pay yourself for them today, so the real margin shows.
  • Overheads — the costs that aren't materials or labour but belong to this job: travel, equipment hire, tip fees, a cut for consumables, a share of fixed running costs if they price that way. Take what they give you.
  • Target margin — the margin they want to make on top of cost, as a percentage. Confirm you both mean the same thing (see the margin note in Step 2) so the number is the one they expect.

If a number is missing, ask one plain question for it rather than inventing it. If they genuinely don't track something (say, overheads), price what you have and note that overheads aren't included, don't silently assume a figure.

Step 1b: Read the figures back before you compute (one line)

Owners fumble numbers out loud, and a wrong figure here flows straight into a total they might quote a customer. Before you do any maths, play the costs back in one tight line and get a yes:

Here's what I've got for your costs: materials $X, labour Y hrs at $Z/hr, overheads $W, and you want a [n]% margin. That right?

Keep it to the numbers (no full breakdown yet, that's Step 3). If they correct one, take the correction and read it back once more so you're both sure. Only once the inputs are confirmed do you compute the total. This costs one line and saves a wrong number going out in a quote.

Pricing gates (check before you compute)

Four checks between the read-back and the maths. Each is one question; most jobs pass straight through.

  1. The cost floor is the floor. The Step 2 cost base is the lowest number this job can carry (per knowledge/business-method.md §8.6). If the owner's target margin or a price they've already named lands below it, stop and say so before presenting anything. Never write a below-floor price into the breakdown.
  2. The capacity check. If the owner has said they're booked out or turning work away, the capacity rule applies (price, not volume, per §8.3): price this job with a rise in mind, not at the old rate.
  3. The close-rate signal (use the profile, ask only if it's blank). If the Step 1 profile already holds a close rate, use that figure and skip the question. Only when the profile has no close rate may you ask once: "roughly what share of quotes like this do you win?" Either way, if the share is very high, flag likely underpricing per the directional close-rate signal (§8.2) and offer to price a raised version alongside the one they asked for.
  4. Never anchor on the competition. Never price from "competitor average minus a bit" (§8.5). The price comes from the owner's costs and the value of the work.

Step 2 — Do the maths, margin shown openly

Add up the cost base, apply the margin, and show every step so nothing is a black box.

Cost base = materials + labour (hours × rate) + overheads. List each line with its own subtotal so the owner can see where the money goes.

Margin — be explicit about which kind, then show it as money. "Margin" and "markup" are different sums and getting it wrong loses real money:

  • Margin (profit as a share of the price): price = cost ÷ (1 − margin%). A 30% margin on a $1,000 cost gives a $1,428.57 price, with $428.57 profit.
  • Markup (profit as a share of the cost): price = cost × (1 + markup%). A 30% markup on a $1,000 cost gives a $1,300 price, with $300 profit.

Default to margin unless the owner says markup, and say which you used in one line. Always show the margin amount as a dollar figure, not just a percent, so it reads as real money on the page.

Total = cost base + margin amount (the price). If they want it shown with tax (GST or similar), add it as its own line on top of the total and label it clearly — keep the pre-tax price and the tax separate so both are legible.

Round to sensible money (whole dollars, or to the nearest five/ten if that's how they quote) and say you rounded.

Step 3 — Lay out the breakdown

Present it as a clean breakdown the owner could read straight to a customer, plain and clear. This is what the owner stands behind:

## Priced breakdown: <job, in their words>

| Line item | Detail | Amount |
|-----------|--------|--------|
| Materials | <items, qty> | $… |
| Labour | <hours> hrs × $<rate>/hr | $… |
| Overheads | <travel, hire, fees…> | $… |
| **Cost base** | | **$…** |
| Margin (<n>% on price) | your profit on this job | $… |
| **Total price** | | **$…** |
| GST / tax (if shown) | <rate>% | $… |
| **Total incl. tax** | | **$…** |

**The margin:** you make **$… (n%)** on this job at this price.

**Assumptions** (the numbers this rests on):
- <each cost figure the owner gave, restated so it's on the record>
- <margin type used: margin vs markup>
- <rounding applied>
- <anything left out, e.g. "overheads not included: none given">

**Stand behind it:** one or two plain lines the owner can say to a customer
explaining what's in the price and why it's fair.

The stand-behind lines name what the customer ends up with (the Arrival, per knowledge/business-method.md §6), not the cost ledger.

Regulated shape-guard (check the profile before you write the stand-behind lines). Read the profile's business shape: prefer an explicit Business shape: line in the ## How the business is running block you already read in Step 1 (start-here records it, with any regulated override spelled out) and fall back to inferring it from the ## My business context in the workspace CLAUDE.md. Treat the business as regulated if that line carries a Regulated: clause, or (when inferring) the business is a regulated one (clinic / appointment, or the finance / mortgage broking, insurance, or legal verticals). For a regulated business, the stand-behind lines name the Arrival as logistics and care — what is handled, how the work is done, what the customer can rely on — never a clinical or financial result or a timeline to one. The per-shape overrides live in knowledge/industry-notes.md (the Clinic / appointment and Service / professional shapes), summarised in knowledge/business-method.md §7.2 and §15 and pointed to from knowledge/content-rules.md §4. For all other shapes, name the Arrival in full.

Step 4 — Offer the clean spreadsheet (optional, never the win)

The breakdown above IS the win — it's complete and usable as text. If the owner wants it as a clean spreadsheet to keep, send, or reuse, offer to produce one:

Want this as a tidy spreadsheet you can save and reuse? I can build the same breakdown as a real .xlsx you can open and send.

That's built with the document tools (the doc-lib-set write path — tools/write_xlsx.py). Offer it; don't make it the price of the win. Most of the time the typed breakdown is all they need.

End with: "That's your priced breakdown, margin and all, with the assumptions written down so you can stand behind it. Want it tidied into a spreadsheet, or should I price the next job?"

Step 5 — Save the numbers back to the profile

Once the priced breakdown has landed, write the figures home so the rest of the system finds them (Day 4 of the challenge reads them from here, not from thin air). This is the same one-owning-field discipline find-my-next-move uses for the diagnosed constraint.

If ./CLAUDE.md exists, append (never overwrite) dated, labelled line(s) to the ## How the business is running block. Use the session's current date at runtime, never a hardcoded one. One line per figure this run produced, in the format <Figure name> (<stated|computed>, <date>): <value in plain words>:

  • Close rate (stated, <date>): about 90% on quotes
  • Labour rate used in pricing (<date>): $85/hr
  • Priced job (<date>): kitchen reno, quoted $12,400, ~32% margin

Mark a figure the owner gave you as stated and one you worked out as computed. If a figure was read straight from the profile and unchanged, don't re-append it. If ./CLAUDE.md doesn't exist, skip this step silently, the typed breakdown is still the win.

Hard rules

  • One job per run. Price one job properly. If handed several, do the first and offer the rest one at a time — a bounded job is a defensible job.
  • Never invent a cost. Every figure comes from the owner. If something's missing, ask one question or leave it out and say so — don't assume a number into the price.
  • Margin shown openly, as money. The margin is its own line and its own dollar figure, never buried in the total. State margin vs markup explicitly.
  • Write down the assumptions. The breakdown stands or falls on them. Every number it rests on goes in the assumptions list so the owner can defend it.
  • Never a same-scope discount. If the owner wants a cheaper number, change the scope or the payment shape (per knowledge/business-method.md §8.5 and §9.4), never the same job for less.
  • Content guardrails. Customer-facing copy uses no em dashes, invents no facts, quotes, or numbers, and names no third-party vendor. Write it in the owner's brand voice; the framing and the marketing psychology are the owner's choice. The rules are in knowledge/content-rules.md. The register for these messages is knowledge/communication-voice.md: plain, warm, short.
  • No accounts, no files needed. This runs on typed inputs alone. The spreadsheet is an optional add-on, never a dependency for the win.

Output shape

The priced breakdown table (line items → cost base → margin shown as money → total), then the margin called out on its own line, then the assumptions list, then the stand-behind lines, then the offer to tidy it into a spreadsheet or price the next job. Concrete and fast — a number the owner can read to a customer in the next minute.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.