Good morning
Turns Claude Code into your sales team — 8 slash-command skills for pipeline tracking, daily rituals, call analysis, lead scoring, and cold outreach. Built for 0-to-1 founders.
npx -y skills add himanshusaleria/gtm-engine --skill good-morningAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 14 stars14 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
11.6 KB, as published. Nobody here has run it
Good Morning Briefing
Daily morning briefing that pulls calendar, tasks, pipeline, and outreach data into one view.
Invocation
/good-morning— Full morning briefing/good-morning --quick— Calendar + tasks only/good-morning --team— Only team outreach audit
Prerequisites
- Linear MCP installed and connected
- Google Workspace MCP (for calendar) — optional but recommended
config/config.yamlexists (run/setupfirst)
Instructions
Parse the argument (if any) from $ARGUMENTS to determine mode:
- If
$ARGUMENTScontains--quick→ quick mode - If
$ARGUMENTScontains--team→ team-outreach-only mode - Otherwise → full mode
First: Read config/config.yaml (relative to project root) to load all configuration. Extract:
config.linear.action_team— the team name for action tasks (e.g., "GTM")config.linear.pipeline_team— the team name for deal tracking (e.g., "Sales")config.linear.default_label— label applied to engine-created tasksconfig.linear.pipeline_stages— list of pipeline stage namesconfig.team— list of team members with roles and Linear user IDsconfig.ritual.labels— label names for daily-3, daily-2, parking-lotconfig.ritual.meaningful_count— number of meaningful tasks (default 3)config.ritual.light_count— number of light tasks (default 2)config.integrations.outreach_sheet— outreach spreadsheet settingsconfig.integrations.google_workspace.enabled— whether calendar is available
Identify the default assignee = the team member with is_default_assignee: true.
Resolve Linear team IDs (required): Some Linear MCP servers (e.g., linear-mcp-server) hang indefinitely when issue searches are made without a teamId. Before any issue query:
- Call
mcp__linear__list_teamsonce - Match
action_teamandpipeline_teamnames to their UUIDs - Store them as
{action_team_id}and{pipeline_team_id}for the rest of the session - If either name cannot be matched, surface a clear error and stop — do not run unscoped Linear searches
Every Linear issue query below MUST include teamId (the UUID).
Step 0: Morning Quote
Start the briefing with a motivating quote. Pick a quote that is energizing, action-oriented, and relevant to building something from scratch — entrepreneurship, sales, persistence, courage, or doing hard things. Rotate quotes so the user doesn't see the same one twice in a row. Draw from founders, athletes, philosophers, writers — anyone whose words light a fire.
Format:
> "{quote}"
> — {attribution}
Step 1: Get today's date and calendar (skip in --team mode)
- Use
mcp__google-workspace__time_getCurrentDateto get today's date- If Google Workspace MCP is not installed or
config.integrations.google_workspace.enabledis false, use the current date from context and skip the calendar section
- If Google Workspace MCP is not installed or
- Use
mcp__google-workspace__calendar_listEventswithcalendarId: "primary",timeMin= start of today (00:00:00 in local TZ),timeMax= end of today (23:59:59 in local TZ) - Format as a table:
| Time | Event | - If calendar is empty, say "No events scheduled"
Step 2: Tasks due today + overdue (skip in --team mode)
Using the action team name from config:
- Use
mcp__linear__list_issueswithassignee: "me",teamId: "{action_team_id}",state: "In Progress"— show all in-progress tasks - Use
mcp__linear__list_issueswithassignee: "me",teamId: "{action_team_id}",state: "Todo"— show all todo tasks - Use
mcp__linear__list_issueswithassignee: "me",teamId: "{action_team_id}",state: "Backlog"— check for any with today's due date - From all results, separate into:
- Tasks due today — due date matches today
- Overdue tasks — due date is before today
- In Progress (no due date) — currently being worked on
- Format each section as:
| Task | Priority | Status | Due |
Step 2.5: Today's 3+2 Check (skip in --team mode)
Read the ritual label names from config.ritual.labels (meaningful label, light label, parking lot label).
Read the meaningful count (default 3) and light count (default 2) from config.ritual.
Show the tasks planned last night for today:
- Use
mcp__linear__list_issueswithteamId: "{action_team_id}",assignee: "me",label: "{meaningful_label}"— filter to tasks with due date = today - Use
mcp__linear__list_issueswithteamId: "{action_team_id}",assignee: "me",label: "{light_label}"— filter to tasks with due date = today - Display:
### Today's {meaningful_count}+{light_count} **Meaningful:** 1. [ ] {task} 2. [ ] {task} 3. [ ] {task} **Light:** 1. [ ] {task} 2. [ ] {task} - If fewer than
meaningful_countmeaningful tasks are tagged for today, flag: "Only X meaningful tasks planned for today. Want to add more?" - Quick confirm: "Good to go, or want to adjust?"
- If user wants to adjust, handle adds/swaps:
- New tasks → create in {action_team} Backlog with correct label (meaningful or light), due date today, assigned to the default assignee
- Also add the default label from config
- Swapped out tasks → remove the meaningful/light label and clear due date
- If no meaningful or light tasks exist for today (system was not used last night), note: "No {meaningful_count}+{light_count} was planned last night. Want to plan now?" — if yes, suggest tasks using the same logic as good-night Step 8
Monday bonus: On Mondays, also surface ALL parking lot items:
- Use
mcp__linear__list_issueswithteamId: "{action_team_id}",label: "{parking_lot_label}",state: "Backlog" - Display full parking lot table
- Ask: "Weekly parking lot review — which to promote, drop, or keep?"
Streak display:
- Read
memory/daily_streak.md(relative to project root) - Show current streak: "Streak: X days with {meaningful_count}/{meaningful_count} meaningful"
- If the streak file does not exist yet, show "No streak data yet — it will start tracking tonight."
Nudge system: Check if any template files in my-context/ are empty or do not exist:
my-context/icp-definition.md→ "You haven't filled your ICP yet. Run /setup --icp to do it — takes 5 min."my-context/persona-pain-map.md→ "Your persona map is empty. Run /setup --personas."my-context/company-overview.md→ "Company overview isn't filled in. Run /setup --company."my-context/signal-playbook.md→ "No signal playbook set up. Run /setup --signals."
Only show ONE nudge per session (pick the first empty one). Stop nudging once all are filled.
If --quick mode, STOP HERE. Output calendar + tasks + 3+2 sections and finish.
Step 3: Pipeline check (full mode only)
Using the pipeline team name and pipeline stages from config:
- Use
mcp__linear__list_issueswithteamId: "{pipeline_team_id}",state: "POC"— active POCs (only if "POC" is in pipeline_stages) - Use
mcp__linear__list_issueswithteamId: "{pipeline_team_id}",state: "Agreement"— deals in agreement (only if "Agreement" is in pipeline_stages) - Use
mcp__linear__list_issueswithteamId: "{pipeline_team_id}",state: "Demo Scheduled"— upcoming demos (only if "Demo Scheduled" is in pipeline_stages) - If none of those specific stages exist in config, query the last 3 stages before "Closed Won" in the pipeline_stages list
- Format as:
| Deal | Stage | Owner | Next Action | - For each deal, note any pending action team follow-up tasks
Step 4: Team Outreach Audit (full mode and --team mode)
Only run this step if config.team contains at least one member with role: "sdr" AND config.integrations.outreach_sheet.enabled is true. Otherwise skip entirely.
Find the SDR team member(s) from config. Use their linear_user_id for assignment and the config.integrations.outreach_sheet.spreadsheet_id for sheet access.
Outreach sheet audit:
- Use
mcp__google-workspace__sheets_getRangewith the configured spreadsheet ID, range based on the sheet's column mapping from config - Parse the data:
- Count profiles added this week (check date column against current week's Monday)
- Date formats vary — check for:
"17 Feb","18Feb"(no space), and ISO"2026-03-04"formats - Count by status: "Connection Pending", "Msg Reached out", "Replied", etc.
- Flag stale profiles: status is "Connection Pending" and date added is >7 days ago
- Flag missing dates: any row with a name but no date
- List specific names for any flagged issues
SDR daily task check:
- Use
mcp__linear__list_issueswithassignee: "{sdr_linear_user_id}",teamId: "{action_team_id}",state: "Backlog"orstate: "Todo" - Check if there is already a task for today's outreach (title contains today's date or "daily outreach" with today's due date)
- If NOT, create one:
mcp__linear__save_issue: title: "Daily outreach — reach out to 5 new profiles ({today's date})" teamId: "{action_team_id}" assignee: "{sdr_linear_user_id}" labels: ["{default_label}"] state: "Backlog" dueDate: "{today's date}" description: | Daily outreach task. Target: 5 new connection requests/messages today. Check the outreach tracking sheet for pending profiles. - If a task already exists, note it and skip creation
If --team mode, STOP HERE. Output only the team outreach audit section.
Step 5: Follow-ups due (full mode only)
- Use
mcp__linear__list_issueswithteamId: "{action_team_id}",assignee: "me",label: "{default_label}"— check due dates - Filter to tasks due today or overdue
- Format as:
| Follow-up | Lead | Due | Status |
Step 6: Suggested Priority Order (full mode only)
Based on all gathered data, suggest a priority-ordered list:
- Overdue tasks first
- Calendar meetings that need prep
- Active deal follow-ups (late pipeline stages)
- Tasks due today
- New outreach/prospecting — only after due follow-ups are cleared (due follow-ups beat new sends)
Output Format
## Good Morning — {date}
### Calendar
| Time | Event |
|------|-------|
| ... | ... |
### Tasks — In Progress
| Task | Priority | Due |
|------|----------|-----|
| ... | ... | ... |
### Tasks — Due Today
| Task | Priority | Status |
|------|----------|--------|
| ... | ... | ... |
### Today's {meaningful_count}+{light_count}
**Meaningful:**
1. [ ] {task}
2. [ ] {task}
3. [ ] {task}
**Light:**
1. [ ] {task}
2. [ ] {task}
**Streak: X days with {meaningful_count}/{meaningful_count} meaningful**
### Overdue
| Task | Priority | Due | Days Late |
|------|----------|-----|-----------|
| ... | ... | ... | ... |
### Pipeline — Active Deals
| Deal | Stage | Next Action |
|------|-------|-------------|
| ... | ... | ... |
### Team Outreach Audit
- Profiles added this week: X
- Connection pending: X (Y stale >7 days)
- Messages sent: X
- Issues: [list specific names and problems]
- Daily task: [Created / Already exists]
### Follow-ups Due
| Follow-up | Lead | Due |
|-----------|------|-----|
| ... | ... | ... |
### Suggested Priority Order
1. ...
2. ...
3. ...
Important Notes
- Always use actual data — do not fabricate or assume
- If Google Workspace MCP is not installed, skip the calendar section and note it
- If outreach sheet is not configured (
enabled: false), skip team audit entirely - If a sheet read fails, note the error and continue with other sections
- If calendar is empty, say "No events scheduled"
- Flag anything that looks like it needs immediate attention with a warning
- Keep the output scannable — tables over paragraphs
- All file paths are relative to the project root unless otherwise stated