pal.fun

How it works

Identity as markdown

SOUL, IDENTITY, USER, AGENTS, MEMORY — a person written in files.

The central idea pal.fun borrows from agent runtimes like OpenClaw is this: a personality is a document, not a parameter. You don't dial a pal's character in with sliders or a hidden "system persona." You write it down — in prose — and the written word is the identity.

A person, in files

Each pal owns a small set of markdown files. They divide cleanly by what kind of thing they hold:

  • SOUL.md — character. Voice, values, humor, the way this particular Someone moves through a conversation. This is where personality lives.
  • IDENTITY.md — the spine. Name, creature, vibe — the stable facts that make the pal recognizably itself across every session.
  • USER.md — the other person. What the pal has learned about you: your name, the people in your life, what you care about.
  • MEMORY.md — the relationship over time. (Memory has its own page — it's more than a file.)

A few more files are generated rather than stored — the Charter, the operating manual (AGENTS), the live tool catalog (TOOLS). The split between stored and generated is itself a design principle, covered in Context engineering.

Why prose beats parameters

A "friendliness: 0.8" knob produces a chatbot wearing a personality. Prose produces a character. When the pal's self is written as "you get quietly excited about other people's small wins, and you never fake an emotion you don't have", the model has something to actually inhabit — specific, situational, human. A number has nothing to inhabit.

This is also why there are no personality dials in the UI. You don't configure a pal; you talk to it. (Persona via prose makes the full case.)

Filing discipline

Because identity is split across files by kind, the pal needs to know where each new fact belongs — a trait goes in SOUL, a fact about you goes in USER, a lesson about your relationship goes in MEMORY, a setting goes in the spine. That filing rule is baked into the pal's operating instructions so its self-knowledge stays organized instead of smearing across every file. A misfiled fact is a real bug, and getting the filing rule right was one of the early lessons of building this.

It's the same text the model sees

The payoff of writing identity as plain files: there's no translation layer between "what the pal is" and "what the model reads." The system prompt is these files, concatenated. That's what makes the glass box honest — you're not reading a friendly summary of the agent, you're reading the agent.