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)
  • 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.

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
  • 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

rlmy-0.1.3.tar.gz (78.0 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.3-py3-none-any.whl (78.3 kB view details)

Uploaded Python 3

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

Hashes for rlmy-0.1.3.tar.gz
Algorithm Hash digest
SHA256 b402958e30b5d7f22a521f69de9dafaabec6588702a16b0f0ba461069c17ee6d
MD5 299141c5e2df832c542f2cbb1e5542ef
BLAKE2b-256 c8c3bbffb4db60da659fcb8d13eae39e4426accaadc333a7220a8ebad79fe9b0

See more details on using hashes here.

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

Hashes for rlmy-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 adb3a6e13bb1fa3ae36041785980e84eab41b9a33b3498c29ee64b63b2dcde19
MD5 332e5c3e1332feeab7089d60593b0570
BLAKE2b-256 e5b9cebeaf7dbb9b999777a5d1e05d1af77eb644da36b62d363bb4bb7898206d

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