shipped@di-atomic/sales-pipeline · v0.1.3 · beta

Every AI CRM advances your deals. Mine refuses to.

A prospect says “let me think about it” and an optimistic agent moves the card to Proposal. Nobody agreed to anything, but the board looks healthy and the forecast climbs. sales-pipeline inverts that: a deal changes stage only on a logged buyer signal, and a script checks every transition and prints PASS or FAIL with a count.

For founders and operators whose pipeline only ever moves forward — and who have stopped trusting the number at the bottom of it.

Chalk sketch: a card travelling along an arrow is stopped dead by a thick gold barrier, labelled signal? and no move
Built by Di-Atomic Marketing & compliance agency REACH / CLP vocabulary-aware 7-language team Clients incl. ONYX Radiance, Pamit Group
81evidence-bundled registry assets
5scripts gate the agent’s own output
0backends added to your stack
23learnings, incl. the anti-patterns
Installopvs-skills install @di-atomic/sales-pipeline

Then say: “create a deal for this prospect” or “move this deal to the next stage”.

Why a moving pipeline isn’t a forecast

An agent optimising for motion
buyer: "let me think about it"

→ moveTask(deal, "Proposal")
   stage:    Proposal ✓
   weighted: +$40,000

(no budget, no next meeting,
 no second stakeholder,
 no signal — and no error)

Cards move right. The weighted total climbs. You feel like you had a good week, and you hire against a number nobody agreed to.

sales-pipeline demands exit evidence
buyer: "let me think about it"

→ classify → not a buyer signal
   stage:      unchanged
   addComment: stall logged
   next_touch_at set

verify-stage-progression-evidence
  → 6/6 transitions evidenced  PASS

The deal stays where it is and the stall becomes visible, which is the only state a follow-up cadence can fire against.

An agent that advances a deal on its own optimism isn’t forecasting. It’s lying to you politely.

What you actually get

🚪

Refusal, enforced by a script

A forward move needs a logged buyer signal dated at or after the deal entered its current stage. verify-stage-progression-evidence.mjs checks every transition and prints PASS or FAIL. A rule the agent can talk itself out of is not a rule.

📋

No CRM to integrate

The AgentBoard you already run is the CRM: columns are stages, a card is a deal, custom_fields is the deal data. No sync, no field mapping, no second source of truth. lint-external-crm-mentions.mjs fails any output that suggests bolting one on.

⚖️

Pressure gated out of regulated deals

For REACH, CLP and biocide buyers the process discipline stays and the pressure goes: no manufactured urgency, no insistence closes, no absolute claims. Supply-chain role is captured at qualification because it changes the legal obligation.

The two things it got me to change

Chalk sketch: three kanban columns with one gold card, labelled column equals stage and card equals deal
I nearly wired in a third-party CRM before realising I already ran one. Columns are stages. A card is a deal. It was a to-do list only because I was treating it as one.
Chalk sketch: a track of touch marks with a cross at reps quit early and a gold band over the later touches labelled 80 percent close
I expected qualification to carry the value. It was follow-up. 80% of sales close between the 5th and 12th touch while most reps stop after 4, and 48% never follow up at all.

One deal, start to gate

> a reply lands from a chemicals importer

  createTask(deals)          deal created, contact + company linked
  compose dossier            ICP fit + company + persona + activity + next action
  verify-dossier-coverage .. PASS  5/5 sections present
  compliance gate .......... PASS  supply-chain role = importer, claims linted
  moveTask → Qualified      evidence: dossier complete

> two days later: "send it over, but I need to loop in our RA lead"

  moveTask → Proposal       evidence: buyer requested materials + named a stakeholder
  verify-stage-progression-evidence .... PASS  2/2 transitions evidenced

> a week of silence

  moveTask → Negotiation    BLOCKED  no logged signal since Proposal
  → stays put. next_touch_at set. the stall is now visible.

The last block is the whole product. A deal that goes quiet stays where it is, so the number on your board keeps meaning something.

Where it stops

Chalk sketch: a speech bubble reading let me think pushes a gold deal card along an arrow into a column labelled proposal
The failure it was built from: a polite no, read as progress.
It is guidance-only. It has no backend and no methods, so it sends nothing and scrapes nothing itself — every write is performed by a peer you already have, which is why installing it adds no service to your stack. It also will not tell you a deal’s probability of closing. It tells you whether the stage it sits in is evidenced. Those are different claims, and only one of them is honest.
Why this exists

I built this by dogfooding the same stack I run for clients.

sales-pipeline is one skill in the system behind Di-Atomic — the marketing & compliance agency that runs cognitoAI, SpiderIQ and OPVS. If you want a pipeline whose forecast you can actually spend against, operated by an agent that tells you when a deal has gone quiet instead of quietly moving it along — in any of our seven languages, including regulated categories like REACH and CLP — that’s the day job. Let’s talk.

Book a 30-min call with Di-Atomic

Just want the skill? Install @di-atomic/sales-pipeline free.