feat: expose memfs (memory filesystem) option in lettabot config and SDK session (#336)
Adds features.memfs config key that controls whether the Letta Code CLI receives --memfs or --no-memfs when creating/resuming SDK sessions. This enables lettabot users to opt into git-backed memory filesystem (context repositories) for persistent local memory sync. - Config types: memfs?: boolean on AgentConfig.features, LettaBotConfig.features, BotConfig - Bot wiring: baseSessionOptions() and createAgent() pass memfs to SDK when defined - Main wiring: YAML config takes precedence, LETTABOT_MEMFS env var as fallback - Legacy fix: conversations passthrough in single-agent normalization - Tests: 3 memfs wiring tests (true/false/undefined), 2 conversations passthrough tests - Docs: configuration.md section with known limitations, example YAML Fixes #335 Written by Cameron and Letta Code "The best way to predict the future is to implement it." -- David Heinemeier Hansson
This commit is contained in:
committed by
GitHub
parent
4e697001c0
commit
a3c944bd13
@@ -200,7 +200,7 @@ Each entry in `agents:` accepts:
|
||||
| `model` | string | No | Model for agent creation |
|
||||
| `conversations` | object | No | Conversation routing config (shared vs per-channel) |
|
||||
| `channels` | object | No | Channel configs (same schema as top-level `channels:`). At least one agent must have channels. |
|
||||
| `features` | object | No | Per-agent features (cron, heartbeat, maxToolCalls) |
|
||||
| `features` | object | No | Per-agent features (cron, heartbeat, memfs, maxToolCalls) |
|
||||
| `polling` | object | No | Per-agent polling config (Gmail, etc.) |
|
||||
| `integrations` | object | No | Per-agent integrations (Google, etc.) |
|
||||
|
||||
@@ -464,6 +464,39 @@ features:
|
||||
|
||||
Enable scheduled tasks. See [Cron Setup](./cron-setup.md).
|
||||
|
||||
### Memory Filesystem (memfs)
|
||||
|
||||
Memory filesystem (also known as **Context Repositories**) syncs your agent's memory blocks to local files in a git-backed directory. This enables:
|
||||
|
||||
- **Persistent local memory**: Memory blocks are synced to `~/.letta/agents/<agent-id>/memory/` as Markdown files
|
||||
- **Git versioning**: Every change to memory is automatically versioned with informative commit messages
|
||||
- **Direct editing**: Memory files can be edited with standard tools and synced back to the agent
|
||||
- **Multi-agent collaboration**: Subagents can work in git worktrees and merge changes back
|
||||
|
||||
```yaml
|
||||
features:
|
||||
memfs: true
|
||||
```
|
||||
|
||||
When `memfs` is enabled, the SDK passes `--memfs` to the Letta Code CLI on each session. When set to `false`, `--no-memfs` is passed to explicitly disable it. When omitted (default), the agent's existing memfs setting is left unchanged.
|
||||
|
||||
You can also enable memfs via environment variable (only `true` and `false` are recognized):
|
||||
|
||||
```bash
|
||||
LETTABOT_MEMFS=true npm start
|
||||
```
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|-------|------|---------|-------------|
|
||||
| `features.memfs` | boolean | _(undefined)_ | Enable/disable memory filesystem. `true` enables, `false` disables, omit to leave unchanged. |
|
||||
|
||||
#### Known Limitations
|
||||
|
||||
- **Headless conflict resolution** ([letta-ai/letta-code#808](https://github.com/letta-ai/letta-code/issues/808)): If memory filesystem sync conflicts exist, the CLI exits with code 1 in headless mode (which is how lettabot runs). There is currently no way to resolve conflicts programmatically. **Workaround**: Run the agent interactively first (`letta --agent <agent-id>`) to resolve conflicts, then restart lettabot.
|
||||
- **Windows paths** ([letta-ai/letta-code#914](https://github.com/letta-ai/letta-code/issues/914)): Path separator issues on Windows have been fixed in Letta Code, but ensure you're on the latest version.
|
||||
|
||||
For more details, see the [Letta Code memory documentation](https://docs.letta.com/letta-code/memory/) and the [Context Repositories blog post](https://www.letta.com/blog/context-repositories).
|
||||
|
||||
### No-Reply (Opt-Out)
|
||||
|
||||
The agent can choose not to respond to a message by sending exactly:
|
||||
|
||||
Reference in New Issue
Block a user