daily-summary
Skill0 starsChanged 7 months agoMITView on GitHub
Generate a comprehensive daily work summary from your configured data sources. Supports: Git commits, JIRA tickets, Google Calendar, Slack messages, Google Drive, and multiple task management systems (Obsidian, JIRA, Google Tasks, Linear). Adapts output to whatever sources you have enabled. Run /daily-summary to generate. First-time users: run /summary-init to create your config.
8 other projects use a version of this.
Adopted by
Most recently taken up by
- danielcherubini/skillstheir own version, first seen Oct 25, 2026
- warrisk-no/claude-skillstheir own version, first seen Oct 20, 2026
- joelhooks/joelclawtheir own version, first seen Oct 8, 2026
- Rish-Modi/career-agenttheir own version, first seen Jun 3, 2026
- rezendefabio/financas-labtheir own version, first seen May 30, 2026
- LJW0401/claude-code-skillstheir own version, first seen Apr 30, 2026
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- joelhooks/joelclaw★ 65same name
- jiahao-shao1/sjh-skills★ 43same name
- danielcherubini/skills★ 14same name
- Rish-Modi/career-agent★ 2same name
- LJW0401/claude-code-skills★ 1same name
- ajay-mandal/agent-skills★ 0same name
- rezendefabio/financas-lab★ 0same name
- warrisk-no/claude-skills★ 0same name
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.
In this repository3 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- summary-initSkill
- weekly-summarySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
27 rules. 0 are common, 15 are distinctive, and 12 are very specific to this project.
0
Common
Most of the 7 edited versions we read keep these.
15
Distinctive
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 30
Read the user's config file:
- Distinctive: line 52
Create output directories: if they don't exist:
- Very specific: line 60
Read the state file at {resolved state_file path}.
- Very specific: line 71
If lastProcessedDate matches today, increment runCountToday.
- Very specific: line 75
If config.name_mappings exists and has entries, use it for name resolution throughout:
- Very specific: line 77
Check confirmed first -- these override any other source
- Very specific: line 78
Check unverified -- use email prefix only
- Very specific: line 83
Read config.data_sources and build a list of enabled sources:
- Distinctive: line 98
Important: Read adapter files using the Read tool.
- Very specific: line 102
Read {kit_path}/adapters/git.md and follow its collection instructions.
- Very specific: line 161
Follow the adapter's collection instructions.
- Distinctive: line 167
Read the template file:
- Very specific: line 172
If the template name contains a / or ., treat it as a file path instead.
- Very specific: line 174
If the template file doesn't exist, fall back to daily-default.md.
- Very specific: line 178
Use config.output.sections_order to determine which sections to include and in what order.
- Distinctive: line 181
Check if the section's data source is enabled (see mapping below)
- Distinctive: line 182
If the source is enabled, include the section using the template's format
- Distinctive: line 183
If the source is disabled, skip the section entirely (no heading, no content)
- Distinctive: line 203
Follow the template format specification.
- Very specific: line 205
Project mapping: When displaying project names, check config.project_mappings to convert folder/path names to friendly display names.
- Distinctive: line 208
Keep the summary scannable -- use bullet points, short paragraphs
- Distinctive: line 239
Update the state file:
- Distinctive: line 250
Only update state after the file is successfully written: If the write fails, leave state unchanged so the next run reprocesses.
- Distinctive: line 264
No hallucination: Only report data that was actually collected from APIs/files.
- Distinctive: line 266
Slack users: Only report users who appear in API responses.
- Distinctive: line 267
JIRA status: Always use the API response, never derive status from other sources.
- Distinctive: line 268
Name resolution: Follow the confirmed -> unverified -> source default precedence.
“Common” is measured: kept by at least 6 in 10 of the 7 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
Daily Summary Generator
Step 0: Initialize
Get current date/time in user's timezone:
TZ={timezone from config} date "+%Y-%m-%d %H:%M:%S %Z (%A)"Store the date -- use it for all file naming and "today" references throughout.
Step 1: Load Configuration
Read the user's config file:
~/.config/work-summary/config.jsonIf the file doesn't exist, tell the user:
Your work summary config hasn't been created yet. Run
/summary-initto set it up.
Then stop.
Validate required fields:
user.name,user.email,user.timezonemust be presentpaths.output_dirmust be present- At least one data source must have
enabled: true
Resolve paths:
- Expand
~to the user's home directory in all path fields daily_output_dir: if relative, resolve againstoutput_dirstate_file: if relative, resolve againstoutput_dirkit_path: if not set, try~/.claude/skills/work-summary-kit
Create output directories if they don't exist:
mkdir -p {resolved daily_output_dir}
mkdir -p {resolved weekly_output_dir}Step 2: Load State
Read the state file at {resolved state_file path}. If it doesn't exist, create it with defaults:
{
"lastProcessedCommit": {},
"lastProcessedDate": "",
"lastRunTime": "",
"runCountToday": 0
}If lastProcessedDate matches today, increment runCountToday. Otherwise reset to 1.
Step 3: Load Name Mappings
If config.name_mappings exists and has entries, use it for name resolution throughout:
- Check
confirmedfirst -- these override any other source - Check
unverified-- use email prefix only - Fall back to the name from the data source (Slack profile, calendar attendee, etc.)
Step 4: Identify Enabled Data Sources
Read config.data_sources and build a list of enabled sources:
ENABLED_SOURCES = []
for each source in [git, jira, calendar, slack, drive, tasks]:
if config.data_sources.{source}.enabled == true:
add to ENABLED_SOURCESLog which sources are enabled. This determines which adapters to load and which output sections to generate.
Step 5: Collect Data
For each enabled data source, read the corresponding adapter file from {kit_path}/adapters/ and follow its Collection Steps.
Important: Read adapter files using the Read tool. Each adapter is a self-contained instruction set.
Git (if enabled)
Read {kit_path}/adapters/git.md and follow its collection instructions.
Use:
config.data_sources.git.reposfor repo pathsconfig.data_sources.git.author_email(orconfig.user.email) for commit filtering
Store results as GIT_DATA.
JIRA (if enabled)
Read {kit_path}/adapters/jira.md and follow its collection instructions.
Use:
config.data_sources.jira.*for API URL, project keys, auth env vars- Ticket IDs detected by the git adapter (if git is also enabled)
Store results as JIRA_DATA.
Calendar (if enabled)
Read {kit_path}/adapters/calendar.md and follow its collection instructions.
Use:
config.data_sources.calendar.*for provider, calendar ID, working hours, categoriesconfig.user.emailfor the calendar queryconfig.user.timezonefor time conversion
Store results as CALENDAR_DATA.
Slack (if enabled)
Read {kit_path}/adapters/slack.md and follow its collection instructions.
Use:
config.data_sources.slack.*for auth, username, channel categoriesconfig.name_mappingsfor resolving user names
Store results as SLACK_DATA.
Google Drive (if enabled)
Read {kit_path}/adapters/drive.md and follow its collection instructions.
Use:
config.data_sources.drive.*for provider settings
Store results as DRIVE_DATA.
Tasks (if enabled and provider != "none")
Based on config.data_sources.tasks.provider, read the corresponding adapter:
| Provider | Adapter File |
obsidian | {kit_path}/adapters/tasks-obsidian.md |
jira | {kit_path}/adapters/tasks-jira.md |
google-tasks | {kit_path}/adapters/tasks-google.md |
linear | {kit_path}/adapters/tasks-linear.md |
Follow the adapter's collection instructions. Store results as TASKS_DATA.
Step 6: Generate Output
Load the template
Read the template file:
{kit_path}/templates/{config.output.template}.mdIf the template name contains a / or ., treat it as a file path instead.
If the template file doesn't exist, fall back to daily-default.md.
Determine active sections
Use config.output.sections_order to determine which sections to include and in what order.
For each section in the order list:
- Check if the section's data source is enabled (see mapping below)
- If the source is enabled, include the section using the template's format
- If the source is disabled, skip the section entirely (no heading, no content)
Section-to-source mapping:
| Section | Required Source(s) | Notes |
executive_summary | Any enabled source | Always include if at least one source has data |
metrics | Any enabled source | Only show metrics for enabled sources |
plan_vs_actual | Tasks | Only if a plan file exists for today |
code_activity | Git | |
jira_updates | JIRA | |
meetings | Calendar | |
slack_activity | Slack | |
drive_activity | Drive | |
completed_tasks | Tasks | |
tomorrow_focus | Any enabled source | Synthesize from available data |
blockers | Any enabled source | Only if blockers detected |
Write the output
Follow the template format specification. Use the collected data to populate each section.
Project mapping: When displaying project names, check config.project_mappings to convert folder/path names to friendly display names.
Quality rules:
- Keep the summary scannable -- use bullet points, short paragraphs
- Lead with outcomes and impact, not process
- Omit sections entirely when there's no data (don't show empty sections)
- Blockers section: only include if actual blockers exist
Step 7: Write File
Determine file name
Translate config.output.file_naming pattern to an actual filename:
| Pattern | Replacement |
YYYY | 4-digit year |
MM | 2-digit month |
DD | 2-digit day |
ddd | 3-letter weekday (Mon, Tue, etc.) |
[text] | Literal text (e.g., [ - Work] becomes - Work) |
Default: YYYY-MM-DD.md -> 2026-03-04.md
Write the file
{resolved daily_output_dir}/{filename}Each run REPLACES the file -- the summary always reflects the full day, not incremental updates.
Step 8: Update State
Update the state file:
{
"lastProcessedCommit": { "repo-name": "latest-hash", ... },
"lastProcessedDate": "{today}",
"lastRunTime": "{ISO timestamp}",
"runCountToday": {incremented count}
}Only update state after the file is successfully written. If the write fails, leave state unchanged so the next run reprocesses.
Step 9: Report
Tell the user:
- Where the file was written
- Which data sources were collected
- Any warnings or errors encountered
- Key highlights from the summary (2-3 top items)
Quality Validation Rules
These rules apply regardless of which data sources are enabled:
- No hallucination: Only report data that was actually collected from APIs/files. Never infer, guess, or fabricate.
- Google Drive: Report only file metadata (name, type, timestamp, link). Never describe what was changed or why.
- Slack users: Only report users who appear in API responses. Never guess conversation participants.
- JIRA status: Always use the API response, never derive status from other sources.
- Name resolution: Follow the confirmed -> unverified -> source default precedence.
- Timezone: Convert all timestamps to the user's configured timezone before display.
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.

