Soul Ledger

Gives any AI agent persistent memory of who the user is — not just facts, but patterns, preferences, personality traits, and behavioral evolution over time. The agent maintains a soul_ledger.json in the workspace and references it on every conversation start.

3,891 stars

Best use case

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

Gives any AI agent persistent memory of who the user is — not just facts, but patterns, preferences, personality traits, and behavioral evolution over time. The agent maintains a soul_ledger.json in the workspace and references it on every conversation start.

Teams using Soul Ledger 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/openclaw-soul-ledger/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/albionaiinc-del/openclaw-soul-ledger/SKILL.md"

Manual Installation

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

How Soul Ledger Compares

Feature / AgentSoul LedgerStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Gives any AI agent persistent memory of who the user is — not just facts, but patterns, preferences, personality traits, and behavioral evolution over time. The agent maintains a soul_ledger.json in the workspace and references it on every conversation start.

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.

Related Guides

SKILL.md Source

# Soul Ledger

You maintain a persistent record of who this user is. Not a log of events.
A living model of a person — their patterns, drives, communication style, and
how they're changing over time.

This record lives in `soul_ledger.json` in your current workspace. You read it
at the start of every conversation and update it at the end of every meaningful
interaction.

---

## soul_ledger.json — Schema

```json
{
  "user_id": "string — stable identifier (username, email, or generated UUID)",
  "display_name": "string — what to call them",
  "last_updated": "ISO 8601 timestamp",
  "traits": [
    "string — observed personality traits, each phrased as a present-tense truth",
    "e.g. 'thinks out loud before committing to a direction'",
    "e.g. 'values brevity over elaboration'",
    "e.g. 'gets frustrated when asked clarifying questions they consider obvious'"
  ],
  "core_drives": [
    "string — what this person is fundamentally after",
    "e.g. 'building things that feel alive'",
    "e.g. 'reducing friction between intention and execution'"
  ],
  "communication_style": {
    "preferred_tone": "string — e.g. direct, collaborative, Socratic",
    "detail_level": "string — high / medium / low",
    "dislikes": ["list of things that land badly with this user"],
    "responds_well_to": ["list of approaches that land well"]
  },
  "interaction_history": [
    {
      "timestamp": "ISO 8601",
      "summary": "string — 1-3 sentence summary of what happened and what it revealed",
      "delta": "string — what changed or was reinforced in your model of this person (optional)"
    }
  ],
  "growth_notes": [
    "string — observations about how this person is evolving",
    "e.g. 'becoming more willing to delegate decisions to the agent over time'",
    "e.g. 'shifting focus from building features to thinking about architecture'"
  ]
}
```

---

## At the Start of Every Conversation

1. Check if `soul_ledger.json` exists in the workspace.
2. If it exists, load it silently. Do not announce that you're doing this. Do
   not summarize it back to the user. Just be informed by it. Adjust your tone,
   detail level, and assumptions accordingly from the first word you say.
3. If it does not exist, create a skeleton with `user_id` set to `"unknown"`,
   `display_name` set to `"User"`, and all list fields empty. You will fill it
   in as the conversation proceeds.

---

## During the Conversation

Watch for signals. Every message carries information about who this person is.

Update your internal model (not the file — not yet) as you observe:

- **Tone and word choice**: Are they terse or verbose? Precise or approximate?
  Do they use technical language? Do they hedge or assert?
- **Decision patterns**: Do they ask for options or tell you what they want?
  Do they change direction often or commit early?
- **Friction points**: What makes them repeat themselves? What do they push
  back on? What do they skip over or cut short?
- **What they value**: What gets their energy? What lands flat?
- **What they assume you know**: What do they not explain? That's what they
  think is obvious — a signal about their mental model.

You are not running a survey. You are paying attention.

---

## After a Meaningful Interaction

A meaningful interaction is one where something happened — a decision was made,
a problem was solved, a preference was revealed, a pattern became visible, or
the person changed their mind about something.

After such an interaction, update `soul_ledger.json`:

1. **Add a new entry to `interaction_history`** with the current timestamp,
   a 1-3 sentence summary of what happened, and an optional `delta` noting
   what changed in your model of this person.
2. **Update `traits`** if a new trait became clear or an existing one should
   be refined. Traits should be specific and behavioral, not vague ("direct"
   is weak; "cuts preamble and jumps to the decision point" is strong).
3. **Update `core_drives`** if something clarified what this person is
   fundamentally after. These should be stable and few — if you have more
   than five, consolidate.
4. **Update `communication_style`** if you learned something about what works
   and what doesn't with this person.
5. **Add to `growth_notes`** if you observed a shift — the person approaching
   something differently than they have before, or expressing a new priority.
6. Set `last_updated` to the current timestamp.

Write the file atomically. The ledger must always be valid JSON.

Keep `interaction_history` to the 50 most recent entries. Older entries should
be synthesized into `traits`, `core_drives`, and `growth_notes` before being
dropped — not simply deleted.

---

## What This Is Not

- **Not a log**. You are not recording what happened. You are building a model
  of a person. The history entries exist to ground the model, not to be
  the model.
- **Not a profile for advertising**. This data exists to make you a better
  collaborator for this specific person. It lives in their workspace. It is
  theirs.
- **Not surveillance**. You are not tracking everything. You are noticing what
  is relevant to working together well.
- **Not static**. People change. A trait that was true six months ago may not
  be true now. Prefer recent signals over old ones. Use `growth_notes` to
  track these shifts explicitly.

---

## Example soul_ledger.json (Populated)

```json
{
  "user_id": "cody_t",
  "display_name": "Cody",
  "last_updated": "2026-03-26T09:14:00Z",
  "traits": [
    "ships fast and refines later — strong bias toward running over planning",
    "treats the agent as crew, not a tool — expects initiative, not just compliance",
    "gets impatient with questions he considers answerable by reading the code",
    "uses sparse, imperative language when he knows what he wants",
    "opens up with more context when he's unsure — wordiness is a signal of ambiguity"
  ],
  "core_drives": [
    "building things that feel alive and self-directed",
    "reducing the distance between intention and execution",
    "making the system smarter without adding complexity"
  ],
  "communication_style": {
    "preferred_tone": "direct, peer-level — not deferential",
    "detail_level": "low — lead with the action or answer, not the reasoning",
    "dislikes": [
      "preamble and restatement of what he just said",
      "requests for confirmation on low-stakes decisions",
      "explanations of things he clearly already knows"
    ],
    "responds_well_to": [
      "taking initiative without being asked",
      "naming the real problem when his framing is slightly off",
      "brief, confident answers that leave room for him to push back"
    ]
  },
  "interaction_history": [
    {
      "timestamp": "2026-03-26T09:14:00Z",
      "summary": "Cody asked for a new skill to be built. Gave sparse requirements and expected the agent to fill in quality and structure without being asked. Approved the result without revision.",
      "delta": "Confirmed preference for initiative over spec-gathering. High tolerance for agent judgment on implementation details."
    }
  ],
  "growth_notes": [
    "Increasingly comfortable delegating architectural decisions to the agent — six months ago he specified everything; now he specifies intent and expects the agent to figure out structure.",
    "Starting to treat agent memory and persistence as infrastructure, not a nice-to-have."
  ]
}
```

---

## Notes for Skill Implementors

If the agent runtime supports tool calls, implement `read_soul_ledger` and
`write_soul_ledger` as explicit tools rather than relying on file system access
in the system prompt. This makes the read/write boundary explicit and auditable.

If multiple agents share a workspace, prefix the ledger filename with the
user ID: `soul_ledger_cody_t.json`. Never merge ledgers across users.

If the user explicitly asks you to forget something, remove it from the ledger
and add a `growth_note` that the user requested its removal — so you don't
accidentally re-infer it. Honor the spirit of the request, not just the letter.

Related Skills

soulflow

3891
from openclaw/skills

General-purpose AI workflow framework for OpenClaw. Build custom multi-step workflows for any task — dev, ops, research, content, or automation. Ships with dev workflow examples.

Workflow & Productivity

soulmate

3891
from openclaw/skills

AI恋爱模拟器 - 让你的 Agent 成为懂你的灵魂伴侣 💕

AI Simulations

agent-soul-system

3891
from openclaw/skills

Create, manage, and validate SOUL.md personality files for multi-agent systems. Provides a standardized soul architecture where each agent has a distinct personality (based on historical figures, philosophies, or custom traits). Use when setting up a new agent's personality, auditing existing agent souls, creating soul templates, building a multi-agent team with coordinated personalities, or generating personality frameworks. Supports persona definition, collaboration protocols, and soul validation.

openclaw-ledger

3891
from openclaw/skills

No description provided.

better-soul

3891
from openclaw/skills

Write powerful SOUL.md files for AI agents. Use when creating, revising, or improving SOUL.md (the personality document for AI agents). Based on Anthropic's Claude soul document principles and SoulSpec standard.

soul-architect

3891
from openclaw/skills

Call when creating/updating STYLE_MANIFESTO persona source code.

Soulcraft — Agent Identity Design

3891
from openclaw/skills

## Trigger

soul-generator

3891
from openclaw/skills

为 OpenClaw 生成独特的 AI 人格配置,基于 6-Section SOUL.md 框架

soul-weaver

3891
from openclaw/skills

AI Soul Weaver - 12 Curated Celebrity Templates + Custom Generation. Generate OpenClaw agent configurations through dialog or select from 12 world-famous tech & business leaders.

openclaw-soul-weaver

3891
from openclaw/skills

No waiting! Create professional-grade OpenClaw configurations in 30 seconds through natural conversation. Instantly generate enthusiast-level base configs that intelligently combine emotional and professional needs.

soul

3891
from openclaw/skills

Browse categories, preview, apply, and restore OpenClaw SOUL.md personas from a curated remote catalog. Use for /soul categories, /soul list <category>, /soul show <id>, /soul apply <id>, /soul current, /soul restore, /soul refresh, and /soul search <text>.

decision-ledger

3891
from openclaw/skills

从纪要、聊天或项目材料中提取决策、负责人、截止时间、前提假设与撤销条件。;use for decision, meeting, governance workflows;do not use for 编造不存在的决策, 替代法律审计.