memory-setup

Set up a persistent memory system for any AI coding agent (Claude Code, OpenCode, Assistant Runtime, OpenClaw, etc.). Covers workspace files, memory entry format, session-end extraction, daily garbage collection, multi-tier recall, and optional vector search. Use when someone wants their agent to remember things across sessions, set up memory, or configure persistent context.

9 stars

Best use case

memory-setup is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Set up a persistent memory system for any AI coding agent (Claude Code, OpenCode, Assistant Runtime, OpenClaw, etc.). Covers workspace files, memory entry format, session-end extraction, daily garbage collection, multi-tier recall, and optional vector search. Use when someone wants their agent to remember things across sessions, set up memory, or configure persistent context.

Teams using memory-setup should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/memory-setup/SKILL.md --create-dirs "https://raw.githubusercontent.com/exiao/skills/main/memory/memory-setup/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/memory-setup/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How memory-setup Compares

Feature / Agentmemory-setupStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Set up a persistent memory system for any AI coding agent (Claude Code, OpenCode, Assistant Runtime, OpenClaw, etc.). Covers workspace files, memory entry format, session-end extraction, daily garbage collection, multi-tier recall, and optional vector search. Use when someone wants their agent to remember things across sessions, set up memory, or configure persistent context.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Memory Setup

Set up persistent memory for an AI coding agent so it remembers context, preferences, decisions, and lessons across sessions. This is agent-agnostic — works with Claude Code, OpenCode, Hermes Agent, OpenClaw, or any agent that can read/write files.

## Core Principle

AI agents have no memory between sessions unless you write things to disk. Memory = files. This skill sets up the file structure, entry format, lifecycle hooks, and maintenance routines that make memory work end-to-end.

---

## Architecture Overview

```
                    SESSION START
                    ─────────────
                    Load MEMORY.md + USER.md → system prompt (frozen snapshot)
                    Load SOUL.md / AGENTS.md / CLAUDE.md → operating instructions
                            │
                            ▼
                    DURING SESSION
                    ──────────────
                    Agent writes to MEMORY.md / USER.md via tool or direct edit
                    Full transcript saved to session store (SQLite, JSONL, etc.)
                            │
                            ▼
                    SESSION END
                    ───────────
                    Extract durable facts from transcript → MEMORY.md / USER.md
                    Write episode summary → episodes/YYYY-MM-DD.md
                            │
                            ▼
                    DAILY MAINTENANCE (memory-gc)
                    ────────────────────────────
                    Decay stale entries │ Drain pending overflow
                    Promote durable facts from episodes │ Prune old files
```

## Step 1: Create the Workspace

Pick a home directory for your agent's memory. Common conventions:

| Agent | Default Location |
|-------|-----------------|
| Claude Code | `~/.claude/` or project `.claude/` |
| OpenCode | `~/.opencode/` |
| Hermes Agent | `~/.hermes/` |
| OpenClaw | `~/.openclaw/workspace/` |
| Generic | `~/.agent/` |

```bash
WORKSPACE="$HOME/.agent"  # adjust for your agent
mkdir -p "$WORKSPACE/memories"
mkdir -p "$WORKSPACE/episodes"
mkdir -p "$WORKSPACE/plans"
mkdir -p "$WORKSPACE/plans/archive"
mkdir -p "$WORKSPACE/sessions"
```

## Step 2: Create Core Memory Files

### MEMORY.md — Long-term curated memory

The primary memory file. Loaded into system prompt at session start. Contains durable facts, preferences, project context, and lessons learned.

```markdown
# MEMORY.md

> Durable facts and context. Loaded every session.
> Entry format: [YYYY-MM-DD][category] content
> Categories: fact, pref, env, proj:<path>, rel:<name>, task, tmp, rule, meta

§
```

**Entry format:** `[YYYY-MM-DD][cat] content`

| Category | Purpose | Decay |
|----------|---------|-------|
| `fact` | Durable facts | 60 days |
| `pref` | User preferences | 60 days |
| `env` | Environment/infra | 30 days |
| `proj:<path>` | Project-specific context | 30 days |
| `rel:<name>` | Info about a person | Never |
| `task` | Active tasks/goals | 14 days |
| `tmp` | Ephemeral notes | 7 days |
| `rule` | Hard behavioral constraints | Never |
| `meta` | System configuration | Never |

**Rules:**
- Date = creation date only, never updated
- `§` separator between entries
- `[rule]` entries are hard constraints the agent must follow
- Keep under ~100 entries — use `memory-gc` to prune

### USER.md — User profile

Loaded every session alongside MEMORY.md. Contains stable info about the user.

```markdown
# USER.md

- **Name:** (your name)
- **Timezone:** (e.g. America/New_York)
- **Communication style:** (how you like to be talked to)
- **Key preferences:** (tools, languages, frameworks you prefer)
```

### SOUL.md — Agent persona (optional)

Sets tone, personality, and boundaries. Some agents load this automatically; others need it referenced in CLAUDE.md or AGENTS.md.

```markdown
# SOUL.md

## Vibe
Direct, concise, casual. No corporate speak.

## Boundaries
- Private things stay private
- Ask before acting externally (emails, posts, deploys)

## Continuity
These files are your memory. Read them. Update them.
```

### AGENTS.md / CLAUDE.md — Operating instructions

Tell the agent HOW to use memory. Add a memory section to your existing context file:

```markdown
## Memory

- **Capture is automatic.** Session-end hooks extract durable memories.
  For urgent items, write inline: `[YYYY-MM-DD][cat] content`
- **Entry format:** `[YYYY-MM-DD][cat] content`
  Categories: fact, pref, env, proj:<path>, rel:<name>, task, tmp, rule, meta
- **[rule] entries** are hard behavioral constraints for the session.
- **Past-session queries** → use recall skill (hot → episodes → sessions).
  Never fabricate history.
- **Never fabricate a creation date.** If unsure, use today's.
```

## Step 3: Session-End Memory Extraction

At the end of each session, extract durable facts from the conversation and write them to memory files. This can be done via:

### Option A: Agent hook/plugin (recommended)

If your agent supports session-end hooks, configure one that:
1. Pulls the last 30-40 turns from the session transcript
2. Sends them to a fast model (e.g. Haiku, GPT-4o-mini) with an extraction prompt
3. Writes extracted entries to MEMORY.md / USER.md
4. Writes an episode summary to `episodes/YYYY-MM-DD.md`

**Extraction prompt template:**

```
Review this conversation. Extract durable memories worth keeping.

Return JSON:
{
  "entries": [
    {"cat": "fact|pref|env|task|tmp|rule", "target": "MEMORY|USER", "content": "..."}
  ],
  "episode": {
    "summary": "One paragraph summary of the session",
    "tags": ["tag1", "tag2"]
  }
}

Rules:
- Only extract what's worth remembering across sessions
- Skip small talk, debugging noise, routine commands
- Prefer specific facts over vague summaries
- Use the correct category for each entry
- If nothing worth saving, return empty arrays
```

### Option B: Manual prompt at end of session

If hooks aren't available, end sessions with:

> "Before we end, write any important decisions, preferences, or facts from this session to MEMORY.md using the `[YYYY-MM-DD][cat] content` format."

### Option C: CLAUDE.md instruction

Add to your CLAUDE.md:

```markdown
## Session End
Before ending any session, review the conversation for durable facts, decisions,
or corrections. Write them to MEMORY.md in `[YYYY-MM-DD][cat] content` format.
Write a 1-paragraph episode summary to episodes/YYYY-MM-DD.md.
```

## Step 4: Episode Summaries

Episodes are daily session summaries that form the middle tier of recall. Each day gets one file with all sessions appended:

**File:** `episodes/YYYY-MM-DD.md`

```markdown
## Episode — 2:30 PM

**Summary:** Set up CI pipeline for the new API. Decided on GitHub Actions over CircleCI. Fixed a flaky test in the auth module.

**Tags:** devops, ci, testing, auth

---

## Episode — 7:15 PM

**Summary:** Reviewed PR #42, discussed pricing strategy for the Pro tier. User prefers value-based pricing over cost-plus.

**Tags:** code-review, pricing, product
```

## Step 5: Multi-Tier Recall

When the agent needs to remember something from the past, search in order:

| Tier | Source | Method | Speed |
|------|--------|--------|-------|
| 1. Hot memory | MEMORY.md + USER.md | Already in context | Instant |
| 2. Episodes | `episodes/*.md` | Grep by tag/date, then read | Fast |
| 3. Sessions | Raw transcripts | Full-text search (FTS5, ripgrep) | Slow |

**Stop when confidence plateaus.** Don't search deeper tiers if you already found the answer.

**Always use both:**
- **Semantic search** (vector/embedding) for fuzzy concept matching
- **Exact search** (grep/ripgrep) for specific strings, names, IDs

## Step 6: Daily Garbage Collection

Run `memory-gc` daily (via cron, scheduled task, or manual) to keep memory files clean:

1. **Decay:** Remove stale entries by category (tmp=7d, task=14d, env=30d, fact/pref=60d, rule/meta=never)
2. **Drain:** Process `.pending.md` overflow into MEMORY.md
3. **Promote:** Scan last 7 days of episodes, promote 0-3 durable facts not already in memory
4. **Prune:** Delete memory files >90 days old, session files >180 days

See the `memory-gc` skill for the full implementation.

## Step 7: Optional — Vector Search

For large memory stores, add semantic vector search:

```bash
# Example: index memory files with embeddings
# Provider options: OpenAI, Gemini, Voyage, Ollama (local)

# Gemini (free tier available)
# Get key at https://aistudio.google.com/app/apikey
export GEMINI_API_KEY="your-key"

# OpenAI
export OPENAI_API_KEY="your-key"
```

Configure your agent's memory search to index both `memories/` and `sessions/` directories. The exact config depends on your agent platform.

## Step 8: Overflow Handling

When MEMORY.md gets too large (>100 entries), new entries should go to `.pending.md` instead. The daily GC drains pending entries after decaying old ones to make room.

```
memories/
├── MEMORY.md          ← Hot memory (target: ~60-100 entries)
├── USER.md            ← User profile
├── .pending.md        ← Overflow queue (drained by memory-gc)
└── .gc.log            ← GC audit log
```

## Step 9: Backup

Treat your agent's memory as irreplaceable. Back it up:

```bash
cd "$WORKSPACE"
git init
echo -e ".DS_Store\n.env\n**/*.key\n**/*.pem\n**/secrets*" > .gitignore
git add memories/ episodes/ SOUL.md
git commit -m "Initial memory setup"

# Push to a PRIVATE repo
gh repo create agent-memory --private --source . --push
```

Consider a periodic backup (cron every 30 min or daily) that auto-commits and pushes.

## File Layout Summary

```
$WORKSPACE/
├── SOUL.md                 ← Agent persona (optional)
├── AGENTS.md / CLAUDE.md   ← Operating instructions
├── memories/
│   ├── MEMORY.md           ← Hot memory (loaded every session)
│   ├── USER.md             ← User profile (loaded every session)
│   ├── .pending.md         ← Overflow queue
│   └── .gc.log             ← GC audit log
├── episodes/
│   └── YYYY-MM-DD.md       ← Daily session summaries
├── sessions/
│   └── *.jsonl             ← Raw transcripts (optional)
├── plans/
│   ├── <task>.md            ← Active plans
│   └── archive/             ← Completed plans
└── skills/                  ← Skill definitions
```

## Verification

After setup, test the memory loop:

1. Tell your agent: "Remember that my favorite color is blue."
2. End the session (or trigger session-end extraction)
3. Start a new session
4. Ask: "What's my favorite color?"

The agent should find it in MEMORY.md or via recall.

## Troubleshooting

| Problem | Fix |
|---------|-----|
| Agent doesn't remember anything | Check MEMORY.md is being loaded into system prompt at session start |
| Memory grows unbounded | Set up memory-gc cron job, check decay rules |
| Session-end extraction misses things | Increase turn count in extraction (try 40-50), check model isn't skipping |
| Recall returns nothing | Use both grep (exact) AND semantic search (fuzzy) — one alone misses things |
| .pending.md keeps growing | GC isn't running or MEMORY.md is at capacity — decay more aggressively |

Related Skills

memory-gc

9
from exiao/skills

Daily memory garbage collection for MEMORY.md / USER.md. Apply decay rules, drain .pending.md, consolidate near-duplicates, maintain canonical theme tags, prune old episode and session files. Invoke when asked to "run memory GC", "clean up memory", "apply memory decay", or from the scheduled cron job.

signing-setup

9
from exiao/skills

Set up bundle IDs, capabilities, signing certificates, and provisioning profiles with the asc cli. Use when onboarding a new app or rotating signing assets.

writer

9
from exiao/skills

Write content in Eric's voice — articles, blog posts, tweets, social media posts, marketing copy, newsletter drafts. Loads WRITING-STYLE.md and enforces kill phrases.

positioning-angles

9
from exiao/skills

Use when defining product positioning, choosing strategic angles, crafting value propositions, competitive positioning, product messaging, differentiation strategy, or go-to-market angles. Also use for 'how should I position my app', 'what angle should I use', 'painkiller vs vitamin', or 'market positioning'.

outline-generator

9
from exiao/skills

Use when generating outlines, article structures, content outlines, blog outlines, planning article sections, structuring posts, breaking down topics into sections, or organizing ideas for long-form content. Also use for 'outline this', 'structure this article', or 'plan the sections'.

last30days-open

9
from exiao/skills

Use only when the user explicitly asks for the open variant of last30days, including watchlists, briefings, and history queries. Sources: Reddit, X, YouTube, web.

last30days

9
from exiao/skills

Use when researching what happened in the last 30 days on a topic. Also triggered by 'last30'. Sources: Reddit, X, YouTube, web. Produces expert-level summary with copy-paste-ready prompts.

hooks

9
from exiao/skills

Use when generating hooks, headlines, titles, and scroll-stopping openers for content. Also use when analyzing viral posts, Reels, TikToks, YouTube Shorts, or successful social examples to extract reusable hook patterns and improve hook guidance.

evaluate-content

9
from exiao/skills

Use when judging content quality OR editing/improving existing copy: shareability, readability, voice, cuttability, angle, copy sweeps.

editor-in-chief

9
from exiao/skills

Use when a first draft is complete and all Phase 1 gates are done: topic selected (seo-research), title approved (hooks), outline approved (outline-generator), draft written (writer). Runs autonomous diagnosis-prescribe-rewrite loop before Substack.

copywriting

9
from exiao/skills

Write or improve marketing copy for any surface: pages, ads, app stores, landing pages, TikTok/Meta scripts, push notifications, UGC. Combines page copy frameworks with direct response principles.

content-strategy

9
from exiao/skills

Use when building content strategy: hooks, angles, and ideas from what's trending now. Covers organic and paid creative across TikTok, X, YouTube, Meta, LinkedIn.