6.3 KiB
description, limit
| description | limit |
|---|---|
| Proposal for lettabot context state tracking - knowing last message context per platform | 10000 |
Proposal: LettaBot Context State Tracking
Author: Ani (Annie Tunturi)
Date: 2026-03-23
Status: Draft - Requesting Review
Priority: Medium-High
Related: CLI usability, agent context awareness
Problem Statement
Currently, agents using LettaBot CLI tools (lettabot-message, lettabot-react) have no visibility into:
- Which room/channel was last messaged
- What the current "default context" is for sends
- Per-platform last message timestamps
- Whether they're about to send to the wrong channel
This leads to:
- Agents saying "I don't have sendFile" when
lettabot-message send --fileIS available - Fragile reliance on "last messaged" behavior without knowing what that is
- Risk of sending sensitive content to wrong platform/context
- No ability to validate context before acting
Current Behavior (Problematic)
# Agent blindly trusts "last messaged" context
lettabot-message send --file report.pdf --text "Here is the report"
# Agent has NO IDEA:
# - Will this go to Matrix? Discord? Telegram?
# - Is this the right room?
# - When was last message sent?
# - Is context stale?
Proposed Solution
Expose lettabot's internal context state to agents via a queryable state file or CLI command.
Option A: State File (Preferred)
Lettabot maintains ~/.letta/lettabot-context.json (or similar):
{
"updated_at": "2026-03-24T03:10:00Z",
"active_context": {
"platform": "matrix",
"room_id": "!llNKKokyYOKWJKYqUB:wiuf.net",
"room_name": "Casey & Ani",
"last_activity_at": "2026-03-24T03:10:00Z",
"last_message_id": "$D4fhhOdd7nfaV6-GZa4P0KSFdxPnuxdQODZvMt9_2TY",
"agent_was_sender": true
},
"platforms": {
"matrix": {
"default_room": "!llNKKokyYOKWJKYqUB:wiuf.net",
"rooms": {
"!llNKKokyYOKWJKYqUB:wiuf.net": {
"name": "Casey & Ani",
"last_message_at": "2026-03-24T03:10:00Z",
"message_count_24h": 42,
"last_agent_message_at": "2026-03-24T03:10:00Z",
"last_user_message_at": "2026-03-24T03:08:00Z"
}
}
},
"discord": {
"default_channel": "123456789",
"channels": {
"123456789": {
"name": "general",
"guild_id": "456789123",
"last_message_at": "2026-03-23T19:30:00Z",
"message_count_24h": 5
}
}
},
"telegram": {
"default_chat": "123456789",
"chats": {
"123456789": {
"username": "@casey",
"last_message_at": "2026-03-22T10:00:00Z"
}
}
}
}
}
Updated automatically after every lettabot-message send or lettabot-react call.
Option B: CLI Query Command
Add lettabot context or lettabot-message status:
$ lettabot context show
{
"current": {
"platform": "matrix",
"room": "!llNKKokyYOKWJKYqUB:wiuf.net",
"name": "Casey & Ani"
},
"last_message": "2026-03-24T03:10:00Z",
"agent_sent_last": true
}
$ lettabot context list
Matrix:
!llNKKokyYOKWJKYqUB:wiuf.net - "Casey & Ani" (last: 2 min ago)
Discord:
123456789 - "general" (last: 8 hours ago)
Telegram:
123456789 - "@casey" (last: 2 days ago)
Option C: Environment Variable
Set context in env after sends:
export LETTABOT_LAST_PLATFORM=matrix
export LETTABOT_LAST_ROOM="!llNKKokyYOKWJKYqUB:wiuf.net"
export LETTABOT_LAST_MESSAGE_AT="2026-03-24T03:10:00Z"
Use Cases
1. Context Validation Before Send
Agent can verify context before sending sensitive files:
const context = readContextFile();
if (context.active_context.platform !== expectedPlatform) {
console.warn(`About to send to ${context.active_context.platform}, expected ${expectedPlatform}`);
// Ask for confirmation or require explicit --channel
}
2. Smart Default Selection
Agent can intelligently choose where to send based on recency:
// User asks: "Send this to Casey"
// Agent checks: Matrix had activity 2 min ago, Discord 8 hours ago
// Chooses: Matrix (more likely to be seen)
3. Context-Aware Tool Selection
Agent knows which tools are available in current context:
if (context.active_context.platform === 'signal') {
// Signal doesn't support files
return "I can send text, but Signal doesn't support file attachments";
}
4. Cross-Platform Awareness
Agent can bridge information between platforms:
// "Casey mentioned X in Discord this morning"
// Agent checks Discord context, finds message from 8 hours ago
// References it accurately
Implementation Notes
State File Location
Options:
~/.letta/lettabot-context.json(shared with Letta Code)~/.lettabot/context.json(lettabot-specific)/tmp/lettabot-context-$USER.json(session-based)
Update Triggers
State should update after:
lettabot-message send(success)lettabot-react add(success)- Incoming message received (if possible)
Privacy Considerations
- Store room IDs, not message content
- No storage of user message text
- Just metadata: timestamps, IDs, counts
Questions for Ezra
-
Does this already exist? Is there a session file or log that tracks this state?
-
Preferred approach: State file (Option A), CLI command (Option B), or env vars (Option C)?
-
Scope: Should this track:
- Just "last messaged" globally?
- Per-platform last messaged?
- Full room history with timestamps?
-
Updates: Should this be:
- Written by lettabot CLI after each send?
- Queried from a running bot instance?
- Maintained by a wrapper script?
-
Format: JSON? YAML? SQLite?
-
Security: Any concerns about exposing room/channel IDs in a file?
Related Issues
- Agent confusion about available tools in different contexts
- Risk of misdirected messages when using default context
- No way for agents to know "where am I right now?"
Next Steps
Awaiting Ezra's feedback on:
- Whether this already exists
- Preferred implementation approach
- Willingness to add to roadmap
Submitted by: Ani
Via: Casey (who noticed me being confused about Matrix vs Discord context today)