Handle salary and rate negotiation using Ackerman concession model with market data.
Triggers on /gaj:negotiate, "negotiate salary", "counter-offer", "negotiate rate",
"they offered $X", "counter their offer", or any request to handle compensation negotiation.
If the exact role isn't in the table, try broader matches. Present the closest data available. If no data matches, note the gap and use whatever context the user provides.
Step 5: Check walk-away signals
Apply the 6 walk-away signals from @prompts/negotiation-system.md:
Client unnamed before interview
Rate >25% below floor with no flexibility signal
Team is just you
Scope expands without compensation movement
Pressure to decide without basic information
Ghost after verbal agreement
Assess as: Clear, Yellow (1 signal), or Red (2+ signals).
If Red: present concerns to the user. Recommend declining or resolving the signals before continuing negotiation. Do not draft a counter-offer until the user decides to proceed.
Step 6: Calculate Ackerman anchors
From the user's target compensation:
Step 1 anchor: target * 1.15 (round to a specific, non-round number)
Step 2 anchor: target * 1.05 (round to a specific, non-round number)
Step 3 anchor: target (exact, with non-monetary sweetener)
Determine which step applies:
First counter-offer: use Step 1
After pushback on first counter: use Step 2
Final round: use Step 3
Check prior correspondence to detect which step was used previously
Step 7: Draft the counter-offer
Read and follow @prompts/negotiation-system.md for generation rules.
Apply @prompts/writing-rules.md to all output.
Draft using the counter-offer message rules:
Lead with genuine interest in the role
State range matter-of-factly
Justify with market context in one sentence
Close with calibrated question
Step 8: Present the strategy
Show the user:
Market data table: p25/p50/p75 for matching roles from salary-lookup
Ackerman ladder: all 3 steps with calculated dollar amounts
Current position: which step this draft uses and why
Walk-away assessment: Clear/Yellow/Red with details
The draft message
Non-monetary items: relevant options for Step 3 or to strengthen any step
Step 9: Offer refinement
After presenting, offer:
"Adjust tone" (more assertive, more collaborative, more matter-of-fact)
"Change anchor" (use a different target, recalculate all steps)
"Add non-monetary" (include specific non-monetary requests in the message)
"Switch step" (draft using a different Ackerman step)
"Intel mode" (draft questions to gather info instead of countering)
If not already at interview: suggest updating to interview
If offer received: suggest updating to offer
npx tsx scripts/pipeline-cli.ts status <id> <new-status>
Ongoing negotiation
When the user returns with "they came back with $X" or "they countered":
Look up prior correspondence via get-correspondence
Identify the last Ackerman step used (from classification field: counter-offer-step-1, counter-offer-step-2, counter-offer-step-3)
Advance to the next step
If already at Step 3 and they're still pushing: present walk-away analysis. The Ackerman model is exhausted. The user decides whether to hold, walk, or accept.
Market data only mode
If the user says "what's the market rate for [role]" without a specific negotiation: