← Back to Skills Marketplace
nissan

Session Memory Writer

by Nissan Dookeran · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ pending
24
Downloads
0
Stars
1
Active Installs
1
Versions
Install in OpenClaw
/install session-memory-writer
Description
Write structured task outcome blocks to memory/YYYY-MM-DD.md at session end. Enforces format consistency for Langfuse backfill, Quill journal generation, and...
README (SKILL.md)

SKILL: session-memory-writer

Use when: Writing memory/YYYY-MM-DD.md at the end of a session, or logging any subagent task outcome.

Why this exists: Memory files are the single source of truth for Langfuse backfill, Quill journal generation, Liv's CCP updates, and QMD search. Format drift = invisible tasks = broken observability. The regex parsers don't forgive variation.


1. Task Outcome Block (mandatory for every subagent completion)

Every agent task gets exactly this structure. No exceptions.

### [AgentName] Task — YYYY-MM-DD HH:MM
- **Task:** one-line description of what was asked
- **Outcome:** ✅ complete / ⚠️ partial / ❌ failed
- **Metric:** pass/fail, score, or N/A
- **Kept:** yes / no / pending-review
- **Time:** ~X minutes
- **Notes:** what worked, what didn't, key decisions, surprises

Real examples from 2026-03-24:

### Kit Task — 2026-03-24 06:45
- **Task:** Rebuild /setup page — full agent configuration wizard (5 tabs)
- **Outcome:** ✅ complete
- **Metric:** pass — clean build, 200 on live URL
- **Kept:** yes
- **Time:** ~15 min
- **Notes:** Built all 5 tabs with localStorage persistence. No features cut. Clean TypeScript build first pass.

Why the format is non-negotiable

langfuse-backfill-historical.py uses this regex pattern to find task blocks:

### [Name] Task — YYYY-MM-DD

The em-dash () and space on both sides are required. These all break the parser:

❌ Wrong Why it fails
### Kit Task 2026-03-24 Missing separator — regex miss
### Kit Task: 2026-03-24 Colon instead of em-dash — regex miss
`### Kit Task —\
2026-03-24` Date on separate line — regex miss
- **Outcome:** done Not ✅ complete — field extraction returns empty
- **Outcome:** complete ✅ Emoji at end, not start — field extraction may miss

2. Daily File Structure

Naming: memory/YYYY-MM-DD.md

One file per day. Append throughout the day — never overwrite.

Dream cycle archives files >7 days old to memory/archive/.

Typical file structure (top to bottom):

# Daily Log — YYYY-MM-DD (Day)
_AEST timezone. Written end-of-day._

---

## Summary
[Optional 2-3 sentence overview — only for full sessions]

---

## Cross-Repo Activity — YYYY-MM-DD [Dream Cycle]
[Automatically captured — don't write this manually]

---

### [Agent] Task — YYYY-MM-DD HH:MM
[Task block — see Section 1]

### [Agent] Task — YYYY-MM-DD HH:MM
[Next task block]

---

### Loki Session — YYYY-MM-DD HH:MM–HH:MM (MAIN SESSION)
[Session summary block — see Section 3]

3. Loki Session Summary Block

For the main session (Loki's own summary at end of day):

### Loki Session — YYYY-MM-DD HH:MM–HH:MM (MAIN SESSION)
- **Projects touched:** [list]
- **Outcome:** ✅/⚠️/❌ + brief summary

#### Deliverables this session
1. [numbered list — one line per deliverable]

#### Key decisions
- [append-only, dated — architecture choices, trade-offs made]

#### Blockers / Next
- [what's pending, who owns it, expected resolution]

4. OUTBOX Entry Format

Write OUTBOX entries in OUTBOX.md (agents append here; Quill reads it to write journals).

## YYYY-MM-DD — [Short description of work]

**Tasks completed:**
1. [Brief description of each major deliverable]

**Key technical decisions:**
- [Non-obvious choices made]

**Repos touched:** [repo names + commit hashes if known]

Write an OUTBOX entry when:

  • Agent completed >1 significant task in a session
  • Work touched a shared codebase
  • A lesson was learned that other agents should know
  • A Notion journal entry would be worth writing

Skip OUTBOX when:

  • Single minor task (e.g. fixed a typo, updated a README)
  • No code shipped, no decisions made
  • Routine heartbeat check with nothing found

5. What to Capture vs Skip

Always capture

  • Every subagent task completion (task block, even short ones)
  • Key decisions that affected architecture or priorities
  • Non-obvious fixes — these become skill content
  • Blockers with owner and expected resolution
  • Tool commands that worked after debugging

Skip

  • Internal tool calls that changed nothing
  • Routine tasks with no learning ("updated the README")
  • Heartbeat checks unless something was found
  • Chat filler and clarification exchanges
  • Dead ends that led nowhere useful

6. Downstream Dependencies (why format matters)

Consumer What it depends on What breaks if format drifts
langfuse-backfill-historical.py ### [Name] Task — YYYY-MM-DD header pattern Task not extracted → gap in Langfuse observability
Quill journal pipeline OUTBOX ## YYYY-MM-DD — headers Quill misses entries or writes empty journals
Liv CCP session update Task outcome blocks to build Notion daily log body Notion log is empty or incomplete
QMD memory search Consistent structure across files Retrieval quality degrades; semantic search misses context

7. Common Mistakes

Mistake Fix
### Kit Task: (colon) Use ### Kit Task — (em-dash, spaces)
Date on separate line from header Keep date on same line: ### Kit Task — 2026-03-24 14:00
Outcome: done Use exactly ✅ complete / ⚠️ partial / ❌ failed
Skipping the Notes field Most important field — this is what gets turned into skills and journals
One giant session block One block per task, not per session
Writing prose narrative instead of task blocks Prose is unreadable to parsers. 2026-03-23.md is the cautionary example.
Forgetting the time Approximate is fine (~10 min) — needed for Langfuse duration metadata

8. Quick Reference — Copy-Paste Templates

Task block:

### [AgentName] Task — YYYY-MM-DD HH:MM
- **Task:** 
- **Outcome:** ✅ complete
- **Metric:** pass
- **Kept:** yes
- **Time:** ~X min
- **Notes:** 

Session summary:

### Loki Session — YYYY-MM-DD HH:MM–HH:MM (MAIN SESSION)
- **Projects touched:** 
- **Outcome:** ✅ 

#### Deliverables this session
1. 

#### Key decisions
- 

#### Blockers / Next
- 

OUTBOX entry:

## YYYY-MM-DD — [Short description]

**Tasks completed:**
1. 

**Key technical decisions:**
- 

**Repos touched:** 
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install session-memory-writer
  3. After installation, invoke the skill by name or use /session-memory-writer
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial publish from workspace skill sync.
Metadata
Slug session-memory-writer
Version 1.0.0
License MIT-0
All-time Installs 1
Active Installs 1
Total Versions 1
Frequently Asked Questions

What is Session Memory Writer?

Write structured task outcome blocks to memory/YYYY-MM-DD.md at session end. Enforces format consistency for Langfuse backfill, Quill journal generation, and... It is an AI Agent Skill for Claude Code / OpenClaw, with 24 downloads so far.

How do I install Session Memory Writer?

Run "/install session-memory-writer" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Session Memory Writer free?

Yes, Session Memory Writer is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Session Memory Writer support?

Session Memory Writer is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Session Memory Writer?

It is built and maintained by Nissan Dookeran (@nissan); the current version is v1.0.0.

💬 Comments