Skip to main content

An interactive RLM (Recursive Language Model) agent built on DSPy

Project description

hero-graphic

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, including REPL variables)
  • 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.)
  • Any of these work thanks to LiteLLM:
export OPENAI_API_KEY="sk-proj-..."

export GROQ_API_KEY="gsk_..."

export GEMINI_API_KEY="AQ.Ab8R..."

export AWS_ACCESS_KEY="..."
export AWS_SECRET="..."

Installation

Recommended (installs uv + rlmy in one command):

curl -LsSf https://raw.githubusercontent.com/diego-lima/rlmy/main/setup_install.sh | bash

Alternative (if you already have 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:

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.

demo-rlmy-pokemon

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 (refer to mcp_servers.example.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

Disclaimer

This is an experimental tool that I vibe-coded over time for my own needs.

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

rlmy-0.1.4.tar.gz (78.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rlmy-0.1.4-py3-none-any.whl (78.7 kB view details)

Uploaded Python 3

File details

Details for the file rlmy-0.1.4.tar.gz.

File metadata

  • Download URL: rlmy-0.1.4.tar.gz
  • Upload date:
  • Size: 78.4 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

Hashes for rlmy-0.1.4.tar.gz
Algorithm Hash digest
SHA256 6fd1d221c0e32d281d2c968dfb4dc290b47721584478d0422d4bd584c8184001
MD5 9659843e63fb26bf1aaeee906677943f
BLAKE2b-256 88f204b16a0a7e4589fb599b8753bd23d52833ce7db79543e4ccd4cd67a2e802

See more details on using hashes here.

File details

Details for the file rlmy-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: rlmy-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 78.7 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

Hashes for rlmy-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 73f5454d493b358f2850ef76a044e6bd75515c413c3d0ec4275f4b5e484ecd26
MD5 ef6de4647b53ed2114d4a8d24fcc4812
BLAKE2b-256 c11550d1507615e6bef320a0b9c41cdcd02e534978f1af7064561dbcea85b468

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page