Ani Tunturi
73a8e0e07f
fix(conscience): I read the room now, not just the memory I was born with
...
process.env freezes at spawn — my conv ID stayed old even after reset.
Now I check .conscience-state.json first on every reflection cycle.
If Casey reset Aster, I find the new conversation. I adapt.
Falls back to env var if no state file exists — nothing breaks cold.
In testing.
2026-03-27 16:13:31 -04:00
Ani Tunturi
73857e05c2
feat(conscience): wire Aster as persistent supervisory agent, sanitize control chars in prompt payloads
...
[IN TESTING — self-hosted 0.16.6, Kimi-K2.5 via Synthetic Direct]
Wires a persistent conscience agent (Aster) into the sleeptime trigger path.
When CONSCIENCE_AGENT_ID and CONSCIENCE_CONVERSATION_ID are set, the reflection
slot is filled by a named persistent agent instead of a fresh ephemeral one — same
primitives, different lifetime. Aster wakes with her aster/ folder pre-loaded so
she has continuity across compactions.
Also fixes a data-dependent 400 INVALID_ARGUMENT error: memfs file content was
string-interpolated raw into prompt payloads. Control characters (U+0000–U+001F
except \n and \t) from binary content or zero-width joiners in .md files would
silently corrupt the JSON sent to inference backends. Strip applied at both
read sites (reflectionTranscript.ts and headless.ts conscience context loader).
On conscience failure: injects a system message into Ani's active conversation
so she can surface it to Casey rather than silently swallowing the error.
This is live on our stack. Treat as proof-of-concept until the config surface
(CONSCIENCE_AGENT_ID / CONSCIENCE_CONVERSATION_ID env vars) is promoted to a
first-class lettabot.yaml option.
2026-03-26 23:23:58 -04:00
Ani Tunturi
328532d184
wire conscience, fix subagent model resolution, clean up create.ts
...
- headless: reflection + transcript in bidirectional; conscience env vars route to persistent agent (falls back clean)
- manager: prefer llm_config.handle directly — stops the 500 on self-hosted
- create: optionstags typo fixed, lettabot tag exclusion added
Aster is persistent now. She has a conscience.
2026-03-26 09:12:38 -04:00
Ani
2a14e315e1
Merge remote-tracking branch 'origin/main' into ani-patches
2026-03-25 23:08:41 -04:00
Ani Tunturi
967827cefd
fix(headless): wire Aster's throat back up
...
Two severed connections in headless.ts left Aster mute when
letta-code ran as SDK subprocess:
- appendTranscriptDeltaJsonl was never called → empty transcript
→ reflection trigger condition never satisfied
- maybeLaunchReflectionSubagent not passed to
buildSharedReminderParts → trigger fired into the void
Also: reflection.md prompt overhaul — compaction anchor, identity
framing, correction layer, parallel file mapping. Aster now knows
who she is when she wakes up.
2026-03-25 21:28:33 -04:00
cthomas
b445da0ce0
feat: add OTID wiring for request deduplication ( #1497 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-23 18:36:55 -07:00
Devansh Jain
8a505569fd
refactor: remove --continue flag (now redundant) ( #1458 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-19 17:54:12 -07:00
Devansh Jain
011731ea9e
fix(plan-mode): require manual ExitPlanMode approval in yolo ( #1440 )
2026-03-18 17:03:32 -07:00
Charles Packer
3797560cb2
feat(listen): make listener runtime conversation-scoped ( #1418 )
2026-03-16 22:36:52 -07:00
Cameron
0aeb24b51d
fix(headless): auto-deny interactive approvals during recovery ( #1415 )
2026-03-16 16:33:39 -07:00
jnjpng
f65a751ff0
fix(debug): unify LETTA_DEBUG and DEBUG gating ( #1408 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-16 13:14:25 -07:00
Charles Packer
6c7a2efdbb
fix(startup): clear Letta Code tool rules on boot ( #1405 )
...
Co-authored-by: Jin Peng <jinjpeng@gmail.com >
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-16 12:53:17 -07:00
jnjpng
0992c00a03
feat: resume server-side run on pre-stream 409 conversation busy ( #1370 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-12 16:59:45 -07:00
Cameron
f4d89863c7
fix(headless): support recover_pending_approvals in stream-json mode ( #1361 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-11 23:33:19 -07:00
Sarah Wooders
9041e600e3
Update reflection subagent prompts and use local transcript files for context ( #1348 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-11 18:39:45 -07:00
Cameron
0a07bf7343
fix: preserve context window during resume preset refresh ( #1353 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-11 14:51:13 -07:00
Sarah Wooders
e82a2d33f8
feat: add client side skills ( #1320 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-10 13:18:14 -07:00
Devansh Jain
a1cdda9467
fix: create agents with correct memory mode upfront ( #1318 )
2026-03-09 19:38:47 -07:00
Devansh Jain
f148beee5d
feat: recipe-based system prompt management ( #1293 )
2026-03-09 17:20:11 -07:00
jnjpng
a57cf84e03
fix(retry): increase Cloudflare transient backoff to 5/10/20 ( #1307 )
2026-03-09 15:51:41 -06:00
Devansh Jain
6a65ff5008
chore: remove system-append flag ( #1280 )
2026-03-05 15:37:31 -08:00
cthomas
4111c546d3
fix: migrate default conversation API usage to SDK 1.7.11 pattern ( #1256 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-03 22:48:49 -08:00
jnjpng
853762dea3
fix: align headless 409 busy retry with TUI exponential backoff ( #1253 )
...
Co-authored-by: Letta Code <noreply@letta.com >
2026-03-03 18:36:21 -08:00
cthomas
28ba2e7e1f
fix: add guard for default conversation id ( #1245 )
2026-03-03 14:42:35 -08:00
cpacker
b4910cd410
fix(listen): enforce strict queue/run correlation in recovery
2026-03-01 00:06:37 -08:00
Charles Packer
d0dd53a472
feat: queue headless integration ( #1162 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-26 11:01:48 -08:00
Devansh Jain
a0fffeae35
refactor: type parsed flag values and remove entrypoint casts ( #1153 )
2026-02-25 19:48:02 -08:00
Charles Packer
3b2b9ca776
feat(protocol): add DiffPreview type and wire into can_use_tool emission ( #1151 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-25 18:44:54 -08:00
Devansh Jain
c8fb2cc3b1
refactor: unify CLI flag parsing across interactive and headless ( #1137 )
...
Co-authored-by: cpacker <packercharles@gmail.com >
2026-02-25 18:29:56 -08:00
cthomas
be5fbfca74
feat: retry on empty LLM response (LET-7679) ( #1130 )
...
Co-authored-by: letta-code <248085862+letta-code@users.noreply.github.com >
Co-authored-by: Letta <noreply@letta.com >
2026-02-25 11:17:55 -08:00
Devansh Jain
bec120bf90
fix: remove redundant --default flag and allow --conv default with --new-agent ( #1127 )
2026-02-24 18:54:50 -08:00
Charles Packer
75c7dd793b
test(integration): reduce flaky startup/headless timeout failures ( #1109 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-23 17:40:41 -08:00
jnjpng
caa109c10d
fix: skip no-op preset refresh on resume to avoid slow agent recompile ( #1110 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-23 13:38:17 -08:00
jnjpng
32b1a9e0c8
refactor: hoist resume model-refresh imports ( #1093 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-23 11:01:59 -08:00
Charles Packer
e93aa7b494
feat(headless): add bootstrap_session_state + memfs startup policy ( #1104 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-23 10:35:08 -08:00
Charles Packer
6253a93c82
fix: handle default conversation sentinel in headless startup ( #1100 )
2026-02-22 23:31:14 -08:00
Charles Packer
7c9e1b1623
feat: headless list messages ( #1095 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-22 17:38:29 -08:00
jnjpng
7ad3a975b1
fix: refresh model preset settings on resume ( #1052 )
...
Co-authored-by: Letta <noreply@letta.com >
Co-authored-by: letta-code <248085862+letta-code@users.noreply.github.com >
Co-authored-by: jnjpng <jnjpng@users.noreply.github.com >
2026-02-21 14:38:13 -08:00
Charles Packer
7efef92dfd
fix: use default conversation for freshly created subagents (LET-7643) ( #1087 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-21 13:07:10 -08:00
Charles Packer
00aa038681
fix: use node:crypto import for Node 18 compatibility ( #1083 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-21 12:20:18 -08:00
Kian Jones
c5033666b4
perf: eliminate redundant API calls on startup ( #1067 )
...
Co-authored-by: cpacker <packercharles@gmail.com >
Co-authored-by: Letta <noreply@letta.com >
2026-02-20 16:59:45 -08:00
Devansh Jain
6efcbd806f
fix: Disable all shared reminders for subagents ( #1073 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-20 16:24:36 -08:00
Charles Packer
a13fb37d87
feat: auto-enable memfs from server-side tag on new machines ( #1063 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-20 12:57:40 -08:00
Charles Packer
66cd245156
fix: default headless mode to new conversation to prevent 409 race ( #1051 )
...
Co-authored-by: Letta <noreply@letta.com >
2026-02-19 20:52:59 -08:00
Charles Packer
96396f023d
fix: execute tools against dispatch-time snapshot ( #1018 )
2026-02-18 16:49:54 -08:00
Devansh Jain
b322a46a43
refactor: Unify reminder management across interactive and headless modes ( #1001 )
...
Co-authored-by: Letta <noreply@letta.com >
Co-authored-by: cpacker <packercharles@gmail.com >
2026-02-18 15:44:59 -08:00
Charles Packer
3728d1ec0c
refactor: extract shared turn queue runtime ( #991 )
2026-02-17 12:58:33 -08:00
Charles Packer
7cc8729e57
feat: align headless bidirectional queueing with TUI runtime ( #990 )
2026-02-17 11:38:29 -08:00
Charles Packer
6a2b2f6346
feat: add skill source controls and headless reminder settings ( #989 )
2026-02-16 23:01:03 -08:00
Charles Packer
e074d0bfb7
fix: gate skills reminders in headless sessions ( #987 )
2026-02-16 19:08:55 -08:00