Systems Lab

Agent skill

gtmos-crm-pipeline-review

Review the pipeline deal by deal -- stuck stages, no next step, slipped close dates, single-threaded deals, missing amounts -- and turn findings into tasks and proposed updates.

activeReaches the webActs undeclared1,120 words

Filed under CRM and RevOps.

From ay-automate/gtmos-skills · 107 skill entries · 0 · pushed 2026-11-02

What it does when it runs

Review the pipeline deal by deal -- stuck stages, no next step, slipped close dates, single-threaded deals, missing amounts -- and turn findings into tasks and proposed updates. With GTM OS connected it reads crm.dashboard, open deals with records.list (closing overdue or this month, activity windows), relationship history and the committee, and proposes stage moves and CRM write-backs for approval. Use for \"pipeline review\", \"pipeline pulse\", \"deal review\", \"which deals are stuck\", \"deal risks\", \"weekly pipeline meeting\", \"clean up my pipeline\".

Automated analysis of the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
  • org.lightning.force.com
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
shell

Ask about gtmos-crm-pipeline-review

Opens your assistant with this page's recorded context. Check the linked sources before relying on it.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/ay-automate/gtmos-skills.git /tmp/gtmos-skills
git -C /tmp/gtmos-skills sparse-checkout set "skills/gtmos-crm-pipeline-review"
mkdir -p ~/.claude/skills/gtmos-crm-pipeline-review
cp -R "/tmp/gtmos-skills/skills/gtmos-crm-pipeline-review/." ~/.claude/skills/gtmos-crm-pipeline-review/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 107 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add ay-automate/gtmos-skills
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from ay-automate/gtmos-skills/blob/86780d2f545cdc0a1de971917aa04b41bb0b3ccd/skills/gtmos-crm-pipeline-review/SKILL.md, which is licensed APACHE-2.0 (skill frontmatter). 1,120 words, 10 headings.

Pipeline review

Part of GTM OS Skills. Adapted from pipeline-pulse in HubSpot/hubspot-mcp-plugins (Apache-2.0, HubSpot, Inc.). Merged with pipeline-review from salesforce/salesforce-skills (Apache-2.0), kept in references/salesforce-pipeline-review.md. Changed for GTM OS: the operating section below, rewritten cross-references and tool pointers. Notices: THIRD-PARTY-NOTICES.md (installed beside the skills as THIRD-PARTY-NOTICES.md).

With GTM OS connected

Rules (GTMOS-RULES.md). Read policy.get_dry_mode first; in dry mode every effect stops at a draft. E-class operations are proposed and a different person approves them; never approve your own proposal. Numbers come only from operation results, named with the operation. Claims about results, customers or metrics must be backed by active proof from proof.list.

1. The picture. crm.dashboard {scope} Q: open pipeline, win rate, pipeline by stage, largest open deals, overdue tasks. Quote its numbers as "from crm.dashboard".

2. The deals. records.list {objectType: "gtm.deal", closing: "overdue" | "this_month", activityWithinDays, sort} Q for the review set; records.aggregate Q for exact totals by stage. Per deal: account.relationship Q (last email, reply, meeting), task.list Q (next step), score.committee_coverage {accountId} Q (required roles identified, engaged and recently touched on the largest open deal, champion gate, multithread risk; computed: false with a reason when there is no open deal or no committee contact), transcripts.list Q (recent calls). Role names come from buying_roles.list Q.

3. Flag with evidence. Apply the checks below. Each flag cites the field or record behind it (for example "no activity since 2026-09-30, from account.relationship").

4. Act through approvals. task.create D for each next step. Stage changes: deal.move_stage D or deal.advance_stage T (guarded by the stage machine). Write-back to the CRM of record: crm.update_record E, approved by a different person. Never edit a forecast category or amount on your own.

5. The weekly agent. The pipeline-review-agent (pack stdlib/pack.crm-agents, every Monday at 07:00) runs this review and suggests one task per deal that needs attention. packages.agents Q shows whether the pack is installed and the agent registered; agent.kpis Q shows its runs and approval rate.

Without GTM OS

Pull an open-deals report from the CRM with stage, amount, close date, last activity and next step, and run the checks below. The upstream HubSpot and Salesforce tool calls are the path on those CRMs; keep them read-only and ask the rep before changing a deal.


The method below is the upstream HubSpot skill. Its HubSpot CLI and MCP calls are the path for a HubSpot portal without GTM OS; with GTM OS connected, run each data step through the operations in the section above instead.

Tool names below are expected names for the HubSpot MCP connector. If a named tool isn't available, check for updates to the skill and/or alternates in the HubSpot toolset as available tools may change

Phase 1 — Fetch data (parallel)

A. Deals — search_crm_objects:

  • objectType: deals
  • filter: dealstage not in [closedwon, closedlost]
  • properties: dealname, dealstage, amount, closedate, pipeline, hs_lastmodifieddate, hs_next_step, hubspot_owner_id
  • limit: 50

B. Portal context — get_organization_details → store portalId, uiDomain

C. Tasks — search_crm_objects:

  • objectType: tasks
  • filter: hs_task_status = NOT_STARTED, associations.deal IN [dealIds from A]
  • properties: hs_task_subject, hs_task_status, hs_timestamp, associations
  • Identifies which deals already have an open task

Phase 2 — Enrich with contacts and connector signals

A. Batch-call get_crm_objects contacts for each deal's associated contactId → firstname, lastname, email. Store contact (display name) and contactEmail per deal.

B. For deals where hs_lastmodifieddate is 21+ days ago or hs_next_step is empty, silently check available connectors:

  • Calendar: upcoming meetings with associated contact email
  • Email: recent unread threads from associated contact email

Store per deal: upcomingMeeting (date string), unrepliedEmail (subject). Skip if connectors unavailable.


Phase 3 — Classify each deal

For each deal compute:

  • lastModified: hs_lastmodifieddate
  • daysAgo: today − lastModified
  • daysToClose: closeDate − today (negative = overdue)
  • stalled: daysAgo ≥ 21
  • overdue: closeDate has passed
  • closingSoon: closes within 14 days
  • hasNextStep: hs_next_step is non-empty
  • hasOpenTask: deal appears in Phase 1C results
  • needsAttention: stalled OR overdue OR no next step

Phase 4 — Generate suggested tasks

For deals where hasOpenTask is false, generate a suggested follow-up task. Do not ask — surface them proactively in the output.

Task generation rules:

Deal stateSuggested task subjectDue
Stalled + upcoming meeting"Prep call with [Contact] — [Deal Name]"Day of meeting
Stalled + unreplied email"Reply to [Contact] re: [Deal Name]"Today
Stalled, no signals"Re-engage [Contact] on [Deal Name]"Today
No next step, closing ≤ 14d"Set next step — [Deal Name] closing [date]"Today
No next step, any stage"Follow up with [Contact] — [Deal Name]"Today

Each suggested task object: { id, subject, context, due, dealId, contactId, dealName, contactName }


Phase 5 — Format the pulse

Output as plain text in this structure. Group deals by attention status: needs-attention deals first, then healthy. Omit sections with no items.

PIPELINE PULSE — [Day, Month D]
[N] open deals · [total value] · [N] need attention

━━ NEEDS ATTENTION
• [Deal name] with [Contact] — [stage] · [amount] · closes [date]
  [stalled X days / overdue / no next step] · [upcoming meeting or unreplied email if any]
  Next step: [hs_next_step or "—"]

━━ ON TRACK
• [Deal name] with [Contact] — [stage] · [amount] · closes [date]
  Next step: [hs_next_step]

━━ SUGGESTED TASKS
• [Task subject] — [signal context]
• [Task subject] — [signal context]

Reply "add all" to create all suggested tasks in HubSpot, or name specific ones.
Say "call prep for [name]" or "follow up with [name]" to act on a deal.

Link each deal and contact name to their HubSpot record using portalId and uiDomain.


Phase 6 — Add suggested tasks to HubSpot

When the user replies "add all" or names specific tasks, for each selected task call manage_crm_objects createRequest, objectType: tasks:

  • hs_task_subject: task subject
  • hs_task_type: CALL or EMAIL (infer — "Reply" → EMAIL, others → CALL)
  • hs_task_status: NOT_STARTED
  • hs_task_priority: HIGH if deal closing ≤ 14d, else MEDIUM
  • hs_timestamp: task due date ISO
  • hs_task_body: signal context
  • associations: deal → dealId, contact → contactId

Run creates in parallel. Confirm: "Created [N] tasks in HubSpot."

Add next step: when the user says "add next step to [Deal Name]", update via manage_crm_objects deals, updateRequest: hs_next_step.


Error handling

  • No open deals: "No open deals right now. Want me to add one?"
  • Deal fetch fails: Report the error and suggest checking the HubSpot connection.
  • Connectors unavailable: Run with HubSpot data only — omit connector-based signals silently.

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what gtmos-crm-pipeline-review does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.

Build my GTM engine

Tell us what you want to improve. Fedor reviews the workflow and replies by email when there is a useful fit.

Fedor reviews every request personally. If there is a useful fit, he will reply by email.