Skip to content
Back to skills

End Of Month Summary

ASecurity

Summarize monthly GitHub activity, Slack activity, colleague activity, and generate a monthly highlights report.

  • 10 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
toolsbashgit

Works with

  • cli

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add tomzx/agents --skill end-of-month-summary --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of End Of Month Summary?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for End Of Month Summary
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tomzx-end-of-month-summary/badge)](https://www.skillsdirectory.com/skills/tomzx-end-of-month-summary)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: end-of-month-summary
description: Summarize monthly GitHub activity, Slack activity, colleague activity, and generate a monthly highlights report.
---

BASE_DIR=!`~/.agents/scripts/get-env NOTES_DIR`
TODAY=!`date +%Y-%m-%d`
YEAR=!`date +%Y`
MONTH=!`date +%m`
MONTH_NAME=!`date +%B`
MONTH_START=!`date -d "$(date +%Y-%m-01)" +%Y-%m-%d`
MONTH_START_MINUS_ONE=!`date -d "$MONTH_START - 1 day" +%Y-%m-%d`
NEXT_MONTH_START=!`date -d "$(date +%Y-%m-01) + 1 month" +%Y-%m-%d`

# Generate End-of-Month Summary

Produces a monthly digest covering personal GitHub activity, personal Slack activity, a monitored Slack channel, each colleague's contributions, outstanding action items, and thanks from the month.

## Prerequisites

- `SLACK_TOKEN`, `SLACK_COOKIE`, and `SLACK_USER` in `.env` (same credentials used by `collect_individual_threads.py`)
- `gh` CLI authenticated
- `summarize-github-activity` script at `$HOME/repos/git/personal-automation/others/summarize-github-activity`
- `NOTES_DIR` environment variable set (resolved via `~/.agents/scripts/get-env NOTES_DIR`)
- `COLLEAGUES` environment variable set (resolved via `~/.agents/scripts/get-env COLLEAGUES`)
- `HELP_ML_CHANNEL_ID` environment variable set (resolved via `~/.agents/scripts/get-env HELP_ML_CHANNEL_ID`; Slack channel id for `#help-ml-infrastructure`)
- `~/.agents/scripts/get-env` utility available

## Pipeline

```
GitHub Activity --> {BASE_DIR}/{YEAR}/{MONTH}/github.md
Slack Activity  --> {BASE_DIR}/{YEAR}/{MONTH}/slack.md
#help-ml-infra  --> {BASE_DIR}/{YEAR}/{MONTH}/slack.help-ml-infrastructure.md
Colleagues      --> {BASE_DIR}/{YEAR}/{MONTH}/slack/{COLLEAGUE}.md (parallel)
                    {BASE_DIR}/{YEAR}/{MONTH}/slack.colleagues.md
Action Items    --> {BASE_DIR}/{YEAR}/{MONTH}/action-items.md
Thanks          --> {BASE_DIR}/{YEAR}/{MONTH}/thanks.md
```

## Steps

### 1. Summarize GitHub Activity

```
$HOME/repos/git/personal-automation/others/summarize-github-activity tomzx {MONTH_START} {TODAY} Shopify,shop
```

Write output to `{BASE_DIR}/{YEAR}/{MONTH}/github.md`.

### 2. Summarize Personal Slack Activity

Summarize `.slack.md` files in `{BASE_DIR}/{YEAR}/{MONTH}/` from the month ending {TODAY}. Write to `{BASE_DIR}/{YEAR}/{MONTH}/slack.md`:

```markdown
# Summary

A summary of the key conversations for the month.

# Key Conversations

A list of the key conversations (including a link to each conversation).

# Action Items Generated

A list of the action items generated.
```

### 3. Summarize #help-ml-infrastructure Channel

Fetch messages from the #help-ml-infrastructure Slack channel for the full month using `build_thread_kb.py`:

```bash
HELP_ML_CHANNEL_ID=`~/.agents/scripts/get-env HELP_ML_CHANNEL_ID`

uv run skills/slack-kb-channel/build_thread_kb.py \
  --channel $HELP_ML_CHANNEL_ID \
  --month {YEAR}-{MONTH} \
  --output {BASE_DIR}/{YEAR}/{MONTH}/thread-fetch-help-ml.jsonl
```

Read the resulting JSONL and summarize into `{BASE_DIR}/{YEAR}/{MONTH}/slack.help-ml-infrastructure.md`:

```markdown
# <Issue title> (one entry per issue)

## Link
## Participants
## Issue
## Key events
## Outcome

# Overall

## Response Quality
## Common Issues
## Action Items
```

### 4. Summarize Colleague Activity (parallel)

Resolve the colleagues list:
```
~/.agents/scripts/get-env COLLEAGUES
```

For each person in the list, run as a subagent in parallel using `collect_individual_threads.py`. Slack's `after:` is exclusive, so pass the day before `MONTH_START` as `--after` and `NEXT_MONTH_START` as `--before`:

```bash
uv run skills/slack-kb-individual/collect_individual_threads.py \
  --user <COLLEAGUE> \
  --after {MONTH_START_MINUS_ONE} --before {NEXT_MONTH_START} \
  -o {BASE_DIR}/{YEAR}/{MONTH}/slack/{COLLEAGUE}.jsonl
```

Read each JSONL and summarize into `{BASE_DIR}/{YEAR}/{MONTH}/slack/{COLLEAGUE}.md`, listing all channels they contributed to.

Aggregate into `{BASE_DIR}/{YEAR}/{MONTH}/slack.colleagues.md`.

### 5. Summarize Action Items

Review all notes from the month in `{BASE_DIR}/{YEAR}/{MONTH}/` and extract pending action items. Write to `{BASE_DIR}/{YEAR}/{MONTH}/action-items.md`.

### 6. Summarize Thanks

Compile thanks from the month's notes and Slack activity. Write to `{BASE_DIR}/{YEAR}/{MONTH}/thanks.md`.

## Example Usage

**Scenario 1: Standard month-end run**
```
/end-of-month-summary
```
Processes {MONTH_NAME} {YEAR}. Creates `{NOTES_DIR}/{YEAR}/{MONTH}/` with all output files.

**Scenario 2: Multiple colleagues**
With 4 colleagues in `COLLEAGUES`, 4 subagents run in parallel to fetch their Slack activity, then results are merged into `slack.colleagues.md`.

**Scenario 3: Quiet month**
Few GitHub events and minimal Slack. Summaries are brief; `action-items.md` notes "No outstanding action items."

## Useful Commands Reference

| Command | Description |
|---|---|
| `~/.agents/scripts/get-env COLLEAGUES` | Resolve the list of colleagues to summarize |
| `~/.agents/scripts/get-env NOTES_DIR` | Resolve the notes directory path |
| `date +%Y-%m-%d` | Get today's date in ISO format |
| `date +%m` | Get the current month number |
| `date +%B` | Get the current month name |
| `date +%Y` | Get the current year |
| `date -d "$(date +%Y-%m-01)" +%Y-%m-%d` | Get the first day of the current month |
| `$HOME/repos/git/personal-automation/others/summarize-github-activity <user> <from> <to> <exclude>` | Summarize GitHub activity for a user |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…