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…
A skill your agent uses when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.
$ npx skills add cwinvestments/memstack --skill diary -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cwinvestments/memstack diary --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "diary" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/diary into .claude/skills/diary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diary", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cwinvestments/memstack/tree/master/skills/diaryType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cwinvestments/memstack --skill diary -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cwinvestments/memstack diary --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/diary .agents/skills/diary && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "diary" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/diary into .agents/skills/diary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diary", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cwinvestments/memstack --skill diary -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cwinvestments/memstack diary --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/diary .cursor/skills/diary && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "diary" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/diary into .cursor/skills/diary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diary", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cwinvestments/memstack.git --path skills/diary--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cwinvestments/memstack --skill diary -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cwinvestments/memstack diary --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/diary .gemini/skills/diary && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "diary" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/diary into .gemini/skills/diary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diary", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cwinvestments/memstack diaryInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cwinvestments/memstack --skill diary -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/diary .github/skills/diary && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "diary" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/diary into .github/skills/diary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diary", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cwinvestments/memstack --skill diary -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cwinvestments/memstack diary --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/diary .opencode/skills/diary && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "diary" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/diary into .opencode/skills/diary/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diary", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
diaryA 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.
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.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 00370ce. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
pythongitFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from cwinvestments/memstack at commit 00370ce, republished under its MIT licence (© cwinvestments). 2,426 words, ~5,023 tokens.
.claude/skills/diary/SKILL.md (or your agent's skills folder).Document what was accomplished in each CC session for future recall.
When this skill activates, output:
📓 Diary: Logging session...
Then execute the protocol below.
| Context | Status | Priority |
|---|---|---|
| User says "save diary", "log session", "write diary" | ACTIVE: write diary | P1 |
| User explicitly says they're done ("that's it", "wrapping up") | ACTIVE, suggest diary if work was done | P2 |
| Multi-agent session (Builder/Reviewer role) | DORMANT: Manager handles diary | none |
| Mid-session, user is actively coding | DORMANT, don't interrupt flow | none |
| Casual conversation, no code changes made | DORMANT: nothing to log | none |
| User asks to recall past sessions ("what did we do") | DORMANT, Echo handles recall, not Diary | none |
| User says "save project" or "handoff" | DORMANT, Project skill handles this | none |
| Session just started, no work yet | DORMANT: nothing to log | none |
When the user asks to save a diary, keep these in mind:
| Temptation | Why 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. |
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.
Summarize the session:
Check git log for commits:
git log --oneline -10Format the diary entry:
# 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]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.
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:
{"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>"}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.
cat insight.json | python "${CLAUDE_PLUGIN_ROOT}/db/memstack-db.py" add-insight -insight.json contains:
{"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.
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.
cat context.json | python "${CLAUDE_PLUGIN_ROOT}/db/memstack-db.py" set-context -context.json contains:
{"project":"<name>","last_session_date":"<YYYY-MM-DD>"}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:
| Attempt | Name |
|---|---|
| 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.
Ingest the FACTS block into the Memory Engine, right after the markdown is written:
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:
| Exit | Meaning |
|---|---|
| 0 | Nothing was lost: facts ingested, an all-duplicates re-run, or no FACTS block at all (which prints nothing at all). |
| 1 | Total loss. The block held lines and not one of them ingested. |
| 2 | Store 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.
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]memstack.dashboard.start, adminstack.portal.auth). Group related facts under a shared prefix.|.verified (you saw it work / read the code / ran it), reported (stated but unconfirmed), inferred (deduced), assumed (a guess: scored lowest).## 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 | correctionverified over reported. If you actually confirmed it, say so, verified facts are trusted and decay slowest. Don't inflate: an unconfirmed claim is reported.| Gotcha | Why it matters |
|---|---|
| The markdown filename is computed, never assumed | On 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 stale | The 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 FACTS | diary_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 backup | The markdown is an export. If it is gone, restore it from raw_markdown in the sessions table rather than rewriting it from memory. |
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.
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.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.
.claude/diary/{date}-compaction.md, one file per day, appends on multiple compactionsCOMPACTION_INTERRUPTED so the next session knows context was cut| Data | Source |
|---|---|
| Uncommitted changes | git status --short |
| Recent commits | git log --oneline -5 |
| Recent shell commands | Shell history (last 5) |
| Recently modified files | Files modified since last git operation |
| Branch and project | Git branch + directory name |
| Manual Diary | PreCompact Diary | |
|---|---|---|
| Trigger | User says "save diary" | Automatic before compaction |
| Content | Full narrative with decisions, handoff | Snapshot of working state |
| Storage | SQLite + memory/sessions/ | .claude/diary/ only |
| Purpose | Session documentation | Context recovery after compaction |
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.
Hook is registered in .claude/settings.json under PreCompact. Script lives at .claude/hooks/pre-compact.sh. Always exits 0: must never block compaction.
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.
| Event | Script | Matcher | Timeout | Purpose |
|---|---|---|---|---|
| PreToolUse | pre-tool-notify.sh | Write|Edit|MultiEdit|Bash | 10s | TTS voice alert before approval prompts |
| PreToolUse | pre-push.sh | Bash (git push) | 60s | Build verification + secrets scan before push |
| PostToolUse | post-commit.sh | Bash (git commit) | 10s | Debug artifact + secrets scan after commit |
| PostToolUse | post-tool-monitor.sh | Write|Edit|MultiEdit|Bash | 10s | Observation capture, logs tool calls to .claude/observations/ |
| SessionStart | session-start.sh | (all) | 10s | CLAUDE.md indexing, monitoring ping |
| SessionStart | session-context-load.sh | (all) | 15s | Context injection, last 3 diary + observation summaries → .claude/session-context.md |
| Stop | session-end.sh | (all) | 10s | Monitoring API session-complete ping |
| PreCompact | pre-compact.sh | (all) | 15s | Auto-save diary snapshot before context compaction |
settings.json, giving it its own timeout budget.claude/observations/YYYY-MM-DD.md: daily files, append-only.claude/session-context.md on each new session.claude/observations/ and .claude/session-context.md are in .gitignore (ephemeral runtime output).claude/hooks/ and use ${CLAUDE_PROJECT_DIR} for portable path resolution.claude/rules/diary.md), always-on session logging awareness without skill file read. (Origin: MemStack v3.0-beta, Feb 2026)## 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
Just SKILL.md in skills/diary of cwinvestments/memstack.
Open the folder on GitHubat commit 00370ce
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Diary this skillcwinvestments/memstack | 423 | — | ~5k | Automated safety check: Pass | MIT | |
| LLM Wikilewislulu/llm-wiki-skill | 655 | — | ~3.7k | Automated safety check: Pass | None | |
| Munger Perspectivealchaincyf/munger-skill | 379 | 1 repos | ~3.7k | Automated safety check: Pass | MIT | |
| Daily Journalhuytieu/COG-second-brain | 1.3k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Letterboxd Diaryjoe-bell/skills | 211 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Em Grid Scorermanager-dot-dev/manager-skills | 114 | — | ~5.8k | Automated safety check: Pass | MIT |
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…
alchaincyf/munger-skill
查理·芒格的思维框架与表达方式。基于《穷查理宝典》、伯克希尔/Daily Journal股东会、 USC/哈佛演讲、访谈记录、外部批评等50+来源的深度调研, 提炼5个核心心智模型、8条决策启发式和完整的表达DNA。
huytieu/COG-second-brain
A passive daily work journal that Claude keeps FOR you so you never have to write it yourself.
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.
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.
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…
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…
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…
cwinvestments/memstack
A skill your agent uses when the user says 'tokenstack', 'compression', 'token savings', 'proxy status', or asks about context window usage.
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'.
cwinvestments/memstack
A skill your agent uses when the user says 'dispatch', 'send familiar', 'split task', or needs work split across parallel CC sessions.
cwinvestments/memstack
A skill your agent uses when the user says 'forge this', 'new skill', 'create enchantment', or wants to create a MemStack skill.
Categories
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.
Diary fits situations like: the user says save diary; at end of a productive session.
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.
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.
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.
Going by SKILL.md and its folder, Diary needs the command-line tools its instructions call (python and git). Our summary lists: Python 3.
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.
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.
Diary is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
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.
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.
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.