Personal knowledge base for capturing and retrieving information about people, places, restaurants, games, tech, events, media, ideas, and organizations. Use when: user mentions a person, place, restaurant, landmark, game, device, event, book/show, idea, or company. Trigger phrases: "remember", "note that", "met this person", "visited", "played", "what do I know about", etc. Brain entries take precedence over daily logs for named entities.
A personal knowledge management system for capturing and retrieving information about people, places, things, and ideas.
Brain takes precedence over daily logs for named entities.
Trigger this skill when:
Keywords that trigger: "remember", "note that", "met this person", "visited", "played", "watched", "read", "idea:", "what do I know about", "who is", "where was"
⚠️ Do NOT put brain-eligible content in daily logs. If it's a named entity (person, place, restaurant, product, game, etc.), it belongs in , not . Daily logs are for session context and ephemeral notes only.
brain/memory/YYYY-MM-DD.md🚨 MEDIA FILES MUST BE SAVED. When user sends photos/audio/video/PDFs about a brain entry, you MUST save the actual file to attachments/. Transcribing content is NOT the same as saving the file. Do BOTH.
All brain data lives in: ~/.openclaw/workspace/brain/
brain/
people/ # Contacts, people you've met
places/ # Restaurants, landmarks, venues
games/ # Video games and interactions
tech/ # Devices, products, specs, gotchas
events/ # Conferences, meetups, gatherings
media/ # Books, shows, films, podcasts
ideas/ # Business ideas, concepts, thoughts
orgs/ # Companies, communities, groups
This skill uses OpenClaw's built-in memory_search and memory_get tools, which work out of the box with any configured memory backend.
Use memory_search for all brain lookups:
memory_search("Raven Duran") # find a person
memory_search("Mamou Prime restaurant") # find a place
memory_search("what games has Raven played") # natural language
memory_search works transparently whether the backend is the built-in SQLite indexer or QMD. No direct CLI calls needed.
Use memory_get to read a specific brain file once you know its path:
memory_get("brain/people/raven-duran.md")
memory_get("brain/places/mamou-prime-sm-podium/mamou-prime-sm-podium.md")
Only use the qmd CLI directly when searching a non-workspace collection (e.g., the skills collection). For all brain lookups, use memory_search.
# Only for skills collection or non-workspace paths:
export PATH="$HOME/.bun/bin:$PATH"
qmd search "keyword" -c skills
memory_search("<name or topic>") to check for existing entriesskills/brain/templates/memory_search or direct path if knownlast_updated fieldmemory_search("<natural language question>") for semantic searchWhen user references something ambiguous (e.g., "John"):
memory_search("John")Found 2 matches for "John":
1. John Smith (Symph colleague, met 2024)
2. John Doe (GeeksOnABeach speaker, met 2026)
Which one?
Templates live in skills/brain/templates/. Each has:
When creating a new entry:
brain/<category>/<slug>.md| Category | Folder | Use For |
|---|---|---|
| People | brain/people/ | Anyone user has met or wants to remember |
| Places | brain/places/ | Restaurants, landmarks, venues, locations |
| Games | brain/games/ | Video games — status, opinions, notes |
| Tech | brain/tech/ | Devices, products, specs, quirks |
| Events | brain/events/ | Conferences, meetups, gatherings |
| Media | brain/media/ | Books, shows, films, podcasts |
| Ideas | brain/ideas/ | Business ideas, concepts, random thoughts |
| Orgs | brain/orgs/ | Companies, communities, groups |
Use wikilink-style references to connect entities:
[[people/raven-duran]] — link to a person[[events/geeksonabeach-2026]] — link to an event[[orgs/symph]] — link to an orgThis makes relationships explicit and searchable.
User says: "Hey, I just met this guy called Raven Duran. He's positioning himself as an Agentic coder, met him at GeeksOnABeach PH last February."
Agent does:
memory_search("Raven Duran") → no resultsskills/brain/templates/person.mdbrain/people/raven-duran.md with filled templatebrain/events/geeksonabeach-ph-2026.md and linkUser says: "The Raven Duran guy, he's still 26 years old"
Agent does:
memory_search("Raven Duran") → finds brain/people/raven-duran.mdmemory_get("brain/people/raven-duran.md"), update age: 26 in frontmatter- **2026-02-21**: Confirmed still 26 years oldlast_updated fieldBrain entries can have attachments: photos, PDFs, videos, audio, transcripts, etc.
When user sends ANY media (photos, audio, video, PDF) related to a brain entry:
attachments/ — this is NON-NEGOTIABLE"Saved" means the FILE exists in attachments/, not just that content was transcribed.
# REQUIRED: Copy the file
cp /path/to/inbound/media.jpg brain/places/entry/attachments/descriptive-name.jpg
If you transcribed content but didn't save the file → YOU DID IT WRONG. Go back and save it.
Flat file (no attachments):
brain/places/manam.md
Folder structure (with attachments):
brain/places/mamou-prime-sm-podium/
mamou-prime-sm-podium.md # Profile (keeps original name)
attachments/
index.md # Describes each attachment
menu-page-1.jpg
menu-page-2.jpg
receipt.pdf
storefront.mp4
attachments/index.md)# Attachments
| File | Description | Added |
|------|-------------|-------|
| menu-page-1.jpg | Menu first page, mains section | 2026-02-21 |
| menu-page-2.jpg | Menu second page, desserts | 2026-02-21 |
| receipt.pdf | Receipt from Feb visit, ₱2,400 | 2026-02-21 |
| storefront.mp4 | Quick video of the entrance | 2026-02-21 |
QMD (if enabled) indexes this file, making attachments searchable by description.
When user sends media about an entity (e.g., "Here's the menu for Mamou Prime"):
Find the entry — memory_search("Mamou Prime") → brain/places/mamou-prime-sm-podium.md
Convert to folder structure (if flat file):
# Create folder
mkdir -p brain/places/mamou-prime-sm-podium/attachments
# Move profile into folder
mv brain/places/mamou-prime-sm-podium.md brain/places/mamou-prime-sm-podium/
# Create attachments index
touch brain/places/mamou-prime-sm-podium/attachments/index.md
Save media to attachments/ with descriptive filename
Update attachments/index.md with file description
Do BOTH:
attachments/The text is searchable and processable. The originals are preserved artifacts.
Never discard attachments unless user explicitly says "cleanup", "remove", or "delete" the files.
Example: User sends menu photos
attachments/menu-1.jpg, menu-2.jpgattachments/index.mdWrong: Only transcribing without saving originals
Be descriptive — the index provides context:
menu-1.jpg, menu-2.jpgbusiness-card.jpgproduct-demo.mp4meeting-transcript.mdvoice-memo-2026-02-21.mp3User sends: 2 photos with message "Menu at Mamou Prime"
Agent does:
brain/places/mamou-prime-sm-podium.md via memory_search("Mamou Prime")attachments/menu-1.jpg, attachments/menu-2.jpgattachments/index.md:
# Attachments
| File | Description | Added |
|------|-------------|-------|
| menu-1.jpg | Menu page 1 (transcribed to profile) | 2026-02-21 |
| menu-2.jpg | Menu page 2 (transcribed to profile) | 2026-02-21 |