An interactive RLM (Recursive Language Model) agent built on DSPy
Project description
rlmy is pronounced "ar-leh-mee" — like the letters R-L-M out loud ("ar-el-em"), but let them slur together. Think "RLM-y."
What is this?
- An AI coding agent that runs in your terminal
- Uses DSPy's RLM framework — the LLM writes and executes Python code iteratively
- Connects to MCP servers (Slack, internal tools, etc.) as additional tools
- Maintains conversation state across turns (trajectory persistence)
- Supports cooperative interrupt (Ctrl+C pauses gracefully)
Key Features
- Iterative REPL: LLM writes code, sees output, writes more code — until it solves the problem
- MCP Integration: Connect any MCP-compatible tool server
- Filesystem Tools: Read, write, edit files with safety guards (read-before-write)
- Shell Access: Run shell commands with deny-list safety and approval system
- Trajectory Persistence: Resume sessions where you left off
- Conversation Continuity: Prior context injected into new turns
- Configurable Models: Use any DSPy-compatible LM (Anthropic, Bedrock, OpenAI, Groq, Ollama)
Prerequisites
- Valid LLM credentials (Anthropic API key, AWS profile for Bedrock, etc.)
- Python 3.12+ and Deno are installed automatically by the setup script
Installation
Recommended (installs Deno + uv + rlmy in one command):
curl -LsSf https://raw.githubusercontent.com/diego-lima/rlmy/main/setup_install.sh | bash
Alternative (if you already have Deno and uv):
uv tool install rlmy
Quick Start
rlmy
- First run asks which AI model to use (model selection wizard)
- Workspaces are created in
~/.config/rlmy/sandboxes/ - Ctrl+C pauses gracefully (doesn't lose work)
To skip the wizard (headless/CI):
export RLM_MAIN_MODEL='bedrock/us.anthropic.claude-sonnet-4-6'
export RLM_SUB_MODEL='bedrock/us.anthropic.claude-sonnet-4-6'
rlmy
Try It Out
If your credentials are set, run rlmy and type:
curl https://calmcode.io/static/data/pokemon.json straight into a variable and teach me something about it.
Watch it fetch the data, explore it with code, and teach you something you didn't know. This is the RLM loop in action: it'll iterate until it has a neat insight.
Configuration
- Priority: env vars > config file > wizard
- Config file:
~/.config/rlmy/config.toml - Supported model formats: any DSPy model string (e.g.,
bedrock/us.anthropic.claude-sonnet-4-6,bedrock/us.anthropic.claude-opus-4-6-v1)
MCP Tools (optional)
- Config location:
~/.config/rlmy/mcp_servers.json - The setup script creates an empty template
- Edit it to connect Slack, internal tools, or any MCP-compatible server
- Agent starts without MCP if config is empty (no crash)
CLI Options
--sandbox-root PATH: Override sandbox directory (default:~/.config/rlmy/sandboxes/)--cache-path PATH: Override workspace cache file
Architecture
- Built on DSPy's experimental RLM module
- InterruptableRLM: cooperative SIGINT + trajectory injection
- Sandboxed code execution via Deno + Pyodide (WASM)
- Tools are plain Python functions registered with DSPy
License
MIT
Status
- Early release — works well for the author, may have rough edges
- Feedback welcome via GitHub issues
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rlmy-0.1.3.tar.gz.
File metadata
- Download URL: rlmy-0.1.3.tar.gz
- Upload date:
- Size: 78.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b402958e30b5d7f22a521f69de9dafaabec6588702a16b0f0ba461069c17ee6d
|
|
| MD5 |
299141c5e2df832c542f2cbb1e5542ef
|
|
| BLAKE2b-256 |
c8c3bbffb4db60da659fcb8d13eae39e4426accaadc333a7220a8ebad79fe9b0
|
File details
Details for the file rlmy-0.1.3-py3-none-any.whl.
File metadata
- Download URL: rlmy-0.1.3-py3-none-any.whl
- Upload date:
- Size: 78.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adb3a6e13bb1fa3ae36041785980e84eab41b9a33b3498c29ee64b63b2dcde19
|
|
| MD5 |
332e5c3e1332feeab7089d60593b0570
|
|
| BLAKE2b-256 |
e5b9cebeaf7dbb9b999777a5d1e05d1af77eb644da36b62d363bb4bb7898206d
|