Source profileQuality 89/100Review permissions

letta-ai/letta-code/src/skills/builtin/creating-mods/SKILL.md

creating-mods

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.

Source repository stars
2,962
Declared platforms
0
Static risk flags
3
Last source update
2026-08-06
Source checked
2026-08-06

Decision brief

What it does—and where it fits

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…

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.

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/letta-ai/letta-code --skill "src/skills/builtin/creating-mods"
Safe inspection promptEditorial

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

What the source asks the agent to do

  1. 01

    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…

    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.Inspect the relevant mods directory for related files.Preserve unrelated mod code. Prefer a focused new file if merging would be messy.
  2. 02

    Choose where the mod file lives

    Default to a single mod file unless the user asks for something larger.

    Default to a single mod file unless the user asks for something larger.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 --name .…
  3. 03

    Choose the right capability

    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.

    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…
  4. 04

    Core mod shape

    Use letta.capabilities for optional behavior:

    Use letta.capabilities for optional behavior: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 o…
  5. 05

    Scoped API model

    In commands and events, use ctx.conversation for conversation operations:

    In commands and events, use ctx.conversation for conversation operations:ctx.conversation.getHistory() for recent messagesctx.conversation.fork() for independent/background model work

Permission review

Static risk signals and limitations

Runs scripts

medium · line 26

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 |

Reads files

low · line 41

The documentation asks the agent to read local files, directories, or repositories.

Inspect the relevant mods directory for related files.

Writes files

medium · line 52

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

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score89/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars2,962SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
letta-ai/letta-code
Skill path
src/skills/builtin/creating-mods/SKILL.md
Commit
455b13bfa127aae80bdca90aeaf793e1dfea9a7b
License
Apache-2.0
Collected
2026-08-06
Default branch
main
View the original SKILL.md

Creating Mods

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.

Choose where the mod file lives

Default to a single mod file unless the user asks for something larger.

LocationUse when
~/.letta/mods/foo.tsThe behavior should apply to local sessions on this machine. Use this by default.
$MEMORY_DIR/mods/foo.tsThe 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.

Choose the right capability

User wantsBuild
Agent/model should autonomously call a local capabilityMod tool
User wants /foo to send a prompt or run local UI logicMod command
Slash command represents a reusable agent workflowSkill + thin mod command
Command should work while the main agent is busyCommand with runWhenBusy: true, handled, panel/status, and usually ctx.conversation.fork()
Show transient output above inputPanel, usually from a command
Show small persistent stateStatus value
React to app/session lifecycle or transform outbound turnsEvent
Enforce dynamic allow/ask/deny policy for tool callsPermission overlay
Add a custom model/API provider for local agentsProvider mod (local agents only)
Change the bottom statusline appearanceUse 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.

Workflow

  1. Pick the target scope: harness mod file (~/.letta/mods/) by default, or agent mod file ($MEMORY_DIR/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 if merging would be messy.
  4. Choose the mod shape and load only the needed recipe:
    • tools: references/tools.md
    • commands: references/commands.md
    • local custom providers: references/providers.md
    • events: references/events.md
    • permissions: references/permissions.md
    • panels/status/capabilities: references/ui.md
    • complex plan-mode composition: references/plan-mode.md
  5. For multi-capability or stateful mods, also read references/architecture.md.
  6. Write a single-file mod unless the user asks for something larger.
  7. Return disposers for registered providers/commands/tools/events, timers, subscriptions, and panels that should close on reload.
  8. Do a basic review: valid names, descriptions present, schemas are object schemas, optional capabilities guarded, scoped APIs used, cleanup returned.
  9. Tell the user the absolute file path changed and to run /reload. If a mod breaks startup or command handling, recover with letta --no-mods or LETTA_DISABLE_MODS=1 letta.

Core mod shape

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.

Scoped API model

  • In commands and events, use ctx.conversation for conversation operations:
    • ctx.conversation.getHistory() for recent messages
    • ctx.conversation.fork() for independent/background model work
    • forked.sendMessageStream([...]) to stream from a fork
  • In tools, use ctx.conversation.getHistory() when the tool needs recent context.
  • Use letta.client only for server-specific Letta API calls; do not use it as a substitute for scoped conversation helpers.
  • Do not import @/backend, @/cli, or other Letta Code internals from mod files.

Diagnostics

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

Rules

  • Do not create project mods.
  • Custom provider mods are local-backend/local-agent only. They do not add providers for agents managed through the Letta API.
  • Provider mods may run in a provider-only listener context; keep provider registration independent from commands/tools/UI and guard everything else.
  • Direct mod files should not assume third-party npm packages are available. Use Node/Bun built-ins unless packaging is explicitly requested.
  • Do not do surprising side effects on startup; mods activate on app start and /reload.
  • Keep user-facing output short and intentional.
  • Prefer Node/Bun standard APIs (node:child_process, node:fs, etc.) for local work.
  • For shell execution, prefer execFile/spawn over shell strings.
  • Do not use emojis for loading states; use text or spinner-like characters if the user asks for loading UI.
  • For runWhenBusy: true, do not return prompt; return handled and own the UI/background work.
  • Treat turn_start as powerful trusted code: keep transforms narrow and unsurprising.

Pre-flight checklist for complex mods

Before finishing, verify:

  • The mod has one clear owner/file and does not mix unrelated features.
  • Command/tool IDs are valid; command overrides of built-ins are intentional, and tool IDs do not collide with built-ins.
  • Tool descriptions explain when the model should call them.
  • JSON schemas are object schemas with useful descriptions.
  • Optional UI/event APIs are capability-guarded.
  • 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.
  • Provider mods are capability-guarded and clearly documented as local-agent only.
  • Timers, intervals, event registrations, and panels are cleaned up in a disposer.
  • Busy commands return { type: "handled" } quickly and avoid main-conversation sends.
  • Conversation work uses ctx.conversation or forked handles, not app internals.
  • Local shell/file work is scoped to ctx.cwd unless intentionally global.
  • Errors shown to the user are short and actionable.

References

ReferenceLoad when
references/tools.mdThe model should autonomously call a local capability
references/commands.mdThe human should invoke /foo
references/providers.mdAdding a custom model/API provider for local agents
references/events.mdReacting to lifecycle/tool/turn events or transforming turns/tools
references/permissions.mdEnforcing dynamic tool allow/ask/deny policy before approval/execution
references/ui.mdPanels (including order-0 statusline and order-1 dreaming indicator) or ui.panels capability guards are involved
references/plan-mode.mdRecreating plan mode with commands, tools, events, permissions, and local state
references/analysis-mode.mdPhrase-triggered diagnostic mode with turn reminders (simpler than plan-mode)
references/architecture.mdMultiple capabilities, local state, cleanup, background model work, or non-trivial composition

Alternatives

Compare before choosing

Computed 9646

theBGuy/GitDesktop

vercel-react-view-transitions

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

Computed 9510,081

ConardLi/garden-skills

web-design-engineer

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.

Computed 931,212

first-fluke/oh-my-agent

oma-frontend

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.

Computed 9383

aAAaqwq/AGI-Super-Team

ui-ux-pro-max

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