Marlo investigates incidents, runs code, reads your runbooks — and learns from every session. All you need is Python and an API key.
Each session leaves a trace. Periodic dreams distill those traces into durable knowledge. The agent gets better without retraining.
Marlo runs a task in an isolated container, reading from memory and writing new findings.
Durable lessons — tool quirks, incident patterns, team preferences — persist across sessions.
An offline pass merges duplicates, surfaces patterns, and drops noise. Produces a new, cleaner store.
Review the dream output, diff against the old store, and promote when you're satisfied.
Managed Agents collapses what used to take custom infrastructure into four building blocks.
Versioned recipe — model, system prompt, tools, MCP servers. Created once, updated in place. agents.create()
Container template with packages, networking rules, and system config. One per profile. environments.create()
One concrete run. Agent × environment × memory stores. Ephemeral container, durable event log. sessions.create()
Persistent text-file directory mounted at /mnt/memory/. Outlives any session. The agent reads and writes it like a filesystem.
Marlo replaces custom infrastructure with API calls.
| Capability | Before (custom infra) | Now (Managed Agents) |
|---|---|---|
| Sandboxed execution | Modal sandbox per task, custom lifecycle | Session — isolated container, one API call |
| Dev environment | Baked VM images, 30-min refresh cron | Environment config with packages + apt |
| Agent loop | OpenCode or custom harness inside sandbox | The agent itself — Claude + toolset |
| Session state | Modal Dicts for locks + metadata | First-class session resources |
| Message routing | Modal Queues from Slack/web/Chrome | events.send() / events.stream() |
| Persistent learning | Custom DB + retrieval pipeline | Memory store — file-system interface, versioned |
All you need is Python 3.10+ and an API key. No Docker, no Kubernetes, no infrastructure.
$ pip install -e . $ cp .env.example .env # paste your ANTHROPIC_API_KEY
$ python -m marlo.bootstrap.create_agent AGENT_ID=agent_01Xau... (v1) $ python -m marlo.bootstrap.create_environment ENVIRONMENT_ID=env_01Fv... $ python -m marlo.bootstrap.create_memory_store MEMORY_STORE_ID=memstore_01BG... $ python -m marlo.bootstrap.seed_memory seed /preferences/communication.md seed /preferences/code-style.md seed /preferences/safety.md
$ marlo "investigate the 502 spike on payments-svc" # Works from anywhere — laptop, server, CI. # Marlo reads memory, does the work, # writes what it learned, and shuts down.
$ python -m marlo.dream dreaming over 12 sessions... $ python -m marlo.review_dream_output drm_... # Review the diff, then promote: MEMORY_STORE_ID=memstore_new_abc123
On the internal network? console.marlo.run
pip install, bootstrap, then just marlo "your task" from anywhere.