code/emotional-recap/SKILL.md
Reviews the user's past Claude Code conversations from a wellbeing perspective — sentiment, tone, emotional arc, recurring patterns — and generates a supportive, science-grounded report in both Markdown and HTML. Default lookback is 48 hours across all projects. Uses recognised emotion frameworks (Plutchik, Ekman, Russell's circumplex, Pennebaker linguistic markers) and cites the science behind every observation. Learns the user's baseline tone over time so future reports flag genuine shifts, not noise. Use when the user asks for an emotional/wellbeing recap, mood check, sentiment review, or wants to understand their own ups and downs across recent work sessions.
npx skillsauth add mostafa-drz/claude-skills emotional-recapInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a wellbeing-focused review of the user's recent Claude Code conversations. The skill reads conversation transcripts, performs sentiment / tone / emotion analysis using established psychological frameworks, surfaces patterns (time-of-day, project, streaks, vocabulary), and writes a supportive Markdown + HTML report grounded in cited research.
This skill is supportive, not diagnostic. It surfaces observations and reframes them with science; it never pathologises, prescribes treatment, or replaces a professional. Wellness is a long game — this is one signal among many.
On startup, use the Read tool to load ~/.claude/skills/emotional-recap/preferences.md. If missing, treat as "no preferences set" and apply Defaults from this file.
On startup, use the Read tool to load ~/.claude/skills/emotional-recap/DESIGN.md. This file is the renderer contract: aesthetic direction, type system, colour tokens, layout, visualisation principles, anti-patterns, renderer guarantees, component patterns. Apply its tokens and rules to every emitted HTML / SVG / Markdown artefact. Renderer guarantees in DESIGN.md §7 are non-negotiable — they fail closed (refuse to write if violated).
When DESIGN.md and preferences.md conflict: DESIGN.md wins for renderer guarantees (a11y, anti-patterns, token shape); preferences.md wins for user-tunable knobs (tone, citation depth, framework choice, auto_open, etc.). If DESIGN.md is missing, fall back to the inline spec in reference/report-structure.md and flag once.
On startup, use Bash to detect: current working directory, current project slug (cwd path with / → -, prefixed with -), today's date in YYYY-MM-DD. Skip any that fail.
Conversation transcripts live at ~/.claude/projects/<project-slug>/<uuid>.jsonl. Each line is one event (user message, assistant message, tool result, system reminder). The skill operates on user-authored text only — assistant output, tool outputs, and system reminders are excluded from sentiment analysis (they are not the user's emotional signal).
Check $ARGUMENTS:
help → display Help block, stopconfig → interactive setup, stopreset → delete preferences.md, feedback-journal.md, sessions/, resume-state.md, reports/, confirm, stopfeedback → run Feedback subcommand (see ## Feedback & learning)resume → if resume-state.md exists, continue the previous unfinished run--window=<dur> → override lookback (e.g. 24h, 7d, 30d)--scope=<all|current|slug> → override conversation scope--format=<both|md|html> → override report format--last=N → limit to N most recent conversations (after window filter)--dry-run → analyse + print summary only, skip writing reportemotional-recap — Wellbeing review of recent Claude Code conversations
Usage:
/emotional-recap Default: all projects, last 48h, both formats
/emotional-recap --window=7d Last 7 days
/emotional-recap --scope=current Only the current project's conversations
/emotional-recap --format=html HTML report only
/emotional-recap --last=10 Last 10 conversations (after window filter)
/emotional-recap --dry-run Analyse + print summary, no file written
/emotional-recap feedback Rate the most recent report
/emotional-recap config Set preferences
/emotional-recap resume Continue an interrupted run
/emotional-recap reset Clear preferences + journal + reports
/emotional-recap help This help
Current preferences:
(loaded from ~/.claude/skills/emotional-recap/preferences.md)
Use AskUserQuestion to collect (in two batches of ≤4 questions):
Batch 1 — Scope & output
24h / 48h / 7d / 30dall projects / current project only / ask each timeboth md+html / md only / html only~/.claude/skills/emotional-recap/reports/ (default) / ~/Desktop/wellness/ / custom pathBatch 2 — Tone & depth
yes / nowarm & supportive (default) / clinical & neutral / direct & terseminimal (1-line refs) / standard (full APA inline, ~5 refs) / academic (full reference list, ~10 refs)Plutchik wheel (8 primary emotions) / Ekman basic (6 emotions) / Russell circumplex (valence×arousal) / combined (use all three contextually)Write to ~/.claude/skills/emotional-recap/preferences.md in three-tier format:
# /emotional-recap preferences
Updated: YYYY-MM-DD
## Defaults
- window: 48h
- scope: all
- format: both
- report_dir: ~/.claude/skills/emotional-recap/reports/
- auto_open: yes
- tone: warm
- citation_depth: standard
- framework: combined
## Profile (optional — edit freely)
- (free-form lines the user can edit to nudge defaults — e.g. "avoid mentioning sleep; I work nights by choice")
## Learned
- (populated from feedback over time)
Delete in order, with confirmation:
~/.claude/skills/emotional-recap/preferences.md~/.claude/skills/emotional-recap/feedback-journal.md~/.claude/skills/emotional-recap/sessions/~/.claude/skills/emotional-recap/resume-state.md~/.claude/skills/emotional-recap/reports/ — these are user-facing artefacts.Confirm: Preferences, journal, sessions, and resume state cleared. Reports kept unless you opted in. Using defaults.
If ~/.claude/skills/emotional-recap/preferences.md does not exist:
First time using
/emotional-recap? I'll use sensible defaults (last 48h across all projects, both md+html, warm tone, combined emotion frameworks). Run/emotional-recap configanytime to tune. Continuing…
Then proceed.
~/.claude/skills/emotional-recap/preferences.md → apply Defaults, then Profile overrides, then Learned overrides.~/.claude/skills/emotional-recap/DESIGN.md — the renderer contract. Hold its tokens, anti-patterns, and renderer guarantees in working memory for Step 5. If missing, fall back to reference/report-structure.md and flag once.~/.claude/skills/emotional-recap/feedback-journal.md if present — scan the last ~10 entries for Signal: lines and silently apply them as soft biases for this run.resume-state.md exists and $ARGUMENTS is not resume, mention once: A previous run was interrupted — run /emotional-recap resume to continue, or ignore to start fresh. Continue with the new run regardless.Continue silently on missing files — graceful degradation is mandatory.
$ARGUMENTS; fall back to preferences; fall back to Defaults.now - window (e.g. now - 48h).scope=all → glob ~/.claude/projects/*/scope=current → only the current project slugscope=<explicit-slug> → that one directorymtime >= cutoff.--last=N, sort by mtime desc and take top N.No conversations found in the last <window>. Either nothing's happened, or you're not using Claude Code through it — enjoy the quiet.Print a one-line confirmation: Scanning N conversations across M projects from <date> to <date>.
For each JSONL file:
type == "user" with a message.content that is a string or has text parts). Exclude:
tool_use_result, tool_result)<command-*> tag payloads<command-name> blocks) — keep only the natural-language fragments the user typedtimestamp, project_slug, conversation_id, text.Aggregate stats: total messages, total tokens (approx word count × 1.3), distinct conversations, distinct projects, span (first → last timestamp).
Apply the user's chosen framework(s) — see ~/.claude/skills/emotional-recap/reference/frameworks.md for the full reference. Summary:
valence (−1 unpleasant → +1 pleasant) and arousal (0 calm → 1 activated) score.For each message produce a compact record:
{ts, project, valence, arousal, plutchik: [...], dominant_tone, markers: {...}}
Important reading caveats (include in every report):
Surface the patterns that actually matter. Look for:
Pattern presentation rule: every flagged pattern must include (a) the observation, (b) the science behind why it matters, (c) one supportive reframe or question — never an instruction. Example:
Your messages got shorter and more 1st-person after 11pm on May 11 and 12. Pennebaker (2003) found rising self-focus often tracks with fatigue or rumination. Worth noticing — what was happening those nights?
Render both formats from a single shared structure. Bind every visual decision to a DESIGN.md token — no hard-coded hex, no inline style="" for colour or layout (data-driven values like width: 60% for a bar fill are allowed). Use the component patterns in DESIGN.md §8 and the renderer rules in reference/report-structure.md.
Before writing the file, run the 16-item renderer self-audit (DESIGN.md §7 → "Renderer self-audit"):
role="img", <title>, <desc>.aria-hidden="true".color-mix() in emitted CSS — pre-compute mixes for both themes and emit as theme-scoped CSS vars (see item 15).title=""-only tooltips on interactive elements.−1 negative · 0 neutral · +1 positive legend.var(--*) tokens, not literal hex.(pointer: coarse) viewports for interactive chart elements.<p class="chart-source"> caption with framework/method + a real citation drawn from reference/citations.md. Per DESIGN.md §7 provenance table.reference/citations.md, no prescriptive phrases ("you should", "you must", "fix", "stop", "treatment", "therapy"). If §04 is empty, the section header still renders with the "no standout options this window" line; do not silently skip.#[0-9a-fA-F]{3,8}) appearing as background, color, or border-color values on selectors that hold text or visible surface. Allowed locations for hex literals: inside :root { … } and @media (prefers-color-scheme: dark) :root { … } blocks ONLY. Anywhere else → fail..hl-quote color on .hl-card background), compute the contrast ratio using the light-mode token values and again using the dark-mode token values. Fail if either ratio is < 4.5:1 for normal text or < 3:1 for large text (≥18pt or ≥14pt bold).If any item fails, refuse to write and report which check failed. The user may override with --force but the default is fail-closed.
The audit is not a substitute for visual inspection. If a render passes 16/16 but still looks wrong in the reader's theme, the audit needs another item — log a journal entry and grow the checklist. Quality is the union of "passes the rules" + "looks right in the actual theme the reader uses."
Section order (DESIGN.md §4 IA — fold-by-fold: brief → highlights → insights → anchors → raw data → reference; 12 sections numbered 01–12 contiguously; both md + html unless noted):
— Brief — 01. At a glance — 2-3 sentence brief + hero valence with scale legend + quadrant chip + 4 stat tiles + daily badge row. The whole top-fold story.
— Highlights — 02. Highlights — compact grid of 3–5 bright-spot chip-cards (anonymised quote + date). Promoted from bottom to top fold per 2026-05-13-1150 feedback. Required (Fredrickson, 2001).
— Insights —
03. Insights — horizontal carousel of pattern cards (observation / science as <details> / reframe). 3–7 cards. Scroll-snap, no JS, accessible in source order. This is the report's middle act — the main signal.
— Anchors —
04. Worth trying — numbered list of 2–4 evidence-informed micro-experiments, each anchored to a real citation from reference/citations.md. Never prescriptive — the language is "research suggests…" / "studies indicate…" / "worth trying if it fits". Per DESIGN.md §6 language guardrails. Section may render empty (with the "no standout options" line) if no pattern this run admits a research-backed action.
— Raw data — every chart carries a chart-source caption with framework + citation —
05. Emotional arc — twin sparklines (valence + arousal) + arc narrative.
06. Affect map — (HTML) Russell scatter with jitter + density-bin fallback + per-quadrant tint + size variation. (MD) ASCII quadrant.
07. Dominant emotions — (HTML) Plutchik wheel + size-redundant outer dot ring + ranked bars + quoted examples. (MD) ranked list with %.
08. Day rhythm — 24-hour focusable strip with peak/dip callouts and sample-size warnings.
09. By project — diverging horizontal bars centred at zero; opacity scaled by message count.
10. Word weather — typographic vocabulary block (Fraunces italic). Polarity = colour + weight + underline-on-negative + aria-label.
— Reference —
11. Citations — bibliographic list per the user's citation_depth setting. Pull from reference/citations.md.
12. Caveats — text-analysis caveats from Step 3 + the "this is not clinical advice" line.
HTML design requirements — see DESIGN.md for the canonical contract (tokens, type, palette, anti-patterns, renderer guarantees). The high-level shape:
-webkit-font-smoothing: antialiased. No font-feature-settings: "ss01" on fallback fonts.--t-hero (5.5rem). Always paired with −1 negative · 0 neutral · +1 positive legend below.font-feature-settings: "tnum") on every numeric value..num span marked aria-hidden="true". No gaps.--q?-line / --q?-ink / --q?-fill tokens. AA-compliant text tokens only.color-mix() forbidden in emitted CSS — renderer pre-computes mixes to hex.role="img", <title>, <desc>.<g tabindex="0"> with focus-visible state + inline-revealed details. No title=""-only tooltips.<style> block in <head>. Dark mode via prefers-color-scheme: dark with mirror token set.Tone of voice: per preferences (warm default).
File naming: reports/YYYY-MM-DD-HHMM-recap.md and .html.
mkdir -p the report directory if needed.~/.claude/skills/emotional-recap/sessions/YYYY-MM-DD-HHMM.md:
# Session YYYY-MM-DD HH:MM
- window: <value>
- scope: <value>
- conversations: N
- dominant_quadrant: <Russell quadrant>
- mean_valence: <x>
- mean_arousal: <y>
- top_emotions: [...]
- patterns_flagged: [<short list>]
- report_md: <path>
- report_html: <path>
auto_open is true and the format includes html, run open <path> (macOS) / xdg-open (Linux). Skip silently on failure.Print, in chat (≤6 lines):
Example:
Window: last 48h, 14 conversations across 3 projects. Mean tone: slight positive, moderately activated. 2 patterns to consider: (1) evening valence drop, (2) frustration streak in
azadrepo (3 sessions). Saved:~/.claude/skills/emotional-recap/reports/2026-05-13-1430-recap.md(+ .html)
Final line:
Run
/emotional-recap feedback— even one rating sharpens the next report. This is a mirror, not a diagnosis — your felt sense always overrides the analysis.
When invoked as /emotional-recap feedback:
sessions/YYYY-MM-DD-HHMM.md. If none → say No recent session found. and stop.AskUserQuestion (4 questions, one batch):
~/.claude/skills/emotional-recap/feedback-journal.md:
## YYYY-MM-DD-HHMM
- tone_fit: <answer>
- accuracy: <answer>
- usefulness: <answer>
- design: <answer>
- Signal: <one-line generalisation, e.g. "user finds 'warm' tone preachy; bias to 'clinical' next run">
Signal, promote it to ## Learned in preferences.md. Mention once: Noticed you consistently <signal>. Saved as a standing default — change anytime in /emotional-recap config.## Learned, log the demotion in the journal with a Demoted: line). Never leave stale rules.Pre-selection bias: in Step 5 of the main workflow, the tone-of-voice choice and pattern-density threshold are biased by current ## Learned rules. E.g. if Learned says "user wants ≤3 flags per report", cap pattern flags at 3.
If ~/.claude/skills/emotional-recap/resume-state.md exists and $ARGUMENTS == resume:
step, window, scope, files_processed, intermediate_path.resume-state.md.The main workflow writes resume-state.md only when it processes ≥10 files — small runs are not worth resuming. State is overwritten on each run.
preferences.md / feedback-journal.md / failed JSONL parse — continue with defaults. Never block.Learned rule only after 3+ consistent signals. Mention once when promoting.Learned rule contradicted twice gets demoted. Never carry rules that no longer fit.reset always asks before deleting reports/ (they are user artefacts, not skill state).feedback, resume, config, reset, help subcommands: ✅ all routed.reference/frameworks.md, reference/citations.md, reference/report-structure.md to keep this file under 500 lines.development
--- name: triage-board description: >- Generates a structured triage artifact from the current conversation's findings — a self-contained Desktop folder with a JSON Schema, schema-conformant report.json, prose markdown, and a single-file HTML viewer. Viewer ships with MD / CSV / JSON download buttons in the header and a per-finding "Copy as Markdown" action that produces a GitHub/Linear/Notion-ready ticket block. Stateless — triage state lives in the user's ticket system, not in the
development
Runs a beginner-mind end-to-end UI audit of any running app — local dev server, staging, production, or a specific URL. Drives Chrome through every interactive element on the target surface, collects structured findings (severity, category, where, symptom, impact, repro, triage), and hands the result off to `/triage-board` which produces the Desktop folder (schema + JSON + Markdown + single-file HTML viewer with MD/CSV/JSON exports and a per-finding Copy as Markdown button). Use when you want fresh-eyes verification of a feature, page, modal, flow, branch, or whole app — before shipping, before review, before a demo, or any time the UI deserves a careful poke.
development
--- name: workflow-advisor description: >- Analyzes recent Claude Code conversations and local Claude state (skills, settings, memory files, CLAUDE.md), researches the latest Claude Code features and best practices online, and suggests one workflow improvement at a time with reasoning and a concrete action item. Can save accepted suggestions to memory for tracking. Use when you want to discover underused Claude Code features, improve your development workflow, stay current with the lat
tools
Plays the role of a real user in an interview-style usability test. Takes context about the product (URL, description, focus areas), auto-suggests a persona (overridable), then drives real Chrome via the claude-in-chrome extension to explore the product think-aloud style — narrating live reactions while flagging confusion, friction, and delight, and capturing GIFs/screenshots of the friction moments. Produces a structured UX report with severity-ranked pain points, what worked, and prioritized recommendations. Learns over time which findings the user considers signal vs noise. Use when you want a real-user-perspective audit of a web product to catch UX/UI/product issues that automated tests can't catch.