A skill your agent uses when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.

MITAuto-check passedKnowledge Management

Install Diary

skills CLI
$ npx skills add cwinvestments/memstack --skill diary -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cwinvestments/memstack diary --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/diary .claude/skills/diary && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
diary
GitHub stars
423
Token cost
~5k tokens
SKILL.md length
2,426 words
Files
1
Skills in repo
87
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.

  • Works in 8 steps: Summarize the session → Check git log for commits → Format the diary entry → …
  • The user says save diary
  • SKILL.md covers Activation, Context Guard, When NOT to Fire and Reminders, plus 10 more sections
  • Calls python and git

What it does

Diary is an agent skill from cwinvestments/memstack. Use when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.

Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Knowledge Management, covering Journaling and reflection. The repository describes itself as: Structured skill framework for Claude Code. 130 skills, persistent memory, TokenStack compression, localhost dashboard with 3-agent runner, real-time streaming, MCP tools. The licence is MIT.

When your agent uses it

  • The user says save diary
  • At end of a productive session

Example prompts

  • “save diary”
  • “log session”
  • “wrapping up”
  • “/diary”

Requirements

  • Python 3

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Summarize the session
  2. Check git log for commits
  3. Format the diary entry
  4. Save to SQLite database (primary storage)
  5. Save insights for cross-project search
  6. Update project context with last session date
  7. Also save a markdown copy to memory/sessions/, under a name nothing
  8. Ingest the FACTS block into the Memory Engine, right after the markdown is written

What it can do on your machine

Read from SKILL.md and the folder at commit 00370ce. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Diary loads about 5k tokens when it runs. Until then it costs about 27 tokens; SKILL.md has 2,426 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~27
When it runs · the whole SKILL.md, loaded when a task matches
~5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from cwinvestments/memstack at commit 00370ce, republished under its MIT licence (© cwinvestments). 2,426 words, ~5,023 tokens.

Download SKILL.mdSave it as .claude/skills/diary/SKILL.md (or your agent's skills folder).
name
diary
description
Use when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.
version
1.1.0

📓 Diary: Logging Session...

Document what was accomplished in each CC session for future recall.

Activation

When this skill activates, output:

📓 Diary: Logging session...

Then execute the protocol below.

Context Guard

ContextStatusPriority
User says "save diary", "log session", "write diary"ACTIVE: write diaryP1
User explicitly says they're done ("that's it", "wrapping up")ACTIVE, suggest diary if work was doneP2
Multi-agent session (Builder/Reviewer role)DORMANT: Manager handles diarynone
Mid-session, user is actively codingDORMANT, don't interrupt flownone
Casual conversation, no code changes madeDORMANT: nothing to lognone
User asks to recall past sessions ("what did we do")DORMANT, Echo handles recall, not Diarynone
User says "save project" or "handoff"DORMANT, Project skill handles thisnone
Session just started, no work yetDORMANT: nothing to lognone

When NOT to Fire

  • Do NOT fire autonomously. Only activate when the user explicitly requests it ("save diary", "log session", "wrapping up").
  • Multi-agent sessions: If you are operating as Builder, Reviewer, or any non-Manager agent in a multi-agent session, do NOT fire diary. Only the Manager or a standalone session should trigger diary.
  • No work done: If no meaningful changes were made (no commits, no file edits), skip diary.

Reminders

When the user asks to save a diary, keep these in mind:

TemptationWhy it matters
"Nothing important happened"Even small decisions have context worth capturing.
"Commits capture everything"Commits don't capture decisions, blockers, or next steps.
"Skip the handoff section"Handoffs are the most valuable part for session continuity.

Protocol

Never pass a JSON payload as a quoted command-line argument. Write it to a file and pipe it in with the dash sentinel, as every command below shows. On Windows, cmd.exe treats single quotes as ordinary characters, so a redirection operator anywhere in a quoted payload is executed rather than passed.

All JSON field values must be plain strings. Never pass arrays or objects. If multiple items (files, commits, decisions), join them as a comma-separated string.

  1. Summarize the session:

    • Project name and working directory
    • Date and approximate duration
    • What was built or changed
    • Key files created or modified
    • Commits made (hashes and messages)
    • Decisions made and why
    • Problems encountered and solutions
  2. Check git log for commits:

    bash
    git log --oneline -10
  3. Format the diary entry:

    markdown
    # Session Diary: {project}, {date}
    
    ## Accomplished
    - Item 1...
    
    ## Files Changed
    - path/to/file.ts: description
    
    ## Commits
    - abc1234 Message
    
    ## Decisions
    - Decision: reason
    
    ## Next Steps
    - What to do next
    
    ## Session Handoff
    **In Progress:** [what was actively being worked on when session ended]
    **Uncommitted Changes:** [list any unstaged/uncommitted work, or "None"]
    **Pick Up Here:** [exact instruction for next session, specific enough to start cold]
    **Session Context:** [anything important that isn't captured elsewhere: temp decisions, debugging state, gotchas discovered]
  4. Save to SQLite database (primary storage):

    Write the payload to a file, then pipe it in with - as the argument. A payload on stdin is never seen by the shell's parser, so a redirection operator inside your prose cannot be read as one.

    bash
    cat session.json | python "${CLAUDE_PLUGIN_ROOT}/db/memstack-db.py" add-session -

    The store is ~/.memstack/memstack.db, one file per user, never a file beside the script. Every command prints the path it used on stderr as memstack-db: store <path>, so a session can confirm where it wrote instead of assuming.

    The SQLite row is the primary store. The markdown in memory/sessions/ is a backup export. The row holds the full raw_markdown, so a markdown file that is lost, truncated or overwritten can be restored from it: find the row in the sessions table by project and date, and write raw_markdown back to the file. This matters because memory/ is gitignored, so version control is not a fallback and the database is the only one there is.

    session.json contains:

    json
    {"project":"<name>","date":"<YYYY-MM-DD>","accomplished":"<bullets>","files_changed":"<bullets>","commits":"<bullets>","decisions":"<bullets>","problems":"<bullets>","next_steps":"<bullets>","duration":"<estimate>","raw_markdown":"<full text>"}
  5. Save insights for cross-project search:

    Same form: write the payload to a file, pipe it in, - as the argument. Insight text is prose, so it must never travel on the command line.

    bash
    cat insight.json | python "${CLAUDE_PLUGIN_ROOT}/db/memstack-db.py" add-insight -

    insight.json contains:

    json
    {"project":"<name>","type":"<type>","content":"<insight>","context":"Session <date>","tags":"<project>"}

    Choose <type> deliberately from this vocabulary, do not default to one:

    • gotcha: something that bit us and the fix. Non-obvious behavior a future session would trip on again.
    • lesson: a general rule learned the hard way. Broader than one bug.
    • pattern: a reusable approach or convention that worked.
    • warning: a known hazard to avoid. Not yet a bug, but will be.
    • failed_approach: something tried that did not work, and why. Prevents retrying it.
    • architecture: a structural fact about how a system is built.
    • decision: a choice made and the reasoning. Historical record.

    The first five are procedural: an agent can act on them at retrieval time. architecture and decision are record. When a row could be either, prefer the procedural type.

    Unknown types pass through unchanged but come back as type_unknown in the JSON response, that is the signal to pick a type from the list above.

    CRITICAL: The field name is "content", NOT "insight". Using "insight" will fail with a missing required field error.

  6. Update project context with last session date:

    Same form, even though this payload is only metadata. One rule with no exceptions is easier to follow than a rule you have to judge.

    bash
    cat context.json | python "${CLAUDE_PLUGIN_ROOT}/db/memstack-db.py" set-context -

    context.json contains:

    json
    {"project":"<name>","last_session_date":"<YYYY-MM-DD>"}
  7. Also save a markdown copy to memory/sessions/, under a name nothing already occupies. Append a ## FACTS block (see below) as the last section of this markdown.

    Compute the filename immediately before writing it, not at the start of the task. List memory/sessions/ and take the first free name:

    AttemptName
    1st diary of the day for this project{date}-{project}.md
    2nd{date}-{project}-2.md
    3rd{date}-{project}-3.md

    There is no -1: the plain name is the first, so the numbers you see in the directory match how many diaries exist for that day.

    The check has to happen at the moment of the write because a session can run for hours, and another session, or an agent run, can file a diary for the same project in between. A name that was free when the task started is not evidence that it is free now.

    Never write over an existing file. If the name you computed exists when you go to write it, stop and report it rather than writing. Do not overwrite, do not append, do not pick a name by guessing. A diary is another session's only human-readable record, and the Write tool reporting "updated" instead of "created" is the only warning you will get, which is far too quiet to rely on.

    A suffixed filename changes step 8. diary_ingest derives the project namespace from the filename, so 2026-09-06-myproject-2.md derives myproject-2, which ingests cleanly, exits 0, and is invisible to every recall for the real project. Whenever the name carries a -N suffix, pass --project explicitly.

  8. Ingest the FACTS block into the Memory Engine, right after the markdown is written:

bash
python -m memstack_skill_loader.diary_ingest "memory/sessions/{the name you just wrote}" --project {project}

This parses the ## FACTS block and stores each fact with source_type='diary'.

Read the summary it prints. This step is not fire-and-forget. It reports memory-ingest: N ingested, M duplicate, K skipped into project 'NAME': PATH on stdout, followed by one indented reason per skipped line naming the line number and what was wrong with it. NAME is the namespace the facts were actually written to, derived from the diary's filename, and it is the part to check: a diary filed under an unintended project ingests cleanly and exits 0 while staying invisible to every recall for the real one. When no fact has ever been stored under that namespace the line reads into NEW project 'NAME', which is the cheapest signal that derivation landed somewhere unintended. Pass --project NAME to skip filename derivation entirely when the derived name would be wrong. The exit code classifies the outcome:

ExitMeaning
0Nothing was lost: facts ingested, an all-duplicates re-run, or no FACTS block at all (which prints nothing at all).
1Total loss. The block held lines and not one of them ingested.
2Store failure. The run aborted at the first bad row; the Memory Engine is broken, not the diary.

If K is not 0, fix those lines in the markdown and run the command again. A skipped line is a fact this session was supposed to hand to the next one and did not, and the most common cause is a | inside a claim. Re-running is safe: facts dedupe on source + subject + claim, so anything already stored comes back as a duplicate rather than being written twice.

A non-zero exit never means the diary failed to save. The markdown and the SQLite row are already written by this point, and ingestion cannot undo them.

FACTS Block: Cross-Session Memory

The ## FACTS block is how a session hands durable, atomic knowledge to future sessions. It is machine-parsed, so the format is fixed. One fact per line:

subject | claim | method [| entities]
  • subject: a dotted-path namespace, lowercase (e.g. memstack.dashboard.start, adminstack.portal.auth). Group related facts under a shared prefix.
  • claim: exactly one assertion. Keep it self-contained. Must not contain a |.
  • method: how you know it, one of: verified (you saw it work / read the code / ran it), reported (stated but unconfirmed), inferred (deduced), assumed (a guess: scored lowest).
  • entities: optional 4th field: comma-separated tags this fact touches.
Show full SKILL.md (997 more words)Show less
Examples (note the granularity)
## FACTS
memstack.dashboard.start | start_dashboard() in dashboard.py, port 3333, proxy opt-in | verified
memstack.memory.recall-scoring | recall score = confidence * exp(-age/half_life), computed at query time, never stored | verified
adminstack.portal.auth | portal uses Supabase magic-link auth, not passwords | reported | supabase, auth
memstack.memory.corrections | a superseded fact cannot be corrected; corrections extend from the live tip | verified | correction
What to include
  • Only facts worth remembering across sessions. Not "ran the tests", that's in the diary body. A fact is something a future session would waste time rediscovering: a port, an entry point, an auth model, a non-obvious constraint.
  • Prefer verified over reported. If you actually confirmed it, say so, verified facts are trusted and decay slowest. Don't inflate: an unconfirmed claim is reported.
  • Corrections of prior beliefs are the most valuable entries. If this session overturned something an earlier session believed ("the port is 3333, not 8080"; "auth is magic-link, not passwords"), record the corrected claim as a fact, that is exactly the knowledge that stops the team repeating a mistake.

Known Gotchas

GotchaWhy it matters
The markdown filename is computed, never assumedOn 2026-09-06 a session wrote memory/sessions/2026-09-06-memstack-skill-loader.md when a file of that name already existed, destroying 10238 characters of an earlier session's diary including its FACTS block. Nothing warned: the Write tool said "updated" rather than "created" and the session did not notice for several steps. Recovery was possible only because the SQLite sessions table still held that row's raw_markdown. memory/ is gitignored, so there was no version-control fallback and no second chance if the row had been missing.
A free name goes staleThe scan belongs immediately before the write. Sessions run long, and agent runs file diaries for the same project while one is open.
A -N suffix silently re-namespaces the FACTSdiary_ingest derives the project from the filename, so a suffixed diary ingests into {project}-N and exits 0 while being invisible to recall for the real project. Pass --project whenever the name is suffixed.
The database is the only backupThe markdown is an export. If it is gone, restore it from raw_markdown in the sessions table rather than rewriting it from memory.

Session File Size Management

The 500-line limit on markdown files is no longer a concern since SQLite is the source of truth. Markdown files in memory/sessions/ are now just human-readable exports. Old markdown files are preserved but not the primary storage.

Inputs

  • Current session context
  • Project name from working directory or config.json
  • Git log for commit history

Outputs

  • Session entry in SQLite database
  • Insights extracted from decisions
  • Markdown backup in memory/sessions/
  • Brief confirmation summary

Example Usage

User: "save diary"

📓 Diary: Logging session...

Saved: memory/sessions/2026-02-18-adminstack.md

Project: AdminStack | Duration: ~2 hours
Accomplished: Built CC Monitor page, API routes, setup guide
Commits: 4 (45b4c42, d1c7e11, f6c8e18, f0e793f)
Files changed: 8

This session is now searchable via Echo.

PreCompact Hook: Automatic Compaction Diary

The diary system includes an automatic PreCompact hook that fires before Claude Code compresses the context window. This closes the gap where session context could be lost during long conversations.

Behavior
  • Trigger: Fires automatically before every CC context compaction: no user action required
  • Output: .claude/diary/{date}-compaction.md, one file per day, appends on multiple compactions
  • Flag: Every entry includes COMPACTION_INTERRUPTED so the next session knows context was cut
  • Timeout: 15 seconds, fast enough to never block compaction
What It Captures
DataSource
Uncommitted changesgit status --short
Recent commitsgit log --oneline -5
Recent shell commandsShell history (last 5)
Recently modified filesFiles modified since last git operation
Branch and projectGit branch + directory name
How It Differs from Manual Diary
Manual DiaryPreCompact Diary
TriggerUser says "save diary"Automatic before compaction
ContentFull narrative with decisions, handoffSnapshot of working state
StorageSQLite + memory/sessions/.claude/diary/ only
PurposeSession documentationContext recovery after compaction
Session Resume

When resuming after compaction, check .claude/diary/ for entries with today's date. The COMPACTION_INTERRUPTED flag signals that the previous context was truncated and these files contain the lost state.

Configuration

Hook is registered in .claude/settings.json under PreCompact. Script lives at .claude/hooks/pre-compact.sh. Always exits 0: must never block compaction.

Full Hook System (v3.3.2)

The Diary skill is part of a broader hook system that automates session lifecycle, security, and observability. All hooks follow the same defensive pattern: set -uo pipefail, SCRIPT_DIR resolution, all external commands wrapped with fallbacks, guaranteed exit 0.

Hook Registry: 7 hooks across 5 events
EventScriptMatcherTimeoutPurpose
PreToolUsepre-tool-notify.shWrite|Edit|MultiEdit|Bash10sTTS voice alert before approval prompts
PreToolUsepre-push.shBash (git push)60sBuild verification + secrets scan before push
PostToolUsepost-commit.shBash (git commit)10sDebug artifact + secrets scan after commit
PostToolUsepost-tool-monitor.shWrite|Edit|MultiEdit|Bash10sObservation capture, logs tool calls to .claude/observations/
SessionStartsession-start.sh(all)10sCLAUDE.md indexing, monitoring ping
SessionStartsession-context-load.sh(all)15sContext injection, last 3 diary + observation summaries → .claude/session-context.md
Stopsession-end.sh(all)10sMonitoring API session-complete ping
PreCompactpre-compact.sh(all)15sAuto-save diary snapshot before context compaction
Architecture Notes
  • Each hook is registered as an independent entry (Option B) in settings.json, giving it its own timeout budget
  • PreToolUse hooks can block tool execution (exit 2 = block). All other hooks are non-blocking
  • PostToolUse observation monitor writes to .claude/observations/YYYY-MM-DD.md: daily files, append-only
  • SessionStart context loader is idempotent: overwrites .claude/session-context.md on each new session
  • Both .claude/observations/ and .claude/session-context.md are in .gitignore (ephemeral runtime output)
  • All scripts live in .claude/hooks/ and use ${CLAUDE_PROJECT_DIR} for portable path resolution

Level History

  • Lv.1: Base: Session logging with git integration. (Origin: MemStack v1.0, Feb 2026)
  • Lv.2: Enhanced: Added YAML frontmatter, context guard, 500-line limit with archive, activation message. (Origin: MemStack v2.0 MemoryCore merge, Feb 2026)
  • Lv.3: Advanced: SQLite as primary storage, auto-extract insights from decisions, markdown as backup export. (Origin: MemStack v2.1 Accomplish-inspired upgrade, Feb 2026)
  • Lv.4: Native: CC rules integration (.claude/rules/diary.md), always-on session logging awareness without skill file read. (Origin: MemStack v3.0-beta, Feb 2026)
  • Lv.5: Handoff: Added structured Session Handoff section: in-progress work, uncommitted changes, exact pickup instructions, session context preservation. (Origin: MemStack v3.1, Feb 2026)
  • Lv.6: PreCompact: Added automatic PreCompact hook: saves working state snapshot before CC context compaction, captures uncommitted changes, recent commands, and modified files with COMPACTION_INTERRUPTED flag. (Origin: MemStack v3.3.1, Mar 2026)
  • Lv.7: Hook System: Documented full 7-hook system across 5 CC lifecycle events: PreToolUse (TTS + pre-push), PostToolUse (post-commit + observation monitor), SessionStart (Headroom + context injection), Stop, PreCompact. (Origin: MemStack v3.3.2, Mar 2026)
  • Lv.8: FACTS Ingestion: Added the ## FACTS block, atomic, machine-parsed cross-session knowledge (subject | claim | method | entities) ingested into the Memory Engine via diary_ingest after each save. Fail-open, dedupe-safe, corrections-first. (Origin: MemStack Memory Engine step 4, Jul 2026)

© cwinvestments, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/diary of cwinvestments/memstack.

Open the folder on GitHubat commit 00370ce

Compare with similar skills

Diary next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Diary compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Diary this skillcwinvestments/memstack423—~5kAutomated safety check: PassMIT
LLM Wikilewislulu/llm-wiki-skill655—~3.7kAutomated safety check: PassNone
Munger Perspectivealchaincyf/munger-skill3791 repos~3.7kAutomated safety check: PassMIT
Daily Journalhuytieu/COG-second-brain1.3k—~1.3kAutomated safety check: PassMIT
Letterboxd Diaryjoe-bell/skills211—~4.2kAutomated safety check: PassMIT
Em Grid Scorermanager-dot-dev/manager-skills114—~5.8kAutomated safety check: PassMIT

Similar skills

  • LLM Wiki

    lewislulu/llm-wiki-skill

    Build and maintain a Karpathy-style LLM knowledge base — a self-compiling Obsidian markdown wiki where an Agent ingests raw sources, compiles cross-linked concept/entity/summary pages, answers…

    655 GitHub stars~3.7k tokensUpdated 5 mo ago
    Knowledge ManagementAuto-check passed
  • Munger Perspective

    alchaincyf/munger-skill

    查理·芒格的思维框架与表达方式。基于《穷查理宝典》、伯克希尔/Daily Journal股东会、 USC/哈佛演讲、访谈记录、外部批评等50+来源的深度调研, 提炼5个核心心智模型、8条决策启发式和完整的表达DNA。

    379 GitHub starsUsed in 1 repo~3.7k tokens
    Knowledge ManagementAuto-check passed
  • Daily Journal

    huytieu/COG-second-brain

    A passive daily work journal that Claude keeps FOR you so you never have to write it yourself.

    1.3k GitHub stars~1.3k tokensUpdated 6 days ago
    Knowledge ManagementAuto-check passed
  • Letterboxd Diary

    joe-bell/skills

    Fetch recently watched films from a Letterboxd member's diary RSS feed and render them as a compact markdown list, with first-run setup for the username.

    211 GitHub stars~4.2k tokensUpdated yesterday
    Knowledge ManagementAuto-check passed
  • Em Grid Scorer

    manager-dot-dev/manager-skills

    Score an Engineering Manager's coverage across all 12 cells of the EM Grid based on their calendar and Slack.

    114 GitHub stars~5.8k tokensUpdated 5 mo ago
    Knowledge ManagementAuto-check passed
  • Digital Brain

    foryourhealth111-pixel/Vibe-Skills

    This skill should be used when the user asks to "write a post", "check my voice", "look up contact", "prepare for meeting", "weekly review", "track goals", or mentions personal brand, content…

    3.6k GitHub stars~1.7k tokensUpdated 1 mo ago
    Knowledge ManagementAuto-check passed

More from cwinvestments/memstack

All 87 skills in this repo
  • Memstack SEO Site Audit

    cwinvestments/memstack

    A skill your agent uses when the user says 'SEO audit', 'site audit', 'check SEO', 'audit my site', 'SEO check', 'technical SEO', or is evaluating a website's search engine optimization health, meta…

    423 GitHub stars~3.5k tokensUpdated 12 days ago
    Auto-check passed
  • Memstack SEO Schema Markup

    cwinvestments/memstack

    A skill your agent uses when the user says 'add schema', 'schema markup', 'JSON-LD', 'structured data', 'rich results', 'rich snippets', or is adding or fixing schema.org structured data for better…

    423 GitHub stars~2.7k tokensUpdated 12 days ago
    Auto-check passed
  • Compress

    cwinvestments/memstack

    A skill your agent uses when the user says 'tokenstack', 'compression', 'token savings', 'proxy status', or asks about context window usage.

    423 GitHub stars~1.2k tokensUpdated 12 days ago
    Auto-check passed
  • Echo

    cwinvestments/memstack

    A skill your agent uses when the user references past sessions, asks 'what did we do', 'do you remember', 'last session', 'recall', or 'continue from'.

    423 GitHub stars~1.7k tokensUpdated 12 days ago
    Auto-check passed
  • Familiar

    cwinvestments/memstack

    A skill your agent uses when the user says 'dispatch', 'send familiar', 'split task', or needs work split across parallel CC sessions.

    423 GitHub stars~556 tokensUpdated 12 days ago
    Auto-check passed
  • Forge

    cwinvestments/memstack

    A skill your agent uses when the user says 'forge this', 'new skill', 'create enchantment', or wants to create a MemStack skill.

    423 GitHub stars~505 tokensUpdated 12 days ago
    Auto-check passed

Questions about Diary

What does Diary do?

A skill your agent uses when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session. Diary is an agent skill from cwinvestments/memstack. Use when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.

When should I use Diary?

Diary fits situations like: the user says save diary; at end of a productive session.

How do I install Diary in Claude Code?

Run `npx skills add cwinvestments/memstack --skill diary -a claude-code`. Or copy the skill folder (skills/diary in cwinvestments/memstack) into .claude/skills/diary in your project. Claude Code loads it when a task matches its description.

How do I install Diary in Codex?

Run `npx skills add cwinvestments/memstack --skill diary -a codex`. Or copy the skill folder (skills/diary in cwinvestments/memstack) into .agents/skills/diary in your project. Codex loads it when a task matches its description.

Can I use Diary in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cwinvestments/memstack --skill diary -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/diary, .gemini/skills/diary, .github/skills/diary and .opencode/skills/diary in your project.

What does Diary need to run?

Going by SKILL.md and its folder, Diary needs the command-line tools its instructions call (python and git). Our summary lists: Python 3.

Does Diary access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Diary safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Diary use?

Diary is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Diary use?

About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Diary?

Skills that share tags, products or a category with Diary: LLM Wiki (lewislulu/llm-wiki-skill, 655 stars), Munger Perspective (alchaincyf/munger-skill, 379 stars), Daily Journal (huytieu/COG-second-brain, 1.3k stars) and Letterboxd Diary (joe-bell/skills, 211 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Diary?

cwinvestments (a GitHub user) maintains it in cwinvestments/memstack, which has 423 GitHub stars. The repository holds 87 skills in this directory. The repository was last updated on September 26, 2026.

Source: cwinvestments/memstack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.