Best for
- Use when asked to make a mod, add an agent-callable tool, add a slash command, add a local provider/model adapter, transform turns, react to app events, or add lightweight mod UI outside the dedicated /statusline flow.
letta-ai/letta-code/src/skills/builtin/creating-mods/SKILL.md
Creates and edits trusted local Letta Code mods, including tools, slash commands, local-only model providers, lifecycle/turn events, scoped conversation helpers, panels, and capability-gated behavior. Use when asked to make a mod, add an agent-callable tool, add a slash command, add a local provider/model adapter, transform turns, react to app events, or add lightweight mod UI outside the dedicated /statusline flow.
Decision brief
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/conversation/workspace/model state is passed as ctx to tool, command, event, and pe…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/letta-ai/letta-code --skill "src/skills/builtin/creating-mods"Inspect the Agent Skill "creating-mods" from https://github.com/letta-ai/letta-code/blob/455b13bfa127aae80bdca90aeaf793e1dfea9a7b/src/skills/builtin/creating-mods/SKILL.md at commit 455b13bfa127aae80bdca90aeaf793e1dfea9a7b. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Pick the target scope: harness mod file (/.letta/mods/) by default, or agent mod file ($MEMORYDIR/mods/) only when the behavior should travel with this agent. 2. Inspect the relevant mods directory for related files. 3. Preserve unrelated mod code. Prefer a focused new file i…
Default to a single mod file unless the user asks for something larger.
Default 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.
Use letta.capabilities for optional behavior:
In commands and events, use ctx.conversation for conversation operations:
Permission review
The documentation asks the agent to run terminal commands or scripts.
| User wants `/foo` to send a prompt or run local UI logic | Mod command |The documentation asks the agent to read local files, directories, or repositories.
Inspect the relevant mods directory for related files.The documentation asks the agent to create, modify, or delete local files.
Write a single-file mod unless the user asks for something larger.Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 89/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 2,962 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
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/conversation/workspace/model state is passed as ctx to tool, command, event, and permission callbacks (panels receive live agent/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.
Capabilities vary by surface — not every surface loads every capability. The TUI/headless host can load tools, commands, events, UI, and providers; the desktop listener loads tools, commands, providers, and tool/turn events, but not panel UI. Always guard each registration on the capabilities its behavior needs.
Default to a single mod file unless the user asks for something larger.
| Location | Use when |
|---|---|
~/.letta/mods/foo.ts | The behavior should apply to local sessions on this machine. Use this by default. |
$MEMORY_DIR/mods/foo.ts | The behavior should travel with one agent's MemFS/memory. |
Do not create project mods.
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 letta mods package <mod-file> --name <package-name>. Package install/update/download/publish details belong outside this skill.
| User wants | Build |
|---|---|
| Agent/model should autonomously call a local capability | Mod tool |
User wants /foo to send a prompt or run local UI logic | Mod command |
| Slash command represents a reusable agent workflow | Skill + thin mod command |
| Command should work while the main agent is busy | Command with runWhenBusy: true, handled, panel/status, and usually ctx.conversation.fork() |
| Show transient output above input | Panel, usually from a command |
| Show small persistent state | Status value |
| React to app/session lifecycle or transform outbound turns | Event |
| Enforce dynamic allow/ask/deny policy for tool calls | Permission overlay |
| Add a custom model/API provider for local agents | Provider mod (local agents only) |
| Change the bottom statusline appearance | Use customizing-statusline, not this skill |
Default 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.
~/.letta/mods/) by default, or agent mod file ($MEMORY_DIR/mods/) only when the behavior should travel with this agent.references/tools.mdreferences/commands.mdreferences/providers.mdreferences/events.mdreferences/permissions.mdreferences/ui.mdreferences/plan-mode.mdreferences/architecture.md./reload. If a mod breaks startup or command handling, recover with letta --no-mods or LETTA_DISABLE_MODS=1 letta.export default function activate(letta) {
const disposers = [];
if (letta.capabilities.tools) {
disposers.push(letta.tools.register(/* ... */));
}
if (letta.capabilities.commands) {
disposers.push(letta.commands.register(/* ... */));
}
return () => {
for (const dispose of disposers.reverse()) dispose();
};
}
Use letta.capabilities for optional behavior:
letta.capabilities.tools
letta.capabilities.commands
letta.capabilities.events.lifecycle
letta.capabilities.events.tools
letta.capabilities.events.turns
letta.capabilities.events.compact
letta.capabilities.events.llm
letta.capabilities.permissions
letta.capabilities.providers
letta.capabilities.ui.panels
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.
ctx.conversation for conversation operations:
ctx.conversation.getHistory() for recent messagesctx.conversation.fork() for independent/background model workforked.sendMessageStream([...]) to stream from a forkctx.conversation.getHistory() when the tool needs recent context.letta.client only for server-specific Letta API calls; do not use it as a substitute for scoped conversation helpers.@/backend, @/cli, or other Letta Code internals from mod files.Use letta.diagnostics.report({ message, severity }) sparingly as a debug utility for mod setup/runtime 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/degraded behavior. Keep messages short and actionable, and do not dump routine logs or large state.
Agents can inspect local mod diagnostics at:
~/.letta/mods/diagnostics/latest.json
/reload.node:child_process, node:fs, etc.) for local work.execFile/spawn over shell strings.runWhenBusy: true, do not return prompt; return handled and own the UI/background work.turn_start as powerful trusted code: keep transforms narrow and unsurprising.Before finishing, verify:
{ type: "handled" } quickly and avoid main-conversation sends.ctx.conversation or forked handles, not app internals.ctx.cwd unless intentionally global.| Reference | Load when |
|---|---|
references/tools.md | The model should autonomously call a local capability |
references/commands.md | The human should invoke /foo |
references/providers.md | Adding a custom model/API provider for local agents |
references/events.md | Reacting to lifecycle/tool/turn events or transforming turns/tools |
references/permissions.md | Enforcing dynamic tool allow/ask/deny policy before approval/execution |
references/ui.md | Panels (including order-0 statusline and order-1 dreaming indicator) or ui.panels capability guards are involved |
references/plan-mode.md | Recreating plan mode with commands, tools, events, permissions, and local state |
references/analysis-mode.md | Phrase-triggered diagnostic mode with turn reminders (simpler than plan-mode) |
references/architecture.md | Multiple capabilities, local state, cleanup, background model work, or non-trivial composition |
Alternatives
theBGuy/GitDesktop
Guide for implementing smooth, native-feeling animations using React's View Transition API (`<ViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter/exit of components, animate list reorder, implement directional (forward/back) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view
ConardLi/garden-skills
Build or redesign polished browser-rendered visual artifacts with HTML/CSS/JavaScript/React: pages, dashboards, prototypes, slide decks, animations, UI mockups, and data visualizations. Use for visual front-end creation, design-system exploration, design critique, or explicit browser acceptance / QA of a web artifact. Not for back-end, CLI, non-visual coding, source-to-longform article conversion, or narration-driven click-through video presentations.
first-fluke/oh-my-agent
Frontend specialist for React, Next.js, Angular, TypeScript with FSD-lite architecture, shadcn/ui, and design system alignment. Use for UI, component, page, layout, CSS, Tailwind, shadcn, Angular, and RxJS work.
aAAaqwq/AGI-Super-Team
UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 9 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: g