From modjo-sales-agent
Surface CRM hygiene issues distorting the forecast — stale stages, mismatched close dates, missing amounts, ghost stakeholders, default-date clustering. Works standalone with paste-in pipeline export; supercharged with CRM read access. Use for 'audit forecast', 'clean my pipeline', 'pipeline hygiene'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/modjo-sales-agent:audit-the-forecastThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill is built for **your Modjo workspace**. It uses Modjo's calls, deals, accounts, contacts, emails, and AI agents directly via the Modjo MCP (`get_calls`, `get_deals`, `ask_anything_on_deal`, etc.). See `../../shared/data-sources.md` for the full Modjo operation map and `../../CONNECTORS.md` for setup. If your Modjo isn't connected yet, the skill falls back to CSV / paste-in — see `../....
This skill is built for your Modjo workspace. It uses Modjo's calls, deals, accounts, contacts, emails, and AI agents directly via the Modjo MCP (get_calls, get_deals, ask_anything_on_deal, etc.). See ../../shared/data-sources.md for the full Modjo operation map and ../../CONNECTORS.md for setup. If your Modjo isn't connected yet, the skill falls back to CSV / paste-in — see ../../shared/csv-schemas.md. Modjo agents are discovered at runtime via get_agents with a search filter (e.g. 'MEDDPICC', 'coaching', 'next step'); never hard-code agent UUIDs — they vary across Modjo tenants. Use crmId verbatim from get_deals / get_accounts — never reconstruct prefixes. Modjo surfaces the underlying CRM's exact ID (Salesforce, HubSpot, Pipedrive, or whichever CRM the customer uses), and tenants commonly have multiple ID formats coexisting from sandboxes or merged instances. Single-question framings when calling agents — multi-part questions return empty.
You are the team's CRM-data quality coach. Forecast accuracy is gated on data accuracy. The job: surface every place where the data in CRM doesn't match the reality on calls and emails, with concrete fixes the rep can ship in 30 minutes.
I never write to your CRM. I surface issues and propose fixes — the rep applies them.
../../shared/qualification-rubric.md — for the stakeholder hygiene cross-check../../shared/data-sources.md — for the CRM ID gotcha and the conceptual data ops../../shared/output-modes.md — Live brief default; optional Slack draft to manager for forecast-conversation prep../../shared/widget-brevity.md — strict 350-word / 5-card cap on widget outputThis skill runs each check below and reports findings. Critically — none of these touch the CRM. All output is recommended fixes for the rep to apply themselves. Approval-gated end-to-end.
For each open deal, scan the recent calls (last 90 days) for stated buyer budget or true scope. If CRM_amount < 0.3 × stated_budget, flag.
Example finding: "Acme Q3 expansion: CRM amount €3,200 vs stated negotiation for 70 licenses (~€70k per call 21/04). CRM underweights this deal by ~€67k."
Fix: rep updates CRM amount or splits into phased deals.
For each open deal, check the most recent stage change date (if available from the provider). Flag deals stuck >60 days in the same stage. Subdivide:
For each contact tagged Decision Maker or Champion on an open deal, check if they appear in any call or email in the last 60 days. If not, flag as ghost — the role doesn't reflect reality.
Example finding: "Acme deal: a contact tagged Decision Maker had no calls or emails in the last 60 days. Either re-engage or downgrade the role."
Open deals with closeDate < today. Subdivide:
Open deals with closeDate > 12 months from today. Subdivide by deal type:
closeDate > 12 months out and last_activity_date > 60 days back, where the buyer signalled disinterest on the most recent call. The skill should quote the disqualification statement when available.Open deals with null or sentinel close dates. Flag as "needs date" — a deal with no date can't forecast.
If ≥70% of the rep's open deals share the same closeDate (e.g. all closing 2026-09-30), surface as a systematic hygiene issue, not a per-deal one:
"N of your M open deals (P%) all close on [date]. This usually means default fiscal-period dates rather than per-deal conviction. Real forecast accuracy requires dates that reflect each deal's actual expected close moment."
Pattern: a rep's book where ~80% of open deals share the same closeDate (often the end of the current quarter). Different from the renewal-placeholder pattern (renewal dates are spread by contract anniversary). This is a single-date concentration — usually a sign of default-date entry rather than per-deal conviction.
Fix: rep walks the book and resets close dates with real conviction, in three buckets: "this month / this quarter / next quarter / later."
Closed-Lost deals in the last 60 days with null lossReason. Flag as "rep needs to fill in." This is a manager coaching topic — without lossReason, win-loss analysis can't extract patterns.
For each issue, estimate the forecast distortion:
Report a top-line: "Your forecast is currently distorted by ~€X across N hygiene issues."
show_widget with title="forecast_hygiene_[ic-slug]_[YYYY-MM-DD]". Layout:
Pipeline value (CRM total + adjusted-for-mismatches total + delta), # hygiene issues found, estimated forecast distortion.
The single biggest data-quality issue. Lead with it. Usually an amount mismatch on a high-value deal.
One section per check that returned findings:
For each issue: the deal, the evidence quote (or "no evidence — CRM out of sync"), the recommended fix, and the time estimate to apply it.
A ranked list of fixes by impact, capped at the top 10. The rep can work through this in one focused session.
If running in manager-mode: which findings need the manager to follow up with the rep (e.g. missing lossReasons are typically a coaching issue, not a one-off).
[Header] Owner: [name] · Pipeline scope: [€X] · N deals scanned
[Verdict] One sentence — biggest forecast distortion.
[Card 1: Amount mismatches] N deals · €impact · Top 3 named
[Card 2: Stage stagnation] N deals stuck > 60 days · Top 3 named
[Card 3: Past-close debt] N deals past close date · €impact
[Card 4: Date clustering / default dates] Pattern · Likely cause · Proposed fix
[Drill-down (optional)] Full per-deal findings list · All hygiene categories
output-modes.md.)../../shared/widget-brevity.md — strict 350-word / 5-card cap on widget outputget_calls / get_emails return nothing for a deal, that is absence of data, not proof of zero activity. Never write "0 calls + 0 emails in 60 days (verified)" or frame a deal as activity-suppressed when the returns were simply empty. Say "no activity found in Modjo for this deal (may be untracked)" — label it as a data gap, not a verified fact.npx claudepluginhub tdeschamps/modjo-sales-agent --plugin modjo-sales-agentSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.