acquiring-skills
Discover and install skills from Hermes, ClawHub, GitHub, and other registries. Load this skill whenever a user asks for a…
Reference for writing a Workflow tool script (script API and gotchas, pipeline-vs-barrier rules, quality patterns, worked examples). Load before authoring a script for a workflow the user already opted into; it does not itself authorize running one.
Claude Code
$ npx -y skills add letta-ai/letta-code --skill workflow-authoring --agent claude-code
Codex
$ npx skills add letta-ai/letta-code --skill workflow-authoring -a codex -y
Cursor
$ npx skills add letta-ai/letta-code --skill workflow-authoring -a cursor -y
Gemini CLI
$ npx skills add letta-ai/letta-code --skill workflow-authoring -a gemini-cli -y
GitHub Copilot
$ npx skills add letta-ai/letta-code --skill workflow-authoring -a github-copilot -y
OpenCode
$ npx skills add letta-ai/letta-code --skill workflow-authoring -a opencode -y
Windsurf
$ npx skills add letta-ai/letta-code --skill workflow-authoring -a windsurf -y
name: workflow-authoring description: Reference for writing a Workflow tool script (script API and gotchas, pipeline-vs-barrier rules, quality patterns, worked examples). Load before authoring a script for a workflow the user already opted into; it does not itself authorize running one.
A workflow structures work across many subagents — to be comprehensive (decompose and cover in parallel), to be confident (independent perspectives and adversarial checks before committing), or to take on scale one context can't hold (migrations, audits, broad sweeps). The script is where you encode that structure: what fans out, what verifies, what synthesizes.
When you do call the Workflow tool, the right move is often **hybrid**: scout inline first (list the files, scope the diff, find the modules) to discover the work-list, then call Workflow to pipeline over it, passing the list via `args`. You don't need to know the shape before the *task* — only before the *orchestration step*.
Common single-phase workflows you can chain across turns:
For larger work, run several in sequence — read each result before deciding the next phase. You stay in the loop; each workflow is one well-scoped fan-out.
Every script must begin with `export const meta = {...}`:
export const meta = { name: 'find-flaky-tests', // kebab-case, required description: 'Find flaky tests and propose fixes', // required phases: [ // one entry per phase() call { title: 'Scan', detail: 'grep test logs for retries' }, { title: 'Fix', detail: 'one agent per flaky test' }, ], } // script body starts here — use agent()/parallel()/pipeline()/phase()/log()
The `meta` object must be a PURE LITERAL — no variables, function calls, spreads, or template interpolation.
Every `agent()` call is one agent-free ephemeral conversation linked to the invoking parent agent (`is_subagent: true`, named after the call's `label`). It starts with nothing but its prompt: no memory, no conversation context, no skills. Put ALL context a stage needs in the prompt — file paths, the rule it should apply, what shape to return.
Subagents are told their final text IS the return value (not a human-facing message), so they return raw data. Workers inherit the invoking session's tools and permission mode; use `allowedTools` to restrict a workflow or stage. For stages whose input is entirely in the prompt (synthesis, judging, scoring) pass `allowedTools: []` — a model that can still read files tends to wander, and a subagent that re-issues an identical tool call three times is stopped and rejects with the failure detail.
Their model defaults to the invoking conversation's model. `opts.model` (or the tool's `model` input) accepts any handle or alias listed by `letta model list`; an unknown value rejects that call. Use a cheaper model for mechanical stages only when you know a valid handle.
Use the invoking backend for workflow workers. Local execution requires an Agent SDK and App Server with local conversation support; `decide()` still uses the Cloud decisions service.
text, or with `schema` (JSON Schema) to a validated object. Prefer `schema` for shaped results: invalid or missing output is retried, then rejects with validation detail in the error and journal. `json: true` still parses without validating; `schema` wins if both are set. Await each call; failures reject with the cause, `callIndex`, and `conversationId` when available. Catch errors explicitly to recover. Options: `label` (display name), `phase` (progress group — use this inside concurrent stages), `schema`, `json`, `model`, `effort` (`'low'` for mechanical stages, higher for the hardest verify/judge stages), `allowedTools`, `systemPrompt` (extra system prompt for this subagent), `skills` (skill names whose full content is loaded into the subagent's prompt; workers otherwise have no skills), `timeoutMs` (default 10 minutes), `maxToolCalls` (positive safe integer; default 1000 unique tool calls for this subagent), `conversationId` (resume a worker — see "Diagnosing a run").
independently, NO barrier between stages. Item A can be in stage 3 while item B is still in stage 1. This is the DEFAULT for multi-stage work. Wall-clock = slowest single-item chain, not sum-of-slowest-per-stage. Every stage callback receives `(prevResult, originalItem, index)` — use originalItem/index in later stages to label work without threading context through stage 1's return value. A stage that throws skips that item's remaining stages; siblings finish, then the helper rejects.
BARRIER: it awaits all thunks, then rejects if any threw. For best-effort processing, catch errors inside each thunk and return explicit success/error results. Use ONLY when you genuinely need all results together.
under this title in progress output.
`budget.remaining` (limit and remaining are `null` without a `maxCostUsd`; spent and remaining are `null` once any usage had no cost estimate). With a budget, reaching it stops the run: pending and new calls reject with `
Letta Code is a stateful agent harness for creating agents that are more like people than tools. Letta Code agents have memory, identity, and a sense of experience over time.
Discover and install skills from Hermes, ClawHub, GitHub, and other registries. Load this skill whenever a user asks for a…
Control a real browser to navigate pages, click, type, fill forms, inspect rendered UI, take screenshots, or record video. Load…
Investigate and repair an agent's context — memory, system prompt, and skills — using observed behavior as evidence. Use when the…
Creates and edits trusted local Letta Code mods, including tools, slash commands, local-only model providers, lifecycle/turn…
Guide for creating effective skills. Use when creating a new skill or updating an existing one that extends Letta Code's…
Creates, edits, and enables Letta Code mod-provided slash commands. Use when the user asks to add a custom /command, slash…
Believable agent cost report for any period, default the last 7 full days PT, not counting today. Measured tokens from Claude…
Keep a durable record of work passed between Bots in the shared Hindsight memory bank. Use when handing work to another Bot, when…
Install, configure, and operate MemPalace, including a private local palace, a shared-brain hub, or a client joining an existing…
Install, configure, and operate MemPalace, including a private local palace, a shared-brain hub, or a client joining an existing…