From status-skill
Generate a weekly status report for your manager by analyzing Google Calendar events, sent emails, Google Meet transcripts, Google Docs/Slides activity, GitHub commits/PRs, and Slack messages. Use this skill whenever the user mentions status reports, weekly updates, manager updates, what they worked on this week, or wants to summarize their work activity. Run with /status-skill for the past week, or /status-skill 2026-02-23 2026-03-01 for a custom date range.
How this skill is triggered — by the user, by Claude, or both
Slash command
/status-skill:status-skillThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate a status report by combining data from six sources: Google Calendar, Gmail, Google Meet transcripts, Google Docs/Slides activity, GitHub, and Slack. The Google Workspace data comes from an Apps Script web app that the user opens in their browser and pastes the JSON output. GitHub data is fetched directly via `gh` CLI. Slack data is fetched automatically via MCP tools when the Slack MCP...
Generate a status report by combining data from six sources: Google Calendar, Gmail, Google Meet transcripts, Google Docs/Slides activity, GitHub, and Slack. The Google Workspace data comes from an Apps Script web app that the user opens in their browser and pastes the JSON output. GitHub data is fetched directly via gh CLI. Slack data is fetched automatically via MCP tools when the Slack MCP server is configured.
This separation exists because corporate SSO prevents direct API calls to Google Workspace from the CLI, while GitHub's gh CLI and the Slack MCP server work natively.
scripts/config/apps-script-url.txt (save the deployed URL here, get it from a teammate)scripts/fetch-github.js (requires gh CLI authenticated via gh auth login)references/data-format.md (full JSON schema for all data sources -- read this if you need to understand a specific field)Check memory for all four values first. If any are missing, ask the user and then suggest they save all of them to memory in one go so future runs skip this phase entirely.
scripts/config/apps-script-url.txt exists. If not, ask the user to get the deployed web app URL from a teammate (it's shared per-org via Slack or team docs) and save it:
echo "<url>" > scripts/config/apps-script-url.txt
After gathering any missing values, prompt: "Want me to save your name, email, GitHub username, and Apps Script URL to memory so you don't have to enter them again?"
Parse $ARGUMENTS for optional start and end dates. Default to the past week (Monday through Friday) if none provided.
Ask the user to open this URL in their browser and paste the JSON output:
<apps-script-url>?start=YYYY-MM-DD&end=YYYY-MM-DD&user=<email>&userName=<Full%20Name>
Save the pasted JSON to /tmp/status-report-data.json.
The JSON contains these top-level keys. Each section may have an error field if that data source failed -- note any errors but continue with available data.
metadata -- date range, user info, generation timestampcalendar -- total, totalMeetingMinutes, and events[] array with summary, start, end, durationMinutes, attendees[], organizer, isRecurring, isAllDayemail -- sent[] array with subject, to, date, snippet; plus received_summary with total count and top_senders[]transcripts -- transcripts[] array with meeting_title, doc_url, participants[], user_contributions[] (each has timestamp and text)documents -- documents[] array with name, type (doc/slides), url, isOwner, wasCreatedThisWeekRun the GitHub fetch script:
cd <skill-directory>/scripts && node fetch-github.js --user <github-username> --start YYYY-MM-DD --end YYYY-MM-DD
The script prints the output file path (default /tmp/github-activity.json). Read that file. It contains:
commits -- total_count, repos[] (full org/repo names), details[] with repo, message, date, urlpull_requests_opened, pull_requests_merged, pull_requests_reviewed -- each with total_count and details[]issues_opened, issues_closed -- each with total_count and details[]repositories_created -- any new reposCheck if the Slack MCP server is available by calling mcp__slack__whoami. If it fails or the tool is not available, skip Slack data collection and note the gap. The whoami call returns the authenticated user's Slack username.
If the Slack MCP is available, run three searches (use the date range from Phase 1, adding one day to the end date since Slack's before: is exclusive). Set limit to 200 for each.
Messages sent by the user: Call mcp__slack__search_messages with query from:me after:YYYY-MM-DD before:YYYY-MM-DD.
Messages sent to the user: Call mcp__slack__search_messages with query to:me after:YYYY-MM-DD before:YYYY-MM-DD. This captures DMs and direct messages others sent to the user.
Messages mentioning the user: Call mcp__slack__search_messages with query @username after:YYYY-MM-DD before:YYYY-MM-DD where username is from the whoami result. This captures channel messages where others tagged the user.
Deduplicate across all three result sets (the same message can appear in multiple searches).
Save the combined Slack results to /tmp/slack-activity.json for reference.
Note: The Slack MCP uses browser session tokens, not an OAuth app. If the tokens have expired, the API calls will fail. Tell the user to refresh their tokens (see README) and skip Slack data for this run.
myorg/my-project, not just my-project)After analyzing each source individually, look for connections across Google Workspace and Slack data. The goal is to build a richer picture of each work item by linking related signals from different sources.
Calendar to Slack: Match meeting titles and attendee names against Slack channel names, message content, and participants. A calendar event "Acme Corp Migration Sync" likely has related Slack messages in a channel or thread mentioning "Acme" or "migration". Slack follow-ups after a meeting often contain action items and decisions that the calendar event alone does not capture.
Email to Slack: Match email subjects and recipients against Slack messages. The same topic is often discussed in both channels. Look for cases where an email thread and a Slack thread cover the same decision or deliverable.
Transcripts to Slack: Match transcript meeting titles and discussion topics against Slack threads. Meeting transcripts capture what was said in the meeting; Slack captures the before-and-after context (prep, follow-up, action items).
Documents to Slack: Match document names and links against Slack messages. When a doc or deck is shared in Slack, the surrounding conversation often explains why it was created and who it's for.
GitHub to Slack: Match repo names, PR titles, and commit messages against Slack messages. Slack often has the discussion behind a code change (why it was needed, who requested it, what it unblocked).
Build a list of correlated work items: topics or projects that appear in two or more data sources. For each correlated item, note which sources mention it and what each source adds. These correlated items are the strongest candidates for status report bullets because they represent substantive work with multiple touchpoints.
Also note Slack-only items: topics that appear in Slack but not in any Google Workspace or GitHub data. These may represent ad-hoc help, troubleshooting, or conversations that are worth mentioning but would otherwise be missed.
Present a brief summary of what was found, then ask targeted questions. The goal is to fill gaps that data alone can't capture -- the user knows the significance and context better than any data source.
Wait for the user to respond before proceeding.
If the Slack MCP server was not available in Phase 1, fall back to manual collection. Focus on the 3-5 most significant topics to avoid overwhelming the user.
For key projects/topics identified from the analysis:
For meetings that likely had Slack follow-up:
Extract decisions, updates, and action items from pasted messages.
If Slack data was already fetched automatically in Phase 1, skip this phase entirely.
Generate the report in two formats:
Plain text -- Output inside a fenced code block (```text) so the user gets a copy button. Keep the report as plain text with no markdown formatting (#, **, backticks) inside the report body.
Google Docs HTML -- Also generate an HTML version using the template at templates/status-report.html. Read the template, replace {{TITLE}} with the report header (e.g., "Jane Smith - Week of Feb 23") and {{CONTENT}} with the report body converted to HTML:
<p class="report-header">...</p><p> tag. Wrap links in <a href="..."> tags.documents: label becomes <p class="section-label">documents:</p> followed by a <ul> list where each document is an <li> with its link as an <a> tag.development: label becomes <p class="section-label">development:</p> followed by a <ul> list where each repo entry is an <li> with the repo name wrapped in <span class="dev-repo">.~/Desktop/status-report-YYYY-MM-DD.html (using the end date).The HTML version uses Red Hat fonts and styling that paste cleanly into Google Docs: open the HTML file in a browser, select all (Cmd+A), copy (Cmd+C), and paste into Google Docs (Cmd+V). Formatting is preserved.
[User's Full Name] - Week of [Month Day]
[Activity bullet] - include context on who, why, and link to artifacts where available
[Activity bullet] - note WIP items inline (e.g., "WIP - deck in progress")
[Activity bullet] - name customers, partners, and teammates involved
documents:
[Doc/Slides name] - [purpose, e.g., "customer pitch deck for Acme Corp"] (link)
development:
[org/repo-name]: [Outcome-focused description of what was done and why]
[org/repo-name]: [Another outcome]
Jane Smith - Week of Feb 23
Internal Nasdaq Sync [Teleport] - helping out teammate on migration blockers
Enablement sync with Pat Lee to review AIOps training delivery plan
Helping Dana Kim with Acme Corp (as a customer) - networking architecture questions, looping in the database team
Webinar planning sync - Q1 AIOps webinar tracker
Internal AI training coordination with Alex Chen - product pitch prep
documents:
AIOps Workshop Deck - updated exercises for platform v6.18 (link)
Q1 Planning Doc - created new quarterly objectives tracker (link)
development:
org/api-gateway: Resolved two critical issues with authentication handling and CI build failures, updated entrypoint script and project docs.
org/workshops: Updated workshop exercises to reflect platform version migration from 6.15 to 6.18.
org/product-demos: Cross-team code review for updates to the demo bootstrap branch.
org/ssl-certs, org/mcp-tools, org/service-config: Applied minor configuration changes and documentation updates across these projects.
myorg/my-project not my-projectscripts/config/apps-script-url.txtgh CLI is not authenticated, skip GitHub activity and note the gaperror fields), proceed with what's available and note gapsFetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.
npx claudepluginhub ansible-tmm/status-skill --plugin status-skill