[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-letta-creating-mods":3,"mdc-6jcdsg-key":41,"related-repo-letta-creating-mods":1936,"related-org-letta-creating-mods":2020},{"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},"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},"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},"Automation","automation","tag",{"name":18,"slug":19,"type":16},"Coding","coding",{"name":21,"slug":22,"type":16},"Agents","agents",2831,"https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fletta-code","2026-07-23T05:42:38.133565",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\u002Fcreating-mods","---\nname: creating-mods\ndescription: 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.\n---\n\n# Creating Mods\n\nUse this skill to create or update trusted Letta Code mod files. Mods are trusted local code that add small composable capabilities through mod APIs, not by importing app internals. Dynamic agent\u002Fconversation\u002Fworkspace\u002Fmodel state is passed as `ctx` to tool, command, event, and permission callbacks (panels receive live `agent`\u002F`model` in their render context); do not read mutable global context for model-callable behavior. Prefer scoped handles (`ctx.conversation`, `ctx.cwd`, `ctx.agent`) and guard optional UI with `letta.capabilities`.\n\nCapabilities vary by surface — not every surface loads every capability. The TUI\u002Fheadless host can load tools, commands, events, UI, and providers; the desktop listener loads tools, commands, providers, and tool\u002Fturn events, but not panel UI. Always guard each registration on the capabilities its behavior needs.\n\n## Choose where the mod file lives\n\nDefault to a single mod file unless the user asks for something larger.\n\n| Location | Use when |\n| --- | --- |\n| `~\u002F.letta\u002Fmods\u002Ffoo.ts` | The behavior should apply to local sessions on this machine. Use this by default. |\n| `$MEMORY_DIR\u002Fmods\u002Ffoo.ts` | The behavior should travel with one agent's MemFS\u002Fmemory. |\n\nDo not create project mods.\n\nPackaging is an upgrade path, not the default authoring path. If the user asks to share, publish, distribute, or use third-party package dependencies, first build a working mod file, then use `letta mods package \u003Cmod-file> --name \u003Cpackage-name>`. Package install\u002Fupdate\u002Fdownload\u002Fpublish details belong outside this skill.\n\n## Choose the right capability\n\n| User wants | Build |\n| --- | --- |\n| Agent\u002Fmodel should autonomously call a local capability | Mod tool |\n| User wants `\u002Ffoo` to send a prompt or run local UI logic | Mod command |\n| Slash command represents a reusable agent workflow | Skill + thin mod command |\n| Command should work while the main agent is busy | Command with `runWhenBusy: true`, `handled`, panel\u002Fstatus, and usually `ctx.conversation.fork()` |\n| Show transient output above input | Panel, usually from a command |\n| Show small persistent state | Status value |\n| React to app\u002Fsession lifecycle or transform outbound turns | Event |\n| Enforce dynamic allow\u002Fask\u002Fdeny policy for tool calls | Permission overlay |\n| Add a custom model\u002FAPI provider for local agents | Provider mod (local agents only) |\n| Change the bottom statusline appearance | Use `customizing-statusline`, not this skill |\n\nDefault to a **tool** when the model should decide when to use the capability. Default to a **command** when the human explicitly invokes it. Compose capabilities when the UX needs it, e.g. command + panel + scoped conversation fork.\n\n## Workflow\n\n1. Pick the target scope: harness mod file (`~\u002F.letta\u002Fmods\u002F`) by default, or agent mod file (`$MEMORY_DIR\u002Fmods\u002F`) only when the behavior should travel with this agent.\n2. Inspect the relevant mods directory for related files.\n3. Preserve unrelated mod code. Prefer a focused new file if merging would be messy.\n4. Choose the mod shape and load only the needed recipe:\n   - tools: `references\u002Ftools.md`\n   - commands: `references\u002Fcommands.md`\n   - local custom providers: `references\u002Fproviders.md`\n   - events: `references\u002Fevents.md`\n   - permissions: `references\u002Fpermissions.md`\n   - panels\u002Fstatus\u002Fcapabilities: `references\u002Fui.md`\n   - complex plan-mode composition: `references\u002Fplan-mode.md`\n5. For multi-capability or stateful mods, also read `references\u002Farchitecture.md`.\n6. Write a single-file mod unless the user asks for something larger.\n7. Return disposers for registered providers\u002Fcommands\u002Ftools\u002Fevents, timers, subscriptions, and panels that should close on reload.\n8. Do a basic review: valid names, descriptions present, schemas are object schemas, optional capabilities guarded, scoped APIs used, cleanup returned.\n9. Tell the user the absolute file path changed and to run `\u002Freload`. If a mod breaks startup or command handling, recover with `letta --no-mods` or `LETTA_DISABLE_MODS=1 letta`.\n\n## Core mod shape\n\n```ts\nexport default function activate(letta) {\n  const disposers = [];\n\n  if (letta.capabilities.tools) {\n    disposers.push(letta.tools.register(\u002F* ... *\u002F));\n  }\n\n  if (letta.capabilities.commands) {\n    disposers.push(letta.commands.register(\u002F* ... *\u002F));\n  }\n\n  return () => {\n    for (const dispose of disposers.reverse()) dispose();\n  };\n}\n```\n\nUse `letta.capabilities` for optional behavior:\n\n```ts\nletta.capabilities.tools\nletta.capabilities.commands\nletta.capabilities.events.lifecycle\nletta.capabilities.events.tools\nletta.capabilities.events.turns\nletta.capabilities.events.compact\nletta.capabilities.events.llm\nletta.capabilities.permissions\nletta.capabilities.providers\nletta.capabilities.ui.panels\n```\n\nGuard each registration on every capability its behavior depends on — not just the one that registers it. Surfaces load different capability subsets, so a registration that relies on another capability (a command that opens UI, emits an event, or calls a provider) must guard on that capability too. Otherwise it is advertised or activated on a host that cannot fulfill it and silently does nothing. Register where the host can actually do the work.\n\n## Scoped API model\n\n- In commands and events, use `ctx.conversation` for conversation operations:\n  - `ctx.conversation.getHistory()` for recent messages\n  - `ctx.conversation.fork()` for independent\u002Fbackground model work\n  - `forked.sendMessageStream([...])` to stream from a fork\n- In tools, use `ctx.conversation.getHistory()` when the tool needs recent context.\n- Use `letta.client` only for server-specific Letta API calls; do not use it as a substitute for scoped conversation helpers.\n- Do not import `@\u002Fbackend`, `@\u002Fcli`, or other Letta Code internals from mod files.\n\n## Diagnostics\n\nUse `letta.diagnostics.report({ message, severity })` sparingly as a debug utility for mod setup\u002Fruntime problems an agent should inspect, such as missing required environment variables or failed local configuration. Default severity is `\"error\"`; use `severity: \"warning\"` only for optional\u002Fdegraded behavior. Keep messages short and actionable, and do not dump routine logs or large state.\n\nAgents can inspect local mod diagnostics at:\n\n```text\n~\u002F.letta\u002Fmods\u002Fdiagnostics\u002Flatest.json\n```\n\n## Rules\n\n- Do not create project mods.\n- Custom provider mods are local-backend\u002Flocal-agent only. They do not add providers for agents managed through the Letta API.\n- Provider mods may run in a provider-only listener context; keep provider registration independent from commands\u002Ftools\u002FUI and guard everything else.\n- Direct mod files should not assume third-party npm packages are available. Use Node\u002FBun built-ins unless packaging is explicitly requested.\n- Do not do surprising side effects on startup; mods activate on app start and `\u002Freload`.\n- Keep user-facing output short and intentional.\n- Prefer Node\u002FBun standard APIs (`node:child_process`, `node:fs`, etc.) for local work.\n- For shell execution, prefer `execFile`\u002F`spawn` over shell strings.\n- Do not use emojis for loading states; use text or spinner-like characters if the user asks for loading UI.\n- For `runWhenBusy: true`, do not return `prompt`; return `handled` and own the UI\u002Fbackground work.\n- Treat `turn_start` as powerful trusted code: keep transforms narrow and unsurprising.\n\n## Pre-flight checklist for complex mods\n\nBefore finishing, verify:\n\n- The mod has one clear owner\u002Ffile and does not mix unrelated features.\n- Command\u002Ftool IDs are valid; command overrides of built-ins are intentional, and tool IDs do not collide with built-ins.\n- Tool descriptions explain when the model should call them.\n- JSON schemas are object schemas with useful descriptions.\n- Optional UI\u002Fevent APIs are capability-guarded.\n- Each registration is guarded by every capability its behavior depends on, not just the one that registers it, so it isn't advertised or activated on a surface that can't fulfill it.\n- Provider mods are capability-guarded and clearly documented as local-agent only.\n- Timers, intervals, event registrations, and panels are cleaned up in a disposer.\n- Busy commands return `{ type: \"handled\" }` quickly and avoid main-conversation sends.\n- Conversation work uses `ctx.conversation` or forked handles, not app internals.\n- Local shell\u002Ffile work is scoped to `ctx.cwd` unless intentionally global.\n- Errors shown to the user are short and actionable.\n\n## References\n\n| Reference | Load when |\n| --- | --- |\n| `references\u002Ftools.md` | The model should autonomously call a local capability |\n| `references\u002Fcommands.md` | The human should invoke `\u002Ffoo` |\n| `references\u002Fproviders.md` | Adding a custom model\u002FAPI provider for local agents |\n| `references\u002Fevents.md` | Reacting to lifecycle\u002Ftool\u002Fturn events or transforming turns\u002Ftools |\n| `references\u002Fpermissions.md` | Enforcing dynamic tool allow\u002Fask\u002Fdeny policy before approval\u002Fexecution |\n| `references\u002Fui.md` | Panels (including order-0 statusline and order-1 dreaming indicator) or `ui.panels` capability guards are involved |\n| `references\u002Fplan-mode.md` | Recreating plan mode with commands, tools, events, permissions, and local state |\n| `references\u002Fanalysis-mode.md` | Phrase-triggered diagnostic mode with turn reminders (simpler than plan-mode) |\n| `references\u002Farchitecture.md` | Multiple capabilities, local state, cleanup, background model work, or non-trivial composition |\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,54,116,121,128,133,195,200,213,219,408,428,434,611,617,1058,1069,1365,1370,1376,1470,1476,1504,1509,1519,1525,1648,1654,1659,1744,1750,1930],{"type":47,"tag":48,"props":49,"children":50},"element","h1",{"id":4},[51],{"type":52,"value":53},"text","Creating Mods",{"type":47,"tag":55,"props":56,"children":57},"p",{},[58,60,67,69,75,77,83,85,91,93,99,100,106,108,114],{"type":52,"value":59},"Use this skill to create or update trusted Letta Code mod files. Mods are trusted local code that add small composable capabilities through mod APIs, not by importing app internals. Dynamic agent\u002Fconversation\u002Fworkspace\u002Fmodel state is passed as ",{"type":47,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":52,"value":66},"ctx",{"type":52,"value":68}," to tool, command, event, and permission callbacks (panels receive live ",{"type":47,"tag":61,"props":70,"children":72},{"className":71},[],[73],{"type":52,"value":74},"agent",{"type":52,"value":76},"\u002F",{"type":47,"tag":61,"props":78,"children":80},{"className":79},[],[81],{"type":52,"value":82},"model",{"type":52,"value":84}," in their render context); do not read mutable global context for model-callable behavior. Prefer scoped handles (",{"type":47,"tag":61,"props":86,"children":88},{"className":87},[],[89],{"type":52,"value":90},"ctx.conversation",{"type":52,"value":92},", ",{"type":47,"tag":61,"props":94,"children":96},{"className":95},[],[97],{"type":52,"value":98},"ctx.cwd",{"type":52,"value":92},{"type":47,"tag":61,"props":101,"children":103},{"className":102},[],[104],{"type":52,"value":105},"ctx.agent",{"type":52,"value":107},") and guard optional UI with ",{"type":47,"tag":61,"props":109,"children":111},{"className":110},[],[112],{"type":52,"value":113},"letta.capabilities",{"type":52,"value":115},".",{"type":47,"tag":55,"props":117,"children":118},{},[119],{"type":52,"value":120},"Capabilities vary by surface — not every surface loads every capability. The TUI\u002Fheadless host can load tools, commands, events, UI, and providers; the desktop listener loads tools, commands, providers, and tool\u002Fturn events, but not panel UI. Always guard each registration on the capabilities its behavior needs.",{"type":47,"tag":122,"props":123,"children":125},"h2",{"id":124},"choose-where-the-mod-file-lives",[126],{"type":52,"value":127},"Choose where the mod file lives",{"type":47,"tag":55,"props":129,"children":130},{},[131],{"type":52,"value":132},"Default to a single mod file unless the user asks for something larger.",{"type":47,"tag":134,"props":135,"children":136},"table",{},[137,156],{"type":47,"tag":138,"props":139,"children":140},"thead",{},[141],{"type":47,"tag":142,"props":143,"children":144},"tr",{},[145,151],{"type":47,"tag":146,"props":147,"children":148},"th",{},[149],{"type":52,"value":150},"Location",{"type":47,"tag":146,"props":152,"children":153},{},[154],{"type":52,"value":155},"Use when",{"type":47,"tag":157,"props":158,"children":159},"tbody",{},[160,178],{"type":47,"tag":142,"props":161,"children":162},{},[163,173],{"type":47,"tag":164,"props":165,"children":166},"td",{},[167],{"type":47,"tag":61,"props":168,"children":170},{"className":169},[],[171],{"type":52,"value":172},"~\u002F.letta\u002Fmods\u002Ffoo.ts",{"type":47,"tag":164,"props":174,"children":175},{},[176],{"type":52,"value":177},"The behavior should apply to local sessions on this machine. Use this by default.",{"type":47,"tag":142,"props":179,"children":180},{},[181,190],{"type":47,"tag":164,"props":182,"children":183},{},[184],{"type":47,"tag":61,"props":185,"children":187},{"className":186},[],[188],{"type":52,"value":189},"$MEMORY_DIR\u002Fmods\u002Ffoo.ts",{"type":47,"tag":164,"props":191,"children":192},{},[193],{"type":52,"value":194},"The behavior should travel with one agent's MemFS\u002Fmemory.",{"type":47,"tag":55,"props":196,"children":197},{},[198],{"type":52,"value":199},"Do not create project mods.",{"type":47,"tag":55,"props":201,"children":202},{},[203,205,211],{"type":52,"value":204},"Packaging is an upgrade path, not the default authoring path. If the user asks to share, publish, distribute, or use third-party package dependencies, first build a working mod file, then use ",{"type":47,"tag":61,"props":206,"children":208},{"className":207},[],[209],{"type":52,"value":210},"letta mods package \u003Cmod-file> --name \u003Cpackage-name>",{"type":52,"value":212},". Package install\u002Fupdate\u002Fdownload\u002Fpublish details belong outside this skill.",{"type":47,"tag":122,"props":214,"children":216},{"id":215},"choose-the-right-capability",[217],{"type":52,"value":218},"Choose the right capability",{"type":47,"tag":134,"props":220,"children":221},{},[222,238],{"type":47,"tag":138,"props":223,"children":224},{},[225],{"type":47,"tag":142,"props":226,"children":227},{},[228,233],{"type":47,"tag":146,"props":229,"children":230},{},[231],{"type":52,"value":232},"User wants",{"type":47,"tag":146,"props":234,"children":235},{},[236],{"type":52,"value":237},"Build",{"type":47,"tag":157,"props":239,"children":240},{},[241,254,275,288,322,335,348,361,374,387],{"type":47,"tag":142,"props":242,"children":243},{},[244,249],{"type":47,"tag":164,"props":245,"children":246},{},[247],{"type":52,"value":248},"Agent\u002Fmodel should autonomously call a local capability",{"type":47,"tag":164,"props":250,"children":251},{},[252],{"type":52,"value":253},"Mod tool",{"type":47,"tag":142,"props":255,"children":256},{},[257,270],{"type":47,"tag":164,"props":258,"children":259},{},[260,262,268],{"type":52,"value":261},"User wants ",{"type":47,"tag":61,"props":263,"children":265},{"className":264},[],[266],{"type":52,"value":267},"\u002Ffoo",{"type":52,"value":269}," to send a prompt or run local UI logic",{"type":47,"tag":164,"props":271,"children":272},{},[273],{"type":52,"value":274},"Mod command",{"type":47,"tag":142,"props":276,"children":277},{},[278,283],{"type":47,"tag":164,"props":279,"children":280},{},[281],{"type":52,"value":282},"Slash command represents a reusable agent workflow",{"type":47,"tag":164,"props":284,"children":285},{},[286],{"type":52,"value":287},"Skill + thin mod command",{"type":47,"tag":142,"props":289,"children":290},{},[291,296],{"type":47,"tag":164,"props":292,"children":293},{},[294],{"type":52,"value":295},"Command should work while the main agent is busy",{"type":47,"tag":164,"props":297,"children":298},{},[299,301,307,308,314,316],{"type":52,"value":300},"Command with ",{"type":47,"tag":61,"props":302,"children":304},{"className":303},[],[305],{"type":52,"value":306},"runWhenBusy: true",{"type":52,"value":92},{"type":47,"tag":61,"props":309,"children":311},{"className":310},[],[312],{"type":52,"value":313},"handled",{"type":52,"value":315},", panel\u002Fstatus, and usually ",{"type":47,"tag":61,"props":317,"children":319},{"className":318},[],[320],{"type":52,"value":321},"ctx.conversation.fork()",{"type":47,"tag":142,"props":323,"children":324},{},[325,330],{"type":47,"tag":164,"props":326,"children":327},{},[328],{"type":52,"value":329},"Show transient output above input",{"type":47,"tag":164,"props":331,"children":332},{},[333],{"type":52,"value":334},"Panel, usually from a command",{"type":47,"tag":142,"props":336,"children":337},{},[338,343],{"type":47,"tag":164,"props":339,"children":340},{},[341],{"type":52,"value":342},"Show small persistent state",{"type":47,"tag":164,"props":344,"children":345},{},[346],{"type":52,"value":347},"Status value",{"type":47,"tag":142,"props":349,"children":350},{},[351,356],{"type":47,"tag":164,"props":352,"children":353},{},[354],{"type":52,"value":355},"React to app\u002Fsession lifecycle or transform outbound turns",{"type":47,"tag":164,"props":357,"children":358},{},[359],{"type":52,"value":360},"Event",{"type":47,"tag":142,"props":362,"children":363},{},[364,369],{"type":47,"tag":164,"props":365,"children":366},{},[367],{"type":52,"value":368},"Enforce dynamic allow\u002Fask\u002Fdeny policy for tool calls",{"type":47,"tag":164,"props":370,"children":371},{},[372],{"type":52,"value":373},"Permission overlay",{"type":47,"tag":142,"props":375,"children":376},{},[377,382],{"type":47,"tag":164,"props":378,"children":379},{},[380],{"type":52,"value":381},"Add a custom model\u002FAPI provider for local agents",{"type":47,"tag":164,"props":383,"children":384},{},[385],{"type":52,"value":386},"Provider mod (local agents only)",{"type":47,"tag":142,"props":388,"children":389},{},[390,395],{"type":47,"tag":164,"props":391,"children":392},{},[393],{"type":52,"value":394},"Change the bottom statusline appearance",{"type":47,"tag":164,"props":396,"children":397},{},[398,400,406],{"type":52,"value":399},"Use ",{"type":47,"tag":61,"props":401,"children":403},{"className":402},[],[404],{"type":52,"value":405},"customizing-statusline",{"type":52,"value":407},", not this skill",{"type":47,"tag":55,"props":409,"children":410},{},[411,413,419,421,426],{"type":52,"value":412},"Default to a ",{"type":47,"tag":414,"props":415,"children":416},"strong",{},[417],{"type":52,"value":418},"tool",{"type":52,"value":420}," when the model should decide when to use the capability. Default to a ",{"type":47,"tag":414,"props":422,"children":423},{},[424],{"type":52,"value":425},"command",{"type":52,"value":427}," when the human explicitly invokes it. Compose capabilities when the UX needs it, e.g. command + panel + scoped conversation fork.",{"type":47,"tag":122,"props":429,"children":431},{"id":430},"workflow",[432],{"type":52,"value":433},"Workflow",{"type":47,"tag":435,"props":436,"children":437},"ol",{},[438,460,465,470,556,568,573,578,583],{"type":47,"tag":439,"props":440,"children":441},"li",{},[442,444,450,452,458],{"type":52,"value":443},"Pick the target scope: harness mod file (",{"type":47,"tag":61,"props":445,"children":447},{"className":446},[],[448],{"type":52,"value":449},"~\u002F.letta\u002Fmods\u002F",{"type":52,"value":451},") by default, or agent mod file (",{"type":47,"tag":61,"props":453,"children":455},{"className":454},[],[456],{"type":52,"value":457},"$MEMORY_DIR\u002Fmods\u002F",{"type":52,"value":459},") only when the behavior should travel with this agent.",{"type":47,"tag":439,"props":461,"children":462},{},[463],{"type":52,"value":464},"Inspect the relevant mods directory for related files.",{"type":47,"tag":439,"props":466,"children":467},{},[468],{"type":52,"value":469},"Preserve unrelated mod code. Prefer a focused new file if merging would be messy.",{"type":47,"tag":439,"props":471,"children":472},{},[473,475],{"type":52,"value":474},"Choose the mod shape and load only the needed recipe:\n",{"type":47,"tag":476,"props":477,"children":478},"ul",{},[479,490,501,512,523,534,545],{"type":47,"tag":439,"props":480,"children":481},{},[482,484],{"type":52,"value":483},"tools: ",{"type":47,"tag":61,"props":485,"children":487},{"className":486},[],[488],{"type":52,"value":489},"references\u002Ftools.md",{"type":47,"tag":439,"props":491,"children":492},{},[493,495],{"type":52,"value":494},"commands: ",{"type":47,"tag":61,"props":496,"children":498},{"className":497},[],[499],{"type":52,"value":500},"references\u002Fcommands.md",{"type":47,"tag":439,"props":502,"children":503},{},[504,506],{"type":52,"value":505},"local custom providers: ",{"type":47,"tag":61,"props":507,"children":509},{"className":508},[],[510],{"type":52,"value":511},"references\u002Fproviders.md",{"type":47,"tag":439,"props":513,"children":514},{},[515,517],{"type":52,"value":516},"events: ",{"type":47,"tag":61,"props":518,"children":520},{"className":519},[],[521],{"type":52,"value":522},"references\u002Fevents.md",{"type":47,"tag":439,"props":524,"children":525},{},[526,528],{"type":52,"value":527},"permissions: ",{"type":47,"tag":61,"props":529,"children":531},{"className":530},[],[532],{"type":52,"value":533},"references\u002Fpermissions.md",{"type":47,"tag":439,"props":535,"children":536},{},[537,539],{"type":52,"value":538},"panels\u002Fstatus\u002Fcapabilities: ",{"type":47,"tag":61,"props":540,"children":542},{"className":541},[],[543],{"type":52,"value":544},"references\u002Fui.md",{"type":47,"tag":439,"props":546,"children":547},{},[548,550],{"type":52,"value":549},"complex plan-mode composition: ",{"type":47,"tag":61,"props":551,"children":553},{"className":552},[],[554],{"type":52,"value":555},"references\u002Fplan-mode.md",{"type":47,"tag":439,"props":557,"children":558},{},[559,561,567],{"type":52,"value":560},"For multi-capability or stateful mods, also read ",{"type":47,"tag":61,"props":562,"children":564},{"className":563},[],[565],{"type":52,"value":566},"references\u002Farchitecture.md",{"type":52,"value":115},{"type":47,"tag":439,"props":569,"children":570},{},[571],{"type":52,"value":572},"Write a single-file mod unless the user asks for something larger.",{"type":47,"tag":439,"props":574,"children":575},{},[576],{"type":52,"value":577},"Return disposers for registered providers\u002Fcommands\u002Ftools\u002Fevents, timers, subscriptions, and panels that should close on reload.",{"type":47,"tag":439,"props":579,"children":580},{},[581],{"type":52,"value":582},"Do a basic review: valid names, descriptions present, schemas are object schemas, optional capabilities guarded, scoped APIs used, cleanup returned.",{"type":47,"tag":439,"props":584,"children":585},{},[586,588,594,596,602,604,610],{"type":52,"value":587},"Tell the user the absolute file path changed and to run ",{"type":47,"tag":61,"props":589,"children":591},{"className":590},[],[592],{"type":52,"value":593},"\u002Freload",{"type":52,"value":595},". If a mod breaks startup or command handling, recover with ",{"type":47,"tag":61,"props":597,"children":599},{"className":598},[],[600],{"type":52,"value":601},"letta --no-mods",{"type":52,"value":603}," or ",{"type":47,"tag":61,"props":605,"children":607},{"className":606},[],[608],{"type":52,"value":609},"LETTA_DISABLE_MODS=1 letta",{"type":52,"value":115},{"type":47,"tag":122,"props":612,"children":614},{"id":613},"core-mod-shape",[615],{"type":52,"value":616},"Core mod shape",{"type":47,"tag":618,"props":619,"children":624},"pre",{"className":620,"code":621,"language":622,"meta":623,"style":623},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default function activate(letta) {\n  const disposers = [];\n\n  if (letta.capabilities.tools) {\n    disposers.push(letta.tools.register(\u002F* ... *\u002F));\n  }\n\n  if (letta.capabilities.commands) {\n    disposers.push(letta.commands.register(\u002F* ... *\u002F));\n  }\n\n  return () => {\n    for (const dispose of disposers.reverse()) dispose();\n  };\n}\n","ts","",[625],{"type":47,"tag":61,"props":626,"children":627},{"__ignoreMap":623},[628,678,709,719,765,827,836,844,885,941,949,957,980,1040,1049],{"type":47,"tag":629,"props":630,"children":633},"span",{"class":631,"line":632},"line",1,[634,640,645,651,657,663,668,673],{"type":47,"tag":629,"props":635,"children":637},{"style":636},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[638],{"type":52,"value":639},"export",{"type":47,"tag":629,"props":641,"children":642},{"style":636},[643],{"type":52,"value":644}," default",{"type":47,"tag":629,"props":646,"children":648},{"style":647},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[649],{"type":52,"value":650}," function",{"type":47,"tag":629,"props":652,"children":654},{"style":653},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[655],{"type":52,"value":656}," activate",{"type":47,"tag":629,"props":658,"children":660},{"style":659},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[661],{"type":52,"value":662},"(",{"type":47,"tag":629,"props":664,"children":666},{"style":665},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[667],{"type":52,"value":8},{"type":47,"tag":629,"props":669,"children":670},{"style":659},[671],{"type":52,"value":672},")",{"type":47,"tag":629,"props":674,"children":675},{"style":659},[676],{"type":52,"value":677}," {\n",{"type":47,"tag":629,"props":679,"children":681},{"class":631,"line":680},2,[682,687,693,698,704],{"type":47,"tag":629,"props":683,"children":684},{"style":647},[685],{"type":52,"value":686},"  const",{"type":47,"tag":629,"props":688,"children":690},{"style":689},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[691],{"type":52,"value":692}," disposers",{"type":47,"tag":629,"props":694,"children":695},{"style":659},[696],{"type":52,"value":697}," =",{"type":47,"tag":629,"props":699,"children":701},{"style":700},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[702],{"type":52,"value":703}," []",{"type":47,"tag":629,"props":705,"children":706},{"style":659},[707],{"type":52,"value":708},";\n",{"type":47,"tag":629,"props":710,"children":712},{"class":631,"line":711},3,[713],{"type":47,"tag":629,"props":714,"children":716},{"emptyLinePlaceholder":715},true,[717],{"type":52,"value":718},"\n",{"type":47,"tag":629,"props":720,"children":722},{"class":631,"line":721},4,[723,728,733,737,741,746,750,755,760],{"type":47,"tag":629,"props":724,"children":725},{"style":636},[726],{"type":52,"value":727},"  if",{"type":47,"tag":629,"props":729,"children":730},{"style":700},[731],{"type":52,"value":732}," (",{"type":47,"tag":629,"props":734,"children":735},{"style":689},[736],{"type":52,"value":8},{"type":47,"tag":629,"props":738,"children":739},{"style":659},[740],{"type":52,"value":115},{"type":47,"tag":629,"props":742,"children":743},{"style":689},[744],{"type":52,"value":745},"capabilities",{"type":47,"tag":629,"props":747,"children":748},{"style":659},[749],{"type":52,"value":115},{"type":47,"tag":629,"props":751,"children":752},{"style":689},[753],{"type":52,"value":754},"tools",{"type":47,"tag":629,"props":756,"children":757},{"style":700},[758],{"type":52,"value":759},") ",{"type":47,"tag":629,"props":761,"children":762},{"style":659},[763],{"type":52,"value":764},"{\n",{"type":47,"tag":629,"props":766,"children":768},{"class":631,"line":767},5,[769,774,778,783,787,791,795,799,803,808,812,818,823],{"type":47,"tag":629,"props":770,"children":771},{"style":689},[772],{"type":52,"value":773},"    disposers",{"type":47,"tag":629,"props":775,"children":776},{"style":659},[777],{"type":52,"value":115},{"type":47,"tag":629,"props":779,"children":780},{"style":653},[781],{"type":52,"value":782},"push",{"type":47,"tag":629,"props":784,"children":785},{"style":700},[786],{"type":52,"value":662},{"type":47,"tag":629,"props":788,"children":789},{"style":689},[790],{"type":52,"value":8},{"type":47,"tag":629,"props":792,"children":793},{"style":659},[794],{"type":52,"value":115},{"type":47,"tag":629,"props":796,"children":797},{"style":689},[798],{"type":52,"value":754},{"type":47,"tag":629,"props":800,"children":801},{"style":659},[802],{"type":52,"value":115},{"type":47,"tag":629,"props":804,"children":805},{"style":653},[806],{"type":52,"value":807},"register",{"type":47,"tag":629,"props":809,"children":810},{"style":700},[811],{"type":52,"value":662},{"type":47,"tag":629,"props":813,"children":815},{"style":814},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[816],{"type":52,"value":817},"\u002F* ... *\u002F",{"type":47,"tag":629,"props":819,"children":820},{"style":700},[821],{"type":52,"value":822},"))",{"type":47,"tag":629,"props":824,"children":825},{"style":659},[826],{"type":52,"value":708},{"type":47,"tag":629,"props":828,"children":830},{"class":631,"line":829},6,[831],{"type":47,"tag":629,"props":832,"children":833},{"style":659},[834],{"type":52,"value":835},"  }\n",{"type":47,"tag":629,"props":837,"children":839},{"class":631,"line":838},7,[840],{"type":47,"tag":629,"props":841,"children":842},{"emptyLinePlaceholder":715},[843],{"type":52,"value":718},{"type":47,"tag":629,"props":845,"children":847},{"class":631,"line":846},8,[848,852,856,860,864,868,872,877,881],{"type":47,"tag":629,"props":849,"children":850},{"style":636},[851],{"type":52,"value":727},{"type":47,"tag":629,"props":853,"children":854},{"style":700},[855],{"type":52,"value":732},{"type":47,"tag":629,"props":857,"children":858},{"style":689},[859],{"type":52,"value":8},{"type":47,"tag":629,"props":861,"children":862},{"style":659},[863],{"type":52,"value":115},{"type":47,"tag":629,"props":865,"children":866},{"style":689},[867],{"type":52,"value":745},{"type":47,"tag":629,"props":869,"children":870},{"style":659},[871],{"type":52,"value":115},{"type":47,"tag":629,"props":873,"children":874},{"style":689},[875],{"type":52,"value":876},"commands",{"type":47,"tag":629,"props":878,"children":879},{"style":700},[880],{"type":52,"value":759},{"type":47,"tag":629,"props":882,"children":883},{"style":659},[884],{"type":52,"value":764},{"type":47,"tag":629,"props":886,"children":888},{"class":631,"line":887},9,[889,893,897,901,905,909,913,917,921,925,929,933,937],{"type":47,"tag":629,"props":890,"children":891},{"style":689},[892],{"type":52,"value":773},{"type":47,"tag":629,"props":894,"children":895},{"style":659},[896],{"type":52,"value":115},{"type":47,"tag":629,"props":898,"children":899},{"style":653},[900],{"type":52,"value":782},{"type":47,"tag":629,"props":902,"children":903},{"style":700},[904],{"type":52,"value":662},{"type":47,"tag":629,"props":906,"children":907},{"style":689},[908],{"type":52,"value":8},{"type":47,"tag":629,"props":910,"children":911},{"style":659},[912],{"type":52,"value":115},{"type":47,"tag":629,"props":914,"children":915},{"style":689},[916],{"type":52,"value":876},{"type":47,"tag":629,"props":918,"children":919},{"style":659},[920],{"type":52,"value":115},{"type":47,"tag":629,"props":922,"children":923},{"style":653},[924],{"type":52,"value":807},{"type":47,"tag":629,"props":926,"children":927},{"style":700},[928],{"type":52,"value":662},{"type":47,"tag":629,"props":930,"children":931},{"style":814},[932],{"type":52,"value":817},{"type":47,"tag":629,"props":934,"children":935},{"style":700},[936],{"type":52,"value":822},{"type":47,"tag":629,"props":938,"children":939},{"style":659},[940],{"type":52,"value":708},{"type":47,"tag":629,"props":942,"children":944},{"class":631,"line":943},10,[945],{"type":47,"tag":629,"props":946,"children":947},{"style":659},[948],{"type":52,"value":835},{"type":47,"tag":629,"props":950,"children":952},{"class":631,"line":951},11,[953],{"type":47,"tag":629,"props":954,"children":955},{"emptyLinePlaceholder":715},[956],{"type":52,"value":718},{"type":47,"tag":629,"props":958,"children":960},{"class":631,"line":959},12,[961,966,971,976],{"type":47,"tag":629,"props":962,"children":963},{"style":636},[964],{"type":52,"value":965},"  return",{"type":47,"tag":629,"props":967,"children":968},{"style":659},[969],{"type":52,"value":970}," ()",{"type":47,"tag":629,"props":972,"children":973},{"style":647},[974],{"type":52,"value":975}," =>",{"type":47,"tag":629,"props":977,"children":978},{"style":659},[979],{"type":52,"value":677},{"type":47,"tag":629,"props":981,"children":983},{"class":631,"line":982},13,[984,989,993,998,1003,1008,1012,1016,1021,1026,1031,1036],{"type":47,"tag":629,"props":985,"children":986},{"style":636},[987],{"type":52,"value":988},"    for",{"type":47,"tag":629,"props":990,"children":991},{"style":700},[992],{"type":52,"value":732},{"type":47,"tag":629,"props":994,"children":995},{"style":647},[996],{"type":52,"value":997},"const",{"type":47,"tag":629,"props":999,"children":1000},{"style":689},[1001],{"type":52,"value":1002}," dispose",{"type":47,"tag":629,"props":1004,"children":1005},{"style":659},[1006],{"type":52,"value":1007}," of",{"type":47,"tag":629,"props":1009,"children":1010},{"style":689},[1011],{"type":52,"value":692},{"type":47,"tag":629,"props":1013,"children":1014},{"style":659},[1015],{"type":52,"value":115},{"type":47,"tag":629,"props":1017,"children":1018},{"style":653},[1019],{"type":52,"value":1020},"reverse",{"type":47,"tag":629,"props":1022,"children":1023},{"style":700},[1024],{"type":52,"value":1025},"()) ",{"type":47,"tag":629,"props":1027,"children":1028},{"style":653},[1029],{"type":52,"value":1030},"dispose",{"type":47,"tag":629,"props":1032,"children":1033},{"style":700},[1034],{"type":52,"value":1035},"()",{"type":47,"tag":629,"props":1037,"children":1038},{"style":659},[1039],{"type":52,"value":708},{"type":47,"tag":629,"props":1041,"children":1043},{"class":631,"line":1042},14,[1044],{"type":47,"tag":629,"props":1045,"children":1046},{"style":659},[1047],{"type":52,"value":1048},"  };\n",{"type":47,"tag":629,"props":1050,"children":1052},{"class":631,"line":1051},15,[1053],{"type":47,"tag":629,"props":1054,"children":1055},{"style":659},[1056],{"type":52,"value":1057},"}\n",{"type":47,"tag":55,"props":1059,"children":1060},{},[1061,1062,1067],{"type":52,"value":399},{"type":47,"tag":61,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":52,"value":113},{"type":52,"value":1068}," for optional behavior:",{"type":47,"tag":618,"props":1070,"children":1072},{"className":620,"code":1071,"language":622,"meta":623,"style":623},"letta.capabilities.tools\nletta.capabilities.commands\nletta.capabilities.events.lifecycle\nletta.capabilities.events.tools\nletta.capabilities.events.turns\nletta.capabilities.events.compact\nletta.capabilities.events.llm\nletta.capabilities.permissions\nletta.capabilities.providers\nletta.capabilities.ui.panels\n",[1073],{"type":47,"tag":61,"props":1074,"children":1075},{"__ignoreMap":623},[1076,1100,1124,1157,1188,1220,1252,1284,1308,1332],{"type":47,"tag":629,"props":1077,"children":1078},{"class":631,"line":632},[1079,1083,1087,1091,1095],{"type":47,"tag":629,"props":1080,"children":1081},{"style":689},[1082],{"type":52,"value":8},{"type":47,"tag":629,"props":1084,"children":1085},{"style":659},[1086],{"type":52,"value":115},{"type":47,"tag":629,"props":1088,"children":1089},{"style":689},[1090],{"type":52,"value":745},{"type":47,"tag":629,"props":1092,"children":1093},{"style":659},[1094],{"type":52,"value":115},{"type":47,"tag":629,"props":1096,"children":1097},{"style":689},[1098],{"type":52,"value":1099},"tools\n",{"type":47,"tag":629,"props":1101,"children":1102},{"class":631,"line":680},[1103,1107,1111,1115,1119],{"type":47,"tag":629,"props":1104,"children":1105},{"style":689},[1106],{"type":52,"value":8},{"type":47,"tag":629,"props":1108,"children":1109},{"style":659},[1110],{"type":52,"value":115},{"type":47,"tag":629,"props":1112,"children":1113},{"style":689},[1114],{"type":52,"value":745},{"type":47,"tag":629,"props":1116,"children":1117},{"style":659},[1118],{"type":52,"value":115},{"type":47,"tag":629,"props":1120,"children":1121},{"style":689},[1122],{"type":52,"value":1123},"commands\n",{"type":47,"tag":629,"props":1125,"children":1126},{"class":631,"line":711},[1127,1131,1135,1139,1143,1148,1152],{"type":47,"tag":629,"props":1128,"children":1129},{"style":689},[1130],{"type":52,"value":8},{"type":47,"tag":629,"props":1132,"children":1133},{"style":659},[1134],{"type":52,"value":115},{"type":47,"tag":629,"props":1136,"children":1137},{"style":689},[1138],{"type":52,"value":745},{"type":47,"tag":629,"props":1140,"children":1141},{"style":659},[1142],{"type":52,"value":115},{"type":47,"tag":629,"props":1144,"children":1145},{"style":689},[1146],{"type":52,"value":1147},"events",{"type":47,"tag":629,"props":1149,"children":1150},{"style":659},[1151],{"type":52,"value":115},{"type":47,"tag":629,"props":1153,"children":1154},{"style":689},[1155],{"type":52,"value":1156},"lifecycle\n",{"type":47,"tag":629,"props":1158,"children":1159},{"class":631,"line":721},[1160,1164,1168,1172,1176,1180,1184],{"type":47,"tag":629,"props":1161,"children":1162},{"style":689},[1163],{"type":52,"value":8},{"type":47,"tag":629,"props":1165,"children":1166},{"style":659},[1167],{"type":52,"value":115},{"type":47,"tag":629,"props":1169,"children":1170},{"style":689},[1171],{"type":52,"value":745},{"type":47,"tag":629,"props":1173,"children":1174},{"style":659},[1175],{"type":52,"value":115},{"type":47,"tag":629,"props":1177,"children":1178},{"style":689},[1179],{"type":52,"value":1147},{"type":47,"tag":629,"props":1181,"children":1182},{"style":659},[1183],{"type":52,"value":115},{"type":47,"tag":629,"props":1185,"children":1186},{"style":689},[1187],{"type":52,"value":1099},{"type":47,"tag":629,"props":1189,"children":1190},{"class":631,"line":767},[1191,1195,1199,1203,1207,1211,1215],{"type":47,"tag":629,"props":1192,"children":1193},{"style":689},[1194],{"type":52,"value":8},{"type":47,"tag":629,"props":1196,"children":1197},{"style":659},[1198],{"type":52,"value":115},{"type":47,"tag":629,"props":1200,"children":1201},{"style":689},[1202],{"type":52,"value":745},{"type":47,"tag":629,"props":1204,"children":1205},{"style":659},[1206],{"type":52,"value":115},{"type":47,"tag":629,"props":1208,"children":1209},{"style":689},[1210],{"type":52,"value":1147},{"type":47,"tag":629,"props":1212,"children":1213},{"style":659},[1214],{"type":52,"value":115},{"type":47,"tag":629,"props":1216,"children":1217},{"style":689},[1218],{"type":52,"value":1219},"turns\n",{"type":47,"tag":629,"props":1221,"children":1222},{"class":631,"line":829},[1223,1227,1231,1235,1239,1243,1247],{"type":47,"tag":629,"props":1224,"children":1225},{"style":689},[1226],{"type":52,"value":8},{"type":47,"tag":629,"props":1228,"children":1229},{"style":659},[1230],{"type":52,"value":115},{"type":47,"tag":629,"props":1232,"children":1233},{"style":689},[1234],{"type":52,"value":745},{"type":47,"tag":629,"props":1236,"children":1237},{"style":659},[1238],{"type":52,"value":115},{"type":47,"tag":629,"props":1240,"children":1241},{"style":689},[1242],{"type":52,"value":1147},{"type":47,"tag":629,"props":1244,"children":1245},{"style":659},[1246],{"type":52,"value":115},{"type":47,"tag":629,"props":1248,"children":1249},{"style":689},[1250],{"type":52,"value":1251},"compact\n",{"type":47,"tag":629,"props":1253,"children":1254},{"class":631,"line":838},[1255,1259,1263,1267,1271,1275,1279],{"type":47,"tag":629,"props":1256,"children":1257},{"style":689},[1258],{"type":52,"value":8},{"type":47,"tag":629,"props":1260,"children":1261},{"style":659},[1262],{"type":52,"value":115},{"type":47,"tag":629,"props":1264,"children":1265},{"style":689},[1266],{"type":52,"value":745},{"type":47,"tag":629,"props":1268,"children":1269},{"style":659},[1270],{"type":52,"value":115},{"type":47,"tag":629,"props":1272,"children":1273},{"style":689},[1274],{"type":52,"value":1147},{"type":47,"tag":629,"props":1276,"children":1277},{"style":659},[1278],{"type":52,"value":115},{"type":47,"tag":629,"props":1280,"children":1281},{"style":689},[1282],{"type":52,"value":1283},"llm\n",{"type":47,"tag":629,"props":1285,"children":1286},{"class":631,"line":846},[1287,1291,1295,1299,1303],{"type":47,"tag":629,"props":1288,"children":1289},{"style":689},[1290],{"type":52,"value":8},{"type":47,"tag":629,"props":1292,"children":1293},{"style":659},[1294],{"type":52,"value":115},{"type":47,"tag":629,"props":1296,"children":1297},{"style":689},[1298],{"type":52,"value":745},{"type":47,"tag":629,"props":1300,"children":1301},{"style":659},[1302],{"type":52,"value":115},{"type":47,"tag":629,"props":1304,"children":1305},{"style":689},[1306],{"type":52,"value":1307},"permissions\n",{"type":47,"tag":629,"props":1309,"children":1310},{"class":631,"line":887},[1311,1315,1319,1323,1327],{"type":47,"tag":629,"props":1312,"children":1313},{"style":689},[1314],{"type":52,"value":8},{"type":47,"tag":629,"props":1316,"children":1317},{"style":659},[1318],{"type":52,"value":115},{"type":47,"tag":629,"props":1320,"children":1321},{"style":689},[1322],{"type":52,"value":745},{"type":47,"tag":629,"props":1324,"children":1325},{"style":659},[1326],{"type":52,"value":115},{"type":47,"tag":629,"props":1328,"children":1329},{"style":689},[1330],{"type":52,"value":1331},"providers\n",{"type":47,"tag":629,"props":1333,"children":1334},{"class":631,"line":943},[1335,1339,1343,1347,1351,1356,1360],{"type":47,"tag":629,"props":1336,"children":1337},{"style":689},[1338],{"type":52,"value":8},{"type":47,"tag":629,"props":1340,"children":1341},{"style":659},[1342],{"type":52,"value":115},{"type":47,"tag":629,"props":1344,"children":1345},{"style":689},[1346],{"type":52,"value":745},{"type":47,"tag":629,"props":1348,"children":1349},{"style":659},[1350],{"type":52,"value":115},{"type":47,"tag":629,"props":1352,"children":1353},{"style":689},[1354],{"type":52,"value":1355},"ui",{"type":47,"tag":629,"props":1357,"children":1358},{"style":659},[1359],{"type":52,"value":115},{"type":47,"tag":629,"props":1361,"children":1362},{"style":689},[1363],{"type":52,"value":1364},"panels\n",{"type":47,"tag":55,"props":1366,"children":1367},{},[1368],{"type":52,"value":1369},"Guard each registration on every capability its behavior depends on — not just the one that registers it. Surfaces load different capability subsets, so a registration that relies on another capability (a command that opens UI, emits an event, or calls a provider) must guard on that capability too. Otherwise it is advertised or activated on a host that cannot fulfill it and silently does nothing. Register where the host can actually do the work.",{"type":47,"tag":122,"props":1371,"children":1373},{"id":1372},"scoped-api-model",[1374],{"type":52,"value":1375},"Scoped API model",{"type":47,"tag":476,"props":1377,"children":1378},{},[1379,1426,1438,1450],{"type":47,"tag":439,"props":1380,"children":1381},{},[1382,1384,1389,1391],{"type":52,"value":1383},"In commands and events, use ",{"type":47,"tag":61,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":52,"value":90},{"type":52,"value":1390}," for conversation operations:\n",{"type":47,"tag":476,"props":1392,"children":1393},{},[1394,1405,1415],{"type":47,"tag":439,"props":1395,"children":1396},{},[1397,1403],{"type":47,"tag":61,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":52,"value":1402},"ctx.conversation.getHistory()",{"type":52,"value":1404}," for recent messages",{"type":47,"tag":439,"props":1406,"children":1407},{},[1408,1413],{"type":47,"tag":61,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":52,"value":321},{"type":52,"value":1414}," for independent\u002Fbackground model work",{"type":47,"tag":439,"props":1416,"children":1417},{},[1418,1424],{"type":47,"tag":61,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":52,"value":1423},"forked.sendMessageStream([...])",{"type":52,"value":1425}," to stream from a fork",{"type":47,"tag":439,"props":1427,"children":1428},{},[1429,1431,1436],{"type":52,"value":1430},"In tools, use ",{"type":47,"tag":61,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":52,"value":1402},{"type":52,"value":1437}," when the tool needs recent context.",{"type":47,"tag":439,"props":1439,"children":1440},{},[1441,1442,1448],{"type":52,"value":399},{"type":47,"tag":61,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":52,"value":1447},"letta.client",{"type":52,"value":1449}," only for server-specific Letta API calls; do not use it as a substitute for scoped conversation helpers.",{"type":47,"tag":439,"props":1451,"children":1452},{},[1453,1455,1461,1462,1468],{"type":52,"value":1454},"Do not import ",{"type":47,"tag":61,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":52,"value":1460},"@\u002Fbackend",{"type":52,"value":92},{"type":47,"tag":61,"props":1463,"children":1465},{"className":1464},[],[1466],{"type":52,"value":1467},"@\u002Fcli",{"type":52,"value":1469},", or other Letta Code internals from mod files.",{"type":47,"tag":122,"props":1471,"children":1473},{"id":1472},"diagnostics",[1474],{"type":52,"value":1475},"Diagnostics",{"type":47,"tag":55,"props":1477,"children":1478},{},[1479,1480,1486,1488,1494,1496,1502],{"type":52,"value":399},{"type":47,"tag":61,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":52,"value":1485},"letta.diagnostics.report({ message, severity })",{"type":52,"value":1487}," sparingly as a debug utility for mod setup\u002Fruntime problems an agent should inspect, such as missing required environment variables or failed local configuration. Default severity is ",{"type":47,"tag":61,"props":1489,"children":1491},{"className":1490},[],[1492],{"type":52,"value":1493},"\"error\"",{"type":52,"value":1495},"; use ",{"type":47,"tag":61,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":52,"value":1501},"severity: \"warning\"",{"type":52,"value":1503}," only for optional\u002Fdegraded behavior. Keep messages short and actionable, and do not dump routine logs or large state.",{"type":47,"tag":55,"props":1505,"children":1506},{},[1507],{"type":52,"value":1508},"Agents can inspect local mod diagnostics at:",{"type":47,"tag":618,"props":1510,"children":1514},{"className":1511,"code":1513,"language":52,"meta":623},[1512],"language-text","~\u002F.letta\u002Fmods\u002Fdiagnostics\u002Flatest.json\n",[1515],{"type":47,"tag":61,"props":1516,"children":1517},{"__ignoreMap":623},[1518],{"type":52,"value":1513},{"type":47,"tag":122,"props":1520,"children":1522},{"id":1521},"rules",[1523],{"type":52,"value":1524},"Rules",{"type":47,"tag":476,"props":1526,"children":1527},{},[1528,1532,1537,1542,1547,1558,1563,1583,1603,1608,1635],{"type":47,"tag":439,"props":1529,"children":1530},{},[1531],{"type":52,"value":199},{"type":47,"tag":439,"props":1533,"children":1534},{},[1535],{"type":52,"value":1536},"Custom provider mods are local-backend\u002Flocal-agent only. They do not add providers for agents managed through the Letta API.",{"type":47,"tag":439,"props":1538,"children":1539},{},[1540],{"type":52,"value":1541},"Provider mods may run in a provider-only listener context; keep provider registration independent from commands\u002Ftools\u002FUI and guard everything else.",{"type":47,"tag":439,"props":1543,"children":1544},{},[1545],{"type":52,"value":1546},"Direct mod files should not assume third-party npm packages are available. Use Node\u002FBun built-ins unless packaging is explicitly requested.",{"type":47,"tag":439,"props":1548,"children":1549},{},[1550,1552,1557],{"type":52,"value":1551},"Do not do surprising side effects on startup; mods activate on app start and ",{"type":47,"tag":61,"props":1553,"children":1555},{"className":1554},[],[1556],{"type":52,"value":593},{"type":52,"value":115},{"type":47,"tag":439,"props":1559,"children":1560},{},[1561],{"type":52,"value":1562},"Keep user-facing output short and intentional.",{"type":47,"tag":439,"props":1564,"children":1565},{},[1566,1568,1574,1575,1581],{"type":52,"value":1567},"Prefer Node\u002FBun standard APIs (",{"type":47,"tag":61,"props":1569,"children":1571},{"className":1570},[],[1572],{"type":52,"value":1573},"node:child_process",{"type":52,"value":92},{"type":47,"tag":61,"props":1576,"children":1578},{"className":1577},[],[1579],{"type":52,"value":1580},"node:fs",{"type":52,"value":1582},", etc.) for local work.",{"type":47,"tag":439,"props":1584,"children":1585},{},[1586,1588,1594,1595,1601],{"type":52,"value":1587},"For shell execution, prefer ",{"type":47,"tag":61,"props":1589,"children":1591},{"className":1590},[],[1592],{"type":52,"value":1593},"execFile",{"type":52,"value":76},{"type":47,"tag":61,"props":1596,"children":1598},{"className":1597},[],[1599],{"type":52,"value":1600},"spawn",{"type":52,"value":1602}," over shell strings.",{"type":47,"tag":439,"props":1604,"children":1605},{},[1606],{"type":52,"value":1607},"Do not use emojis for loading states; use text or spinner-like characters if the user asks for loading UI.",{"type":47,"tag":439,"props":1609,"children":1610},{},[1611,1613,1618,1620,1626,1628,1633],{"type":52,"value":1612},"For ",{"type":47,"tag":61,"props":1614,"children":1616},{"className":1615},[],[1617],{"type":52,"value":306},{"type":52,"value":1619},", do not return ",{"type":47,"tag":61,"props":1621,"children":1623},{"className":1622},[],[1624],{"type":52,"value":1625},"prompt",{"type":52,"value":1627},"; return ",{"type":47,"tag":61,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":52,"value":313},{"type":52,"value":1634}," and own the UI\u002Fbackground work.",{"type":47,"tag":439,"props":1636,"children":1637},{},[1638,1640,1646],{"type":52,"value":1639},"Treat ",{"type":47,"tag":61,"props":1641,"children":1643},{"className":1642},[],[1644],{"type":52,"value":1645},"turn_start",{"type":52,"value":1647}," as powerful trusted code: keep transforms narrow and unsurprising.",{"type":47,"tag":122,"props":1649,"children":1651},{"id":1650},"pre-flight-checklist-for-complex-mods",[1652],{"type":52,"value":1653},"Pre-flight checklist for complex mods",{"type":47,"tag":55,"props":1655,"children":1656},{},[1657],{"type":52,"value":1658},"Before finishing, verify:",{"type":47,"tag":476,"props":1660,"children":1661},{},[1662,1667,1672,1677,1682,1687,1692,1697,1702,1715,1727,1739],{"type":47,"tag":439,"props":1663,"children":1664},{},[1665],{"type":52,"value":1666},"The mod has one clear owner\u002Ffile and does not mix unrelated features.",{"type":47,"tag":439,"props":1668,"children":1669},{},[1670],{"type":52,"value":1671},"Command\u002Ftool IDs are valid; command overrides of built-ins are intentional, and tool IDs do not collide with built-ins.",{"type":47,"tag":439,"props":1673,"children":1674},{},[1675],{"type":52,"value":1676},"Tool descriptions explain when the model should call them.",{"type":47,"tag":439,"props":1678,"children":1679},{},[1680],{"type":52,"value":1681},"JSON schemas are object schemas with useful descriptions.",{"type":47,"tag":439,"props":1683,"children":1684},{},[1685],{"type":52,"value":1686},"Optional UI\u002Fevent APIs are capability-guarded.",{"type":47,"tag":439,"props":1688,"children":1689},{},[1690],{"type":52,"value":1691},"Each registration is guarded by every capability its behavior depends on, not just the one that registers it, so it isn't advertised or activated on a surface that can't fulfill it.",{"type":47,"tag":439,"props":1693,"children":1694},{},[1695],{"type":52,"value":1696},"Provider mods are capability-guarded and clearly documented as local-agent only.",{"type":47,"tag":439,"props":1698,"children":1699},{},[1700],{"type":52,"value":1701},"Timers, intervals, event registrations, and panels are cleaned up in a disposer.",{"type":47,"tag":439,"props":1703,"children":1704},{},[1705,1707,1713],{"type":52,"value":1706},"Busy commands return ",{"type":47,"tag":61,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":52,"value":1712},"{ type: \"handled\" }",{"type":52,"value":1714}," quickly and avoid main-conversation sends.",{"type":47,"tag":439,"props":1716,"children":1717},{},[1718,1720,1725],{"type":52,"value":1719},"Conversation work uses ",{"type":47,"tag":61,"props":1721,"children":1723},{"className":1722},[],[1724],{"type":52,"value":90},{"type":52,"value":1726}," or forked handles, not app internals.",{"type":47,"tag":439,"props":1728,"children":1729},{},[1730,1732,1737],{"type":52,"value":1731},"Local shell\u002Ffile work is scoped to ",{"type":47,"tag":61,"props":1733,"children":1735},{"className":1734},[],[1736],{"type":52,"value":98},{"type":52,"value":1738}," unless intentionally global.",{"type":47,"tag":439,"props":1740,"children":1741},{},[1742],{"type":52,"value":1743},"Errors shown to the user are short and actionable.",{"type":47,"tag":122,"props":1745,"children":1747},{"id":1746},"references",[1748],{"type":52,"value":1749},"References",{"type":47,"tag":134,"props":1751,"children":1752},{},[1753,1769],{"type":47,"tag":138,"props":1754,"children":1755},{},[1756],{"type":47,"tag":142,"props":1757,"children":1758},{},[1759,1764],{"type":47,"tag":146,"props":1760,"children":1761},{},[1762],{"type":52,"value":1763},"Reference",{"type":47,"tag":146,"props":1765,"children":1766},{},[1767],{"type":52,"value":1768},"Load when",{"type":47,"tag":157,"props":1770,"children":1771},{},[1772,1788,1809,1825,1841,1857,1881,1897,1914],{"type":47,"tag":142,"props":1773,"children":1774},{},[1775,1783],{"type":47,"tag":164,"props":1776,"children":1777},{},[1778],{"type":47,"tag":61,"props":1779,"children":1781},{"className":1780},[],[1782],{"type":52,"value":489},{"type":47,"tag":164,"props":1784,"children":1785},{},[1786],{"type":52,"value":1787},"The model should autonomously call a local capability",{"type":47,"tag":142,"props":1789,"children":1790},{},[1791,1799],{"type":47,"tag":164,"props":1792,"children":1793},{},[1794],{"type":47,"tag":61,"props":1795,"children":1797},{"className":1796},[],[1798],{"type":52,"value":500},{"type":47,"tag":164,"props":1800,"children":1801},{},[1802,1804],{"type":52,"value":1803},"The human should invoke ",{"type":47,"tag":61,"props":1805,"children":1807},{"className":1806},[],[1808],{"type":52,"value":267},{"type":47,"tag":142,"props":1810,"children":1811},{},[1812,1820],{"type":47,"tag":164,"props":1813,"children":1814},{},[1815],{"type":47,"tag":61,"props":1816,"children":1818},{"className":1817},[],[1819],{"type":52,"value":511},{"type":47,"tag":164,"props":1821,"children":1822},{},[1823],{"type":52,"value":1824},"Adding a custom model\u002FAPI provider for local agents",{"type":47,"tag":142,"props":1826,"children":1827},{},[1828,1836],{"type":47,"tag":164,"props":1829,"children":1830},{},[1831],{"type":47,"tag":61,"props":1832,"children":1834},{"className":1833},[],[1835],{"type":52,"value":522},{"type":47,"tag":164,"props":1837,"children":1838},{},[1839],{"type":52,"value":1840},"Reacting to lifecycle\u002Ftool\u002Fturn events or transforming turns\u002Ftools",{"type":47,"tag":142,"props":1842,"children":1843},{},[1844,1852],{"type":47,"tag":164,"props":1845,"children":1846},{},[1847],{"type":47,"tag":61,"props":1848,"children":1850},{"className":1849},[],[1851],{"type":52,"value":533},{"type":47,"tag":164,"props":1853,"children":1854},{},[1855],{"type":52,"value":1856},"Enforcing dynamic tool allow\u002Fask\u002Fdeny policy before approval\u002Fexecution",{"type":47,"tag":142,"props":1858,"children":1859},{},[1860,1868],{"type":47,"tag":164,"props":1861,"children":1862},{},[1863],{"type":47,"tag":61,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":52,"value":544},{"type":47,"tag":164,"props":1869,"children":1870},{},[1871,1873,1879],{"type":52,"value":1872},"Panels (including order-0 statusline and order-1 dreaming indicator) or ",{"type":47,"tag":61,"props":1874,"children":1876},{"className":1875},[],[1877],{"type":52,"value":1878},"ui.panels",{"type":52,"value":1880}," capability guards are involved",{"type":47,"tag":142,"props":1882,"children":1883},{},[1884,1892],{"type":47,"tag":164,"props":1885,"children":1886},{},[1887],{"type":47,"tag":61,"props":1888,"children":1890},{"className":1889},[],[1891],{"type":52,"value":555},{"type":47,"tag":164,"props":1893,"children":1894},{},[1895],{"type":52,"value":1896},"Recreating plan mode with commands, tools, events, permissions, and local state",{"type":47,"tag":142,"props":1898,"children":1899},{},[1900,1909],{"type":47,"tag":164,"props":1901,"children":1902},{},[1903],{"type":47,"tag":61,"props":1904,"children":1906},{"className":1905},[],[1907],{"type":52,"value":1908},"references\u002Fanalysis-mode.md",{"type":47,"tag":164,"props":1910,"children":1911},{},[1912],{"type":52,"value":1913},"Phrase-triggered diagnostic mode with turn reminders (simpler than plan-mode)",{"type":47,"tag":142,"props":1915,"children":1916},{},[1917,1925],{"type":47,"tag":164,"props":1918,"children":1919},{},[1920],{"type":47,"tag":61,"props":1921,"children":1923},{"className":1922},[],[1924],{"type":52,"value":566},{"type":47,"tag":164,"props":1926,"children":1927},{},[1928],{"type":52,"value":1929},"Multiple capabilities, local state, cleanup, background model work, or non-trivial composition",{"type":47,"tag":1931,"props":1932,"children":1933},"style",{},[1934],{"type":52,"value":1935},"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":1937,"total":2019},[1938,1950,1965,1977,1983,1997,2009],{"slug":1939,"name":1939,"fn":1940,"description":1941,"org":1942,"tags":1943,"stars":23,"repoUrl":24,"updatedAt":1949},"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},[1944,1945,1946],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":1947,"slug":1948,"type":16},"GitHub","github","2026-07-13T06:22:58.45767",{"slug":1951,"name":1952,"fn":1953,"description":1954,"org":1955,"tags":1956,"stars":23,"repoUrl":24,"updatedAt":1964},"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},[1957,1958,1961],{"name":21,"slug":22,"type":16},{"name":1959,"slug":1960,"type":16},"AI Context","ai-context",{"name":1962,"slug":1963,"type":16},"Debugging","debugging","2026-07-13T06:22:50.151002",{"slug":1966,"name":1966,"fn":1967,"description":1968,"org":1969,"tags":1970,"stars":23,"repoUrl":24,"updatedAt":1976},"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},[1971,1972,1973],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":1974,"slug":1975,"type":16},"MCP","mcp","2026-07-13T06:23:37.646079",{"slug":4,"name":4,"fn":5,"description":6,"org":1978,"tags":1979,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1980,1981,1982],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"slug":1984,"name":1984,"fn":1985,"description":1986,"org":1987,"tags":1988,"stars":23,"repoUrl":24,"updatedAt":1996},"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},[1989,1990,1993],{"name":21,"slug":22,"type":16},{"name":1991,"slug":1992,"type":16},"Documentation","documentation",{"name":1994,"slug":1995,"type":16},"Plugin Development","plugin-development","2026-07-13T06:22:56.998659",{"slug":1998,"name":1998,"fn":1999,"description":2000,"org":2001,"tags":2002,"stars":23,"repoUrl":24,"updatedAt":2008},"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},[2003,2004,2005],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":2006,"slug":2007,"type":16},"CLI","cli","2026-07-13T06:23:18.266798",{"slug":405,"name":405,"fn":2010,"description":2011,"org":2012,"tags":2013,"stars":23,"repoUrl":24,"updatedAt":2018},"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},[2014,2015],{"name":2006,"slug":2007,"type":16},{"name":2016,"slug":2017,"type":16},"Engineering","engineering","2026-07-13T06:23:27.465985",19,{"items":2021,"total":2129},[2022,2028,2034,2040,2046,2052,2058,2063,2075,2091,2102,2114],{"slug":1939,"name":1939,"fn":1940,"description":1941,"org":2023,"tags":2024,"stars":23,"repoUrl":24,"updatedAt":1949},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2025,2026,2027],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":1947,"slug":1948,"type":16},{"slug":1951,"name":1952,"fn":1953,"description":1954,"org":2029,"tags":2030,"stars":23,"repoUrl":24,"updatedAt":1964},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2031,2032,2033],{"name":21,"slug":22,"type":16},{"name":1959,"slug":1960,"type":16},{"name":1962,"slug":1963,"type":16},{"slug":1966,"name":1966,"fn":1967,"description":1968,"org":2035,"tags":2036,"stars":23,"repoUrl":24,"updatedAt":1976},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2037,2038,2039],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":1974,"slug":1975,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":2041,"tags":2042,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2043,2044,2045],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"slug":1984,"name":1984,"fn":1985,"description":1986,"org":2047,"tags":2048,"stars":23,"repoUrl":24,"updatedAt":1996},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2049,2050,2051],{"name":21,"slug":22,"type":16},{"name":1991,"slug":1992,"type":16},{"name":1994,"slug":1995,"type":16},{"slug":1998,"name":1998,"fn":1999,"description":2000,"org":2053,"tags":2054,"stars":23,"repoUrl":24,"updatedAt":2008},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2055,2056,2057],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":2006,"slug":2007,"type":16},{"slug":405,"name":405,"fn":2010,"description":2011,"org":2059,"tags":2060,"stars":23,"repoUrl":24,"updatedAt":2018},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2061,2062],{"name":2006,"slug":2007,"type":16},{"name":2016,"slug":2017,"type":16},{"slug":2064,"name":2064,"fn":2065,"description":2066,"org":2067,"tags":2068,"stars":23,"repoUrl":24,"updatedAt":2074},"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},[2069,2070,2071],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":2072,"slug":2073,"type":16},"Multi-Agent","multi-agent","2026-07-26T05:46:56.388845",{"slug":2076,"name":2076,"fn":2077,"description":2078,"org":2079,"tags":2080,"stars":23,"repoUrl":24,"updatedAt":2090},"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},[2081,2084,2087],{"name":2082,"slug":2083,"type":16},"Configuration","configuration",{"name":2085,"slug":2086,"type":16},"Desktop","desktop",{"name":2088,"slug":2089,"type":16},"Themes","themes","2026-07-13T06:23:41.407811",{"slug":2092,"name":2092,"fn":2093,"description":2094,"org":2095,"tags":2096,"stars":23,"repoUrl":24,"updatedAt":2101},"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},[2097,2098],{"name":21,"slug":22,"type":16},{"name":2099,"slug":2100,"type":16},"Management","management","2026-07-16T06:02:17.297841",{"slug":2103,"name":2103,"fn":2104,"description":2105,"org":2106,"tags":2107,"stars":23,"repoUrl":24,"updatedAt":2113},"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},[2108,2109,2112],{"name":21,"slug":22,"type":16},{"name":2110,"slug":2111,"type":16},"AI Infrastructure","ai-infrastructure",{"name":2082,"slug":2083,"type":16},"2026-07-13T06:23:08.838181",{"slug":2115,"name":2115,"fn":2116,"description":2117,"org":2118,"tags":2119,"stars":23,"repoUrl":24,"updatedAt":2128},"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},[2120,2123,2126],{"name":2121,"slug":2122,"type":16},"Creative","creative",{"name":2124,"slug":2125,"type":16},"Graphics","graphics",{"name":2127,"slug":2115,"type":16},"Image Generation","2026-07-13T06:23:06.189403",69]