Files
letta-code/src/tools
cpacker d0d45cba5a feat: add migrating-memory skill for copying/sharing blocks between agents
- Add migrating-memory bundled skill with 4 scripts:
  - list-agents.ts: List all accessible agents
  - get-agent-blocks.ts: Get memory blocks from an agent
  - copy-block.ts: Copy a block to create independent copy
  - attach-block.ts: Attach existing block (shared)
- Scripts auto-target current agent for safety (no accidental modifications)
- Skill.ts now includes "# Skill Directory:" when loading skills with additional files
- Update initializing-memory to suggest migration option
- Add unit tests for all migration scripts

🐙 Generated with [Letta Code](https://letta.com)

Co-Authored-By: Letta <noreply@letta.com>
2026-01-04 11:28:22 -08:00
..
2025-12-29 13:51:45 -08:00
2025-12-29 13:51:45 -08:00
2025-12-08 18:34:00 -08:00

Client-side tool guidelines

How to implement tools that run locally in Letta Code.

Contract

  • Function signature: (args, opts?) => Promise<{ toolReturn: string; status: "success" | "error"; stdout?: string[]; stderr?: string[] }>
  • Optional opts.signal?: AbortSignal. If you spawn a subprocess, wire this signal to it so Esc/abort can kill it cleanly. If youre pure in-process, you can ignore it.

Subprocess tools (e.g., Bash)

  • Pass the provided AbortSignal to exec/spawn so abort kills the child. Normalize abort errors to toolReturn: "User interrupted tool execution", status: "error".
  • Avoid running multiple subprocesses unless you also expose a cancel hook; we execute tools serially to avoid races.

In-process tools (read/write/edit)

  • You can ignore the signal, but still return a clear toolReturn and status.
  • Be deterministic and side-effect aware; the runner keeps tools serial to avoid file races.

Errors

  • Return a concise error message in toolReturn and set status: "error".
  • Dont console.error from tools; the UI surfaces the returned message.