AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Emotional Recap

skill-mostafa-drz-claude-skills-emotional-recap · by mostafa-drz

>-

No reviews yet
0 installs
20 views
0.0% view→install

Install

$ agentstack add skill-mostafa-drz-claude-skills-emotional-recap

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-mostafa-drz-claude-skills-emotional-recap)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Emotional Recap? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Emotional Recap

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.

Preferences

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.

Design contract

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, autoopen, etc.). If DESIGN.md is missing, fall back to the inline spec in reference/report-structure.md and flag once._

Context

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//.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).

Command routing

Check $ARGUMENTS:

  • help → display Help block, stop
  • config → interactive setup, stop
  • reset → delete preferences.md, feedback-journal.md, sessions/, resume-state.md, reports/, confirm, stop
  • feedback → run Feedback subcommand (see ## Feedback & learning)
  • resume → if resume-state.md exists, continue the previous unfinished run
  • --window= → override lookback (e.g. 24h, 7d, 30d)
  • --scope= → override conversation scope
  • --format= → override report format
  • --last=N → limit to N most recent conversations (after window filter)
  • --dry-run → analyse + print summary only, skip writing report
  • anything else / empty → run the main workflow

Help

emotional-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)

Config

Use AskUserQuestion to collect (in two batches of ≤4 questions):

Batch 1 — Scope & output

  • Q1 — Default lookback window: 24h / 48h / 7d / 30d
  • Q2 — Default scope: all projects / current project only / ask each time
  • Q3 — Default format: both md+html / md only / html only
  • Q4 — Report directory: ~/.claude/skills/emotional-recap/reports/ (default) / ~/Desktop/wellness/ / custom path

Batch 2 — Tone & depth

  • Q5 — Auto-open HTML in browser after generation: yes / no
  • Q6 — Tone of voice: warm & supportive (default) / clinical & neutral / direct & terse
  • Q7 — Citation depth: minimal (1-line refs) / standard (full APA inline, ~5 refs) / academic (full reference list, ~10 refs)
  • Q8 — Primary emotion framework: 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)

Reset

Delete in order, with confirmation:

  1. ~/.claude/skills/emotional-recap/preferences.md
  2. ~/.claude/skills/emotional-recap/feedback-journal.md
  3. ~/.claude/skills/emotional-recap/sessions/
  4. ~/.claude/skills/emotional-recap/resume-state.md
  5. Ask before deleting ~/.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.

First-time detection

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 config anytime to tune. Continuing…

Then proceed.


Workflow

Step 0 — Load learning context and design contract

  1. Read ~/.claude/skills/emotional-recap/preferences.md → apply Defaults, then Profile overrides, then Learned overrides.
  2. Read ~/.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.
  3. Read ~/.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.
  4. If 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.

Step 1 — Resolve scope and window

  1. Parse flags from $ARGUMENTS; fall back to preferences; fall back to Defaults.
  2. Compute window cutoff: now - window (e.g. now - 48h).
  3. Determine projects to scan:
  • scope=all → glob ~/.claude/projects/*/
  • scope=current → only the current project slug
  • scope= → that one directory
  1. List JSONL files inside each project directory, filter by mtime >= cutoff.
  2. If --last=N, sort by mtime desc and take top N.
  3. If zero files match → print a warm note and stop. Example: No conversations found in the last . 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 to .

Step 2 — Extract user-authored text

For each JSONL file:

  1. Read line by line. Each line is JSON.
  2. Keep only events where the author is the user (typically type == "user" with a message.content that is a string or has text parts). Exclude:
  • Assistant messages
  • Tool results / tool outputs (e.g. tool_use_result, tool_result)
  • System reminders and `` tag payloads
  • Slash command bodies (lines starting with `` blocks) — keep only the natural-language fragments the user typed
  • Empty / whitespace-only messages
  1. Capture per message: timestamp, project_slug, conversation_id, text.
  2. Skip files that fail to parse — log a soft warning but continue.

Aggregate stats: total messages, total tokens (approx word count × 1.3), distinct conversations, distinct projects, span (first → last timestamp).

Step 3 — Sentiment, emotion, and tone analysis

Apply the user's chosen framework(s) — see ~/.claude/skills/emotional-recap/reference/frameworks.md for the full reference. Summary:

  • Plutchik (1980) — 8 primary emotions: joy, trust, fear, surprise, sadness, disgust, anger, anticipation. Tag each meaningful user message with 0-2 primary emotions.
  • Ekman (1992) — 6 basic emotions: happiness, sadness, fear, anger, surprise, disgust. Useful when Plutchik feels too granular.
  • Russell circumplex (1980) — every message gets a valence (−1 unpleasant → +1 pleasant) and arousal (0 calm → 1 activated) score.
  • Pennebaker LIWC-style markers (2003) — track linguistic categories: 1st-person pronouns (self-focus), negative emotion words, cognitive complexity ("because", "however"), certainty markers ("never", "always"), social references.

For each message produce a compact record:

{ts, project, valence, arousal, plutchik: [...], dominant_tone, markers: {...}}

Important reading caveats (include in every report):

  • This is text-only analysis. It misses sarcasm, context, and intent. Treat it as a mirror, not a verdict.
  • Short technical messages ("fix the bug", "ok") are tone-neutral, not negative. Don't over-read.
  • Frustration in debugging is normal cognitive work, not distress — see Csikszentmihalyi's flow (1990): productive struggle has the same surface markers as suffering.

Step 4 — Pattern detection

Surface the patterns that actually matter. Look for:

  1. Temporal arc — day-by-day mean valence + arousal. Highlight the trend (rising / falling / flat) and the variance (stable / volatile).
  2. Time-of-day — bucket into morning (06-12), afternoon (12-18), evening (18-22), late-night (22-06). Flag if late-night dominates AND valence drops there.
  3. Project correlation — mean valence per project. Flag if one project is >0.4 below the user's overall mean (a meaningful gap, not noise).
  4. Streaks — 3+ consecutive sessions in the same emotional quadrant (Russell circumplex). E.g. "3 sessions in high-arousal / low-valence — frustration cluster."
  5. Vocabulary shifts — compare this window's top emotional words against the journal's baseline (if learned). New words = new state.
  6. Self-focus drift — Pennebaker: rising 1st-person pronoun frequency correlates with rumination / depressive ideation. Flag only if change >50% from baseline, never on first run.
  7. Cognitive complexity — falling "because/however/although" use can indicate fatigue or stress narrowing thinking.

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?

Step 5 — Generate the report

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"):

  1. Every SVG has role="img", `, `.
  2. Every decorative span has aria-hidden="true".
  3. No color-mix() in emitted CSS — pre-compute mixes for both themes and emit as theme-scoped CSS vars (see item 15).
  4. No title=""-only tooltips on interactive elements.
  5. Russell scatter passes the overplotting guard (jitter applied; density-bin mode triggered if needed).
  6. Anonymisation pipeline ran: deny-list + heuristic + structural strip. No client / brand names in quotes.
  7. Section numbering 01–12 contiguous (no gaps).
  8. Hero number paired with −1 negative · 0 neutral · +1 positive legend.
  9. All text-bearing colour tokens used clear AA contrast against their background.
  10. SVG fills bound to var(--*) tokens, not literal hex.
  11. Sparse-data fallbacks emit "Not enough data" text inside affected SVG regions instead of misleading charts.
  12. Touch-target sizes ≥44px on (pointer: coarse) viewports for interactive chart elements.
  13. Chart provenance — every chart-bearing section (§05–§10) emits a ` caption with framework/method + a real citation drawn from reference/citations.md`. Per DESIGN.md §7 provenance table.
  14. Worth-trying integrity — if §04 is non-empty: 2–4 items, each with one citation from 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.
  15. Theme-parity (1225 bug fix) — grep the emitted CSS for hex literals (#[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.
  16. Per-theme contrast check — for every text-on-surface pairing (e.g. .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 ` / reframe). 3–7 cards. Scroll-snap, no JS, accessible in source order. This is the report's middle act — the main signal.

— Anchors —

  1. 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 —

  1. Emotional arc — twin sparklines (valence + arousal) + arc narrative.
  2. Affect map(HTML) Russell scatter with jitter + density-bin fallback + per-quadrant tint + size variation. (MD) ASCII quadrant.
  3. Dominant emotions(HTML) Plutchik wheel + size-redundant outer dot ring + ranked bars + quoted examples. (MD) ranked list with %.
  4. Day rhythm — 24-hour focusable strip with peak/dip callouts and sample-size warnings.
  5. By project — diverging horizontal bars centred at zero; opacity scaled by message count.
  6. Word weather — typographic vocabulary block (Fraunces italic). Polarity = colour + weight + underline-on-negative + aria-label.

— Reference —

  1. Citations — bibliographic list per the user's citation_depth setting. Pull from reference/citations.md.
  2. 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:

  • **Vi

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.