[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-letta-syncing-memory-filesystem":3,"mdc-u5vl75-key":41,"related-org-letta-syncing-memory-filesystem":2689,"related-repo-letta-syncing-memory-filesystem":2848},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":36,"sourceUrl":39,"mdContent":40},"syncing-memory-filesystem","manage git-backed agent memory","Manage git-backed memory repos. Load this skill when working with git-backed agent memory, setting up remote memory repos, resolving sync conflicts, or managing memory via git workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"letta","Letta","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fletta.png","letta-ai",[13,17,20],{"name":14,"slug":15,"type":16},"Memory","memory","tag",{"name":18,"slug":19,"type":16},"Git","git",{"name":21,"slug":22,"type":16},"Agents","agents",2831,"https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fletta-code","2026-07-16T06:02:20.984953",null,329,[29,30,31,32,33,8,34,35],"agent-memory","ai","claude","codex","continual-learning","memgpt","stateful-agents",{"repoUrl":24,"stars":23,"forks":27,"topics":37,"description":38},[29,30,31,32,33,8,34,35],"Stateful agents that are like people, with memory, identity, and the ability to learn and adapt","https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fletta-code\u002Ftree\u002FHEAD\u002Fsrc\u002Fskills\u002Fbuiltin\u002Fsyncing-memory-filesystem","---\nname: syncing-memory-filesystem\ndescription: Manage git-backed memory repos. Load this skill when working with git-backed agent memory, setting up remote memory repos, resolving sync conflicts, or managing memory via git workflows.\n---\n\n# Git-Backed Memory Repos\n\nAgents with the `git-memory-enabled` tag have their memory blocks stored in git repositories accessible via the Letta API. This enables version control, collaboration, and external editing of agent memory.\n\n**Features:**\n- Stored in cloud (GCS)\n- Accessible via `$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git`\n- Bidirectional sync: API \u003C-> Git (webhook-triggered, ~2-3s delay)\n- Structure: `memory\u002Fsystem\u002F*.md` for system blocks\n\n## What the CLI Harness Does Automatically\n\nWhen memfs is enabled, the Letta Code CLI automatically:\n\n1. Adds the `git-memory-enabled` tag to the agent (triggers backend to create the git repo)\n2. Clones the repo into `~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\u002F` (git root is the memory directory)\n3. Configures a **local** credential helper in `memory\u002F.git\u002Fconfig` (so `git push`\u002F`git pull` work without auth ceremony)\n4. Installs a **pre-commit hook** that validates frontmatter before each commit (see below)\n5. Installs a **post-commit hook** that pushes commits to an optional additional remote (see \"Additional memory-repository remote\" below)\n6. Sets canonical local git identity (`letta.agentId`, `user.name`, `user.email`) so direct `git commit` from the agent's shell attributes correctly to the agent — not the operator's global git identity\n7. On subsequent startups: pulls latest changes, reconfigures credentials, hooks, and identity (self-healing)\n8. During sessions: periodically checks `git status` and reminds you (the agent) to commit\u002Fpush if dirty\n\nIf any of these steps fail, you can replicate them manually using the sections below.\n\n## Authentication (Preferred: Repo-Local)\n\nThe harness configures a **per-repo** credential helper during clone and refreshes it on pull\u002Fstartup.\nThis local setup is the default and recommended approach.\n\nWhy this matters: host-level **global** credential helpers (e.g. installed by other tooling) can conflict with memfs auth and cause confusing failures.\n\n**Important:** Always use **single-line** format for credential helpers. Multi-line helpers can break tools that parse `git config --list` line-by-line.\n\n```bash\ncd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\n\n# Check local helper(s)\ngit config --local --get-regexp '^credential\\..*\\.helper$'\n\n# Reconfigure local helper (e.g. after API key rotation) - SINGLE LINE\ngit config --local credential.$LETTA_BASE_URL.helper '!f() { echo \"username=letta\"; echo \"password=$LETTA_API_KEY\"; }; f'\n```\n\nIf you suspect global helper conflicts, inspect and clear host-specific global entries:\n\n```bash\n# Inspect Letta-related global helpers\ngit config --global --get-regexp '^credential\\..*letta\\.com.*\\.helper$'\n\n# Example: clear a conflicting host-specific helper\ngit config --global --unset-all credential.https:\u002F\u002Fapi.letta.com.helper\n```\n\nFor cloning a *different* agent's repo, prefer a one-off auth header over global credential changes:\n\n```bash\nAUTH_HEADER=\"Authorization: Basic $(printf 'letta:%s' \"$LETTA_API_KEY\" | base64 | tr -d '\\n')\"\ngit -c \"http.extraHeader=$AUTH_HEADER\" clone \"$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git\" ~\u002Fmy-agent-memory\n```\n\n## Pre-Commit Hook (Frontmatter Validation)\n\nThe harness installs a git pre-commit hook that validates `.md` files under `memory\u002F` before each commit. This prevents pushes that the server would reject.\n\n**Rules:**\n- Every `.md` file must have YAML frontmatter (`---` header and closing `---`)\n- Required fields: `description` (non-empty string)\n- `read_only` is a **protected field**: you (the agent) cannot add, remove, or change it. Files with `read_only: true` cannot be modified at all. Only the server\u002Fuser sets this field.\n- Unknown frontmatter keys are rejected\n\n**Valid file format:**\n```markdown\n---\ndescription: What this block contains\n---\n\nBlock content goes here.\n```\n\nIf the hook rejects a commit, read the error message — it tells you exactly which file and which rule was violated. Fix the file and retry.\n\n## Additional Memory-Repository Remote\n\nIn addition to pushing to the Letta server, you can push every commit to a second git remote — e.g. a private GitHub repo — so you have a backup or a copy you can browse with regular tools.\n\n**Via the slash command (recommended):**\n```\n\u002Fmemory-repository set git@github.com:you\u002Fmy-memory.git\n\u002Fmemory-repository status\n\u002Fmemory-repository push        # force a push now, e.g. after a network failure\n\u002Fmemory-repository unset       # stop pushing\n```\n\n**How it works:**\n- `\u002Fmemory-repository set \u003Curl>` writes the URL to `letta.memoryRepository.url` in the memfs repo's local `.git\u002Fconfig` and installs a `post-commit` hook.\n- After every commit, the hook reads `letta.memoryRepository.url` and asynchronously pushes to it in the background. Commits are never blocked by push failures.\n- Push output and exit codes are appended to `.git\u002Fmemory-repository-push.log` — visible via `\u002Fmemory-repository status`.\n- The setting is **per-repo**, so each agent on a machine has its own independent configuration.\n\n**Auth:** uses your existing git credentials — SSH keys, credential helpers, or tokens in the URL. Letta does not store tokens for this feature. If you're pushing to GitHub, SSH is easiest.\n\n**Manual equivalent (without the slash command):**\n```bash\ncd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\ngit config --local letta.memoryRepository.url git@github.com:you\u002Fmy-memory.git\n# Hook is installed automatically by the CLI on startup; no manual install needed.\n```\n\n## Clone Agent Memory\n\n```bash\n# Clone agent's memory repo\ngit clone \"$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git\" ~\u002Fmy-agent-memory\n\n# View memory blocks\nls ~\u002Fmy-agent-memory\u002Fmemory\u002Fsystem\u002F\ncat ~\u002Fmy-agent-memory\u002Fmemory\u002Fsystem\u002Fhuman.md\n```\n\n## Enabling Git Memory (Manual)\n\nIf the harness `\u002Fmemfs enable` failed, you can replicate it:\n\n```bash\nAGENT_ID=\"\u003Cyour-agent-id>\"\nAGENT_DIR=~\u002F.letta\u002Fagents\u002F$AGENT_ID\nMEMORY_REPO_DIR=\"$AGENT_DIR\u002Fmemory\"\n\n# 1. Add git-memory-enabled tag (IMPORTANT: preserve existing tags!)\n# First GET the agent to read current tags, then PATCH with the new tag appended.\n# The harness code does: tags = [...existingTags, \"git-memory-enabled\"]\ncurl -X PATCH \"$LETTA_BASE_URL\u002Fv1\u002Fagents\u002F$AGENT_ID\" \\\n  -H \"Authorization: Bearer $LETTA_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"tags\": [\"origin:letta-code\", \"git-memory-enabled\"]}'\n\n# 2. Clone the repo into memory\u002F\nmkdir -p \"$MEMORY_REPO_DIR\"\ngit clone \"$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F$AGENT_ID\u002Fstate.git\" \"$MEMORY_REPO_DIR\"\n\n# 3. Configure local credential helper (single-line format required)\ncd \"$MEMORY_REPO_DIR\"\ngit config --local credential.$LETTA_BASE_URL.helper '!f() { echo \"username=letta\"; echo \"password=$LETTA_API_KEY\"; }; f'\n```\n\n## Bidirectional Sync\n\n### API Edit -> Git Pull\n\n```bash\n# 1. Edit block via API (or use memory tools)\n# 2. Pull to get changes (webhook creates commit automatically)\ncd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\ngit pull\n```\n\nChanges made via the API are automatically committed to git within 2-3 seconds.\n\n### Git Push -> API Update\n\n```bash\ncd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\n\n# 1. Edit files locally\necho \"Updated info\" > system\u002Fhuman.md\n\n# 2. Commit and push\ngit add system\u002Fhuman.md\ngit commit -m \"fix: update human block\"\ngit push\n\n# 3. API automatically reflects changes (webhook-triggered, ~2-3s delay)\n```\n\n## Conflict Resolution\n\nWhen both API and git have diverged:\n\n```bash\ncd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\n\n# 1. Try to push (will be rejected)\ngit push  # -> \"fetch first\"\n\n# 2. Pull to create merge conflict\ngit pull --no-rebase\n# -> CONFLICT in system\u002Fhuman.md\n\n# 3. View conflict markers\ncat system\u002Fhuman.md\n# \u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n# your local changes\n# =======\n# server changes\n# >>>>>>> \u003Ccommit>\n\n# 4. Resolve\necho \"final resolved content\" > system\u002Fhuman.md\ngit add system\u002Fhuman.md\ngit commit -m \"fix: resolved conflict in human block\"\n\n# 5. Push resolution\ngit push\n# -> API automatically updates with resolved content\n```\n\n## Block Management\n\n### Create New Block\n\n```bash\n# Create file in system\u002F directory (automatically attached to agent)\necho \"My new block content\" > system\u002Fnew-block.md\ngit add system\u002Fnew-block.md\ngit commit -m \"feat: add new block\"\ngit push\n# -> Block automatically created and attached to agent\n```\n\n### Delete\u002FDetach Block\n\n```bash\n# Remove file from system\u002F directory\ngit rm system\u002Fpersona.md\ngit commit -m \"chore: remove persona block\"\ngit push\n# -> Block automatically detached from agent\n```\n\n## Directory Structure\n\n```\n~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002F\n├── .letta\u002F\n│   └── config.json              # Agent metadata\n└── memory\u002F                      # Git repo root\n    ├── .git\u002F                    # Git repo data\n    └── system\u002F                  # System blocks (attached to agent)\n        ├── human.md\n        └── persona.md\n```\n\n**System blocks** (`memory\u002Fsystem\u002F`) are attached to the agent and appear in the agent's system prompt.\n\n## Requirements\n\n- Agent must have `git-memory-enabled` tag\n- Valid API key with agent access\n- Git installed locally\n\n## Troubleshooting\n\n**Clone fails with \"Authentication failed\":**\n- Check local helper(s): `git -C ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory config --local --get-regexp '^credential\\..*\\.helper$'`\n- Check for conflicting global helper(s): `git config --global --get-regexp '^credential\\..*letta\\.com.*\\.helper$'`\n- Reconfigure local helper: see Authentication section above\n- Verify the endpoint is reachable: `curl -u letta:$LETTA_API_KEY $LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git\u002Finfo\u002Frefs?service=git-upload-pack`\n\n**Push\u002Fpull doesn't update API:**\n- Wait 2-3 seconds for webhook processing\n- Verify agent has `git-memory-enabled` tag\n- Check if you have write access to the agent\n\n**Harness setup failed (no .git\u002F after \u002Fmemfs enable):**\n- Check debug logs (`LETTA_DEBUG=1`)\n- Follow \"Enabling Git Memory (Manual)\" steps above\n\n**Can't see changes immediately:**\n- Bidirectional sync has a 2-3 second delay for webhook processing\n- Use `git pull` to get latest API changes\n- Use `git fetch` to check remote without merging\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,55,70,79,118,125,130,272,277,283,295,307,332,508,513,601,614,777,783,804,812,886,894,951,956,962,967,975,985,993,1075,1085,1093,1164,1170,1257,1263,1276,1686,1692,1699,1765,1770,1776,1948,1954,1959,2261,2267,2273,2379,2385,2464,2470,2479,2497,2503,2528,2534,2542,2583,2591,2615,2623,2643,2651,2683],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"git-backed-memory-repos",[52],{"type":53,"value":54},"text","Git-Backed Memory Repos",{"type":47,"tag":56,"props":57,"children":58},"p",{},[59,61,68],{"type":53,"value":60},"Agents with the ",{"type":47,"tag":62,"props":63,"children":65},"code",{"className":64},[],[66],{"type":53,"value":67},"git-memory-enabled",{"type":53,"value":69}," tag have their memory blocks stored in git repositories accessible via the Letta API. This enables version control, collaboration, and external editing of agent memory.",{"type":47,"tag":56,"props":71,"children":72},{},[73],{"type":47,"tag":74,"props":75,"children":76},"strong",{},[77],{"type":53,"value":78},"Features:",{"type":47,"tag":80,"props":81,"children":82},"ul",{},[83,89,100,105],{"type":47,"tag":84,"props":85,"children":86},"li",{},[87],{"type":53,"value":88},"Stored in cloud (GCS)",{"type":47,"tag":84,"props":90,"children":91},{},[92,94],{"type":53,"value":93},"Accessible via ",{"type":47,"tag":62,"props":95,"children":97},{"className":96},[],[98],{"type":53,"value":99},"$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git",{"type":47,"tag":84,"props":101,"children":102},{},[103],{"type":53,"value":104},"Bidirectional sync: API \u003C-> Git (webhook-triggered, ~2-3s delay)",{"type":47,"tag":84,"props":106,"children":107},{},[108,110,116],{"type":53,"value":109},"Structure: ",{"type":47,"tag":62,"props":111,"children":113},{"className":112},[],[114],{"type":53,"value":115},"memory\u002Fsystem\u002F*.md",{"type":53,"value":117}," for system blocks",{"type":47,"tag":119,"props":120,"children":122},"h2",{"id":121},"what-the-cli-harness-does-automatically",[123],{"type":53,"value":124},"What the CLI Harness Does Automatically",{"type":47,"tag":56,"props":126,"children":127},{},[128],{"type":53,"value":129},"When memfs is enabled, the Letta Code CLI automatically:",{"type":47,"tag":131,"props":132,"children":133},"ol",{},[134,146,159,195,207,218,254,259],{"type":47,"tag":84,"props":135,"children":136},{},[137,139,144],{"type":53,"value":138},"Adds the ",{"type":47,"tag":62,"props":140,"children":142},{"className":141},[],[143],{"type":53,"value":67},{"type":53,"value":145}," tag to the agent (triggers backend to create the git repo)",{"type":47,"tag":84,"props":147,"children":148},{},[149,151,157],{"type":53,"value":150},"Clones the repo into ",{"type":47,"tag":62,"props":152,"children":154},{"className":153},[],[155],{"type":53,"value":156},"~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\u002F",{"type":53,"value":158}," (git root is the memory directory)",{"type":47,"tag":84,"props":160,"children":161},{},[162,164,169,171,177,179,185,187,193],{"type":53,"value":163},"Configures a ",{"type":47,"tag":74,"props":165,"children":166},{},[167],{"type":53,"value":168},"local",{"type":53,"value":170}," credential helper in ",{"type":47,"tag":62,"props":172,"children":174},{"className":173},[],[175],{"type":53,"value":176},"memory\u002F.git\u002Fconfig",{"type":53,"value":178}," (so ",{"type":47,"tag":62,"props":180,"children":182},{"className":181},[],[183],{"type":53,"value":184},"git push",{"type":53,"value":186},"\u002F",{"type":47,"tag":62,"props":188,"children":190},{"className":189},[],[191],{"type":53,"value":192},"git pull",{"type":53,"value":194}," work without auth ceremony)",{"type":47,"tag":84,"props":196,"children":197},{},[198,200,205],{"type":53,"value":199},"Installs a ",{"type":47,"tag":74,"props":201,"children":202},{},[203],{"type":53,"value":204},"pre-commit hook",{"type":53,"value":206}," that validates frontmatter before each commit (see below)",{"type":47,"tag":84,"props":208,"children":209},{},[210,211,216],{"type":53,"value":199},{"type":47,"tag":74,"props":212,"children":213},{},[214],{"type":53,"value":215},"post-commit hook",{"type":53,"value":217}," that pushes commits to an optional additional remote (see \"Additional memory-repository remote\" below)",{"type":47,"tag":84,"props":219,"children":220},{},[221,223,229,231,237,238,244,246,252],{"type":53,"value":222},"Sets canonical local git identity (",{"type":47,"tag":62,"props":224,"children":226},{"className":225},[],[227],{"type":53,"value":228},"letta.agentId",{"type":53,"value":230},", ",{"type":47,"tag":62,"props":232,"children":234},{"className":233},[],[235],{"type":53,"value":236},"user.name",{"type":53,"value":230},{"type":47,"tag":62,"props":239,"children":241},{"className":240},[],[242],{"type":53,"value":243},"user.email",{"type":53,"value":245},") so direct ",{"type":47,"tag":62,"props":247,"children":249},{"className":248},[],[250],{"type":53,"value":251},"git commit",{"type":53,"value":253}," from the agent's shell attributes correctly to the agent — not the operator's global git identity",{"type":47,"tag":84,"props":255,"children":256},{},[257],{"type":53,"value":258},"On subsequent startups: pulls latest changes, reconfigures credentials, hooks, and identity (self-healing)",{"type":47,"tag":84,"props":260,"children":261},{},[262,264,270],{"type":53,"value":263},"During sessions: periodically checks ",{"type":47,"tag":62,"props":265,"children":267},{"className":266},[],[268],{"type":53,"value":269},"git status",{"type":53,"value":271}," and reminds you (the agent) to commit\u002Fpush if dirty",{"type":47,"tag":56,"props":273,"children":274},{},[275],{"type":53,"value":276},"If any of these steps fail, you can replicate them manually using the sections below.",{"type":47,"tag":119,"props":278,"children":280},{"id":279},"authentication-preferred-repo-local",[281],{"type":53,"value":282},"Authentication (Preferred: Repo-Local)",{"type":47,"tag":56,"props":284,"children":285},{},[286,288,293],{"type":53,"value":287},"The harness configures a ",{"type":47,"tag":74,"props":289,"children":290},{},[291],{"type":53,"value":292},"per-repo",{"type":53,"value":294}," credential helper during clone and refreshes it on pull\u002Fstartup.\nThis local setup is the default and recommended approach.",{"type":47,"tag":56,"props":296,"children":297},{},[298,300,305],{"type":53,"value":299},"Why this matters: host-level ",{"type":47,"tag":74,"props":301,"children":302},{},[303],{"type":53,"value":304},"global",{"type":53,"value":306}," credential helpers (e.g. installed by other tooling) can conflict with memfs auth and cause confusing failures.",{"type":47,"tag":56,"props":308,"children":309},{},[310,315,317,322,324,330],{"type":47,"tag":74,"props":311,"children":312},{},[313],{"type":53,"value":314},"Important:",{"type":53,"value":316}," Always use ",{"type":47,"tag":74,"props":318,"children":319},{},[320],{"type":53,"value":321},"single-line",{"type":53,"value":323}," format for credential helpers. Multi-line helpers can break tools that parse ",{"type":47,"tag":62,"props":325,"children":327},{"className":326},[],[328],{"type":53,"value":329},"git config --list",{"type":53,"value":331}," line-by-line.",{"type":47,"tag":333,"props":334,"children":339},"pre",{"className":335,"code":336,"language":337,"meta":338,"style":338},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\n\n# Check local helper(s)\ngit config --local --get-regexp '^credential\\..*\\.helper$'\n\n# Reconfigure local helper (e.g. after API key rotation) - SINGLE LINE\ngit config --local credential.$LETTA_BASE_URL.helper '!f() { echo \"username=letta\"; echo \"password=$LETTA_API_KEY\"; }; f'\n","bash","",[340],{"type":47,"tag":62,"props":341,"children":342},{"__ignoreMap":338},[343,388,398,408,447,455,464],{"type":47,"tag":344,"props":345,"children":348},"span",{"class":346,"line":347},"line",1,[349,355,361,367,372,378,383],{"type":47,"tag":344,"props":350,"children":352},{"style":351},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[353],{"type":53,"value":354},"cd",{"type":47,"tag":344,"props":356,"children":358},{"style":357},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[359],{"type":53,"value":360}," ~\u002F.letta\u002Fagents\u002F",{"type":47,"tag":344,"props":362,"children":364},{"style":363},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[365],{"type":53,"value":366},"\u003C",{"type":47,"tag":344,"props":368,"children":369},{"style":357},[370],{"type":53,"value":371},"agent-i",{"type":47,"tag":344,"props":373,"children":375},{"style":374},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[376],{"type":53,"value":377},"d",{"type":47,"tag":344,"props":379,"children":380},{"style":363},[381],{"type":53,"value":382},">",{"type":47,"tag":344,"props":384,"children":385},{"style":357},[386],{"type":53,"value":387},"\u002Fmemory\n",{"type":47,"tag":344,"props":389,"children":391},{"class":346,"line":390},2,[392],{"type":47,"tag":344,"props":393,"children":395},{"emptyLinePlaceholder":394},true,[396],{"type":53,"value":397},"\n",{"type":47,"tag":344,"props":399,"children":401},{"class":346,"line":400},3,[402],{"type":47,"tag":344,"props":403,"children":405},{"style":404},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[406],{"type":53,"value":407},"# Check local helper(s)\n",{"type":47,"tag":344,"props":409,"children":411},{"class":346,"line":410},4,[412,417,422,427,432,437,442],{"type":47,"tag":344,"props":413,"children":415},{"style":414},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[416],{"type":53,"value":19},{"type":47,"tag":344,"props":418,"children":419},{"style":357},[420],{"type":53,"value":421}," config",{"type":47,"tag":344,"props":423,"children":424},{"style":357},[425],{"type":53,"value":426}," --local",{"type":47,"tag":344,"props":428,"children":429},{"style":357},[430],{"type":53,"value":431}," --get-regexp",{"type":47,"tag":344,"props":433,"children":434},{"style":363},[435],{"type":53,"value":436}," '",{"type":47,"tag":344,"props":438,"children":439},{"style":357},[440],{"type":53,"value":441},"^credential\\..*\\.helper$",{"type":47,"tag":344,"props":443,"children":444},{"style":363},[445],{"type":53,"value":446},"'\n",{"type":47,"tag":344,"props":448,"children":450},{"class":346,"line":449},5,[451],{"type":47,"tag":344,"props":452,"children":453},{"emptyLinePlaceholder":394},[454],{"type":53,"value":397},{"type":47,"tag":344,"props":456,"children":458},{"class":346,"line":457},6,[459],{"type":47,"tag":344,"props":460,"children":461},{"style":404},[462],{"type":53,"value":463},"# Reconfigure local helper (e.g. after API key rotation) - SINGLE LINE\n",{"type":47,"tag":344,"props":465,"children":467},{"class":346,"line":466},7,[468,472,476,480,485,490,495,499,504],{"type":47,"tag":344,"props":469,"children":470},{"style":414},[471],{"type":53,"value":19},{"type":47,"tag":344,"props":473,"children":474},{"style":357},[475],{"type":53,"value":421},{"type":47,"tag":344,"props":477,"children":478},{"style":357},[479],{"type":53,"value":426},{"type":47,"tag":344,"props":481,"children":482},{"style":357},[483],{"type":53,"value":484}," credential.",{"type":47,"tag":344,"props":486,"children":487},{"style":374},[488],{"type":53,"value":489},"$LETTA_BASE_URL",{"type":47,"tag":344,"props":491,"children":492},{"style":357},[493],{"type":53,"value":494},".helper",{"type":47,"tag":344,"props":496,"children":497},{"style":363},[498],{"type":53,"value":436},{"type":47,"tag":344,"props":500,"children":501},{"style":357},[502],{"type":53,"value":503},"!f() { echo \"username=letta\"; echo \"password=$LETTA_API_KEY\"; }; f",{"type":47,"tag":344,"props":505,"children":506},{"style":363},[507],{"type":53,"value":446},{"type":47,"tag":56,"props":509,"children":510},{},[511],{"type":53,"value":512},"If you suspect global helper conflicts, inspect and clear host-specific global entries:",{"type":47,"tag":333,"props":514,"children":516},{"className":335,"code":515,"language":337,"meta":338,"style":338},"# Inspect Letta-related global helpers\ngit config --global --get-regexp '^credential\\..*letta\\.com.*\\.helper$'\n\n# Example: clear a conflicting host-specific helper\ngit config --global --unset-all credential.https:\u002F\u002Fapi.letta.com.helper\n",[517],{"type":47,"tag":62,"props":518,"children":519},{"__ignoreMap":338},[520,528,561,568,576],{"type":47,"tag":344,"props":521,"children":522},{"class":346,"line":347},[523],{"type":47,"tag":344,"props":524,"children":525},{"style":404},[526],{"type":53,"value":527},"# Inspect Letta-related global helpers\n",{"type":47,"tag":344,"props":529,"children":530},{"class":346,"line":390},[531,535,539,544,548,552,557],{"type":47,"tag":344,"props":532,"children":533},{"style":414},[534],{"type":53,"value":19},{"type":47,"tag":344,"props":536,"children":537},{"style":357},[538],{"type":53,"value":421},{"type":47,"tag":344,"props":540,"children":541},{"style":357},[542],{"type":53,"value":543}," --global",{"type":47,"tag":344,"props":545,"children":546},{"style":357},[547],{"type":53,"value":431},{"type":47,"tag":344,"props":549,"children":550},{"style":363},[551],{"type":53,"value":436},{"type":47,"tag":344,"props":553,"children":554},{"style":357},[555],{"type":53,"value":556},"^credential\\..*letta\\.com.*\\.helper$",{"type":47,"tag":344,"props":558,"children":559},{"style":363},[560],{"type":53,"value":446},{"type":47,"tag":344,"props":562,"children":563},{"class":346,"line":400},[564],{"type":47,"tag":344,"props":565,"children":566},{"emptyLinePlaceholder":394},[567],{"type":53,"value":397},{"type":47,"tag":344,"props":569,"children":570},{"class":346,"line":410},[571],{"type":47,"tag":344,"props":572,"children":573},{"style":404},[574],{"type":53,"value":575},"# Example: clear a conflicting host-specific helper\n",{"type":47,"tag":344,"props":577,"children":578},{"class":346,"line":449},[579,583,587,591,596],{"type":47,"tag":344,"props":580,"children":581},{"style":414},[582],{"type":53,"value":19},{"type":47,"tag":344,"props":584,"children":585},{"style":357},[586],{"type":53,"value":421},{"type":47,"tag":344,"props":588,"children":589},{"style":357},[590],{"type":53,"value":543},{"type":47,"tag":344,"props":592,"children":593},{"style":357},[594],{"type":53,"value":595}," --unset-all",{"type":47,"tag":344,"props":597,"children":598},{"style":357},[599],{"type":53,"value":600}," credential.https:\u002F\u002Fapi.letta.com.helper\n",{"type":47,"tag":56,"props":602,"children":603},{},[604,606,612],{"type":53,"value":605},"For cloning a ",{"type":47,"tag":607,"props":608,"children":609},"em",{},[610],{"type":53,"value":611},"different",{"type":53,"value":613}," agent's repo, prefer a one-off auth header over global credential changes:",{"type":47,"tag":333,"props":615,"children":617},{"className":335,"code":616,"language":337,"meta":338,"style":338},"AUTH_HEADER=\"Authorization: Basic $(printf 'letta:%s' \"$LETTA_API_KEY\" | base64 | tr -d '\\n')\"\ngit -c \"http.extraHeader=$AUTH_HEADER\" clone \"$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git\" ~\u002Fmy-agent-memory\n",[618],{"type":47,"tag":62,"props":619,"children":620},{"__ignoreMap":338},[621,720],{"type":47,"tag":344,"props":622,"children":623},{"class":346,"line":347},[624,629,634,639,644,649,654,658,663,668,673,678,682,687,692,696,701,706,710,715],{"type":47,"tag":344,"props":625,"children":626},{"style":374},[627],{"type":53,"value":628},"AUTH_HEADER",{"type":47,"tag":344,"props":630,"children":631},{"style":363},[632],{"type":53,"value":633},"=",{"type":47,"tag":344,"props":635,"children":636},{"style":363},[637],{"type":53,"value":638},"\"",{"type":47,"tag":344,"props":640,"children":641},{"style":357},[642],{"type":53,"value":643},"Authorization: Basic ",{"type":47,"tag":344,"props":645,"children":646},{"style":363},[647],{"type":53,"value":648},"$(",{"type":47,"tag":344,"props":650,"children":651},{"style":351},[652],{"type":53,"value":653},"printf",{"type":47,"tag":344,"props":655,"children":656},{"style":363},[657],{"type":53,"value":436},{"type":47,"tag":344,"props":659,"children":660},{"style":357},[661],{"type":53,"value":662},"letta:%s",{"type":47,"tag":344,"props":664,"children":665},{"style":363},[666],{"type":53,"value":667},"'",{"type":47,"tag":344,"props":669,"children":670},{"style":363},[671],{"type":53,"value":672}," \"",{"type":47,"tag":344,"props":674,"children":675},{"style":374},[676],{"type":53,"value":677},"$LETTA_API_KEY",{"type":47,"tag":344,"props":679,"children":680},{"style":363},[681],{"type":53,"value":638},{"type":47,"tag":344,"props":683,"children":684},{"style":363},[685],{"type":53,"value":686}," |",{"type":47,"tag":344,"props":688,"children":689},{"style":414},[690],{"type":53,"value":691}," base64",{"type":47,"tag":344,"props":693,"children":694},{"style":363},[695],{"type":53,"value":686},{"type":47,"tag":344,"props":697,"children":698},{"style":414},[699],{"type":53,"value":700}," tr",{"type":47,"tag":344,"props":702,"children":703},{"style":357},[704],{"type":53,"value":705}," -d ",{"type":47,"tag":344,"props":707,"children":708},{"style":363},[709],{"type":53,"value":667},{"type":47,"tag":344,"props":711,"children":712},{"style":357},[713],{"type":53,"value":714},"\\n",{"type":47,"tag":344,"props":716,"children":717},{"style":363},[718],{"type":53,"value":719},"')\"\n",{"type":47,"tag":344,"props":721,"children":722},{"class":346,"line":390},[723,727,732,736,741,746,750,755,759,763,768,772],{"type":47,"tag":344,"props":724,"children":725},{"style":414},[726],{"type":53,"value":19},{"type":47,"tag":344,"props":728,"children":729},{"style":357},[730],{"type":53,"value":731}," -c",{"type":47,"tag":344,"props":733,"children":734},{"style":363},[735],{"type":53,"value":672},{"type":47,"tag":344,"props":737,"children":738},{"style":357},[739],{"type":53,"value":740},"http.extraHeader=",{"type":47,"tag":344,"props":742,"children":743},{"style":374},[744],{"type":53,"value":745},"$AUTH_HEADER",{"type":47,"tag":344,"props":747,"children":748},{"style":363},[749],{"type":53,"value":638},{"type":47,"tag":344,"props":751,"children":752},{"style":357},[753],{"type":53,"value":754}," clone",{"type":47,"tag":344,"props":756,"children":757},{"style":363},[758],{"type":53,"value":672},{"type":47,"tag":344,"props":760,"children":761},{"style":374},[762],{"type":53,"value":489},{"type":47,"tag":344,"props":764,"children":765},{"style":357},[766],{"type":53,"value":767},"\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git",{"type":47,"tag":344,"props":769,"children":770},{"style":363},[771],{"type":53,"value":638},{"type":47,"tag":344,"props":773,"children":774},{"style":357},[775],{"type":53,"value":776}," ~\u002Fmy-agent-memory\n",{"type":47,"tag":119,"props":778,"children":780},{"id":779},"pre-commit-hook-frontmatter-validation",[781],{"type":53,"value":782},"Pre-Commit Hook (Frontmatter Validation)",{"type":47,"tag":56,"props":784,"children":785},{},[786,788,794,796,802],{"type":53,"value":787},"The harness installs a git pre-commit hook that validates ",{"type":47,"tag":62,"props":789,"children":791},{"className":790},[],[792],{"type":53,"value":793},".md",{"type":53,"value":795}," files under ",{"type":47,"tag":62,"props":797,"children":799},{"className":798},[],[800],{"type":53,"value":801},"memory\u002F",{"type":53,"value":803}," before each commit. This prevents pushes that the server would reject.",{"type":47,"tag":56,"props":805,"children":806},{},[807],{"type":47,"tag":74,"props":808,"children":809},{},[810],{"type":53,"value":811},"Rules:",{"type":47,"tag":80,"props":813,"children":814},{},[815,842,855,881],{"type":47,"tag":84,"props":816,"children":817},{},[818,820,825,827,833,835,840],{"type":53,"value":819},"Every ",{"type":47,"tag":62,"props":821,"children":823},{"className":822},[],[824],{"type":53,"value":793},{"type":53,"value":826}," file must have YAML frontmatter (",{"type":47,"tag":62,"props":828,"children":830},{"className":829},[],[831],{"type":53,"value":832},"---",{"type":53,"value":834}," header and closing ",{"type":47,"tag":62,"props":836,"children":838},{"className":837},[],[839],{"type":53,"value":832},{"type":53,"value":841},")",{"type":47,"tag":84,"props":843,"children":844},{},[845,847,853],{"type":53,"value":846},"Required fields: ",{"type":47,"tag":62,"props":848,"children":850},{"className":849},[],[851],{"type":53,"value":852},"description",{"type":53,"value":854}," (non-empty string)",{"type":47,"tag":84,"props":856,"children":857},{},[858,864,866,871,873,879],{"type":47,"tag":62,"props":859,"children":861},{"className":860},[],[862],{"type":53,"value":863},"read_only",{"type":53,"value":865}," is a ",{"type":47,"tag":74,"props":867,"children":868},{},[869],{"type":53,"value":870},"protected field",{"type":53,"value":872},": you (the agent) cannot add, remove, or change it. Files with ",{"type":47,"tag":62,"props":874,"children":876},{"className":875},[],[877],{"type":53,"value":878},"read_only: true",{"type":53,"value":880}," cannot be modified at all. Only the server\u002Fuser sets this field.",{"type":47,"tag":84,"props":882,"children":883},{},[884],{"type":53,"value":885},"Unknown frontmatter keys are rejected",{"type":47,"tag":56,"props":887,"children":888},{},[889],{"type":47,"tag":74,"props":890,"children":891},{},[892],{"type":53,"value":893},"Valid file format:",{"type":47,"tag":333,"props":895,"children":899},{"className":896,"code":897,"language":898,"meta":338,"style":338},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ndescription: What this block contains\n---\n\nBlock content goes here.\n","markdown",[900],{"type":47,"tag":62,"props":901,"children":902},{"__ignoreMap":338},[903,911,929,936,943],{"type":47,"tag":344,"props":904,"children":905},{"class":346,"line":347},[906],{"type":47,"tag":344,"props":907,"children":908},{"style":363},[909],{"type":53,"value":910},"---\n",{"type":47,"tag":344,"props":912,"children":913},{"class":346,"line":390},[914,919,924],{"type":47,"tag":344,"props":915,"children":917},{"style":916},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[918],{"type":53,"value":852},{"type":47,"tag":344,"props":920,"children":921},{"style":363},[922],{"type":53,"value":923},":",{"type":47,"tag":344,"props":925,"children":926},{"style":357},[927],{"type":53,"value":928}," What this block contains\n",{"type":47,"tag":344,"props":930,"children":931},{"class":346,"line":400},[932],{"type":47,"tag":344,"props":933,"children":934},{"style":363},[935],{"type":53,"value":910},{"type":47,"tag":344,"props":937,"children":938},{"class":346,"line":410},[939],{"type":47,"tag":344,"props":940,"children":941},{"emptyLinePlaceholder":394},[942],{"type":53,"value":397},{"type":47,"tag":344,"props":944,"children":945},{"class":346,"line":449},[946],{"type":47,"tag":344,"props":947,"children":948},{"style":374},[949],{"type":53,"value":950},"Block content goes here.\n",{"type":47,"tag":56,"props":952,"children":953},{},[954],{"type":53,"value":955},"If the hook rejects a commit, read the error message — it tells you exactly which file and which rule was violated. Fix the file and retry.",{"type":47,"tag":119,"props":957,"children":959},{"id":958},"additional-memory-repository-remote",[960],{"type":53,"value":961},"Additional Memory-Repository Remote",{"type":47,"tag":56,"props":963,"children":964},{},[965],{"type":53,"value":966},"In addition to pushing to the Letta server, you can push every commit to a second git remote — e.g. a private GitHub repo — so you have a backup or a copy you can browse with regular tools.",{"type":47,"tag":56,"props":968,"children":969},{},[970],{"type":47,"tag":74,"props":971,"children":972},{},[973],{"type":53,"value":974},"Via the slash command (recommended):",{"type":47,"tag":333,"props":976,"children":980},{"className":977,"code":979,"language":53},[978],"language-text","\u002Fmemory-repository set git@github.com:you\u002Fmy-memory.git\n\u002Fmemory-repository status\n\u002Fmemory-repository push        # force a push now, e.g. after a network failure\n\u002Fmemory-repository unset       # stop pushing\n",[981],{"type":47,"tag":62,"props":982,"children":983},{"__ignoreMap":338},[984],{"type":53,"value":979},{"type":47,"tag":56,"props":986,"children":987},{},[988],{"type":47,"tag":74,"props":989,"children":990},{},[991],{"type":53,"value":992},"How it works:",{"type":47,"tag":80,"props":994,"children":995},{},[996,1031,1043,1064],{"type":47,"tag":84,"props":997,"children":998},{},[999,1005,1007,1013,1015,1021,1023,1029],{"type":47,"tag":62,"props":1000,"children":1002},{"className":1001},[],[1003],{"type":53,"value":1004},"\u002Fmemory-repository set \u003Curl>",{"type":53,"value":1006}," writes the URL to ",{"type":47,"tag":62,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":53,"value":1012},"letta.memoryRepository.url",{"type":53,"value":1014}," in the memfs repo's local ",{"type":47,"tag":62,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":53,"value":1020},".git\u002Fconfig",{"type":53,"value":1022}," and installs a ",{"type":47,"tag":62,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":53,"value":1028},"post-commit",{"type":53,"value":1030}," hook.",{"type":47,"tag":84,"props":1032,"children":1033},{},[1034,1036,1041],{"type":53,"value":1035},"After every commit, the hook reads ",{"type":47,"tag":62,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":53,"value":1012},{"type":53,"value":1042}," and asynchronously pushes to it in the background. Commits are never blocked by push failures.",{"type":47,"tag":84,"props":1044,"children":1045},{},[1046,1048,1054,1056,1062],{"type":53,"value":1047},"Push output and exit codes are appended to ",{"type":47,"tag":62,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":53,"value":1053},".git\u002Fmemory-repository-push.log",{"type":53,"value":1055}," — visible via ",{"type":47,"tag":62,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":53,"value":1061},"\u002Fmemory-repository status",{"type":53,"value":1063},".",{"type":47,"tag":84,"props":1065,"children":1066},{},[1067,1069,1073],{"type":53,"value":1068},"The setting is ",{"type":47,"tag":74,"props":1070,"children":1071},{},[1072],{"type":53,"value":292},{"type":53,"value":1074},", so each agent on a machine has its own independent configuration.",{"type":47,"tag":56,"props":1076,"children":1077},{},[1078,1083],{"type":47,"tag":74,"props":1079,"children":1080},{},[1081],{"type":53,"value":1082},"Auth:",{"type":53,"value":1084}," uses your existing git credentials — SSH keys, credential helpers, or tokens in the URL. Letta does not store tokens for this feature. If you're pushing to GitHub, SSH is easiest.",{"type":47,"tag":56,"props":1086,"children":1087},{},[1088],{"type":47,"tag":74,"props":1089,"children":1090},{},[1091],{"type":53,"value":1092},"Manual equivalent (without the slash command):",{"type":47,"tag":333,"props":1094,"children":1096},{"className":335,"code":1095,"language":337,"meta":338,"style":338},"cd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\ngit config --local letta.memoryRepository.url git@github.com:you\u002Fmy-memory.git\n# Hook is installed automatically by the CLI on startup; no manual install needed.\n",[1097],{"type":47,"tag":62,"props":1098,"children":1099},{"__ignoreMap":338},[1100,1131,1156],{"type":47,"tag":344,"props":1101,"children":1102},{"class":346,"line":347},[1103,1107,1111,1115,1119,1123,1127],{"type":47,"tag":344,"props":1104,"children":1105},{"style":351},[1106],{"type":53,"value":354},{"type":47,"tag":344,"props":1108,"children":1109},{"style":357},[1110],{"type":53,"value":360},{"type":47,"tag":344,"props":1112,"children":1113},{"style":363},[1114],{"type":53,"value":366},{"type":47,"tag":344,"props":1116,"children":1117},{"style":357},[1118],{"type":53,"value":371},{"type":47,"tag":344,"props":1120,"children":1121},{"style":374},[1122],{"type":53,"value":377},{"type":47,"tag":344,"props":1124,"children":1125},{"style":363},[1126],{"type":53,"value":382},{"type":47,"tag":344,"props":1128,"children":1129},{"style":357},[1130],{"type":53,"value":387},{"type":47,"tag":344,"props":1132,"children":1133},{"class":346,"line":390},[1134,1138,1142,1146,1151],{"type":47,"tag":344,"props":1135,"children":1136},{"style":414},[1137],{"type":53,"value":19},{"type":47,"tag":344,"props":1139,"children":1140},{"style":357},[1141],{"type":53,"value":421},{"type":47,"tag":344,"props":1143,"children":1144},{"style":357},[1145],{"type":53,"value":426},{"type":47,"tag":344,"props":1147,"children":1148},{"style":357},[1149],{"type":53,"value":1150}," letta.memoryRepository.url",{"type":47,"tag":344,"props":1152,"children":1153},{"style":357},[1154],{"type":53,"value":1155}," git@github.com:you\u002Fmy-memory.git\n",{"type":47,"tag":344,"props":1157,"children":1158},{"class":346,"line":400},[1159],{"type":47,"tag":344,"props":1160,"children":1161},{"style":404},[1162],{"type":53,"value":1163},"# Hook is installed automatically by the CLI on startup; no manual install needed.\n",{"type":47,"tag":119,"props":1165,"children":1167},{"id":1166},"clone-agent-memory",[1168],{"type":53,"value":1169},"Clone Agent Memory",{"type":47,"tag":333,"props":1171,"children":1173},{"className":335,"code":1172,"language":337,"meta":338,"style":338},"# Clone agent's memory repo\ngit clone \"$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git\" ~\u002Fmy-agent-memory\n\n# View memory blocks\nls ~\u002Fmy-agent-memory\u002Fmemory\u002Fsystem\u002F\ncat ~\u002Fmy-agent-memory\u002Fmemory\u002Fsystem\u002Fhuman.md\n",[1174],{"type":47,"tag":62,"props":1175,"children":1176},{"__ignoreMap":338},[1177,1185,1216,1223,1231,1244],{"type":47,"tag":344,"props":1178,"children":1179},{"class":346,"line":347},[1180],{"type":47,"tag":344,"props":1181,"children":1182},{"style":404},[1183],{"type":53,"value":1184},"# Clone agent's memory repo\n",{"type":47,"tag":344,"props":1186,"children":1187},{"class":346,"line":390},[1188,1192,1196,1200,1204,1208,1212],{"type":47,"tag":344,"props":1189,"children":1190},{"style":414},[1191],{"type":53,"value":19},{"type":47,"tag":344,"props":1193,"children":1194},{"style":357},[1195],{"type":53,"value":754},{"type":47,"tag":344,"props":1197,"children":1198},{"style":363},[1199],{"type":53,"value":672},{"type":47,"tag":344,"props":1201,"children":1202},{"style":374},[1203],{"type":53,"value":489},{"type":47,"tag":344,"props":1205,"children":1206},{"style":357},[1207],{"type":53,"value":767},{"type":47,"tag":344,"props":1209,"children":1210},{"style":363},[1211],{"type":53,"value":638},{"type":47,"tag":344,"props":1213,"children":1214},{"style":357},[1215],{"type":53,"value":776},{"type":47,"tag":344,"props":1217,"children":1218},{"class":346,"line":400},[1219],{"type":47,"tag":344,"props":1220,"children":1221},{"emptyLinePlaceholder":394},[1222],{"type":53,"value":397},{"type":47,"tag":344,"props":1224,"children":1225},{"class":346,"line":410},[1226],{"type":47,"tag":344,"props":1227,"children":1228},{"style":404},[1229],{"type":53,"value":1230},"# View memory blocks\n",{"type":47,"tag":344,"props":1232,"children":1233},{"class":346,"line":449},[1234,1239],{"type":47,"tag":344,"props":1235,"children":1236},{"style":414},[1237],{"type":53,"value":1238},"ls",{"type":47,"tag":344,"props":1240,"children":1241},{"style":357},[1242],{"type":53,"value":1243}," ~\u002Fmy-agent-memory\u002Fmemory\u002Fsystem\u002F\n",{"type":47,"tag":344,"props":1245,"children":1246},{"class":346,"line":457},[1247,1252],{"type":47,"tag":344,"props":1248,"children":1249},{"style":414},[1250],{"type":53,"value":1251},"cat",{"type":47,"tag":344,"props":1253,"children":1254},{"style":357},[1255],{"type":53,"value":1256}," ~\u002Fmy-agent-memory\u002Fmemory\u002Fsystem\u002Fhuman.md\n",{"type":47,"tag":119,"props":1258,"children":1260},{"id":1259},"enabling-git-memory-manual",[1261],{"type":53,"value":1262},"Enabling Git Memory (Manual)",{"type":47,"tag":56,"props":1264,"children":1265},{},[1266,1268,1274],{"type":53,"value":1267},"If the harness ",{"type":47,"tag":62,"props":1269,"children":1271},{"className":1270},[],[1272],{"type":53,"value":1273},"\u002Fmemfs enable",{"type":53,"value":1275}," failed, you can replicate it:",{"type":47,"tag":333,"props":1277,"children":1279},{"className":335,"code":1278,"language":337,"meta":338,"style":338},"AGENT_ID=\"\u003Cyour-agent-id>\"\nAGENT_DIR=~\u002F.letta\u002Fagents\u002F$AGENT_ID\nMEMORY_REPO_DIR=\"$AGENT_DIR\u002Fmemory\"\n\n# 1. Add git-memory-enabled tag (IMPORTANT: preserve existing tags!)\n# First GET the agent to read current tags, then PATCH with the new tag appended.\n# The harness code does: tags = [...existingTags, \"git-memory-enabled\"]\ncurl -X PATCH \"$LETTA_BASE_URL\u002Fv1\u002Fagents\u002F$AGENT_ID\" \\\n  -H \"Authorization: Bearer $LETTA_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"tags\": [\"origin:letta-code\", \"git-memory-enabled\"]}'\n\n# 2. Clone the repo into memory\u002F\nmkdir -p \"$MEMORY_REPO_DIR\"\ngit clone \"$LETTA_BASE_URL\u002Fv1\u002Fgit\u002F$AGENT_ID\u002Fstate.git\" \"$MEMORY_REPO_DIR\"\n\n# 3. Configure local credential helper (single-line format required)\ncd \"$MEMORY_REPO_DIR\"\ngit config --local credential.$LETTA_BASE_URL.helper '!f() { echo \"username=letta\"; echo \"password=$LETTA_API_KEY\"; }; f'\n",[1280],{"type":47,"tag":62,"props":1281,"children":1282},{"__ignoreMap":338},[1283,1309,1331,1361,1368,1376,1384,1392,1438,1468,1493,1515,1523,1532,1559,1609,1617,1626,1646],{"type":47,"tag":344,"props":1284,"children":1285},{"class":346,"line":347},[1286,1291,1295,1299,1304],{"type":47,"tag":344,"props":1287,"children":1288},{"style":374},[1289],{"type":53,"value":1290},"AGENT_ID",{"type":47,"tag":344,"props":1292,"children":1293},{"style":363},[1294],{"type":53,"value":633},{"type":47,"tag":344,"props":1296,"children":1297},{"style":363},[1298],{"type":53,"value":638},{"type":47,"tag":344,"props":1300,"children":1301},{"style":357},[1302],{"type":53,"value":1303},"\u003Cyour-agent-id>",{"type":47,"tag":344,"props":1305,"children":1306},{"style":363},[1307],{"type":53,"value":1308},"\"\n",{"type":47,"tag":344,"props":1310,"children":1311},{"class":346,"line":390},[1312,1317,1321,1326],{"type":47,"tag":344,"props":1313,"children":1314},{"style":374},[1315],{"type":53,"value":1316},"AGENT_DIR",{"type":47,"tag":344,"props":1318,"children":1319},{"style":363},[1320],{"type":53,"value":633},{"type":47,"tag":344,"props":1322,"children":1323},{"style":357},[1324],{"type":53,"value":1325},"~\u002F.letta\u002Fagents\u002F",{"type":47,"tag":344,"props":1327,"children":1328},{"style":374},[1329],{"type":53,"value":1330},"$AGENT_ID\n",{"type":47,"tag":344,"props":1332,"children":1333},{"class":346,"line":400},[1334,1339,1343,1347,1352,1357],{"type":47,"tag":344,"props":1335,"children":1336},{"style":374},[1337],{"type":53,"value":1338},"MEMORY_REPO_DIR",{"type":47,"tag":344,"props":1340,"children":1341},{"style":363},[1342],{"type":53,"value":633},{"type":47,"tag":344,"props":1344,"children":1345},{"style":363},[1346],{"type":53,"value":638},{"type":47,"tag":344,"props":1348,"children":1349},{"style":374},[1350],{"type":53,"value":1351},"$AGENT_DIR",{"type":47,"tag":344,"props":1353,"children":1354},{"style":357},[1355],{"type":53,"value":1356},"\u002Fmemory",{"type":47,"tag":344,"props":1358,"children":1359},{"style":363},[1360],{"type":53,"value":1308},{"type":47,"tag":344,"props":1362,"children":1363},{"class":346,"line":410},[1364],{"type":47,"tag":344,"props":1365,"children":1366},{"emptyLinePlaceholder":394},[1367],{"type":53,"value":397},{"type":47,"tag":344,"props":1369,"children":1370},{"class":346,"line":449},[1371],{"type":47,"tag":344,"props":1372,"children":1373},{"style":404},[1374],{"type":53,"value":1375},"# 1. Add git-memory-enabled tag (IMPORTANT: preserve existing tags!)\n",{"type":47,"tag":344,"props":1377,"children":1378},{"class":346,"line":457},[1379],{"type":47,"tag":344,"props":1380,"children":1381},{"style":404},[1382],{"type":53,"value":1383},"# First GET the agent to read current tags, then PATCH with the new tag appended.\n",{"type":47,"tag":344,"props":1385,"children":1386},{"class":346,"line":466},[1387],{"type":47,"tag":344,"props":1388,"children":1389},{"style":404},[1390],{"type":53,"value":1391},"# The harness code does: tags = [...existingTags, \"git-memory-enabled\"]\n",{"type":47,"tag":344,"props":1393,"children":1395},{"class":346,"line":1394},8,[1396,1401,1406,1411,1415,1419,1424,1429,1433],{"type":47,"tag":344,"props":1397,"children":1398},{"style":414},[1399],{"type":53,"value":1400},"curl",{"type":47,"tag":344,"props":1402,"children":1403},{"style":357},[1404],{"type":53,"value":1405}," -X",{"type":47,"tag":344,"props":1407,"children":1408},{"style":357},[1409],{"type":53,"value":1410}," PATCH",{"type":47,"tag":344,"props":1412,"children":1413},{"style":363},[1414],{"type":53,"value":672},{"type":47,"tag":344,"props":1416,"children":1417},{"style":374},[1418],{"type":53,"value":489},{"type":47,"tag":344,"props":1420,"children":1421},{"style":357},[1422],{"type":53,"value":1423},"\u002Fv1\u002Fagents\u002F",{"type":47,"tag":344,"props":1425,"children":1426},{"style":374},[1427],{"type":53,"value":1428},"$AGENT_ID",{"type":47,"tag":344,"props":1430,"children":1431},{"style":363},[1432],{"type":53,"value":638},{"type":47,"tag":344,"props":1434,"children":1435},{"style":374},[1436],{"type":53,"value":1437}," \\\n",{"type":47,"tag":344,"props":1439,"children":1441},{"class":346,"line":1440},9,[1442,1447,1451,1456,1460,1464],{"type":47,"tag":344,"props":1443,"children":1444},{"style":357},[1445],{"type":53,"value":1446},"  -H",{"type":47,"tag":344,"props":1448,"children":1449},{"style":363},[1450],{"type":53,"value":672},{"type":47,"tag":344,"props":1452,"children":1453},{"style":357},[1454],{"type":53,"value":1455},"Authorization: Bearer ",{"type":47,"tag":344,"props":1457,"children":1458},{"style":374},[1459],{"type":53,"value":677},{"type":47,"tag":344,"props":1461,"children":1462},{"style":363},[1463],{"type":53,"value":638},{"type":47,"tag":344,"props":1465,"children":1466},{"style":374},[1467],{"type":53,"value":1437},{"type":47,"tag":344,"props":1469,"children":1471},{"class":346,"line":1470},10,[1472,1476,1480,1485,1489],{"type":47,"tag":344,"props":1473,"children":1474},{"style":357},[1475],{"type":53,"value":1446},{"type":47,"tag":344,"props":1477,"children":1478},{"style":363},[1479],{"type":53,"value":672},{"type":47,"tag":344,"props":1481,"children":1482},{"style":357},[1483],{"type":53,"value":1484},"Content-Type: application\u002Fjson",{"type":47,"tag":344,"props":1486,"children":1487},{"style":363},[1488],{"type":53,"value":638},{"type":47,"tag":344,"props":1490,"children":1491},{"style":374},[1492],{"type":53,"value":1437},{"type":47,"tag":344,"props":1494,"children":1496},{"class":346,"line":1495},11,[1497,1502,1506,1511],{"type":47,"tag":344,"props":1498,"children":1499},{"style":357},[1500],{"type":53,"value":1501},"  -d",{"type":47,"tag":344,"props":1503,"children":1504},{"style":363},[1505],{"type":53,"value":436},{"type":47,"tag":344,"props":1507,"children":1508},{"style":357},[1509],{"type":53,"value":1510},"{\"tags\": [\"origin:letta-code\", \"git-memory-enabled\"]}",{"type":47,"tag":344,"props":1512,"children":1513},{"style":363},[1514],{"type":53,"value":446},{"type":47,"tag":344,"props":1516,"children":1518},{"class":346,"line":1517},12,[1519],{"type":47,"tag":344,"props":1520,"children":1521},{"emptyLinePlaceholder":394},[1522],{"type":53,"value":397},{"type":47,"tag":344,"props":1524,"children":1526},{"class":346,"line":1525},13,[1527],{"type":47,"tag":344,"props":1528,"children":1529},{"style":404},[1530],{"type":53,"value":1531},"# 2. Clone the repo into memory\u002F\n",{"type":47,"tag":344,"props":1533,"children":1535},{"class":346,"line":1534},14,[1536,1541,1546,1550,1555],{"type":47,"tag":344,"props":1537,"children":1538},{"style":414},[1539],{"type":53,"value":1540},"mkdir",{"type":47,"tag":344,"props":1542,"children":1543},{"style":357},[1544],{"type":53,"value":1545}," -p",{"type":47,"tag":344,"props":1547,"children":1548},{"style":363},[1549],{"type":53,"value":672},{"type":47,"tag":344,"props":1551,"children":1552},{"style":374},[1553],{"type":53,"value":1554},"$MEMORY_REPO_DIR",{"type":47,"tag":344,"props":1556,"children":1557},{"style":363},[1558],{"type":53,"value":1308},{"type":47,"tag":344,"props":1560,"children":1562},{"class":346,"line":1561},15,[1563,1567,1571,1575,1579,1584,1588,1593,1597,1601,1605],{"type":47,"tag":344,"props":1564,"children":1565},{"style":414},[1566],{"type":53,"value":19},{"type":47,"tag":344,"props":1568,"children":1569},{"style":357},[1570],{"type":53,"value":754},{"type":47,"tag":344,"props":1572,"children":1573},{"style":363},[1574],{"type":53,"value":672},{"type":47,"tag":344,"props":1576,"children":1577},{"style":374},[1578],{"type":53,"value":489},{"type":47,"tag":344,"props":1580,"children":1581},{"style":357},[1582],{"type":53,"value":1583},"\u002Fv1\u002Fgit\u002F",{"type":47,"tag":344,"props":1585,"children":1586},{"style":374},[1587],{"type":53,"value":1428},{"type":47,"tag":344,"props":1589,"children":1590},{"style":357},[1591],{"type":53,"value":1592},"\u002Fstate.git",{"type":47,"tag":344,"props":1594,"children":1595},{"style":363},[1596],{"type":53,"value":638},{"type":47,"tag":344,"props":1598,"children":1599},{"style":363},[1600],{"type":53,"value":672},{"type":47,"tag":344,"props":1602,"children":1603},{"style":374},[1604],{"type":53,"value":1554},{"type":47,"tag":344,"props":1606,"children":1607},{"style":363},[1608],{"type":53,"value":1308},{"type":47,"tag":344,"props":1610,"children":1612},{"class":346,"line":1611},16,[1613],{"type":47,"tag":344,"props":1614,"children":1615},{"emptyLinePlaceholder":394},[1616],{"type":53,"value":397},{"type":47,"tag":344,"props":1618,"children":1620},{"class":346,"line":1619},17,[1621],{"type":47,"tag":344,"props":1622,"children":1623},{"style":404},[1624],{"type":53,"value":1625},"# 3. Configure local credential helper (single-line format required)\n",{"type":47,"tag":344,"props":1627,"children":1629},{"class":346,"line":1628},18,[1630,1634,1638,1642],{"type":47,"tag":344,"props":1631,"children":1632},{"style":351},[1633],{"type":53,"value":354},{"type":47,"tag":344,"props":1635,"children":1636},{"style":363},[1637],{"type":53,"value":672},{"type":47,"tag":344,"props":1639,"children":1640},{"style":374},[1641],{"type":53,"value":1554},{"type":47,"tag":344,"props":1643,"children":1644},{"style":363},[1645],{"type":53,"value":1308},{"type":47,"tag":344,"props":1647,"children":1649},{"class":346,"line":1648},19,[1650,1654,1658,1662,1666,1670,1674,1678,1682],{"type":47,"tag":344,"props":1651,"children":1652},{"style":414},[1653],{"type":53,"value":19},{"type":47,"tag":344,"props":1655,"children":1656},{"style":357},[1657],{"type":53,"value":421},{"type":47,"tag":344,"props":1659,"children":1660},{"style":357},[1661],{"type":53,"value":426},{"type":47,"tag":344,"props":1663,"children":1664},{"style":357},[1665],{"type":53,"value":484},{"type":47,"tag":344,"props":1667,"children":1668},{"style":374},[1669],{"type":53,"value":489},{"type":47,"tag":344,"props":1671,"children":1672},{"style":357},[1673],{"type":53,"value":494},{"type":47,"tag":344,"props":1675,"children":1676},{"style":363},[1677],{"type":53,"value":436},{"type":47,"tag":344,"props":1679,"children":1680},{"style":357},[1681],{"type":53,"value":503},{"type":47,"tag":344,"props":1683,"children":1684},{"style":363},[1685],{"type":53,"value":446},{"type":47,"tag":119,"props":1687,"children":1689},{"id":1688},"bidirectional-sync",[1690],{"type":53,"value":1691},"Bidirectional Sync",{"type":47,"tag":1693,"props":1694,"children":1696},"h3",{"id":1695},"api-edit-git-pull",[1697],{"type":53,"value":1698},"API Edit -> Git Pull",{"type":47,"tag":333,"props":1700,"children":1702},{"className":335,"code":1701,"language":337,"meta":338,"style":338},"# 1. Edit block via API (or use memory tools)\n# 2. Pull to get changes (webhook creates commit automatically)\ncd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\ngit pull\n",[1703],{"type":47,"tag":62,"props":1704,"children":1705},{"__ignoreMap":338},[1706,1714,1722,1753],{"type":47,"tag":344,"props":1707,"children":1708},{"class":346,"line":347},[1709],{"type":47,"tag":344,"props":1710,"children":1711},{"style":404},[1712],{"type":53,"value":1713},"# 1. Edit block via API (or use memory tools)\n",{"type":47,"tag":344,"props":1715,"children":1716},{"class":346,"line":390},[1717],{"type":47,"tag":344,"props":1718,"children":1719},{"style":404},[1720],{"type":53,"value":1721},"# 2. Pull to get changes (webhook creates commit automatically)\n",{"type":47,"tag":344,"props":1723,"children":1724},{"class":346,"line":400},[1725,1729,1733,1737,1741,1745,1749],{"type":47,"tag":344,"props":1726,"children":1727},{"style":351},[1728],{"type":53,"value":354},{"type":47,"tag":344,"props":1730,"children":1731},{"style":357},[1732],{"type":53,"value":360},{"type":47,"tag":344,"props":1734,"children":1735},{"style":363},[1736],{"type":53,"value":366},{"type":47,"tag":344,"props":1738,"children":1739},{"style":357},[1740],{"type":53,"value":371},{"type":47,"tag":344,"props":1742,"children":1743},{"style":374},[1744],{"type":53,"value":377},{"type":47,"tag":344,"props":1746,"children":1747},{"style":363},[1748],{"type":53,"value":382},{"type":47,"tag":344,"props":1750,"children":1751},{"style":357},[1752],{"type":53,"value":387},{"type":47,"tag":344,"props":1754,"children":1755},{"class":346,"line":410},[1756,1760],{"type":47,"tag":344,"props":1757,"children":1758},{"style":414},[1759],{"type":53,"value":19},{"type":47,"tag":344,"props":1761,"children":1762},{"style":357},[1763],{"type":53,"value":1764}," pull\n",{"type":47,"tag":56,"props":1766,"children":1767},{},[1768],{"type":53,"value":1769},"Changes made via the API are automatically committed to git within 2-3 seconds.",{"type":47,"tag":1693,"props":1771,"children":1773},{"id":1772},"git-push-api-update",[1774],{"type":53,"value":1775},"Git Push -> API Update",{"type":47,"tag":333,"props":1777,"children":1779},{"className":335,"code":1778,"language":337,"meta":338,"style":338},"cd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\n\n# 1. Edit files locally\necho \"Updated info\" > system\u002Fhuman.md\n\n# 2. Commit and push\ngit add system\u002Fhuman.md\ngit commit -m \"fix: update human block\"\ngit push\n\n# 3. API automatically reflects changes (webhook-triggered, ~2-3s delay)\n",[1780],{"type":47,"tag":62,"props":1781,"children":1782},{"__ignoreMap":338},[1783,1814,1821,1829,1860,1867,1875,1891,1921,1933,1940],{"type":47,"tag":344,"props":1784,"children":1785},{"class":346,"line":347},[1786,1790,1794,1798,1802,1806,1810],{"type":47,"tag":344,"props":1787,"children":1788},{"style":351},[1789],{"type":53,"value":354},{"type":47,"tag":344,"props":1791,"children":1792},{"style":357},[1793],{"type":53,"value":360},{"type":47,"tag":344,"props":1795,"children":1796},{"style":363},[1797],{"type":53,"value":366},{"type":47,"tag":344,"props":1799,"children":1800},{"style":357},[1801],{"type":53,"value":371},{"type":47,"tag":344,"props":1803,"children":1804},{"style":374},[1805],{"type":53,"value":377},{"type":47,"tag":344,"props":1807,"children":1808},{"style":363},[1809],{"type":53,"value":382},{"type":47,"tag":344,"props":1811,"children":1812},{"style":357},[1813],{"type":53,"value":387},{"type":47,"tag":344,"props":1815,"children":1816},{"class":346,"line":390},[1817],{"type":47,"tag":344,"props":1818,"children":1819},{"emptyLinePlaceholder":394},[1820],{"type":53,"value":397},{"type":47,"tag":344,"props":1822,"children":1823},{"class":346,"line":400},[1824],{"type":47,"tag":344,"props":1825,"children":1826},{"style":404},[1827],{"type":53,"value":1828},"# 1. Edit files locally\n",{"type":47,"tag":344,"props":1830,"children":1831},{"class":346,"line":410},[1832,1837,1841,1846,1850,1855],{"type":47,"tag":344,"props":1833,"children":1834},{"style":351},[1835],{"type":53,"value":1836},"echo",{"type":47,"tag":344,"props":1838,"children":1839},{"style":363},[1840],{"type":53,"value":672},{"type":47,"tag":344,"props":1842,"children":1843},{"style":357},[1844],{"type":53,"value":1845},"Updated info",{"type":47,"tag":344,"props":1847,"children":1848},{"style":363},[1849],{"type":53,"value":638},{"type":47,"tag":344,"props":1851,"children":1852},{"style":363},[1853],{"type":53,"value":1854}," >",{"type":47,"tag":344,"props":1856,"children":1857},{"style":357},[1858],{"type":53,"value":1859}," system\u002Fhuman.md\n",{"type":47,"tag":344,"props":1861,"children":1862},{"class":346,"line":449},[1863],{"type":47,"tag":344,"props":1864,"children":1865},{"emptyLinePlaceholder":394},[1866],{"type":53,"value":397},{"type":47,"tag":344,"props":1868,"children":1869},{"class":346,"line":457},[1870],{"type":47,"tag":344,"props":1871,"children":1872},{"style":404},[1873],{"type":53,"value":1874},"# 2. Commit and push\n",{"type":47,"tag":344,"props":1876,"children":1877},{"class":346,"line":466},[1878,1882,1887],{"type":47,"tag":344,"props":1879,"children":1880},{"style":414},[1881],{"type":53,"value":19},{"type":47,"tag":344,"props":1883,"children":1884},{"style":357},[1885],{"type":53,"value":1886}," add",{"type":47,"tag":344,"props":1888,"children":1889},{"style":357},[1890],{"type":53,"value":1859},{"type":47,"tag":344,"props":1892,"children":1893},{"class":346,"line":1394},[1894,1898,1903,1908,1912,1917],{"type":47,"tag":344,"props":1895,"children":1896},{"style":414},[1897],{"type":53,"value":19},{"type":47,"tag":344,"props":1899,"children":1900},{"style":357},[1901],{"type":53,"value":1902}," commit",{"type":47,"tag":344,"props":1904,"children":1905},{"style":357},[1906],{"type":53,"value":1907}," -m",{"type":47,"tag":344,"props":1909,"children":1910},{"style":363},[1911],{"type":53,"value":672},{"type":47,"tag":344,"props":1913,"children":1914},{"style":357},[1915],{"type":53,"value":1916},"fix: update human block",{"type":47,"tag":344,"props":1918,"children":1919},{"style":363},[1920],{"type":53,"value":1308},{"type":47,"tag":344,"props":1922,"children":1923},{"class":346,"line":1440},[1924,1928],{"type":47,"tag":344,"props":1925,"children":1926},{"style":414},[1927],{"type":53,"value":19},{"type":47,"tag":344,"props":1929,"children":1930},{"style":357},[1931],{"type":53,"value":1932}," push\n",{"type":47,"tag":344,"props":1934,"children":1935},{"class":346,"line":1470},[1936],{"type":47,"tag":344,"props":1937,"children":1938},{"emptyLinePlaceholder":394},[1939],{"type":53,"value":397},{"type":47,"tag":344,"props":1941,"children":1942},{"class":346,"line":1495},[1943],{"type":47,"tag":344,"props":1944,"children":1945},{"style":404},[1946],{"type":53,"value":1947},"# 3. API automatically reflects changes (webhook-triggered, ~2-3s delay)\n",{"type":47,"tag":119,"props":1949,"children":1951},{"id":1950},"conflict-resolution",[1952],{"type":53,"value":1953},"Conflict Resolution",{"type":47,"tag":56,"props":1955,"children":1956},{},[1957],{"type":53,"value":1958},"When both API and git have diverged:",{"type":47,"tag":333,"props":1960,"children":1962},{"className":335,"code":1961,"language":337,"meta":338,"style":338},"cd ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory\n\n# 1. Try to push (will be rejected)\ngit push  # -> \"fetch first\"\n\n# 2. Pull to create merge conflict\ngit pull --no-rebase\n# -> CONFLICT in system\u002Fhuman.md\n\n# 3. View conflict markers\ncat system\u002Fhuman.md\n# \u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n# your local changes\n# =======\n# server changes\n# >>>>>>> \u003Ccommit>\n\n# 4. Resolve\necho \"final resolved content\" > system\u002Fhuman.md\ngit add system\u002Fhuman.md\ngit commit -m \"fix: resolved conflict in human block\"\n\n# 5. Push resolution\ngit push\n# -> API automatically updates with resolved content\n",[1963],{"type":47,"tag":62,"props":1964,"children":1965},{"__ignoreMap":338},[1966,1997,2004,2012,2029,2036,2044,2061,2069,2076,2084,2095,2103,2111,2119,2127,2135,2142,2150,2178,2194,2223,2231,2240,2252],{"type":47,"tag":344,"props":1967,"children":1968},{"class":346,"line":347},[1969,1973,1977,1981,1985,1989,1993],{"type":47,"tag":344,"props":1970,"children":1971},{"style":351},[1972],{"type":53,"value":354},{"type":47,"tag":344,"props":1974,"children":1975},{"style":357},[1976],{"type":53,"value":360},{"type":47,"tag":344,"props":1978,"children":1979},{"style":363},[1980],{"type":53,"value":366},{"type":47,"tag":344,"props":1982,"children":1983},{"style":357},[1984],{"type":53,"value":371},{"type":47,"tag":344,"props":1986,"children":1987},{"style":374},[1988],{"type":53,"value":377},{"type":47,"tag":344,"props":1990,"children":1991},{"style":363},[1992],{"type":53,"value":382},{"type":47,"tag":344,"props":1994,"children":1995},{"style":357},[1996],{"type":53,"value":387},{"type":47,"tag":344,"props":1998,"children":1999},{"class":346,"line":390},[2000],{"type":47,"tag":344,"props":2001,"children":2002},{"emptyLinePlaceholder":394},[2003],{"type":53,"value":397},{"type":47,"tag":344,"props":2005,"children":2006},{"class":346,"line":400},[2007],{"type":47,"tag":344,"props":2008,"children":2009},{"style":404},[2010],{"type":53,"value":2011},"# 1. Try to push (will be rejected)\n",{"type":47,"tag":344,"props":2013,"children":2014},{"class":346,"line":410},[2015,2019,2024],{"type":47,"tag":344,"props":2016,"children":2017},{"style":414},[2018],{"type":53,"value":19},{"type":47,"tag":344,"props":2020,"children":2021},{"style":357},[2022],{"type":53,"value":2023}," push",{"type":47,"tag":344,"props":2025,"children":2026},{"style":404},[2027],{"type":53,"value":2028},"  # -> \"fetch first\"\n",{"type":47,"tag":344,"props":2030,"children":2031},{"class":346,"line":449},[2032],{"type":47,"tag":344,"props":2033,"children":2034},{"emptyLinePlaceholder":394},[2035],{"type":53,"value":397},{"type":47,"tag":344,"props":2037,"children":2038},{"class":346,"line":457},[2039],{"type":47,"tag":344,"props":2040,"children":2041},{"style":404},[2042],{"type":53,"value":2043},"# 2. Pull to create merge conflict\n",{"type":47,"tag":344,"props":2045,"children":2046},{"class":346,"line":466},[2047,2051,2056],{"type":47,"tag":344,"props":2048,"children":2049},{"style":414},[2050],{"type":53,"value":19},{"type":47,"tag":344,"props":2052,"children":2053},{"style":357},[2054],{"type":53,"value":2055}," pull",{"type":47,"tag":344,"props":2057,"children":2058},{"style":357},[2059],{"type":53,"value":2060}," --no-rebase\n",{"type":47,"tag":344,"props":2062,"children":2063},{"class":346,"line":1394},[2064],{"type":47,"tag":344,"props":2065,"children":2066},{"style":404},[2067],{"type":53,"value":2068},"# -> CONFLICT in system\u002Fhuman.md\n",{"type":47,"tag":344,"props":2070,"children":2071},{"class":346,"line":1440},[2072],{"type":47,"tag":344,"props":2073,"children":2074},{"emptyLinePlaceholder":394},[2075],{"type":53,"value":397},{"type":47,"tag":344,"props":2077,"children":2078},{"class":346,"line":1470},[2079],{"type":47,"tag":344,"props":2080,"children":2081},{"style":404},[2082],{"type":53,"value":2083},"# 3. View conflict markers\n",{"type":47,"tag":344,"props":2085,"children":2086},{"class":346,"line":1495},[2087,2091],{"type":47,"tag":344,"props":2088,"children":2089},{"style":414},[2090],{"type":53,"value":1251},{"type":47,"tag":344,"props":2092,"children":2093},{"style":357},[2094],{"type":53,"value":1859},{"type":47,"tag":344,"props":2096,"children":2097},{"class":346,"line":1517},[2098],{"type":47,"tag":344,"props":2099,"children":2100},{"style":404},[2101],{"type":53,"value":2102},"# \u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n",{"type":47,"tag":344,"props":2104,"children":2105},{"class":346,"line":1525},[2106],{"type":47,"tag":344,"props":2107,"children":2108},{"style":404},[2109],{"type":53,"value":2110},"# your local changes\n",{"type":47,"tag":344,"props":2112,"children":2113},{"class":346,"line":1534},[2114],{"type":47,"tag":344,"props":2115,"children":2116},{"style":404},[2117],{"type":53,"value":2118},"# =======\n",{"type":47,"tag":344,"props":2120,"children":2121},{"class":346,"line":1561},[2122],{"type":47,"tag":344,"props":2123,"children":2124},{"style":404},[2125],{"type":53,"value":2126},"# server changes\n",{"type":47,"tag":344,"props":2128,"children":2129},{"class":346,"line":1611},[2130],{"type":47,"tag":344,"props":2131,"children":2132},{"style":404},[2133],{"type":53,"value":2134},"# >>>>>>> \u003Ccommit>\n",{"type":47,"tag":344,"props":2136,"children":2137},{"class":346,"line":1619},[2138],{"type":47,"tag":344,"props":2139,"children":2140},{"emptyLinePlaceholder":394},[2141],{"type":53,"value":397},{"type":47,"tag":344,"props":2143,"children":2144},{"class":346,"line":1628},[2145],{"type":47,"tag":344,"props":2146,"children":2147},{"style":404},[2148],{"type":53,"value":2149},"# 4. Resolve\n",{"type":47,"tag":344,"props":2151,"children":2152},{"class":346,"line":1648},[2153,2157,2161,2166,2170,2174],{"type":47,"tag":344,"props":2154,"children":2155},{"style":351},[2156],{"type":53,"value":1836},{"type":47,"tag":344,"props":2158,"children":2159},{"style":363},[2160],{"type":53,"value":672},{"type":47,"tag":344,"props":2162,"children":2163},{"style":357},[2164],{"type":53,"value":2165},"final resolved content",{"type":47,"tag":344,"props":2167,"children":2168},{"style":363},[2169],{"type":53,"value":638},{"type":47,"tag":344,"props":2171,"children":2172},{"style":363},[2173],{"type":53,"value":1854},{"type":47,"tag":344,"props":2175,"children":2176},{"style":357},[2177],{"type":53,"value":1859},{"type":47,"tag":344,"props":2179,"children":2181},{"class":346,"line":2180},20,[2182,2186,2190],{"type":47,"tag":344,"props":2183,"children":2184},{"style":414},[2185],{"type":53,"value":19},{"type":47,"tag":344,"props":2187,"children":2188},{"style":357},[2189],{"type":53,"value":1886},{"type":47,"tag":344,"props":2191,"children":2192},{"style":357},[2193],{"type":53,"value":1859},{"type":47,"tag":344,"props":2195,"children":2197},{"class":346,"line":2196},21,[2198,2202,2206,2210,2214,2219],{"type":47,"tag":344,"props":2199,"children":2200},{"style":414},[2201],{"type":53,"value":19},{"type":47,"tag":344,"props":2203,"children":2204},{"style":357},[2205],{"type":53,"value":1902},{"type":47,"tag":344,"props":2207,"children":2208},{"style":357},[2209],{"type":53,"value":1907},{"type":47,"tag":344,"props":2211,"children":2212},{"style":363},[2213],{"type":53,"value":672},{"type":47,"tag":344,"props":2215,"children":2216},{"style":357},[2217],{"type":53,"value":2218},"fix: resolved conflict in human block",{"type":47,"tag":344,"props":2220,"children":2221},{"style":363},[2222],{"type":53,"value":1308},{"type":47,"tag":344,"props":2224,"children":2226},{"class":346,"line":2225},22,[2227],{"type":47,"tag":344,"props":2228,"children":2229},{"emptyLinePlaceholder":394},[2230],{"type":53,"value":397},{"type":47,"tag":344,"props":2232,"children":2234},{"class":346,"line":2233},23,[2235],{"type":47,"tag":344,"props":2236,"children":2237},{"style":404},[2238],{"type":53,"value":2239},"# 5. Push resolution\n",{"type":47,"tag":344,"props":2241,"children":2243},{"class":346,"line":2242},24,[2244,2248],{"type":47,"tag":344,"props":2245,"children":2246},{"style":414},[2247],{"type":53,"value":19},{"type":47,"tag":344,"props":2249,"children":2250},{"style":357},[2251],{"type":53,"value":1932},{"type":47,"tag":344,"props":2253,"children":2255},{"class":346,"line":2254},25,[2256],{"type":47,"tag":344,"props":2257,"children":2258},{"style":404},[2259],{"type":53,"value":2260},"# -> API automatically updates with resolved content\n",{"type":47,"tag":119,"props":2262,"children":2264},{"id":2263},"block-management",[2265],{"type":53,"value":2266},"Block Management",{"type":47,"tag":1693,"props":2268,"children":2270},{"id":2269},"create-new-block",[2271],{"type":53,"value":2272},"Create New Block",{"type":47,"tag":333,"props":2274,"children":2276},{"className":335,"code":2275,"language":337,"meta":338,"style":338},"# Create file in system\u002F directory (automatically attached to agent)\necho \"My new block content\" > system\u002Fnew-block.md\ngit add system\u002Fnew-block.md\ngit commit -m \"feat: add new block\"\ngit push\n# -> Block automatically created and attached to agent\n",[2277],{"type":47,"tag":62,"props":2278,"children":2279},{"__ignoreMap":338},[2280,2288,2317,2332,2360,2371],{"type":47,"tag":344,"props":2281,"children":2282},{"class":346,"line":347},[2283],{"type":47,"tag":344,"props":2284,"children":2285},{"style":404},[2286],{"type":53,"value":2287},"# Create file in system\u002F directory (automatically attached to agent)\n",{"type":47,"tag":344,"props":2289,"children":2290},{"class":346,"line":390},[2291,2295,2299,2304,2308,2312],{"type":47,"tag":344,"props":2292,"children":2293},{"style":351},[2294],{"type":53,"value":1836},{"type":47,"tag":344,"props":2296,"children":2297},{"style":363},[2298],{"type":53,"value":672},{"type":47,"tag":344,"props":2300,"children":2301},{"style":357},[2302],{"type":53,"value":2303},"My new block content",{"type":47,"tag":344,"props":2305,"children":2306},{"style":363},[2307],{"type":53,"value":638},{"type":47,"tag":344,"props":2309,"children":2310},{"style":363},[2311],{"type":53,"value":1854},{"type":47,"tag":344,"props":2313,"children":2314},{"style":357},[2315],{"type":53,"value":2316}," system\u002Fnew-block.md\n",{"type":47,"tag":344,"props":2318,"children":2319},{"class":346,"line":400},[2320,2324,2328],{"type":47,"tag":344,"props":2321,"children":2322},{"style":414},[2323],{"type":53,"value":19},{"type":47,"tag":344,"props":2325,"children":2326},{"style":357},[2327],{"type":53,"value":1886},{"type":47,"tag":344,"props":2329,"children":2330},{"style":357},[2331],{"type":53,"value":2316},{"type":47,"tag":344,"props":2333,"children":2334},{"class":346,"line":410},[2335,2339,2343,2347,2351,2356],{"type":47,"tag":344,"props":2336,"children":2337},{"style":414},[2338],{"type":53,"value":19},{"type":47,"tag":344,"props":2340,"children":2341},{"style":357},[2342],{"type":53,"value":1902},{"type":47,"tag":344,"props":2344,"children":2345},{"style":357},[2346],{"type":53,"value":1907},{"type":47,"tag":344,"props":2348,"children":2349},{"style":363},[2350],{"type":53,"value":672},{"type":47,"tag":344,"props":2352,"children":2353},{"style":357},[2354],{"type":53,"value":2355},"feat: add new block",{"type":47,"tag":344,"props":2357,"children":2358},{"style":363},[2359],{"type":53,"value":1308},{"type":47,"tag":344,"props":2361,"children":2362},{"class":346,"line":449},[2363,2367],{"type":47,"tag":344,"props":2364,"children":2365},{"style":414},[2366],{"type":53,"value":19},{"type":47,"tag":344,"props":2368,"children":2369},{"style":357},[2370],{"type":53,"value":1932},{"type":47,"tag":344,"props":2372,"children":2373},{"class":346,"line":457},[2374],{"type":47,"tag":344,"props":2375,"children":2376},{"style":404},[2377],{"type":53,"value":2378},"# -> Block automatically created and attached to agent\n",{"type":47,"tag":1693,"props":2380,"children":2382},{"id":2381},"deletedetach-block",[2383],{"type":53,"value":2384},"Delete\u002FDetach Block",{"type":47,"tag":333,"props":2386,"children":2388},{"className":335,"code":2387,"language":337,"meta":338,"style":338},"# Remove file from system\u002F directory\ngit rm system\u002Fpersona.md\ngit commit -m \"chore: remove persona block\"\ngit push\n# -> Block automatically detached from agent\n",[2389],{"type":47,"tag":62,"props":2390,"children":2391},{"__ignoreMap":338},[2392,2400,2417,2445,2456],{"type":47,"tag":344,"props":2393,"children":2394},{"class":346,"line":347},[2395],{"type":47,"tag":344,"props":2396,"children":2397},{"style":404},[2398],{"type":53,"value":2399},"# Remove file from system\u002F directory\n",{"type":47,"tag":344,"props":2401,"children":2402},{"class":346,"line":390},[2403,2407,2412],{"type":47,"tag":344,"props":2404,"children":2405},{"style":414},[2406],{"type":53,"value":19},{"type":47,"tag":344,"props":2408,"children":2409},{"style":357},[2410],{"type":53,"value":2411}," rm",{"type":47,"tag":344,"props":2413,"children":2414},{"style":357},[2415],{"type":53,"value":2416}," system\u002Fpersona.md\n",{"type":47,"tag":344,"props":2418,"children":2419},{"class":346,"line":400},[2420,2424,2428,2432,2436,2441],{"type":47,"tag":344,"props":2421,"children":2422},{"style":414},[2423],{"type":53,"value":19},{"type":47,"tag":344,"props":2425,"children":2426},{"style":357},[2427],{"type":53,"value":1902},{"type":47,"tag":344,"props":2429,"children":2430},{"style":357},[2431],{"type":53,"value":1907},{"type":47,"tag":344,"props":2433,"children":2434},{"style":363},[2435],{"type":53,"value":672},{"type":47,"tag":344,"props":2437,"children":2438},{"style":357},[2439],{"type":53,"value":2440},"chore: remove persona block",{"type":47,"tag":344,"props":2442,"children":2443},{"style":363},[2444],{"type":53,"value":1308},{"type":47,"tag":344,"props":2446,"children":2447},{"class":346,"line":410},[2448,2452],{"type":47,"tag":344,"props":2449,"children":2450},{"style":414},[2451],{"type":53,"value":19},{"type":47,"tag":344,"props":2453,"children":2454},{"style":357},[2455],{"type":53,"value":1932},{"type":47,"tag":344,"props":2457,"children":2458},{"class":346,"line":449},[2459],{"type":47,"tag":344,"props":2460,"children":2461},{"style":404},[2462],{"type":53,"value":2463},"# -> Block automatically detached from agent\n",{"type":47,"tag":119,"props":2465,"children":2467},{"id":2466},"directory-structure",[2468],{"type":53,"value":2469},"Directory Structure",{"type":47,"tag":333,"props":2471,"children":2474},{"className":2472,"code":2473,"language":53},[978],"~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002F\n├── .letta\u002F\n│   └── config.json              # Agent metadata\n└── memory\u002F                      # Git repo root\n    ├── .git\u002F                    # Git repo data\n    └── system\u002F                  # System blocks (attached to agent)\n        ├── human.md\n        └── persona.md\n",[2475],{"type":47,"tag":62,"props":2476,"children":2477},{"__ignoreMap":338},[2478],{"type":53,"value":2473},{"type":47,"tag":56,"props":2480,"children":2481},{},[2482,2487,2489,2495],{"type":47,"tag":74,"props":2483,"children":2484},{},[2485],{"type":53,"value":2486},"System blocks",{"type":53,"value":2488}," (",{"type":47,"tag":62,"props":2490,"children":2492},{"className":2491},[],[2493],{"type":53,"value":2494},"memory\u002Fsystem\u002F",{"type":53,"value":2496},") are attached to the agent and appear in the agent's system prompt.",{"type":47,"tag":119,"props":2498,"children":2500},{"id":2499},"requirements",[2501],{"type":53,"value":2502},"Requirements",{"type":47,"tag":80,"props":2504,"children":2505},{},[2506,2518,2523],{"type":47,"tag":84,"props":2507,"children":2508},{},[2509,2511,2516],{"type":53,"value":2510},"Agent must have ",{"type":47,"tag":62,"props":2512,"children":2514},{"className":2513},[],[2515],{"type":53,"value":67},{"type":53,"value":2517}," tag",{"type":47,"tag":84,"props":2519,"children":2520},{},[2521],{"type":53,"value":2522},"Valid API key with agent access",{"type":47,"tag":84,"props":2524,"children":2525},{},[2526],{"type":53,"value":2527},"Git installed locally",{"type":47,"tag":119,"props":2529,"children":2531},{"id":2530},"troubleshooting",[2532],{"type":53,"value":2533},"Troubleshooting",{"type":47,"tag":56,"props":2535,"children":2536},{},[2537],{"type":47,"tag":74,"props":2538,"children":2539},{},[2540],{"type":53,"value":2541},"Clone fails with \"Authentication failed\":",{"type":47,"tag":80,"props":2543,"children":2544},{},[2545,2556,2567,2572],{"type":47,"tag":84,"props":2546,"children":2547},{},[2548,2550],{"type":53,"value":2549},"Check local helper(s): ",{"type":47,"tag":62,"props":2551,"children":2553},{"className":2552},[],[2554],{"type":53,"value":2555},"git -C ~\u002F.letta\u002Fagents\u002F\u003Cagent-id>\u002Fmemory config --local --get-regexp '^credential\\..*\\.helper$'",{"type":47,"tag":84,"props":2557,"children":2558},{},[2559,2561],{"type":53,"value":2560},"Check for conflicting global helper(s): ",{"type":47,"tag":62,"props":2562,"children":2564},{"className":2563},[],[2565],{"type":53,"value":2566},"git config --global --get-regexp '^credential\\..*letta\\.com.*\\.helper$'",{"type":47,"tag":84,"props":2568,"children":2569},{},[2570],{"type":53,"value":2571},"Reconfigure local helper: see Authentication section above",{"type":47,"tag":84,"props":2573,"children":2574},{},[2575,2577],{"type":53,"value":2576},"Verify the endpoint is reachable: ",{"type":47,"tag":62,"props":2578,"children":2580},{"className":2579},[],[2581],{"type":53,"value":2582},"curl -u letta:$LETTA_API_KEY $LETTA_BASE_URL\u002Fv1\u002Fgit\u002F\u003Cagent-id>\u002Fstate.git\u002Finfo\u002Frefs?service=git-upload-pack",{"type":47,"tag":56,"props":2584,"children":2585},{},[2586],{"type":47,"tag":74,"props":2587,"children":2588},{},[2589],{"type":53,"value":2590},"Push\u002Fpull doesn't update API:",{"type":47,"tag":80,"props":2592,"children":2593},{},[2594,2599,2610],{"type":47,"tag":84,"props":2595,"children":2596},{},[2597],{"type":53,"value":2598},"Wait 2-3 seconds for webhook processing",{"type":47,"tag":84,"props":2600,"children":2601},{},[2602,2604,2609],{"type":53,"value":2603},"Verify agent has ",{"type":47,"tag":62,"props":2605,"children":2607},{"className":2606},[],[2608],{"type":53,"value":67},{"type":53,"value":2517},{"type":47,"tag":84,"props":2611,"children":2612},{},[2613],{"type":53,"value":2614},"Check if you have write access to the agent",{"type":47,"tag":56,"props":2616,"children":2617},{},[2618],{"type":47,"tag":74,"props":2619,"children":2620},{},[2621],{"type":53,"value":2622},"Harness setup failed (no .git\u002F after \u002Fmemfs enable):",{"type":47,"tag":80,"props":2624,"children":2625},{},[2626,2638],{"type":47,"tag":84,"props":2627,"children":2628},{},[2629,2631,2637],{"type":53,"value":2630},"Check debug logs (",{"type":47,"tag":62,"props":2632,"children":2634},{"className":2633},[],[2635],{"type":53,"value":2636},"LETTA_DEBUG=1",{"type":53,"value":841},{"type":47,"tag":84,"props":2639,"children":2640},{},[2641],{"type":53,"value":2642},"Follow \"Enabling Git Memory (Manual)\" steps above",{"type":47,"tag":56,"props":2644,"children":2645},{},[2646],{"type":47,"tag":74,"props":2647,"children":2648},{},[2649],{"type":53,"value":2650},"Can't see changes immediately:",{"type":47,"tag":80,"props":2652,"children":2653},{},[2654,2659,2671],{"type":47,"tag":84,"props":2655,"children":2656},{},[2657],{"type":53,"value":2658},"Bidirectional sync has a 2-3 second delay for webhook processing",{"type":47,"tag":84,"props":2660,"children":2661},{},[2662,2664,2669],{"type":53,"value":2663},"Use ",{"type":47,"tag":62,"props":2665,"children":2667},{"className":2666},[],[2668],{"type":53,"value":192},{"type":53,"value":2670}," to get latest API changes",{"type":47,"tag":84,"props":2672,"children":2673},{},[2674,2675,2681],{"type":53,"value":2663},{"type":47,"tag":62,"props":2676,"children":2678},{"className":2677},[],[2679],{"type":53,"value":2680},"git fetch",{"type":53,"value":2682}," to check remote without merging",{"type":47,"tag":2684,"props":2685,"children":2686},"style",{},[2687],{"type":53,"value":2688},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2690,"total":2847},[2691,2705,2720,2732,2744,2758,2770,2781,2793,2809,2820,2832],{"slug":2692,"name":2692,"fn":2693,"description":2694,"org":2695,"tags":2696,"stars":23,"repoUrl":24,"updatedAt":2704},"acquiring-skills","discover and install agent skills","Discover and install skills from Hermes, ClawHub, GitHub, and other registries. Load this skill whenever a user asks for a capability you don't already have — image generation, social media, email, calendar, finance, DevOps, search, browser automation, etc.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2697,2698,2701],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},"Automation","automation",{"name":2702,"slug":2703,"type":16},"GitHub","github","2026-07-13T06:22:58.45767",{"slug":2706,"name":2707,"fn":2708,"description":2709,"org":2710,"tags":2711,"stars":23,"repoUrl":24,"updatedAt":2719},"context-doctor","Context Doctor","repair system prompt and memory degradation","Identify and repair degradation in system prompt, external memory, and skills preventing you from following instructions or remembering information as well as you should.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2712,2713,2716],{"name":21,"slug":22,"type":16},{"name":2714,"slug":2715,"type":16},"AI Context","ai-context",{"name":2717,"slug":2718,"type":16},"Debugging","debugging","2026-07-13T06:22:50.151002",{"slug":2721,"name":2721,"fn":2722,"description":2723,"org":2724,"tags":2725,"stars":23,"repoUrl":24,"updatedAt":2731},"converting-mcps-to-skills","connect MCP servers to create skills","Connect to MCP (Model Context Protocol) servers and create skills for repeated use. Load when a user wants to use an MCP server, connect to external tools via MCP, or when they mention MCP, model context protocol, or specific MCP servers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2726,2727,2728],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},{"name":2729,"slug":2730,"type":16},"MCP","mcp","2026-07-13T06:23:37.646079",{"slug":2733,"name":2733,"fn":2734,"description":2735,"org":2736,"tags":2737,"stars":23,"repoUrl":24,"updatedAt":2743},"creating-mods","create and edit Letta Code mods","Creates and edits trusted local Letta Code mods, including tools, slash commands, local-only model providers, lifecycle\u002Fturn events, scoped conversation helpers, panels, and capability-gated behavior. Use when asked to make a mod, add an agent-callable tool, add a slash command, add a local provider\u002Fmodel adapter, transform turns, react to app events, or add lightweight mod UI outside the dedicated \u002Fstatusline flow.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2738,2739,2740],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},{"name":2741,"slug":2742,"type":16},"Coding","coding","2026-07-23T05:42:38.133565",{"slug":2745,"name":2745,"fn":2746,"description":2747,"org":2748,"tags":2749,"stars":23,"repoUrl":24,"updatedAt":2757},"creating-skills","create and update agent skills","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Letta Code's capabilities with specialized knowledge, workflows, or tool integrations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2750,2751,2754],{"name":21,"slug":22,"type":16},{"name":2752,"slug":2753,"type":16},"Documentation","documentation",{"name":2755,"slug":2756,"type":16},"Plugin Development","plugin-development","2026-07-13T06:22:56.998659",{"slug":2759,"name":2759,"fn":2760,"description":2761,"org":2762,"tags":2763,"stars":23,"repoUrl":24,"updatedAt":2769},"customizing-commands","create and manage Letta slash commands","Creates, edits, and enables Letta Code mod-provided slash commands. Use when the user asks to add a custom \u002Fcommand, slash command, command shortcut, scoped conversation-backed command, or command-driven panel behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2764,2765,2766],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},{"name":2767,"slug":2768,"type":16},"CLI","cli","2026-07-13T06:23:18.266798",{"slug":2771,"name":2771,"fn":2772,"description":2773,"org":2774,"tags":2775,"stars":23,"repoUrl":24,"updatedAt":2780},"customizing-statusline","customize Letta Code statusline mods","Creates, edits, and migrates Letta Code statusline mods. Use when handling the \u002Fstatusline command or continuing work started by \u002Fstatusline.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2776,2777],{"name":2767,"slug":2768,"type":16},{"name":2778,"slug":2779,"type":16},"Engineering","engineering","2026-07-13T06:23:27.465985",{"slug":2782,"name":2782,"fn":2783,"description":2784,"org":2785,"tags":2786,"stars":23,"repoUrl":24,"updatedAt":2792},"dispatching-coding-agents","dispatch stateless coding agents","Dispatch stateless coding agents (Claude Code or Codex) via Bash. Use when you're stuck, need a second opinion, or need parallel research on a hard problem. They have no memory — you must provide all context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2787,2788,2789],{"name":21,"slug":22,"type":16},{"name":2741,"slug":2742,"type":16},{"name":2790,"slug":2791,"type":16},"Multi-Agent","multi-agent","2026-07-26T05:46:56.388845",{"slug":2794,"name":2794,"fn":2795,"description":2796,"org":2797,"tags":2798,"stars":23,"repoUrl":24,"updatedAt":2808},"editing-letta-code-desktop-preferences","edit Letta Code Desktop preferences","Edits Letta Code Desktop (LCD) preferences by safely reading and updating ~\u002F.letta\u002Fdesktop_preferences.json. Use only when the user asks to change current Desktop\u002FLCD settings such as theme, default working directory, remote access preference, or remote environment name via the preferences JSON.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2799,2802,2805],{"name":2800,"slug":2801,"type":16},"Configuration","configuration",{"name":2803,"slug":2804,"type":16},"Desktop","desktop",{"name":2806,"slug":2807,"type":16},"Themes","themes","2026-07-13T06:23:41.407811",{"slug":2810,"name":2810,"fn":2811,"description":2812,"org":2813,"tags":2814,"stars":23,"repoUrl":24,"updatedAt":2819},"finding-agents","locate and manage agents on server","Find other agents on the same server. Use when the user asks about other agents, wants to migrate memory from another agent, or needs to find an agent by name or tags.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2815,2816],{"name":21,"slug":22,"type":16},{"name":2817,"slug":2818,"type":16},"Management","management","2026-07-16T06:02:17.297841",{"slug":2821,"name":2821,"fn":2822,"description":2823,"org":2824,"tags":2825,"stars":23,"repoUrl":24,"updatedAt":2831},"generating-mod-envs","generate Letta mod learning environments","Generates and reviews mod learning env JSON files for Letta Code local mods. Use when asked to teach, learn, or optimize a mod behavior; create, draft, validate, improve, or explain envs for `\u002Fmods learn --env`; or design evaluation scenarios, memory fixtures, requiredResultMarkers, requiredTraceMarkers, negative controls, and candidate diversity hints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2826,2827,2830],{"name":21,"slug":22,"type":16},{"name":2828,"slug":2829,"type":16},"AI Infrastructure","ai-infrastructure",{"name":2800,"slug":2801,"type":16},"2026-07-13T06:23:08.838181",{"slug":2833,"name":2833,"fn":2834,"description":2835,"org":2836,"tags":2837,"stars":23,"repoUrl":24,"updatedAt":2846},"image-generation","generate images from text prompts","Generate images from text prompts (and optionally edit\u002Fremix input images). Use when the user asks to create, generate, draw, render, or edit an image, illustration, logo, icon, diagram, or photo.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2838,2841,2844],{"name":2839,"slug":2840,"type":16},"Creative","creative",{"name":2842,"slug":2843,"type":16},"Graphics","graphics",{"name":2845,"slug":2833,"type":16},"Image Generation","2026-07-13T06:23:06.189403",69,{"items":2849,"total":1648},[2850,2856,2862,2868,2874,2880,2886],{"slug":2692,"name":2692,"fn":2693,"description":2694,"org":2851,"tags":2852,"stars":23,"repoUrl":24,"updatedAt":2704},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2853,2854,2855],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},{"name":2702,"slug":2703,"type":16},{"slug":2706,"name":2707,"fn":2708,"description":2709,"org":2857,"tags":2858,"stars":23,"repoUrl":24,"updatedAt":2719},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2859,2860,2861],{"name":21,"slug":22,"type":16},{"name":2714,"slug":2715,"type":16},{"name":2717,"slug":2718,"type":16},{"slug":2721,"name":2721,"fn":2722,"description":2723,"org":2863,"tags":2864,"stars":23,"repoUrl":24,"updatedAt":2731},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2865,2866,2867],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},{"name":2729,"slug":2730,"type":16},{"slug":2733,"name":2733,"fn":2734,"description":2735,"org":2869,"tags":2870,"stars":23,"repoUrl":24,"updatedAt":2743},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2871,2872,2873],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},{"name":2741,"slug":2742,"type":16},{"slug":2745,"name":2745,"fn":2746,"description":2747,"org":2875,"tags":2876,"stars":23,"repoUrl":24,"updatedAt":2757},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2877,2878,2879],{"name":21,"slug":22,"type":16},{"name":2752,"slug":2753,"type":16},{"name":2755,"slug":2756,"type":16},{"slug":2759,"name":2759,"fn":2760,"description":2761,"org":2881,"tags":2882,"stars":23,"repoUrl":24,"updatedAt":2769},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2883,2884,2885],{"name":21,"slug":22,"type":16},{"name":2699,"slug":2700,"type":16},{"name":2767,"slug":2768,"type":16},{"slug":2771,"name":2771,"fn":2772,"description":2773,"org":2887,"tags":2888,"stars":23,"repoUrl":24,"updatedAt":2780},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2889,2890],{"name":2767,"slug":2768,"type":16},{"name":2778,"slug":2779,"type":16}]