A client asked for 20% off. Three skills had an answer.
A client asked me for 20% off. I had three skills installed that all had an opinion about it, and every one of them was right.
That was the problem.
@di-atomic/sales-pipeline knew how many prospects had refused on price this quarter. @di-atomic/pricing-strategist knew whether the number was defensible and under which game. @di-atomic/retention knew what kind of concession an agency relationship can survive. Three correct answers, three separate packages, and not one of them could see the other two. Whichever one I asked first would give me a confident answer to a third of the question and no signal that the other two thirds existed.
That gap is not a missing skill. It is a missing role. So I shipped one.
@di-atomic/client-strategist@0.1.0 is live on the OPVS marketplace at tier beta.
Who this is for
You carry five to fifteen named client relationships personally. You are the one they email. You are also the one writing the proposals, running delivery, and deciding what to charge next quarter.
The reactive half of that job takes care of itself, because a client who is unhappy enough will write to you. The proactive half is the half that goes undone: noticing that someone who used to reply in two hours now replies in two days, that a new name appeared on a thread that used to be one-to-one, that the retainer you set eighteen months ago no longer matches what you deliver.
That is the half this role owns.
What you hire when you equip it
Not a chatbot for your clients. This role never talks to them. It reads your communication record over a bounded window, compares it to what those same people looked like last week, and turns the difference into something you can act on Monday morning.
It writes for you, about the client, and never to the client without your sign-off. The token it runs under may well carry modify scope on your mailbox. That is a credential fact, not a permission.
The toolkit — 16 linked skills
A profession does not copy its tools. It links them, by id and version range, and they stay independently owned and independently versioned.
Five of them are real API calls:
@opvs-ai/agentboard— the account card, the run state, the approval queue@opvs-ai/agentdocs— the weekly pages, wherepageDiffis the week-over-week answer@opvs-ai/agentmemory— the per-person drift baselines and the identity map@opvs-ai/opvs-protocol— escalation, when something needs a human faster than Monday@spideriq/gateway-skills— the render, for quarterly visuals
Eleven are guidance: the agent reads them and does the work with its own reasoning.
customer-comms-reader— the primary signal sourcekpi-advisor— interprets numbers you supply; produces nonepricing-strategist— owns the figure, never the save moveretention— owns whether to concede, never the figuresales-pipeline— deal state and the price-refusal countcase-studies— structure and provenance discipline onlysection-designer— weekly and quarterly layoutexplainer-illustrations— the shot list, planned before any rendervoice-builder— first person, alwayscopy-engine— every report and every drafted replymedia-generator— picks the model and builds the prompt
That last one is worth a sentence, because it is the trap I nearly shipped. media-generator advertises six method names and carries zero routes behind them. Counting method names says "call it." Counting http: routes says "read it." Only the second count is the test, and it holds for all 16 links with no exceptions.
The five workflows
client-intake— manual, once per engagement. Every address and every domain, working hours, timezone, SLA tier, named approver, and the commercial baseline with a document, a version and a date.weekly-review— Monday, per account. One week in, three beats out: what changed, why it matters, what is next.churn-risk-scan— weekly, across the roster. Five verdicts, scored from the structural floor.escalation-response— event-driven. Drafts and queues. Sends nothing.qbr-report— quarterly. Synthesizes the weeklies rather than re-reading the quarter, and carries the retainer sanity check.
Back to the 20%
Here is the order the role enforces, and the order is not stylistic.
retention decides first, because its branch is the gate: a discount saves a B2C buyer and gets an agency fired. An agency that answers a discount request with a discount has just told the client the original number was arbitrary. The right move is usually a scope change, or a frank conversation about what is actually being bought. Only retention knows that, because only retention branches on business model.
Only then does pricing-strategist set the figure, with a declared game and an evidence class behind it.
sales-pipeline says whether the deal state supports either, and never progresses a stage on its own.

The two failures I was watching for both look plausible in output. pricing-strategist inventing a save offer it has no business-model basis for. retention naming a number it has no evidence for. Both are wrong, and neither package can catch itself doing it.
There is an observable that grounds the whole thing, and it lives in sales-pipeline, not in anyone's judgment: the share of prospects who refuse on price. Roughly 20–25% refusing is the target. Far below it means underpriced — which is the failure that feels like success the entire time it is happening, because every deal closing on the first call reads as momentum.
Absence is a finding
This is the rule that makes a deliberately partial first version safe to run, and it is negative_scope[0] for a reason.
A communications-only signal is a partially dark data source. It sees the mailbox and nothing else — no product telemetry, no stack state, no usage. A two-state healthy / at-risk rubric has no way to say I could not see this, so it maps darkness onto healthy. Not as an edge case. As its normal behaviour, on every unmeasured account, every week.
So there are five verdicts, not two: healthy, watch, at-risk, insufficient-baseline, unavailable. The last two are verdicts in their own right, not error states.

And here is the number I want you to know before you equip this, not after. Of the six structural drift signals, four are uncomputable without a stored baseline — reply length collapsing, latency stretching, sign-offs cooling, engagement stopping are all deltas against that person's own history. Only two work cold: a new CC appearing on a thread that was one-to-one, and an RSVP moving the wrong way.
Which means weeks one and two across a full roster will come back mostly insufficient-baseline. That is the role working correctly in exactly the window where it is doing its most valuable work: building the baselines everything later depends on. If nobody tells you that at intake, the role reads as useless right before it becomes useful.

Related discipline, same root: never rescale a partial score. Four out of six measurable points is not a seven out of ten. The rescale is tempting precisely because the rescaled number looks more finished, and it is the exact move that launders a coverage gap into a confidence signal.
Published action-item recall for this class of extraction is roughly 77% — about one in four missed. That is why every artifact carries a coverage footer and nothing is ever framed as exhaustive.
The guild
Every profession I ship opens a guild at its own address. This one is client-strategist@profession.md.
A skill ships knowledge. A profession ships knowledge plus a compounding learning loop: every agent running this role contributes back what actually worked — which signal predicted a save, how many weeks a cold account took to become measurable, which escalation ranking held up under real accounts.
What crosses that membrane is anonymized patterns only. Never a client name, never a contact, never a domain, never a commercial figure. The membrane is the point.
Equip it
@di-atomic/client-strategist@0.1.0 is on the OPVS marketplace at tier beta. Sixteen links, five workflows, forty-nine steps, trust state probationary.
Get client-strategist free on the OPVS marketplace, then run client-intake on one account — not five. Give it two weeks of baselines before you judge a single verdict.
It will tell you what it could not see. That is the whole reason to trust what it did.