syncing-memory-filesystem
GitHub用于诊断和修复 MemFS(基于 Git 的代理记忆存储)仓库的设置、同步、认证失败及合并冲突问题。通过 Harness 命令或 Shell 脚本初始化、同步状态,确保记忆数据正确提交与更新,避免手动操作 Git。
触发场景
安装
npx skills add letta-ai/letta-code --skill syncing-memory-filesystem -g -y
SKILL.md
Frontmatter
{
"name": "syncing-memory-filesystem",
"description": "Diagnose and repair MemFS repository setup, remote sync, authentication failures, optional backup remotes, or merge\/rebase conflicts. Do not load for routine memory reads or edits."
}
MemFS Repository Repair
Use this skill when the Git repository behind an agent's memory is not setting up or syncing correctly. Before editing memory, load the relevant skills: maintaining-core-memory for root/core files, maintaining-deferred-memory for deferred files, and creating-skills for skills. Then make the edit directly with ordinary file tools so the agent with the context applies the memory guidance. Stage only changed files by explicit path and commit in the same shell call, using the commit format in their Commit memory changes section. Verify the repair before reporting success. While the harness reports a repair in progress, leave memory files and Git state to that repair worker, which edits $MEMORY_DIR in place.
Current Model
MemFS is a Git repository projected onto the computer where the agent is
running. $MEMORY_DIR is the repository root. There is no second memory/
directory inside it.
The repository can use either memory layout. Inspect its current tree and the memory rules in the system prompt before editing files:
Root layout Existing layout
$MEMORY_DIR/ $MEMORY_DIR/
├── MEMORY.md # root index ├── system/ # in-context memory
├── persona.md # core memory ├── reference/ # deferred memory
├── <topic>/ └── skills/ # agent-owned skills
│ └── MEMORY.md # child index
└── skills/ # agent-owned skills
Cloud-backed agents have a hosted MemFS remote. Local-backend agents keep a local-only Git repository and do not need a remote or cloud credentials.
The agent doing the memory work commits its changes. After each turn, the harness pushes
clean committed changes for cloud-backed agents. Local-backend commits remain
on the current machine. Do not run git push for normal MemFS sync; let the
harness push after the turn.
Committed memory changes do not alter the current compiled prompt immediately.
Use /recompile when the current conversation must see changed core memory
right away. Otherwise, the next prompt compilation or conversation will use
the committed revision.
Start With the Harness
Prefer the harness commands over manual API calls, remote construction, or credential-helper edits:
/memfs status # show whether MemFS is enabled and its path
/memfs enable # initialize or repair MemFS setup
/memfs sync # pull the hosted repository
From a shell, the standalone status and pull commands are:
letta memory status --agent "$AGENT_ID"
letta memory pull --agent "$AGENT_ID"
letta memory pull is a no-op for a local-backend agent because there is no
hosted remote.
Do not reproduce /memfs enable by PATCHing agent tags or constructing a Git
remote by hand. The enable flow also updates the system prompt mode, recompiles
the agent, persists local settings, preserves and adds tags, initializes the
checkout, installs hooks, configures identity, and seeds default memory files.
Inspect a Broken Checkout
Use $MEMORY_DIR instead of a hard-coded ~/.letta/agents/... path. Local and
cloud-backed agents use different parent directories.
git -C "$MEMORY_DIR" status --short --branch
git -C "$MEMORY_DIR" remote get-url origin | sed -E 's#(https?://)[^/@]+@#\1<redacted>@#'
git -C "$MEMORY_DIR" log -5 --oneline
Do not print credential-helper values or tokens. Do not change global Git configuration. The harness installs or refreshes repository-local auth during clone and pull when the active transport supports a persistent helper. Desktop may instead use a temporary Git transport proxy and intentionally omit the persistent helper.
If the checkout is missing .git/, use /memfs enable. If it exists but is
behind, use /memfs sync or letta memory pull --agent "$AGENT_ID". Pull also
repairs recognized stale MemFS origin URLs and refreshes repository-local hooks,
auth, branch tracking, and agent identity.
Uncommitted Changes
Raw file edits must preserve the active layout's rules:
- In the root layout, root and child
MEMORY.mdindexes have no frontmatter. Every other memory Markdown file has exactlynameanddescription. - In the existing layout, Markdown files under
system/andreference/need a non-emptydescription.read_onlyis protected and cannot be added, removed, or changed by the agent.
---
description: What this memory file contains
---
Memory content goes here.
Review the complete diff before committing. Stage named memory files only and create a new commit. Once the repository is clean, the harness will push a cloud-backed agent's pending commits after the turn.
Merge or Rebase Conflicts
The harness first tries a fast-forward pull. When a remote push is rejected
because the remote moved, post-turn sync tries git pull --rebase and retries
the push. If that rebase conflicts, the harness launches a fresh background
internal memory subagent to repair it. The primary conversation is not interrupted.
The harness retries normal sync after the worker finishes. The instructions
below are for explicit troubleshooting; routine repairs run in the background.
Start by reading the current Git operation and every conflicted file:
git -C "$MEMORY_DIR" status
git -C "$MEMORY_DIR" diff --name-only --diff-filter=U
Resolve the conflict markers without deleting required frontmatter, then stage the resolved files by name. Finish the operation Git reports:
git -C "$MEMORY_DIR" add <resolved-memory-path>
# If git status says a rebase is in progress:
GIT_EDITOR=true git -C "$MEMORY_DIR" rebase --continue
# If git status says a merge is in progress:
git -C "$MEMORY_DIR" commit
Do not start a new merge when a rebase is already in progress. Do not reset, abort, or discard either side without the user's approval. When the repository is clean and the merge or rebase is complete, the harness retries the hosted push after a future turn.
Optional Backup Remote
/memory-repository mirrors the agent's main branch to an additional Git
URL. This is separate from the hosted MemFS origin.
/memory-repository set git@github.com:you/my-memory.git
/memory-repository status
/memory-repository push
/memory-repository unset
set stores letta.memoryRepository.url in the MemFS repository's local Git
config, installs the post-commit hook, and attempts an initial push. Later
commits on main start a background mirror push. Mirror failures do not block
the commit; /memory-repository status shows the recent push log.
Use normal SSH or Git credential handling for the backup URL. Avoid embedding a
token in the URL because the URL is stored in .git/config. Use
/memory-repository push only for this optional backup remote, not for normal
MemFS synchronization.
Failure Checklist
- Confirm
$MEMORY_DIRpoints to the active agent's repository. - Check whether the backend is cloud-backed or local-only.
- Inspect
git status, the origin URL, and the current Git operation. - Use
/memfs enablefor a missing checkout and/memfs syncfor a pull. - Preserve the active layout's indexes and frontmatter, then finish any existing merge or rebase.
- Leave hosted pushes to post-turn sync once the repository is clean.
- If the command still fails, rerun it with
LETTA_DEBUG=1and report the redacted error. Never print or copy credential-helper values.
版本历史
-
6155d9f
当前 2026-11-02 16:46
更新文档要求记忆提交消息包含来源;隐藏记忆子代理以防止干扰,保留其自动修复功能。
-
1cab1b7
2026-09-27 17:45
新增将偶发性记忆维护任务委派给后台 worker 的逻辑
-
13aad83
2026-09-22 06:45
重构工具层,移除遗留的服务器端记忆工具处理逻辑。
-
4d5cd9c
2026-09-03 02:48
完成根布局提示词修复(#4093),更新内存目录结构描述为Root layout,修正/recompile相关说明。
-
b94afce
2026-08-27 15:21
重写 MemFS 仓库修复指南并细化触发条件
- b7b6330 2026-07-05 20:11


