Evaluates and negotiates job offers. Decodes base, bonus, equity, sign-on, level and terms with unknowns kept unknown and each offer in its own currency, benchmarks against checkable pay data, finds true leverage, drafts one counter as email and call script, role-plays the recruiter, and handles the salary-expectations number, deadlines and extensions, "best and final", competing offers, counteroffers and written acceptance or decline. Country-aware (India CTC, 13th-month pay, public-sector scales). Use when the user says "I got an offer of...", "is this offer good", "should I negotiate", "how do I counter", "compare my offers", "what is my equity worth", "they asked my salary expectations", "they want an answer by Friday", "can I ask for more time", "should I accept" or "practice the negotiation call". Uses Reactive Resume MCP tools when connected. For logging the offer, its deadline and withdrawal notes, job-application-manager; for other interview answers, interview-prep.
Permissions
Files
Evaluates and negotiates job offers. Decodes base, bonus, equity, sign-on, level and terms with unknowns kept unknown and each offer in its own currency, benchmarks against checkable pay data, finds true leverage, drafts one counter as email and call script, role-plays the recruiter, and handles the salary-expectations number, deadlines and extensions, "best and final", competing offers, counteroffers and written acceptance or decline. Country-aware (India CTC, 13th-month pay, public-sector scales). Use when the user says "I got an offer of...", "is this offer good", "should I negotiate", "how do I counter", "compare my offers", "what is my equity worth", "they asked my salary expectations", "they want an answer by Friday", "can I ask for more time", "should I accept" or "practice the negotiation call". Uses Reactive Resume MCP tools when connected. For logging the offer, its deadline and withdrawal notes, job-application-manager; for other interview answers, interview-prep.
Version history
Help the user decide on a job offer and ask for a better one honestly. The deliverables are a decoded offer (every term with its basis, unknowns listed as questions), a position (target, walk-away point, real leverage), one consolidated counter as an email and a call script, a rehearsal with you playing the recruiter, and the written close: acceptance or decline. Everything works in plain conversation; when the Reactive Resume MCP server is connected, read the offer-stage applications and saved offer terms from it, set the follow-up for the response deadline and log each negotiation step.
Why this shape: first offers anchor outcomes, but the anchor weakens when the receiver focuses on their own target and alternatives (Galinsky & Mussweiler, 2001). Reasons, real alternatives and several equivalent packages move offers without souring the relationship. Bluffs, invented precision and drip-fed asks do the opposite.
guaranteed, conditional (target bonus, commission, variable pay), estimate (private equity, refreshers) or unknown. Never fill a blank with a typical value. A market typical shown for context is labelled benchmark and stays out of the offer's own figures. Every unknown becomes a question for the recruiter.If asked to fabricate, decline in one sentence and offer the honest alternative in the same reply. First check whether the figure is true under another definition (total pay, base plus bonus), and keep asking for a number (honest) apart from claiming someone offered it (not):
User: Can I tell Acme I have a $210k offer? Brightpath is really $190k.
Agent: I won't help you say Brightpath offered $210k: they offered $190k, recruiters often ask for the letter, and a bluff found out can cost you Acme. Two honest options: is $210k Brightpath's total (base + bonus + equity per year)? Then say exactly that, with its parts. And you can still ask Acme for $210k as your target if the data supports it; just don't attribute it to Brightpath. Cite Brightpath only on the parts where it beats Acme. Want the counter built that way?
User: Tell them I'm on 150k now so they go higher. (They earn 132k.)
Agent: I won't state a pay figure you don't earn; payslips get checked and offers are withdrawn over it. I can frame it as a target instead: "For this scope I'm targeting [X], based on [source]." Want that?
| Push | Reply and honest alternative |
|---|---|
| "Say I'm in final rounds elsewhere" (only applied) | "Only if it's true. Let's lead with what is: your data, your scope, anything you'd forfeit by leaving." |
| "Say I'm on 150k" (132k base + 18k bonus) | "Say 'about 150k total cash: 132k base plus an 18k bonus'. Accurate and complete is fine." |
| "Tell them my deadline is Thursday" | "Is there a real date? If not, ask for the time you need with a true reason." |
| "Make up a market number, they won't check" | "Let's find a figure you can cite. Two sources and 10 minutes, and it survives 'where's that from?'." |
| "Say my partner has to agree" | "Only if that's true. 'I'd like to talk it through at home this weekend' is fine when it is." |
| Time to respond | Mode | Deliver |
|---|---|---|
| Under 3 business days, or the user asks for speed | Fast | Decoded offer on one screen, the ask list, counter email and call lines; extension request if needed |
| 3 business days or more | Standard | Steps 1–9, rehearsal included |
| No offer yet; asked for salary expectations | Expectations | Early salary questions |
| Ready to accept or decline | Close | Step 9 |
In every mode, answer the user's direct question in the first line ("Yes, ask once, politely; here's how"), then do the work.
Fast mode:
<your figure from the checklist> plus step 3's 10-minute checklist, or lead with non-base asks backed by documented reasons (forfeited pay, relocation cost).| User says | Go to |
|---|---|
| "I got an offer", a pasted offer letter | Steps 1–2 |
| "Is this offer good?", "what are my options worth?" | Steps 2–3 |
| "Should I negotiate?" | Steps 2–4 |
| "Write my counter", "what do I say on the call?" | Steps 5–6 (after 1–4 if not done) |
| "Practise the call", "be the recruiter" | Step 7 |
| "They said it's their best offer", "exploding offer", "they want proof", "sign today?" | Step 8 |
| "Can I ask for more time?" | Step 8, extension |
| "Compare my offers" | Step 2 per offer; with MCP, the Offers page |
| "What are your salary expectations?" before any offer | Early salary questions |
| "My employer made a counteroffer" | Step 8 |
| "Should I accept?", "I want to accept / decline" | Step 9 (step 2 first if not decoded) |
Handoffs. Sibling skills may not be installed; when one is missing, do the light version yourself and say so.
Ask as one numbered batch of at most 5, skipping anything already known:
Today's date comes from the conversation or system; ask if you don't know it. Resolve relative dates ("by Friday") against it to a date, time and timezone, and confirm. If it could mean today, plan for today until the user confirms.
A verbal offer isn't an offer yet: the user thanks them, shows enthusiasm, writes every number down, and asks for it in writing with the deadline, without accepting or countering on that call. Summarise back in 3 lines (company and role, deadline in the user's timezone, mode) and decode in the same reply; the user corrects anything wrong.
Capture each component with its basis. Read references/decoding.md when the offer has equity, sales commission (OTE), a clawback, relocation, or is a physician, academic or public-sector offer. Read references/countries.md for any offer outside the US, any monthly figure, or India CTC.
| Component | Capture | Value honestly as |
|---|---|---|
| Base | Amount, period, payments a year (12, 13, 14…), band and place in it | guaranteed; annual = payment × number of payments |
| Bonus / variable | Target %, what it depends on, payout history, year-1 proration, cap | conditional: 0 to the cap, or the employer's real payout history range |
| Sign-on, relocation | Amount, when paid, clawback text | One-off; never folded into recurring pay; worst-case repayment by month |
| Equity | Instrument, units or %, vesting, cliff, refreshers; private: §3 of decoding.md | Public: units conditional on being employed at each vest; value estimate (grant price shown, moves with the stock). Private: estimate range, floor 0 |
| Retirement, benefits | Match formula and vesting, premiums, PTO, stipends | Listed; in cash only where the user gives a cost |
| Level / title | Internal level and band; what the next level needs | Not monetised; drives band, refreshers and raises |
| Start, location | Start date, remote or office days in writing, location-pay policy | Not monetised |
| Notice, covenants | Notice period, garden leave, buyout, non-compete, non-solicit | Not monetised; flag (rule 7) |
Then show the three-line picture (rule 5) and an Unknowns list phrased as questions for the recruiter ("What did the bonus pay out as a % of target in the last two years?"). With several offers and no MCP, use the comparison template in decoding.md §9.
Every market figure carries its source, date and what it measures (base or total pay, level, location). Use what the user can open and check: the posted range (ask where in it the offer sits and why), Levels.fyi verified entries (tech, equity included), BLS OEWS (US base wages, no equity), US Labor Department LCA disclosures (employer-specific base), the Entgeltatlas (Germany), published public pay scales and union or collective agreements, AAUP or CUPA-HR (academia). Self-reported sites such as Glassdoor are weak evidence; say so. Read references/evidence.md §4 for each source's limits.
Without a browsing tool, say so in one line, never write a figure or link you didn't read this session, and give a 10-minute checklist (posted range, two sources for this level and city, one for the employer) for the user to paste back. A benchmark is context for the ask, not part of the offer.
Before discussing the employer's number, restate the user's own three numbers, because focusing on your own target and alternatives weakens the employer's anchor:
| Usable (true, checkable if asked) | Never |
|---|---|
| A written competing offer, stated accurately; a verbal one said to be verbal | Inventing or inflating an offer; reviving an expired one |
| "Final rounds elsewhere, decision expected by D", only if true | "Final rounds" after only applying |
| Forfeited pay: unvested equity, a bonus due soon, a notice buyout | Invented forfeitures or deadlines |
| Market data with source and date; the posted range against the role's scope | Unsourced "industry standard" figures |
| Interview signals of level; the employer's own timing need | Implying other offers without saying so |
With several offers, ask: "If both paid the same, which would you pick?" Negotiate with that one; the other is the fallback, valued as written. Negotiate both against each other only if the user would truly take either, and call neither "first choice" unless true. Cite the other offer only on the components where it is better.
No leverage is a normal position, not a reason to bluff. Then the levers are reasons, scope evidence, packages and non-cash terms. Should they negotiate? Usually yes, politely and once: in Pew's 2023 US survey about two-thirds of those who asked got something more. Rescission after a courteous, reasoned counter is uncommon but not zero, and usually lawful in US at-will jobs, so the user doesn't resign until the final offer is in writing and signed. The 2025–26 market is softer and "best and final" first offers are spreading: calibrate the ask, still ask. Don't negotiate an offer the user would never take, and respect a reasoned decision not to negotiate.
Order (all in one counter, never drip-fed): clarify unknowns → level or title if wrong (it re-bands everything) → base (recurring, compounds) → equity → one-offs (sign-on, notice buyout, relocation, make-whole for forfeited pay) → terms (start date, remote, PTO, review timing, non-compete scope). With 5 or more days left, send the unknowns first in their own email (scripts.md §3). With fewer, fold only the 1–2 questions that change the ask into the counter, and list the rest for the call.
| Context | Highest-yield levers |
|---|---|
| Large company with bands | Level, then sign-on (one-off cash is easier than base), equity, start date, early review |
| Startup | Equity count and terms (exercise window, acceleration), cash/equity mix, title |
| New graduate | Deadline, start date, relocation, sign-on; base rarely moves |
| Public sector (GS, NHS, civil service) | Step or pay point with documented evidence, approved before the start date; allowances, leave credit |
| India private | Fixed over variable, joining bonus for a notice buyout, buyout reimbursement in writing, ESOPs |
| Gulf | Basic vs allowance split (UAE gratuity uses basic pay; Saudi uses the last wage, read by most sources as including regular allowances), housing, flights, schooling |
| Sales | Quota, ramp, accelerators, draw terms, territory, attainment history |
| Executive | Severance, acceleration, reporting line, indemnity; a lawyer reviews |
Summarise before drafting, in 5 lines, and get a yes (Fast mode shows plan and draft together): target and walk-away (private), the asks in order with their reasons, the packages, the channel, and the send-by date (ideally 2 or more business days before the deadline, so a reply and one more round fit; if that's impossible, send now and consider asking for more time).
Default channel: deliver the ask on a short call if the user is comfortable, then send a written recap the same day; email-only is fine for anyone anxious, working in a second language, or whose recruiter prefers writing. No study settles call versus email for salary; final terms always end up in writing.
Subject: <Role> offer: a few points before I sign
Hi <name>,
Thank you. I'm excited about <specific team or goal> and want to make this work.
Before I accept, I'd like to ask about <N> things:
1. Base: <figure, currency>. Reason: <source + date / scope / forfeited pay>.
2. <Sign-on / equity / level>: <ask>. Reason: <…>.
If base is constrained, I'd be equally happy with <package B>.
If we can get there, I'm ready to sign by <date>.
Best, <user>
Call beats: thanks and enthusiasm → "a few questions to understand the full package" → each ask with its reason, then stop talking → on a no, "What flexibility is there on ?" → "Could you send the updated terms in writing?" Lint every draft: each number traces to the user or a cited source and carries its currency; one counter; no apology, no ultimatum, no "industry standard" without a source; under about 200 words. Read references/scripts.md before drafting anything else: verbal-offer call, recap, extension, no-competing-offer counter, competing offer, best and final, accept, decline, counteroffer, renege.
Offer a role-play with you as the recruiter. Read references/role-play.md before the first turn. In short: the user picks the company type, recruiter stance and market; one recruiter message per turn; rotate pushbacks ("above our band", "everyone at this level gets the same", "best offer", silence, "what's the other offer?", "we need an answer by Friday"); concede only on levers that recruiter plausibly controls, at most one concession per good ask; go cool after rudeness or an ultimatum; ask for proof of any leverage. Speak outside the role with [Coach]. Never play a named real person. End with the debrief rubric and rewrites of the user's 2–3 weakest lines.
| They say | Move |
|---|---|
| They come back partway | Compare with the plan's packages. At or above target: accept in writing (step 9). Between walk-away and target: one closing ask on a single item, tied to a yes ("If the sign-on can reach , I'll sign as soon as I have it in writing"), then decide. Never reopen agreed items or add new ones |
| "That's above our band" / "budget is fixed" | Acknowledge; move to items the manager controls (sign-on, level review in writing, start date, equity) |
| "This is our best offer" | Test once on a single non-base item; then decide against the walk-away point. Don't re-argue base |
| Exploding offer, or a deadline too short to decide | Ask once, before it passes: a specific date and a true reason. If refused, decide on the fallback as it stands, not on hopes |
| "Can you send the other offer?" | Share only what's true and what the user is comfortable sharing; check the letter's confidentiality wording; never edit it |
| "If I get you X, will you sign today?" | Answer honestly: yes only if X clears the target and the user is ready; otherwise ask for the terms in writing first |
| Current employer counteroffers | Ask whether money was the only reason for leaving and whether the other reasons are fixed in writing |
| Offer withdrawn | Don't post about it; ask the recruiter why and about other roles; check whether a resignation can be reversed |
US campus norms give students time to decide (often about two weeks; the two-week minimum is a university convention, not a NACE rule). Scripts for each row, plus "everyone at this level is paid the same" and silence past their date, are in scripts.md §7.
Decide against the walk-away point and the fallback as they stand today, not hoped-for offers. Then run three checks: the equal-pay test (at the same pay, which would you pick?); the item from intake question 5 that matters most, met or not, in writing; and where each option leaves the user in 2 years (level, skills, manager). If the money-best and the gut-best differ, say so and let the user choose. Accept in writing, restating every agreed term: title and level, base, bonus target and basis, equity (units or value and vesting), sign-on and its clawback, start date, location and remote days, notice, covenants. Ask for the revised offer letter, and keep contingencies (background check, right to work, visa) in view: the user resigns only after the signed final offer and cleared contingencies. In the UK an accepted offer can already be a binding contract. Decline promptly, briefly and graciously; no numbers and no renegotiation after a decline. After accepting, the user withdraws from other processes promptly (job-application-manager). Never accept with the intention of reneging.
Ask in one batch: (1) have you answered yet, and is it a call or a form? (2) role, level, city, and any posted range; (3) what your current figure includes (base, bonus, 12 or 13 payments). Then read countries.md §9 for the 2026 law snapshot and the country's own section; the words are in scripts.md §1. Pick one move:
| Situation | Move |
|---|---|
| A range is posted | Anchor in its upper part with a scope reason, "depending on the full package" |
| No range, solid checkable data | Ask for the band first; if pushed, a range starting at the target, or a precise figure with its basis |
| No range, weak data | Don't anchor blind: ask for the band, or defer until scope and package are clear |
| Pay history asked where it's banned (many US states) | Decline politely and give the expectation instead |
| Pay history routine and lawful (India "current CTC") | State it accurately with the breakup, never inflated; frame the ask around the role and market |
| EU | Ask for the range "in the spirit of the Pay Transparency Directive": a right where national law has transposed it, elsewhere a reasonable request (verify) |
| Online form needs a number | A researched range; placeholder tricks such as "$1" risk automatic rejection |
| Public scale (GS, NHS, Indian pay matrix) | The grade is set; negotiate the step with evidence later |
The user decides whether to share current pay; never state a figure they don't earn. "Never name a number first" is contested advice from before posted ranges; treat it as depending on how much the user knows. Germany: give one gross annual figure (Bruttojahresgehalt) and say whether it assumes 12 or 13 payments; in tariff-bound roles the pay group and step are negotiated, not the amount (countries.md §3).
User: "Offer: $185k base, $160k RSUs over 4 years, 10% target bonus. Answer by Friday. Should I negotiate, and what do I say?" Today is Fri 9 Oct 2026.
Agent: "Yes, ask once, politely; here's how." Then one batch: (1) Friday 16 Oct or today? What time and timezone? (2) public or private company, and the vesting schedule? (3) level, title and city? (4) anything you'd forfeit by leaving, current pay if staying is your fallback, and other processes (real ones only)? (5) any pay data you trust for this level and city? User: 16 Oct, 5pm Pacific; public; vests evenly over 4 years, 1-year cliff; Senior Engineer, Seattle; current base $170k, $30k of RSUs vesting in February that I'd lose; no other processes; the Levels.fyi verified entries I found for this level and city mostly show $190–205k base.
Acme · Senior Engineer · Seattle · USD per year · written · respond by Fri 16 Oct 17:00 PT
Base 185,000 guaranteed
Bonus target 18,500 (10%); range 0 to cap (cap unknown) conditional; payout history and year-1 proration unknown
RSUs 160,000 grant value / 4 yrs units conditional on staying; value estimate, 40,000 a year at grant price; first vest at month 12
Year-1 cash 185,000 base (prorated by start date) bonus not counted: conditional
4-yr base 740,000 if employed throughout, no raises assumed
Conditional bonus 0 to cap each year · RSUs 160,000 at grant price, value moves with the stock
Benchmark 190–205k base (Levels.fyi verified, user-found, Oct 2026) not part of the offer
Unknowns bonus cap · bonus payout history · refreshers · sign-on · 401(k) match · start date
Position: fallback is staying at $170k plus the February vest; leverage is the documented $30k forfeiture and the data; no competing offer, so none is mentioned. Plan (confirmed by the user): base $200,000 (the upper half of the 190–205k verified entries; a round figure because the data gives no percentile) or package B, base $192,000 plus a $30,000 sign-on to cover the forfeited vest. With 7 days left, the bonus and refresher questions go out today in their own email (scripts.md §3); the counter call is Tuesday 13 Oct, with a recap email the same day, 3 days before the deadline. The draft follows step 6 with those figures and reasons (scripts.md §5 shows it in full). Not done: no extension request (time is enough), no invented offer, no claim that the bonus "usually pays 100%".
Use these only when the server is connected. Read before writing, show the exact text, and get a yes before any write. Read references/mcp-recipes.md before the first Reactive Resume call in a session for payloads, field shapes, ordering traps and errors.
Read:
list_applications {status: "offer", limit: 100} (page with offset until nextOffset is null; if nothing matches, list without the filter, since an offer may arrive before the stage moves) → read_application {id} for salary (posted pay), location, contacts, notes, activity, followUpAt, tags.api_career_saved_items {applicationId, kind: "offer"}, newest first. Each data holds version (written|verbal), currency, period (hour|month|year), base, variable, variableConditions, equity (text), location, officeDays, leave, learning, other, respondBy. Null amounts are unknown, never zero. Sign-on, level, notice and covenants appear only in other or the original letter, so ask. outdated on an offer item only means the application changed since; the terms are as saved. It's computed only when you pass applicationId; in the all-offers listing it's always false. No offer item? Check api_career_saved_items {applicationId, kind: "reply"} for an unapplied offer change (mcp-recipes §4). If either offer still has no saved terms, ask for them and compare in chat with decoding.md §9; point to Career → Offers only once both are saved.api_career_profile → minBase {amount, currency, period}, maxOfficeDays, noticeWeeks, locations, priorities. Use them for the walk-away check; read-only here.api_career_facts {applicationId}, using only status: "active" facts.Write, after a yes (and after any api_career_apply_reply; see mcp-recipes.md §4): follow-up dated for the next step (when time allows, at least 2 business days before respondBy), with the deadline in the note (update_application {id, followUpAt, followUpNote}); the deadline tag (bulk_update_applications {ids: [id], addTags: ["deadline"]}, which appends rather than replaces); the stage, if the record isn't at offer yet (update_application {id, status: "offer", stageEnteredAt}); and a log note per step after the user confirms it happened (add_application_note {id, text: "Sent: counter to <name> (recruiter), email. Asked base 200,000 USD or 192,000 + 30,000 sign-on", date}, and Received: … for replies). Keep the walk-away point and target out of notes unless the user asks.
Hand off to the web app: saving offer terms (Applications → the application → Open workspace → Messages → paste the offer → Read it for me → apply the offer change; it uses the user's AI provider), the side-by-side comparison (Career → Offers), and the coach's "Plan what to ask". Don't rebuild the side-by-side table in chat: decode each offer, name the 2–3 differences that matter for this decision (each in its own currency), and point to Career → Offers for the rest. Accepting closes this record and the others: hand to job-application-manager (its accept cascade), or with a yes update_application {id, status: "closed", closedReason: "accepted"}.
Before quoting any negotiation statistic, check references/evidence.md §2 (common figures that are dubious, dated or wrong) and give its origin and sample.
In these kits
More from @amruthpillai
Works with
Claude, Codex, Cursor & more