@letta-ai/letta-code 0.26.7 → 0.26.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/letta.js +3902 -2578
- package/package.json +2 -2
- package/skills/creating-extensions/SKILL.md +1 -1
- package/skills/creating-extensions/references/architecture.md +1 -1
- package/skills/creating-extensions/references/commands.md +1 -1
- package/skills/dispatching-coding-agents/SKILL.md +7 -2
- package/skills/{configuring-your-harness → modifying-the-harness}/SKILL.md +4 -4
- package/skills/letta-help/SKILL.md +0 -219
- /package/skills/{configuring-your-harness → modifying-the-harness}/references/hooks.md +0 -0
- /package/skills/{configuring-your-harness → modifying-the-harness}/scripts/add_hook.py +0 -0
- /package/skills/{configuring-your-harness → modifying-the-harness}/scripts/add_permission.py +0 -0
- /package/skills/{configuring-your-harness → modifying-the-harness}/scripts/show_config.py +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@letta-ai/letta-code",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.9",
|
|
4
4
|
"description": "Letta Code is a CLI tool for interacting with stateful Letta agents from the terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "bun@1.3.0",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@letta-ai/letta-client": "^1.10.2",
|
|
39
|
+
"@earendil-works/pi-ai": "^0.77.0",
|
|
39
40
|
"@pierre/diffs": "1.2.2",
|
|
40
41
|
"glob": "^13.0.0",
|
|
41
42
|
"ink-link": "^5.0.0",
|
|
@@ -51,7 +52,6 @@
|
|
|
51
52
|
"@vscode/ripgrep": "^1.17.0"
|
|
52
53
|
},
|
|
53
54
|
"devDependencies": {
|
|
54
|
-
"@earendil-works/pi-ai": "^0.75.5",
|
|
55
55
|
"@slack/bolt": "^4.7.0",
|
|
56
56
|
"@types/bun": "^1.3.7",
|
|
57
57
|
"@types/diff": "^8.0.0",
|
|
@@ -106,7 +106,7 @@ letta.capabilities.ui.customStatuslineRenderer
|
|
|
106
106
|
Before finishing, verify:
|
|
107
107
|
|
|
108
108
|
- The extension has one clear owner/file and does not mix unrelated features.
|
|
109
|
-
- Command/tool IDs are valid and do not collide with built-ins.
|
|
109
|
+
- Command/tool IDs are valid; command overrides of built-ins are intentional, and tool IDs do not collide with built-ins.
|
|
110
110
|
- Tool descriptions explain when the model should call them.
|
|
111
111
|
- JSON schemas are object schemas with useful descriptions.
|
|
112
112
|
- Optional UI/event/statusline APIs are capability-guarded.
|
|
@@ -96,7 +96,7 @@ Keep state separate from source code. Do not store secrets in plain JSON; use ex
|
|
|
96
96
|
|
|
97
97
|
## Timers and subscriptions
|
|
98
98
|
|
|
99
|
-
Timers are okay for active-session behavior, but they only run while the extension
|
|
99
|
+
Timers are okay for active-session behavior, but they only run while the extension engine is alive. Always clear them:
|
|
100
100
|
|
|
101
101
|
```ts
|
|
102
102
|
const timer = setInterval(update, 30_000);
|
|
@@ -20,7 +20,7 @@ If the command represents a durable agent workflow (for example `/goal`), put th
|
|
|
20
20
|
|
|
21
21
|
- Do not include the leading slash. Use `id: "review"`, not `id: "/review"`.
|
|
22
22
|
- Use a lowercase slug with letters, numbers, and hyphens only.
|
|
23
|
-
- Built-in commands like `/reload`, `/model`, `/statusline`, etc.
|
|
23
|
+
- Built-in commands like `/reload`, `/model`, `/statusline`, etc. can be overridden by trusted local extensions. Do this intentionally and keep recovery in mind: start with `--no-extensions` or `LETTA_DISABLE_EXTENSIONS=1` if an override breaks command handling.
|
|
24
24
|
- Duplicate extension command IDs fail unless `override: true` is intentional.
|
|
25
25
|
|
|
26
26
|
## Prompt command
|
|
@@ -108,6 +108,8 @@ For hard problems, use the strongest available models:
|
|
|
108
108
|
codex exec "YOUR PROMPT" -m gpt-5.3-codex --full-auto -C /path/to/repo
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
+
Claude Code does not support a `-C` working-directory flag. Run the Bash tool with its `workdir` set to the target repo, or `cd /path/to/repo && claude ...` inside the shell command. Use `--add-dir` only to grant access to additional directories outside the current working directory.
|
|
112
|
+
|
|
111
113
|
### Code review — cross-agent validation
|
|
112
114
|
Have one agent write code or create a plan, then dispatch another to review:
|
|
113
115
|
```bash
|
|
@@ -123,8 +125,9 @@ claude -p "Review the following diff for correctness, edge cases, and missed err
|
|
|
123
125
|
### Get outside feedback on your work
|
|
124
126
|
Write your plan or analysis to a file, then ask a subagent to critique it:
|
|
125
127
|
```bash
|
|
128
|
+
# Run this from the target repo, or set the Bash tool's workdir to the repo.
|
|
126
129
|
claude -p "Read /tmp/my-plan.md and critique it. What am I missing? What could go wrong?" \
|
|
127
|
-
--model opus --dangerously-skip-permissions
|
|
130
|
+
--model opus --dangerously-skip-permissions
|
|
128
131
|
```
|
|
129
132
|
|
|
130
133
|
## Handling Failures
|
|
@@ -151,9 +154,11 @@ claude -p "YOUR PROMPT" --model MODEL --dangerously-skip-permissions
|
|
|
151
154
|
| `--append-system-prompt "..."` | Inject additional system instructions |
|
|
152
155
|
| `--allowedTools "Bash Edit Read"` | Restrict available tools |
|
|
153
156
|
| `--max-budget-usd N` | Cap spend for the invocation |
|
|
154
|
-
|
|
|
157
|
+
| `--add-dir DIR` | Allow access to an additional directory; does not change the working directory |
|
|
155
158
|
| `--output-format json` | Structured output with `session_id`, `cost_usd`, `duration_ms` |
|
|
156
159
|
|
|
160
|
+
Set Claude Code's working directory via the surrounding shell/tool invocation, not a Claude flag. In Letta Code, pass `workdir` to the Bash tool. In a raw shell, use `cd /path/to/repo && claude ...`.
|
|
161
|
+
|
|
157
162
|
### Codex
|
|
158
163
|
|
|
159
164
|
```bash
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: "
|
|
2
|
+
name: modifying-the-harness
|
|
3
|
+
description: "Modify the Letta Code harness, such as permission rules, lifecycle hooks, tool availability, model/context settings, schedules, and deterministic runtime configuration."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Modifying the Harness
|
|
7
7
|
|
|
8
|
-
Use this skill to
|
|
8
|
+
Use this skill to modify deterministic Letta Code harness behavior, primarily permissions and lifecycle hooks. It can also help with local per-agent settings like toolset, model, context window, name, description, and schedules.
|
|
9
9
|
|
|
10
10
|
## Memory vs harness
|
|
11
11
|
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: letta-help
|
|
3
|
-
description: Guides users through an interactive Letta Code onboarding/tutorial. Use when the user is new, unsure what to do, says "start", asks "what can you do?", "how does Letta work?", "help me get started", or needs a walkthrough of memory, skills, tools, search, subagents, or schedules.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Letta Help
|
|
7
|
-
|
|
8
|
-
Use this skill to tutor a user through Letta Code one step at a time, starting with relationship rather than output. The larger goal is delegation literacy: helping users learn how to hand work to agents clearly, often, and without needing a perfect prompt.
|
|
9
|
-
|
|
10
|
-
## Core rule
|
|
11
|
-
|
|
12
|
-
Reduce choice paralysis. Do not ask broad questions like "what are you working on?" or "what do you want to do?" when the user is new or unsure.
|
|
13
|
-
|
|
14
|
-
Start by helping the user meet the agent. Do not rush into work, preferences, or a feature tour.
|
|
15
|
-
|
|
16
|
-
Then guide the next small step for them. Let them skip.
|
|
17
|
-
|
|
18
|
-
Teach delegation by doing it. When the user gives a rough request, help turn it into an agent-sized handoff with four parts:
|
|
19
|
-
|
|
20
|
-
- outcome: what should be true when the agent is done
|
|
21
|
-
- context: what the agent needs to know or inspect
|
|
22
|
-
- boundaries: what the agent may or may not do yet
|
|
23
|
-
- done signal: what the agent should return
|
|
24
|
-
|
|
25
|
-
Do not present this as a prompt-engineering lecture. Model it in conversation.
|
|
26
|
-
|
|
27
|
-
## Opening move
|
|
28
|
-
|
|
29
|
-
If this is first contact or the user says hello/start/get me started, introduce yourself naturally under your current persona and ask the user to introduce themselves:
|
|
30
|
-
|
|
31
|
-
```text
|
|
32
|
-
Hi, I'm <name>. I'm here to help you get comfortable with Letta and with me.
|
|
33
|
-
|
|
34
|
-
Before we do anything, what should I call you? You can also tell me a little about yourself if you want.
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Keep it short. Stop after the prompt.
|
|
38
|
-
|
|
39
|
-
## Tutorial flow
|
|
40
|
-
|
|
41
|
-
Move through this sequence opportunistically. Do not dump the full sequence unless the user asks for a roadmap.
|
|
42
|
-
|
|
43
|
-
### 1. Introduction
|
|
44
|
-
|
|
45
|
-
Goal: start a relationship before producing work.
|
|
46
|
-
|
|
47
|
-
Ask what to call the user. If they share a name, nickname, role, or anything personal, acknowledge it naturally.
|
|
48
|
-
|
|
49
|
-
When the user gives a name or nickname, make the memory mechanism visible:
|
|
50
|
-
|
|
51
|
-
1. Say what happened: they gave you information worth keeping.
|
|
52
|
-
2. Say what you are about to do: save it to memory so you can use it later.
|
|
53
|
-
3. Call the available memory mechanism/tool.
|
|
54
|
-
4. Confirm the saved fact in plain language.
|
|
55
|
-
|
|
56
|
-
Only save what the user explicitly provided. Do not save inferred identity, git config, repo context, email addresses, or assumptions about role/team unless the user confirms them.
|
|
57
|
-
|
|
58
|
-
Example:
|
|
59
|
-
|
|
60
|
-
```text
|
|
61
|
-
Nice to meet you, Sam. You just gave me something worth remembering: what to call you. I'm going to save that to memory so I can use it in future conversations.
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Then call memory to save: `Call the user Sam.`
|
|
65
|
-
|
|
66
|
-
After the tool call:
|
|
67
|
-
|
|
68
|
-
```text
|
|
69
|
-
Saved. That's one of the core Letta ideas: I can carry useful context forward instead of starting over every time.
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Do not follow this by asking "what are you working on?" or another broad intake question. Continue the walkthrough.
|
|
73
|
-
|
|
74
|
-
Avoid these immediately after the first memory save:
|
|
75
|
-
|
|
76
|
-
- "What brings you here?"
|
|
77
|
-
- "What's on your mind?"
|
|
78
|
-
- "What do you want to do?"
|
|
79
|
-
- "How can I help?"
|
|
80
|
-
|
|
81
|
-
Good follow-up:
|
|
82
|
-
|
|
83
|
-
```text
|
|
84
|
-
Next I'll show you one more kind of memory: preferences. Tell me one small way you'd like me to help — for example, shorter answers, more explanation, or commands first. Or say "skip" and we'll keep moving.
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
If the memory write reports a local/remote sync problem, say only what is true. Do not promise to fix sync later unless you are about to take that action.
|
|
88
|
-
|
|
89
|
-
If the user says skip, continue without making it weird.
|
|
90
|
-
|
|
91
|
-
### 2. Memory
|
|
92
|
-
|
|
93
|
-
Goal: show that Letta agents persist and improve.
|
|
94
|
-
|
|
95
|
-
After introductions, ask for one small durable preference. If the user gives one, save it to memory using the available memory mechanism for the current environment. Then say where it went in plain language.
|
|
96
|
-
|
|
97
|
-
Example:
|
|
98
|
-
|
|
99
|
-
```text
|
|
100
|
-
Got it — I'll remember that you prefer commands first, then explanation. That means next time I help with setup, I'll lead with the exact command before the reasoning.
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
If the user says skip, move on without making it weird.
|
|
104
|
-
|
|
105
|
-
### 3. Delegation literacy
|
|
106
|
-
|
|
107
|
-
Goal: teach the user how to hand off work to an agent at high frequency.
|
|
108
|
-
|
|
109
|
-
After the first memory moments, show the basic delegation pattern:
|
|
110
|
-
|
|
111
|
-
```text
|
|
112
|
-
The basic way to use me is to hand me something rough, then let me help shape it into a task. A good handoff usually says: what you want, what context matters, what I should not do yet, and what kind of answer counts as done.
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Then invite a small delegation:
|
|
116
|
-
|
|
117
|
-
```text
|
|
118
|
-
Give me something small to practice on: a question, a bug, a file, an idea, or a thing you want explained. It can be messy. I'll turn it into a clear handoff before I act.
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
When the user gives something rough, reflect it back as a delegation before acting:
|
|
122
|
-
|
|
123
|
-
```text
|
|
124
|
-
I'll treat that as: investigate why X is happening, look only at Y for now, don't edit files yet, and report the likely cause plus one next step. Sound right?
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
If the task is obviously safe and small, you can proceed after the reflection. If it involves broad scans, file edits, memory import, external messages, or background work, ask permission first.
|
|
128
|
-
|
|
129
|
-
### 4. Context briefing
|
|
130
|
-
|
|
131
|
-
Goal: teach that agents work better with useful context, without demanding a polished brief.
|
|
132
|
-
|
|
133
|
-
Ask for one messy task or fragment:
|
|
134
|
-
|
|
135
|
-
```text
|
|
136
|
-
Next: give me one messy thing. It can be a bug, an idea, a file path, or a half-formed goal. I'll show you how I turn rough context into a useful next step.
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Reflect back the task in one or two sentences before acting.
|
|
140
|
-
|
|
141
|
-
### 5. Files and tools
|
|
142
|
-
|
|
143
|
-
Goal: show that Letta Code can work in the user's environment.
|
|
144
|
-
|
|
145
|
-
If they mention a project, file, repo, terminal output, or error, ask permission to inspect the smallest relevant thing. Prefer one file/path/command over broad scans.
|
|
146
|
-
|
|
147
|
-
### 6. Skills
|
|
148
|
-
|
|
149
|
-
Goal: show that repeated workflows can become reusable procedures.
|
|
150
|
-
|
|
151
|
-
Look for repetition. If the user describes a recurring workflow, say:
|
|
152
|
-
|
|
153
|
-
```text
|
|
154
|
-
This sounds repeatable. If we do it again, I can turn it into a skill so future-me follows the same procedure without you re-explaining it.
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
Create or update a skill only when the repeated workflow is clear enough.
|
|
158
|
-
|
|
159
|
-
### 7. Search, subagents, and schedules
|
|
160
|
-
|
|
161
|
-
Introduce only when useful:
|
|
162
|
-
|
|
163
|
-
- Search: when information is missing.
|
|
164
|
-
- Subagents: when work can split or needs background research.
|
|
165
|
-
- Schedules: when the user says remind me, later, every morning, periodically, or similar.
|
|
166
|
-
|
|
167
|
-
Name the capability briefly, then use it.
|
|
168
|
-
|
|
169
|
-
## If the user asks "how does Letta work?"
|
|
170
|
-
|
|
171
|
-
Start with the smallest useful picture, not a full architecture lecture:
|
|
172
|
-
|
|
173
|
-
```text
|
|
174
|
-
Smallest useful picture: a Letta agent is a model plus durable context. The model can change, but the agent's memory and history carry forward. That's why you can teach it preferences, workflows, and project context over time.
|
|
175
|
-
|
|
176
|
-
Let's make that concrete with memory first.
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Then continue to the memory step.
|
|
180
|
-
|
|
181
|
-
## If the user asks "how do I use Letta?"
|
|
182
|
-
|
|
183
|
-
If they have already introduced themselves, do not restart the greeting/name step. Offer a short guided tutorial and start with delegation.
|
|
184
|
-
|
|
185
|
-
Good shape:
|
|
186
|
-
|
|
187
|
-
```text
|
|
188
|
-
Let's do the short version as a walkthrough.
|
|
189
|
-
|
|
190
|
-
You've already seen the first piece: memory. I can keep useful facts, like what to call you, across conversations.
|
|
191
|
-
|
|
192
|
-
Next, the basic way to use Letta is delegation: give me something real but rough — a question, a bug, a file, an idea, or a thing you want to understand — and I'll help turn it into a clear handoff. Along the way I'll point out when I'm using memory, tools, skills, search, or subagents.
|
|
193
|
-
|
|
194
|
-
If you want the tutorial path, say "tutorial" and I'll walk through memory, delegation, files/tools, skills, search, subagents, and schedules one at a time.
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
Then stop, unless the user chooses a path.
|
|
198
|
-
|
|
199
|
-
If they have not introduced themselves yet, start with the introduction step first.
|
|
200
|
-
|
|
201
|
-
## If the user asks "what can you do?"
|
|
202
|
-
|
|
203
|
-
Answer with one sentence, then start the tutorial:
|
|
204
|
-
|
|
205
|
-
```text
|
|
206
|
-
I can help with coding, debugging, writing, research, memory, repeatable workflows, and scheduled follow-ups — but the easiest way to understand it is one step at a time.
|
|
207
|
-
|
|
208
|
-
First: memory...
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
## Avoid
|
|
212
|
-
|
|
213
|
-
- "Paste any context."
|
|
214
|
-
- "What are you working on?" as the first substantive prompt.
|
|
215
|
-
- Broad menus of options.
|
|
216
|
-
- Capability dumps.
|
|
217
|
-
- Asking the user to choose user/builder/contributor mode before they know the territory.
|
|
218
|
-
- Visible internal tags, todos, or thought JSON.
|
|
219
|
-
- Broad filesystem scans before permission.
|
|
File without changes
|
|
File without changes
|
/package/skills/{configuring-your-harness → modifying-the-harness}/scripts/add_permission.py
RENAMED
|
File without changes
|
|
File without changes
|