feat(digest): add entire digest command for team activity highlights#491
Open
mvanhorn wants to merge 1 commit intoentireio:mainfrom
Open
feat(digest): add entire digest command for team activity highlights#491mvanhorn wants to merge 1 commit intoentireio:mainfrom
mvanhorn wants to merge 1 commit intoentireio:mainfrom
Conversation
Adds `entire digest` CLI command and `/entire-digest` Claude Code skill that turn checkpoint data into a team highlights newsletter - funniest exchanges, cleverest prompts, and usage stats. Pipeline: collect checkpoints, score conversation arcs with heuristic signals (sarcasm, disbelief, frustration, amnesia, celebration), cross-session dedup, diversity-aware ranking, optional AI curation. Formats: terminal (color-coded, pager), markdown, JSON (full exchanges for Claude Code skill). Skill installed automatically by `entire enable`. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
/entire-digest, a Claude Code skill that turns your team's AI coding sessions into a highlights newsletter - the funniest exchanges, cleverest prompts, and usage stats. Think of it as a team Slack channel recap, but for your AI pair programming sessions.The skill is installed automatically by
entire enableand backed by a newentire digestCLI command that reads checkpoint data from theentire/checkpoints/v1branch.What it looks like
Invoke
/entire-digestin Claude Code (or runentire digestfrom the terminal) and get something like:How it works
The command
The pipeline
Collect - Reads committed checkpoints from
entire/checkpoints/v1. Iterates all sessions per checkpoint (not just the latest), extracting prompts, conversations, branches, timestamps, and token usage.Score - Heuristic scoring ranks conversations by "interestingness." Scores the entire conversation arc, not just the opening prompt - so a boring "fix this" followed by "Really?" and "STILL WRONG" scores high because the follow-up exchanges contribute. Signals include sarcasm ("Captain Obvious"), single-word disbelief ("Really?"), context-amnesia complaints ("Have you forgotten everything?"), AI self-reference ("Are you stuck?"), frustration, and celebration.
Deduplicate & diversify - Cross-session dedup collapses identical prompts that appeared in multiple sessions. Diversity-aware ranking skips near-duplicate conversations (>60% word overlap) so the output has variety instead of 9 copies of the same prompt.
Classify (optional) - When
--ai-curateis enabled (default), calls Claude to classify the top-scoring conversations into editorial highlights with commentary. Falls back to heuristic-only output if Claude is unavailable.Format - Three output formats:
terminal- Color-coded, pager-enabled output for the terminalmarkdown- Clean markdown for sharingjson- Structured output withtop_conversationsarray, scored and sorted, including full exchange contextThe Claude Code skill
The real magic is the
/entire-digestskill that ships withentire enable. When invoked inside Claude Code, it:entire digest --format jsonagainst eachThe skill uses JSON format so Claude Code gets the full conversation exchanges (both human and assistant messages), not just the human's prompts. This lets it identify conversation arcs - escalating frustration, logical contradictions, celebration after a long struggle.
What's in the box
New files
cmd/entire/cli/digest.gocmd/entire/cli/digest/digest.gocmd/entire/cli/digest/format.gocmd/entire/cli/digest/classify.gocmd/entire/cli/digest/score.gocmd/entire/cli/digest/digest_test.go.claude/skills/entire-digest/SKILL.mdModified files
cmd/entire/cli/agent/claudecode/hooks.goentire enable,digestSkillContentconstantcmd/entire/cli/agent/claudecode/hooks_test.gocmd/entire/cli/root.gocmd/entire/cli/setup.goentire enablecmd/entire/cli/lifecycle.go/entire-digestcmd/entire/cli/agent/agent.goReadSessionContent(ctx, id, index)for multi-session readscmd/entire/cli/summarize/claude.goStripClaudeEnvVarshelperDesign decisions
Score conversation arcs, not just anchor prompts. Follow-up user messages contribute to the conversation score (dampened by /2). A boring "fix the deployment" followed by "Really?" (score 9) and "No." (score 7) gets 0 + (9+7)/2 = 8 points from the arc alone. Conversations with 4+ exchanges get a +2 bonus because rapid-fire volleys are almost always more entertaining.
Cross-session dedup + diversity-aware ranking. The same prompt appearing in 9 different sessions used to fill every top slot. Now: (1) cross-session dedup collapses identical prompt text, keeping the highest-scoring instance; (2) diversity-aware ranking skips candidates with >60% word overlap with already-selected items.
JSON format for the skill, not markdown. The skill originally used
--format markdown, which only gave Claude Code the human's prompts. Switching to JSON gives it the fullexchangesarray (human + assistant messages), so it can identify conversational patterns - logical contradictions, escalating frustration, celebration after struggle.Two editorial sections, not one. "Highlights" (emotional/personality moments) and "Cleverest Prompts" (creative/inventive AI usage) get separate sections because clever prompts kept getting crowded out by frustrated-developer moments. Frustration has stronger signal and dominated when everything was in one bucket.
Expanded scoring signals. Beyond the original frustration/celebration word lists, scoring now detects: sarcasm ("Captain Obvious", "thanks for nothing"), single-word disbelief ("Really?", "No."), context-amnesia complaints ("have you forgotten"), and AI self-reference questions ("are you stuck", "why did you"). This ensures wit and personality score competitively with raw frustration keywords.
--ai-curate=falsefor the skill. The skill always passes this flag because Claude Code itself is the curator. Running a nested Claude subprocess inside Claude Code would be redundant (and slow).Test plan
go test ./cmd/entire/cli/digest/...- All digest package tests (scoring, dedup, diversity, formats, multi-session)go test ./cmd/entire/cli/agent/claudecode/...- Skill install/uninstall/update testsentire enablein a repo installs the skill at~/.claude/skills/entire-digest/SKILL.mdentire digestin a repo with checkpoints produces terminal outputentire digest --format jsonproduces valid JSON withtop_conversationsarrayentire digest --format markdownproduces clean markdownentire digest --shortshows stats onlyentire digest --author <name>filters to one personentire digest --period today/--period 30d/--period allfilter correctly/entire-digestin Claude Code produces a two-section newsletter with highlights and clever prompts🤖 Generated with Claude Code