| name | wsr-generator |
| description | Generate professional weekly status report entries from git history and Azure DevOps activity. Use when asked for: wsr, status, weekly report, status entry, what did I complete, status update, generate report, weekly summary, send wsr, send status. Requires: azure-devops skill configured (.ado/config.json), git repository. |
Weekly Status Report Generator
Generate professional WSR entries from git history and Azure DevOps activity with:
- Live links to work items and commits
- Audience-based detail levels (executive, standard, technical)
- Multiple output formats (Markdown, HTML)
- Professional status indicators (Unicode symbols, styled badges)
- Multi-channel notifications (Email, Teams, Slack)
Quick Start
When user asks for their WSR or to send a status report:
# 1. Initialize WSR (if not done)
python3 skills/wsr-generator/scripts/wsr_config.py init
# 2. Gather and import data (Claude orchestrates - see Workflow below)
# 3. Generate report
python3 skills/wsr-generator/scripts/wsr_report.py generate
# 4. Send to configured channel
python3 skills/wsr-generator/scripts/wsr_notify.py send
Workflow (Claude Orchestration)
This skill uses Claude as the orchestrator. Data gathering happens via the azure-devops skill and git commands, then gets imported into WSR.
Step 1: Gather Work Items (via azure-devops skill)
Query work items changed this week:
python3 skills/azure-devops/scripts/query-work-items.py --preset changed-this-week --format json
Or completed items:
python3 skills/azure-devops/scripts/query-work-items.py --preset completed-this-week --format json
Step 2: Gather Git Commits
Get commits from this week:
git log --since="Monday" --author="$(git config user.email)" \
--pretty=format:'{"sha":"%H","short_sha":"%h","subject":"%s","author":"%an","date":"%ai"}' \
--numstat
Or simpler format:
git log --since="Monday" --oneline --author="$(git config user.email)"
Step 3: Transform and Import
Transform the gathered data into WSR entry format and import:
# Claude creates JSON and pipes to import
echo '{"entries": [...]}' | python3 skills/wsr-generator/scripts/wsr_entries.py import
Or use a file:
python3 skills/wsr-generator/scripts/wsr_entries.py import --file entries.json
Step 4: Generate Report
python3 skills/wsr-generator/scripts/wsr_report.py generate
Step 5: Send Notification
# Uses default channel from config
python3 skills/wsr-generator/scripts/wsr_notify.py send
# Or specify channel
python3 skills/wsr-generator/scripts/wsr_notify.py send --channel teams
Entry JSON Format
When importing entries, use this JSON structure:
{
"entries": [
{
"title": "Implemented user authentication",
"status": "Completed",
"priority": "High",
"domain": "Development",
"objective": "Enable secure user login for the application",
"business_impact": "Users can now securely access their accounts",
"next_steps": "Add password reset functionality",
"work_items": [
{
"id": 1234,
"title": "Implement login API",
"type": "Task",
"state": "Done"
}
],
"commits": [
{
"sha": "abc123def456",
"short_sha": "abc123d",
"subject": "feat: add JWT authentication",
"author": "user@example.com",
"date": "2025-12-10",
"insertions": 150,
"deletions": 20
}
]
}
]
}
Entry Fields
| Field | Required | Description |
|---|---|---|
title |
Yes | Max 80 chars, action-oriented |
status |
Yes | Completed, In Progress, Blocked, On Hold |
priority |
No | High, Medium, Low (default: Medium) |
domain |
No | Development, Architecture, Infrastructure, Security, Documentation, Support |
objective |
No | Why this work was undertaken |
business_impact |
No | Value delivered to users/business |
next_steps |
No | Follow-up actions planned |
work_items |
No | Array of linked ADO work items |
commits |
No | Array of linked git commits |
Prerequisites
- Azure DevOps configured:
.ado/config.jsonmust exist (via azure-devops skill) - Git repository: Must be inside a git repo with commit history
- WSR initialized: Run
wsr_config.py initfirst
Entry Management
Add Entry Manually
python3 skills/wsr-generator/scripts/wsr_entries.py add \
--title "Implemented new feature" \
--status Completed \
--priority High \
--domain Development \
--work-items 1234 1235
List Entries
python3 skills/wsr-generator/scripts/wsr_entries.py list
Remove Entry
python3 skills/wsr-generator/scripts/wsr_entries.py remove --id abc123
Export Entries
python3 skills/wsr-generator/scripts/wsr_entries.py export
Clear All Entries
python3 skills/wsr-generator/scripts/wsr_entries.py clear --confirm
Report Generation
Standard Report
python3 skills/wsr-generator/scripts/wsr_report.py generate
Executive Summary
python3 skills/wsr-generator/scripts/wsr_report.py generate --audience executive
Technical Detail
python3 skills/wsr-generator/scripts/wsr_report.py generate --audience technical
HTML Format
python3 skills/wsr-generator/scripts/wsr_report.py generate --format html
Output to Stdout
python3 skills/wsr-generator/scripts/wsr_report.py generate --stdout
Notifications
Send reports directly to Email, Microsoft Teams, or Slack.
Quick Send (Default Channel)
# Uses default_channel from .wsr/notify.json
python3 skills/wsr-generator/scripts/wsr_notify.py send
Send to Specific Channel
python3 skills/wsr-generator/scripts/wsr_notify.py send --channel teams
python3 skills/wsr-generator/scripts/wsr_notify.py send --channel email
python3 skills/wsr-generator/scripts/wsr_notify.py send --channel slack
Configure Channel
python3 skills/wsr-generator/scripts/wsr_notify.py configure teams
python3 skills/wsr-generator/scripts/wsr_notify.py configure email
python3 skills/wsr-generator/scripts/wsr_notify.py configure email-cli
Show Configuration
python3 skills/wsr-generator/scripts/wsr_notify.py show
Default Channel
Set default_channel in .wsr/notify.json:
{
"default_channel": "teams",
...
}
Status Indicators
Professional Unicode symbols used throughout reports:
| Status | Symbol | Badge |
|---|---|---|
| Completed | ● | ● DONE |
| In Progress | ◐ | ◐ IN PROGRESS |
| Blocked | ■ | ■ BLOCKED |
| On Hold | ○ | ○ ON HOLD |
| Priority | Symbol | Badge |
|---|---|---|
| High | ▲ | ▲ HIGH |
| Medium | ● | ● MED |
| Low | ▽ | ▽ LOW |
Audience Levels
| Level | Description | Sections Included |
|---|---|---|
| executive | High-level for leadership | Objective, Business Impact, Next Steps |
| standard | Balanced for stakeholders | + Solution, Technical Impact |
| technical | Detailed for engineering | + All sections, commit details, code stats |
Directory Structure
.wsr/
├── config.json # WSR configuration
├── notify.json # Notification settings
├── data/
│ └── 2025-W50-entries.json # Weekly data
└── reports/
├── 2025-W50-draft.md # Draft reports
└── 2025-W50-final.md # Final reports
Configuration
.wsr/config.json
{
"version": "2.0",
"organization": "https://dev.azure.com/myorg",
"project": "MyProject",
"output_dir": ".wsr/reports",
"data_dir": ".wsr/data",
"git_remote_type": "azure",
"git_remote_url": "https://dev.azure.com/myorg/MyProject/_git/MyRepo",
"default_audience": "standard",
"author_email": "user@example.com"
}
.wsr/notify.json
{
"default_channel": "teams",
"teams": {
"enabled": true,
"webhook_url": "https://outlook.office.com/webhook/..."
},
"email": {
"enabled": false,
"smtp_server": "smtp.office365.com",
"smtp_port": 587,
"username": "user@company.com",
"from_address": "user@company.com",
"to_addresses": ["manager@company.com"]
}
}
Scripts Reference
| Script | Purpose |
|---|---|
wsr_config.py |
Configuration management |
wsr_entries.py |
Entry management (add, import, list, remove) |
wsr_report.py |
Report generation (markdown, HTML) |
wsr_notify.py |
Send reports via Email, Teams, Slack |
Command Reference
wsr_entries.py
Commands:
add Add a single entry manually
import Bulk import entries from JSON (stdin or file)
list List entries for a week
remove Remove an entry by ID
export Export entries as JSON
clear Clear all entries for a week
Options:
--config, -c Config file path
--week, -w Week ID (YYYY-WNN)
wsr_report.py generate
Options:
--audience, -a Audience level: executive, standard, technical
--format, -F Output format: markdown, html
--final, -f Mark as final report
--output, -o Custom output file path
--stdout Print to stdout instead of file
--week, -w Specific week ID (YYYY-WNN)
wsr_notify.py send
Options:
--channel, -ch Channel: email, email-cli, teams, slack, all
--audience, -a Audience level: executive, standard, technical
--week, -w Specific week ID (YYYY-WNN)
Example: Full WSR Generation
Here's how Claude should orchestrate a complete WSR:
# 1. Ensure WSR is initialized
python3 skills/wsr-generator/scripts/wsr_config.py init
# 2. Query completed work items this week
python3 skills/azure-devops/scripts/query-work-items.py --preset completed-this-week
# 3. Get git commits this week
git log --since="Monday" --oneline --author="$(git config user.email)"
# 4. Claude transforms data and imports
# (Claude creates JSON from the above outputs)
echo '{"entries": [...]}' | python3 skills/wsr-generator/scripts/wsr_entries.py import
# 5. Generate report
python3 skills/wsr-generator/scripts/wsr_report.py generate --stdout
# 6. Send to Teams (or default channel)
python3 skills/wsr-generator/scripts/wsr_notify.py send
Troubleshooting
No entries found
- Run
wsr_entries.py listto check current entries - Use
wsr_entries.py importto add entries from JSON
Report generation fails
- Check
.wsr/config.jsonexists (runwsr_config.py init) - Verify entries exist for the week
Notification fails
- Run
wsr_notify.py showto check configuration - For Teams, verify webhook URL is correct
- For email, check SMTP settings and credentials