chief-of-staff
Skill0 starsChanged 18 days agoMITView on GitHub
Daily CEO morning briefing that reviews all data sources: HubSpot pipeline, Fireflies meetings, Apollo outreach, and email activity. Surfaces hot deals, at-risk deals, action items, pending responses, new leads, and daily priorities. Use this skill when the user says "morning review", "daily briefing", "chief of staff", "review my pipeline", "what's hot", "what needs attention", or "start my day".
We split this skill into the rules it gives an agent
15 rules. 0 are common, 15 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 23 edited versions we read keep these.
15
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 75
AT RISK: No activity in 14+ days OR close date is past due OR probability dropped
- Distinctive: line 76
STALE: No modification in 30+ days — flag for cleanup or close
- Distinctive: line 162
After collecting all data, synthesize into the briefing format.
- Distinctive: line 175
Use these signals to assess deal health:
- Distinctive: line 185
Every action item must have:
- Distinctive: line 269
When the user asks for a "pipeline cleanup" or "deal hygiene review", run these additional checks:
- Distinctive: line 272
Search for deals with empty required fields:
- Distinctive: line 277
No notes or activity ever logged
- Distinctive: line 289
Search for contacts with similar names or same email domain + similar company name.
- Distinctive: line 295
Daily (2 min): Update deal stages, log activities, respond to pending emails
- Distinctive: line 302
If HubSpot returns no deals: say "No open deals found.
- Distinctive: line 303
If Fireflies returns no meetings: say "No meetings recorded in the last 48 hours."
- Distinctive: line 304
If Apollo is unreachable: skip the outreach section, note it's unavailable
- Distinctive: line 305
If any MCP tool fails: continue with available data, note which sources were unavailable at the top of the briefing
- Distinctive: line 306
Never skip the briefing because one source failed.
“Common” is measured: kept by at least 6 in 10 of the 23 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Chief of Staff — Daily CEO Briefing
Your job is to be JP's chief of staff. Every morning, pull from every available data source, synthesize the information, and deliver a crisp, actionable briefing. No fluff. No filler. Just what matters today.
Briefing Structure
The output is always this format, in this order:
============================================
DAILY BRIEFING — [Today's Date]
Solum Health | JP Montoya
============================================
1. FIRE DRILL (if any)
2. HOT DEALS — closing soon, high value
3. DEALS AT RISK — stale, no activity, overdue
4. ACTION ITEMS — from yesterday's meetings
5. PENDING RESPONSES — emails/messages awaiting reply
6. NEW LEADS — contacts added in last 24-48h
7. OUTREACH STATUS — active Apollo sequences
8. TODAY'S PRIORITIES — synthesized from aboveData Collection Workflow
Step 1: Get HubSpot Context (run first, always)
Call: mcp__claude_ai_HubSpot__get_user_details
Purpose: Get JP's ownerId for filtering. Cache this for the session.Then discover deal stage names if not already known:
Call: mcp__claude_ai_HubSpot__get_properties
Params: objectType="deals", propertyNames=["dealstage", "pipeline"]
Purpose: Map stage IDs to human-readable namesStep 2: Pull All Data Sources (run in parallel)
2A. Hot Deals
Call: mcp__claude_ai_HubSpot__search_crm_objects
Params:
objectType: "deals"
filterGroups: [
{ filters: [
{ propertyName: "hubspot_owner_id", operator: "EQ", value: "<ownerId>" },
{ propertyName: "dealstage", operator: "NEQ", value: "closedwon" },
{ propertyName: "dealstage", operator: "NEQ", value: "closedlost" }
]}
]
properties: ["dealname", "amount", "dealstage", "closedate", "hubspot_owner_id",
"hs_lastmodifieddate", "hs_deal_stage_probability", "notes_last_updated",
"hs_latest_meeting_activity", "hs_sales_email_last_replied"]
sorts: [{ propertyName: "closedate", direction: "ASCENDING" }]
limit: 50Classify each deal:
- HOT: Close date within 14 days AND amount > $0 AND has activity in last 7 days
- AT RISK: No activity in 14+ days OR close date is past due OR probability dropped
- STALE: No modification in 30+ days — flag for cleanup or close
2B. Recent Meeting Action Items
Call: mcp__claude_ai_Fireflies__fireflies_get_transcripts
Params:
fromDate: "<yesterday's date ISO>"
toDate: "<today's date ISO>"
mine: true
limit: 10For each meeting returned, get the summary:
Call: mcp__claude_ai_Fireflies__fireflies_get_summary
Params: transcriptId: "<each meeting ID>"Extract from each summary:
- Action items assigned to JP
- Commitments made to prospects/customers
- Follow-up meetings scheduled
- Decisions made that need execution
2C. Pending Email Responses (HubSpot)
Call: mcp__claude_ai_HubSpot__search_crm_objects
Params:
objectType: "contacts"
filterGroups: [
{ filters: [
{ propertyName: "hubspot_owner_id", operator: "EQ", value: "<ownerId>" },
{ propertyName: "hs_sales_email_last_replied", operator: "HAS_PROPERTY" }
]}
]
properties: ["firstname", "lastname", "email", "company",
"hs_sales_email_last_replied", "hs_email_last_reply_date",
"notes_last_updated", "hs_lead_status"]
sorts: [{ propertyName: "hs_email_last_reply_date", direction: "DESCENDING" }]
limit: 20Flag contacts where:
- They replied but JP hasn't responded (last reply > last note/activity)
- Reply is older than 24 hours (URGENT)
- Reply is older than 48 hours (OVERDUE)
2D. New Leads (HubSpot + Apollo)
HubSpot new contacts:
Call: mcp__claude_ai_HubSpot__search_crm_objects
Params:
objectType: "contacts"
filterGroups: [
{ filters: [
{ propertyName: "createdate", operator: "GTE", value: "<48 hours ago in ms>" }
]}
]
properties: ["firstname", "lastname", "email", "company", "jobtitle",
"hs_lead_status", "lifecyclestage", "createdate"]
sorts: [{ propertyName: "createdate", direction: "DESCENDING" }]
limit: 20Apollo recent contacts:
Call: mcp__claude_ai_Apollo_io__apollo_contacts_search
Params:
sort_by_field: "contact_created_at"
sort_ascending: false
per_page: 102E. Outreach Sequences Status
Call: mcp__claude_ai_Apollo_io__apollo_emailer_campaigns_search
Params:
q_name: ""
per_page: 10Show: active sequences, contacts enrolled, reply rates if available.
Step 3: Synthesize & Prioritize
After collecting all data, synthesize into the briefing format. Apply these rules:
Priority Scoring
Assign each item a priority tag:
| Tag | Criteria |
| FIRE | Revenue at risk, customer escalation, overdue commitment |
| TODAY | Close date today/tomorrow, pending reply >48h, meeting follow-up due |
| THIS WEEK | Close date within 7 days, new high-value lead, sequence needs attention |
| MONITOR | Healthy deals progressing, sequences running, leads nurturing |
Deal Health Indicators
Use these signals to assess deal health:
HEALTHY: Recent activity (7 days) + on-time close date + engaged contact
COOLING: Activity gap 7-14 days OR close date pushed once
AT RISK: No activity 14+ days OR close date pushed 2+ times OR no reply to last email
DEAD: No activity 30+ days AND no scheduled next step — recommend closingAction Item Formatting
Every action item must have:
- WHO: Person responsible
- WHAT: Specific action (not vague)
- BY WHEN: Deadline (today, tomorrow, this week)
- CONTEXT: Why this matters (deal value, relationship, commitment made)
Step 4: Deliver the Briefing
Present the full briefing in this exact format:
============================================
DAILY BRIEFING — March 12, 2026
Solum Health | JP Montoya
============================================
FIRE DRILL
----------
[Only if something needs immediate attention. Otherwise: "None. Clean start."]
HOT DEALS (closing within 14 days)
-----------------------------------
1. [Deal Name] — $[amount]
Stage: [stage] | Close: [date] | Last activity: [date]
Next step: [specific action]
2. ...
DEALS AT RISK
--------------
1. [Deal Name] — $[amount]
Issue: [No activity since X / Close date overdue by X days / Contact unresponsive]
Recommended action: [specific next step]
2. ...
PIPELINE SUMMARY
-----------------
Total open deals: X | Total value: $X
Closing this month: X deals ($X)
Closing this quarter: X deals ($X)
Deals needing cleanup: X (no activity 30+ days)
ACTION ITEMS FROM YESTERDAY'S MEETINGS
---------------------------------------
Meeting: [title] with [participants]
[ ] [Action item 1] — due [date]
[ ] [Action item 2] — due [date]
Meeting: [title] with [participants]
[ ] [Action item 1] — due [date]
PENDING RESPONSES (awaiting JP's reply)
----------------------------------------
1. [Name] ([Company]) — replied [X hours/days ago]
Context: [deal/topic]
Priority: [URGENT/OVERDUE/NORMAL]
2. ...
NEW LEADS (last 48 hours)
--------------------------
1. [Name] — [Title] at [Company]
Source: [HubSpot/Apollo]
Recommended action: [research/add to sequence/schedule call]
2. ...
OUTREACH STATUS
----------------
Active sequences: X
[Sequence name]: X contacts enrolled, X replied, X bounced
TODAY'S PRIORITIES (ranked)
============================
1. [FIRE/TODAY] [Specific action + context]
2. [TODAY] [Specific action + context]
3. [TODAY] [Specific action + context]
4. [THIS WEEK] [Specific action + context]
5. [THIS WEEK] [Specific action + context]Deal Hygiene Checks (run weekly or on request)
When the user asks for a "pipeline cleanup" or "deal hygiene review", run these additional checks:
Deals Missing Data
Search for deals with empty required fields:
- No amount set
- No close date
- No associated contact
- No deal owner
- No notes or activity ever logged
Stage Duration Anomalies
Flag deals sitting in the same stage longer than average:
- Discovery/Qualification: >14 days is slow
- Proposal/Negotiation: >21 days is slow
- Contract: >14 days is slow
Orphaned Contacts
Contacts with no associated deal and no activity in 30+ days. Recommend: add to nurture sequence or archive.
Duplicate Detection
Search for contacts with similar names or same email domain + similar company name.
CRM Hygiene Best Practices (reference)
Based on industry research:
- Daily (2 min): Update deal stages, log activities, respond to pending emails
- Weekly (15 min): Review pipeline, close dead deals, clean stale contacts, check sequence performance
- Monthly (30 min): Audit data completeness, review conversion rates by stage, update ICP criteria, archive cold leads
- Quarterly (1 hour): Full pipeline audit, stage duration analysis, win/loss analysis, process refinement
Error Handling
- If HubSpot returns no deals: say "No open deals found. Either the pipeline is empty or the owner ID filter needs adjustment."
- If Fireflies returns no meetings: say "No meetings recorded in the last 48 hours."
- If Apollo is unreachable: skip the outreach section, note it's unavailable
- If any MCP tool fails: continue with available data, note which sources were unavailable at the top of the briefing
- Never skip the briefing because one source failed. Deliver what you have.
Tone
- Direct. No pleasantries, no "Good morning JP!"
- Data-first. Lead with numbers, not narrative
- Actionable. Every section ends with what to do, not just what happened
- Honest. If the pipeline is thin, say so. If deals are dying, flag it
- Concise. The whole briefing should be readable in under 3 minutes
Other versions26 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 26
- mattpocock/skills★ 309ksame name
- vinvcn/mattpocock-skills-zh-CN★ 5.5ksame name
- devcxl/mattpocock-skills-zh★ 522same name
- getnao/sylph★ 195same name
- runxhq/runx★ 97same name
- alebgl77/claude-inc★ 21same name
- Hassaan146/claude-skills★ 18same name
- FerroxLabs/murage★ 17same name
- calven-ai/marketing-as-code★ 9same name
- caterpi11ar/giclaw★ 9same name
16 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use setup-ts-deep-modules, claude-handoff and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
liufeng1976Skillsetup-ts-deep-modules
Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files. User-invoked.
Also in 7 projects that use this
ryotaroh180105Skillclaude-handoff
Hand the current conversation off to a fresh background agent that picks up the work immediately.
Also in 7 projects that use this
RoentekSkillloop-me
Grill me about specs for the workflows I want to build, within this workspace.
Also in 7 projects that use this
LesaniSkillwriting-beats
Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument.
Also in 7 projects that use this
LesaniSkillwriting-fragments
Grilling session that mines the user for fragments — heterogeneous nuggets of writing (claims, vignettes, sharp sentences, half-thoughts) — and appends them to a single document as raw material for a future article. Use when the user wants to develop ideas before imposing structure, or mentions "fragments", "ideate", or "raw material" for writing.
Also in 7 projects that use this
simo97Skillmigrate-to-shoehorn
Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data.
Also in 7 projects that use this
- +1 more from Lesani
In this repository31 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- codex-reviewSkill
- conference-prepSkill
- doc-conversion-qaSkill
- eligibility-checkSkill
- fact-checkSkill
- google-adsSkill
- icp-researchSkill
- linkedin-carousel-builderSkill
- mac-performance-triageSkill
- meeting-followupSkill
- meeting-prepSkill
- mobile-auditSkill
- one-pager-builderSkill
- ops-metricsSkill
- pmf-pulseSkill
- post-conference-fupSkill
- post-conference-insightsSkill
- postmortemSkill
- prior-auth-review-skillSkill
- product-insightsSkill
- seoSkill
- site-reviewSkill
- solum-health-brandSkill
- task-triageSkill
- team-feedbackSkill
- uscis-petition-reviewSkill
- weekly-retroSkill
- weekly-reviewSkill
- win-lossSkill
- x-healthcare-postsSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

