RLM Skill
The RLM (Recursive Language Model) skill provides computational analysis via code execution. It writes and runs Python code in a sandboxed interpreter to answer questions that require computation, aggregation, or data traversal.
create_skill(db_path?, config?)
| Parameter | Default | Description |
|---|---|---|
db_path |
None |
Path to LanceDB database. Falls back to HAIKU_RAG_DB env var, then config default. |
config |
None |
AppConfig instance. If None, uses get_config(). |
Tools
| Tool | Purpose |
|---|---|
analyze(question, document?, filter?) |
Answer analytical questions using code execution |
Parameters:
question— The analytical question to answer.document— Optional document ID or title to pre-load for analysis.filter— Optional SQL WHERE clause to filter documents.
State
The skill manages an RLMState under the "rlm" namespace:
class RLMState(BaseModel):
analyses: list[AnalysisEntry] = []
class AnalysisEntry(BaseModel):
question: str
answer: str
program: str | None = None
Each analyze call appends an AnalysisEntry with the question, answer, and executed program.
Usage with RAG Skill
Combine both skills to give the agent full RAG + analysis capabilities:
from haiku.rag.skills.rag import create_skill as create_rag_skill
from haiku.rag.skills.rlm import create_skill as create_rlm_skill
from haiku.skills.agent import SkillToolset
from haiku.skills.prompts import build_system_prompt
from pydantic_ai import Agent
rag = create_rag_skill(db_path=db_path)
rlm = create_rlm_skill(db_path=db_path)
toolset = SkillToolset(skills=[rag, rlm])
agent = Agent(
"openai:gpt-4o",
instructions=build_system_prompt(toolset.skill_catalog),
toolsets=[toolset],
)
See the RLM Agent documentation for details on how the underlying agent works.