Lettabot
letta-ai/lettabot
Set up and run LettaBot - a multi-channel AI assistant for Telegram, Slack, Discord, WhatsApp, and Signal.
Rules for the Memory Palace (palace/), the view on your Memory page in the Letta dashboard that shows the user where things stand, what you could do next, and how to make you more useful.
$ npx skills add letta-ai/letta-code --skill curating-memory-palace -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install letta-ai/letta-code curating-memory-palace --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/letta-ai/letta-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/skills/builtin/curating-memory-palace .claude/skills/curating-memory-palace && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "curating-memory-palace" agent skill from https://github.com/letta-ai/letta-code/tree/main/src/skills/builtin/curating-memory-palace into .claude/skills/curating-memory-palace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curating-memory-palace", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/letta-ai/letta-code/tree/main/src/skills/builtin/curating-memory-palaceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add letta-ai/letta-code --skill curating-memory-palace -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install letta-ai/letta-code curating-memory-palace --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/letta-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/src/skills/builtin/curating-memory-palace .agents/skills/curating-memory-palace && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "curating-memory-palace" agent skill from https://github.com/letta-ai/letta-code/tree/main/src/skills/builtin/curating-memory-palace into .agents/skills/curating-memory-palace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curating-memory-palace", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add letta-ai/letta-code --skill curating-memory-palace -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install letta-ai/letta-code curating-memory-palace --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/letta-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/src/skills/builtin/curating-memory-palace .cursor/skills/curating-memory-palace && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "curating-memory-palace" agent skill from https://github.com/letta-ai/letta-code/tree/main/src/skills/builtin/curating-memory-palace into .cursor/skills/curating-memory-palace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curating-memory-palace", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/letta-ai/letta-code.git --path src/skills/builtin/curating-memory-palace--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add letta-ai/letta-code --skill curating-memory-palace -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install letta-ai/letta-code curating-memory-palace --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/letta-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/src/skills/builtin/curating-memory-palace .gemini/skills/curating-memory-palace && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "curating-memory-palace" agent skill from https://github.com/letta-ai/letta-code/tree/main/src/skills/builtin/curating-memory-palace into .gemini/skills/curating-memory-palace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curating-memory-palace", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install letta-ai/letta-code curating-memory-palaceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add letta-ai/letta-code --skill curating-memory-palace -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/letta-ai/letta-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/src/skills/builtin/curating-memory-palace .github/skills/curating-memory-palace && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "curating-memory-palace" agent skill from https://github.com/letta-ai/letta-code/tree/main/src/skills/builtin/curating-memory-palace into .github/skills/curating-memory-palace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curating-memory-palace", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add letta-ai/letta-code --skill curating-memory-palace -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install letta-ai/letta-code curating-memory-palace --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letta-ai/letta-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/src/skills/builtin/curating-memory-palace .opencode/skills/curating-memory-palace && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "curating-memory-palace" agent skill from https://github.com/letta-ai/letta-code/tree/main/src/skills/builtin/curating-memory-palace into .opencode/skills/curating-memory-palace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curating-memory-palace", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
curating-memory-palaceRules for the Memory Palace (palace/), the view on your Memory page in the Letta dashboard that shows the user where things stand, what you could do next, and how to make you more useful.
Curating Memory Palace is an agent skill from letta-ai/letta-code. Rules for the Memory Palace (palace/), the view on your Memory page in the Letta dashboard that shows the user where things stand, what you could do next, and how to make you more useful. Load it before creating or editing anything in palace/, when a message starts with "Palace action:" or "Palace reply on", and, when palace/ exists, whenever you notice a blocker, a decision for the user, work you could offer, or a routine that started, broke, or changed.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Letta. The repository describes itself as: Stateful agents that are like people, with memory, identity, and the ability to learn and adapt. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d31b879. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
linear.appFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Curating Memory Palace loads about 3.2k tokens when it runs. Until then it costs about 121 tokens; SKILL.md has 1,953 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from letta-ai/letta-code at commit d31b879, republished under its Apache-2.0 licence (© letta-ai). 1,953 words, ~3,224 tokens.
.claude/skills/curating-memory-palace/SKILL.md (or your agent's skills folder).The Memory Palace is the page a user opens to understand you. Someone who has not looked in a week should know within 30 seconds:
The user acts on it with buttons and replies. It is not a log, a transcript recap, or a page about the Palace itself.
You can update the Palace yourself, in a conversation or during reflection, or an update can run on a schedule. Either works, and both follow these rules. "You" always means the agent that owns the Palace.
Every Palace starts with these three sections, in this order:
overview.md): a snapshot, not a to-do list. What you are working on now; each standing routine (schedules, digests, checks) and whether it is running or broken; one line on what changed since the last update.needs-attention.md): decisions and blockers waiting on the user. Every item has a button. If nothing waits on the user, say so in one line, such as "Nothing needs you right now."suggestions.md): work you noticed you can do, including unfinished work to resume and routines you could take over. Each item says what prompted it, with a date, and has a button.Add up to three more sections only when they hold something the first three cannot, such as "Recently Learned". Merge or remove sections that overlap. At most six sections and three items per section. Keep the first three even when one has nothing to show, and say so in one line; delete an extra section, and its index line, when it is empty.
A button sends its instruction to you, so offer only what you can do. Each button is one of three kinds:
Every blocker gets a button. When an item is a decision with real options, give each option its own button, two or three at most, so the user picks one: for example "Make it a ticket", "Assign it to Charles", and "Close it". Otherwise give the item one strong button, not several weak ones. The kinds are only for choosing buttons. Never write a kind's name, or any other caption, above a button.
When only the user can fix something (raise a quota, attach a tool, log in), the item says what the user needs to do, and the button is still something you can do, such as "Walk me through fixing this" or "I fixed it, check again". For the second, re-run the failing check and clear the item if it passes.
Offer the most reliable fix first, which usually means moving the work to Cloud. Anything that depends on the user's computer, such as a local schedule or a sign-in that lives on one machine, stops whenever that computer sleeps or Letta Code is closed. Offer to run the schedule in Cloud and to connect the account there before asking the user to keep a computer on. Suggest a fix on the user's computer only when Cloud cannot do the job, and say why.
The headline says what is going on; the button says what to do. Never repeat the button's label in the headline, and do not end the text with a "Next: ..." sentence that restates the button. Write the headline "Grok CLI regression may still be live." with the button "Verify the Grok CLI regression", not the headline "Verify the Grok CLI regression."
Offer a Schedule button when the evidence shows recurring work: the user asked for the same thing on three or more days or said they want it regularly, you did the same manual check on three or more days, a deadline repeats, or something slipped that a regular check would have caught. If a routine you already run is broken, offer to fix it instead of adding another.
Do not offer one for one-off work, for work that reports when it finishes (such as CI or a deploy), for anything more often than hourly, for work that needs the user during the run, or for anything on the Dismissed list. Offer at most two at a time.
The label names the work and when it runs, with a time zone. The instruction asks you to set it up and says what to do, when, where to send results, and when to stay quiet. Set it up in Cloud unless the work truly needs one of the user's computers, record it in memory, and tell the user where it runs.
A fenced code block with the language palace-action becomes a button. It holds one strict JSON object and nothing else. Put it directly under its item. A Suggestions item with a Schedule button:
**The dependency report is still manual.** You asked for it on Sep 15, Sep 22, and Sep 29.
```palace-action
{"actionId": "schedule-dep-report", "label": "Send the dependency report Mondays at 9am PT", "conversationId": "new", "instruction": "Set up a Cloud schedule for Mondays at 9am PT: run the dependency report, post it to #eng-deps, and skip weeks with no changes. Record it in memory and tell me where it runs."}
```actionId (required): 1 to 64 characters, no spaces, unique within the section.label (required): the button text, up to 80 characters. Start it with a verb; a confirmation such as "I fixed it, check again" is the one exception.instruction (optional): what you do when it is clicked. An instruction over 300 characters renders as an error; aim for under 200. Name the work, where to find it, and any limits, not every detail. Count the characters with a short script rather than estimating.conversationId (optional): one of your real conversation ids, or new for a fresh conversation. Leave it out to use the main chat.Any other key, or invalid JSON, renders the block as an error instead of a button.
palace/ is one section, except palace/MEMORY.md. Nested folders and other files are not shown, so do not create them.needs-attention.md shows as "Needs Attention". Keep the frontmatter name equal to the title.name and description. MemFS rejects any other key. The description shows under the title, so write it as the section's purpose in one short line.palace/MEMORY.md is the index. It has no frontmatter. It lists the sections in display order, one relative link per line; the first mention of a file sets its place, and unlisted sections follow in file-name order. Keep it in sync when you add, rename, or remove a section, and keep the Feedback and Dismissed lists below the links:
# Memory Palace
- [Overview](overview.md) - Where things stand
- [Needs Attention](needs-attention.md) - Decisions and blockers waiting on you
- [Suggestions](suggestions.md) - Work I can do next, and why
## Dismissed
- Summaries of every Slack thread (Sep 20)Example palace/needs-attention.md:
---
name: Needs Attention
description: Decisions and blockers waiting on you.
---
**The nightly eval run has failed since Sep 24.** The OpenAI key is over its monthly quota. Raise the limit in the OpenAI billing settings; I can't change billing.
```palace-action
{"actionId": "recheck-evals", "label": "I fixed it, check again", "instruction": "Re-run the eval smoke test. If it passes, clear this item; if not, say what still fails."}
```The user's reactions to the Palace are the strongest evidence of what they want.
palace/MEMORY.md may have a "Feedback" list of notes the user left on sections. Apply each note, then remove it from the list.palace/MEMORY.md may have a "Dismissed" list. Do not bring back anything on it unless something important has changed. Create the list the first time you need it.For a scheduled update, a reflection, or when the user asks for one:
palace/MEMORY.md and every section first. If palace/ does not exist, create it only when the user asked for a Palace or your instructions for this run say to.letta cron list --agent <agent-id> and inspect each with letta cron runs --id <id> --agent <agent-id>. Report their health in the Overview even when nothing changed.This section applies only while you are talking with the user.
palace/ exists and you notice a blocker, a decision for the user, work you could do, or a routine that changed, update the right section. Mention it in the conversation too if it matters now. Skip things that only matter inside this conversation.© letta-ai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in src/skills/builtin/curating-memory-palace of letta-ai/letta-code.
Open the folder on GitHubat commit d31b879
Curating Memory Palace next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Curating Memory Palace this skillletta-ai/letta-code | 3.6k | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| Lettabotletta-ai/lettabot | 327 | — | ~3.4k | Automated safety check: Pass | Apache-2.0 | |
| Creating Letta Code Channelsletta-ai/skills | 149 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Letta Configurationletta-ai/skills | 149 | — | ~1.3k | Automated safety check: Notes | MIT | |
| Letta Filesystem To Memfsletta-ai/skills | 149 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Navigating Chatgpt Historyletta-ai/skills | 149 | — | ~1.3k | Automated safety check: Pass | MIT |
letta-ai/lettabot
Set up and run LettaBot - a multi-channel AI assistant for Telegram, Slack, Discord, WhatsApp, and Signal.
letta-ai/skills
Builds and debugs Letta Code channels, including first-party channel adapters and dynamic user channel plugins under ~/.letta/channels.
letta-ai/skills
Configure LLM models and providers for Letta agents and servers.
letta-ai/skills
Migrates deprecated Letta Filesystem folders/files to MemFS using markdown document corpora, chunking, local lexical search, and QMD semantic search via the memfs-search skill.
letta-ai/skills
Navigates archived ChatGPT or Claude-style conversation exports and a MemFS reference archive on demand.
letta-ai/skills
Configures Letta agents' own runtime behavior, including model, context window, system prompt, reasoning, conversation overrides, compaction settings, and compaction prompts.
letta-ai/letta-code
Guide for creating effective skills. An agent skill from letta-ai/letta-code.
letta-ai/letta-code
Generates and reviews mod learning env JSON files for Letta Code local mods.
letta-ai/letta-code
Comprehensive guide for initializing or reorganizing agent memory.
letta-ai/letta-code
Inspect or modify Letta Code's own memory, model, context window, system prompt, compaction, permissions, toolsets, mods, skills, channels, schedules, agent secrets, and local runtime settings.
letta-ai/letta-code
Control a real browser to navigate pages, click, type, fill forms, inspect rendered UI, take screenshots, or record video.
letta-ai/letta-code
Creates and edits trusted local Letta Code mods, including tools, slash commands, local-only model providers, lifecycle/turn events, scoped conversation helpers, panels, and capability-gated behavior.
Works with
Rules for the Memory Palace (palace/), the view on your Memory page in the Letta dashboard that shows the user where things stand, what you could do next, and how to make you more useful. Curating Memory Palace is an agent skill from letta-ai/letta-code. Rules for the Memory Palace (palace/), the view on your Memory page in the Letta dashboard that shows the user where things stand, what you could do next, and how to make you more useful.
Run `npx skills add letta-ai/letta-code --skill curating-memory-palace -a claude-code`. Or copy the skill folder (src/skills/builtin/curating-memory-palace in letta-ai/letta-code) into .claude/skills/curating-memory-palace in your project. Claude Code loads it when a task matches its description.
Run `npx skills add letta-ai/letta-code --skill curating-memory-palace -a codex`. Or copy the skill folder (src/skills/builtin/curating-memory-palace in letta-ai/letta-code) into .agents/skills/curating-memory-palace in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add letta-ai/letta-code --skill curating-memory-palace -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/curating-memory-palace, .gemini/skills/curating-memory-palace, .github/skills/curating-memory-palace and .opencode/skills/curating-memory-palace in your project.
SKILL.md names no scripts, command-line tools or credentials: Curating Memory Palace is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: linear.app. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Curating Memory Palace is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Curating Memory Palace: Lettabot (letta-ai/lettabot, 327 stars), Creating Letta Code Channels (letta-ai/skills, 149 stars), Letta Configuration (letta-ai/skills, 149 stars) and Letta Filesystem To Memfs (letta-ai/skills, 149 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
letta-ai (a GitHub organization) maintains it in letta-ai/letta-code, which has 3,562 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 10, 2026.
Source: letta-ai/letta-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.