Claude-powered code review orchestrator that coordinates specialized review agents
Project description
Reldo
"The librarian has reviewed your code."
A Claude-powered code review orchestrator that coordinates specialized review agents.
Named after the Varrock Palace librarian in RuneScape who researches and checks things against ancient tomes.
Installation
# From PyPI
pip install reldo
# Or with uv
uv tool install reldo
Usage
As a Library
from reldo import Reldo, ReviewConfig
from pathlib import Path
# Load config from file
config = ReviewConfig.from_file(Path(".claude/reldo.json"))
reldo = Reldo(config=config)
# Run a review - single prompt argument
result = await reldo.review(
prompt="Review app/Models/User.php for backend conventions. Context: Added user registration."
)
print(result.text)
print(f"Tokens used: {result.total_tokens}")
As a CLI
# Basic review
reldo review --prompt "Review app/Models/User.php"
# With JSON output (for CI)
reldo review --prompt "Review $(git diff --name-only HEAD)" --json --exit-code
# With custom config
reldo review --prompt "..." --config .claude/reldo.json
Configuration
Create .claude/reldo.json:
{
"prompt": ".claude/reldo/orchestrator.md",
"allowed_tools": ["Read", "Glob", "Grep", "Bash", "Task"],
"mcp_servers": {
"my-server": {
"command": "node",
"args": ["./mcp-server.js"]
}
},
"agents": {
"backend-reviewer": {
"description": "Reviews PHP/Laravel code",
"prompt": ".claude/reldo/agents/backend-reviewer.md",
"tools": ["Read", "Glob", "Grep"]
},
"frontend-reviewer": {
"description": "Reviews Vue/TypeScript code",
"prompt": ".claude/reldo/agents/frontend-reviewer.md"
}
},
"model": "claude-sonnet-4-20250514",
"timeout_seconds": 300
}
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
prompt |
string | required | Path to orchestrator prompt file |
allowed_tools |
string[] | ["Read", "Glob", "Grep", "Bash", "Task"] |
Tools available to the orchestrator |
mcp_servers |
object | {} |
MCP server configurations |
agents |
object | {} |
Sub-agent definitions |
model |
string | "claude-sonnet-4-20250514" |
Claude model to use |
timeout_seconds |
int | 180 |
Maximum review duration |
cwd |
string | current directory | Working directory |
logging |
object | {"enabled": true, ...} |
Logging configuration |
Agent Definition
Each agent in the agents object has the following properties:
| Property | Type | Required | Description |
|---|---|---|---|
description |
string | yes | Description of when to use this agent |
prompt |
string | yes | Path to agent prompt file |
tools |
string[] | no | Tools available to this agent. If omitted, inherits all tools from the orchestrator |
model |
string | no | Model override ("sonnet", "opus", "haiku", or "inherit") |
Tool Inheritance
If you omit the tools property from an agent definition, it inherits all tools from the parent orchestrator, including any MCP server tools:
{
"allowed_tools": ["Read", "Glob", "Grep", "Bash", "Task"],
"mcp_servers": {
"laravel-boost": {
"command": "php",
"args": ["artisan", "boost:mcp"]
}
},
"agents": {
"full-access-reviewer": {
"description": "Has access to all orchestrator tools + MCP",
"prompt": ".claude/agents/full-reviewer.md"
},
"limited-reviewer": {
"description": "Only has read access",
"prompt": ".claude/agents/limited-reviewer.md",
"tools": ["Read", "Glob", "Grep"]
}
}
}
MCP Server Configuration
Reldo supports MCP (Model Context Protocol) servers for extended functionality:
{
"mcp_servers": {
"server-name": {
"command": "executable",
"args": ["arg1", "arg2"],
"env": {
"ENV_VAR": "value"
}
}
}
}
Variable Substitution
MCP server configurations support variable substitution:
${cwd}- Replaced with the working directory
{
"mcp_servers": {
"serena": {
"command": "uvx",
"args": ["serena", "start-mcp-server", "--project", "${cwd}"]
}
}
}
CLI Reference
reldo review --prompt "..." # Review prompt
--config PATH # Config file (default: .claude/reldo.json)
--cwd PATH # Working directory
--json # Output as JSON
--verbose # Verbose logging
--no-log # Disable session logging
--exit-code # Exit 1 if review fails (for CI)
Documentation
License
MIT
Project details
Release history Release notifications | RSS feed
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 reldo-0.2.1.tar.gz.
File metadata
- Download URL: reldo-0.2.1.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbc7c7b2255a298bacb8cd27e336d9f4dd9a0441f9d494166dd6d3f860c033b2
|
|
| MD5 |
b1f1c6489ce69698c632bcb332b2bf8c
|
|
| BLAKE2b-256 |
3d4677c991356ae8d8323d81fb4e15cf4042c1ba48cb9a0bea463f7e94c00e16
|
Provenance
The following attestation bundles were made for reldo-0.2.1.tar.gz:
Publisher:
publish.yml on RasmusGodske/reldo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reldo-0.2.1.tar.gz -
Subject digest:
cbc7c7b2255a298bacb8cd27e336d9f4dd9a0441f9d494166dd6d3f860c033b2 - Sigstore transparency entry: 835752899
- Sigstore integration time:
-
Permalink:
RasmusGodske/reldo@134d6ecdb50f105135c2ac7c7008f0bc665a09dc -
Branch / Tag:
refs/heads/main - Owner: https://github.com/RasmusGodske
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@134d6ecdb50f105135c2ac7c7008f0bc665a09dc -
Trigger Event:
push
-
Statement type:
File details
Details for the file reldo-0.2.1-py3-none-any.whl.
File metadata
- Download URL: reldo-0.2.1-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6368113d2d0baccab203982e01489128698053a37cd56ad9062be1e2ff6f905b
|
|
| MD5 |
7e0a0833d71433b434711bfe2ca0f9fa
|
|
| BLAKE2b-256 |
7890c2b7bc935581a8b9d33037106723b8e2850695191e87d8d5e506d8035024
|
Provenance
The following attestation bundles were made for reldo-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on RasmusGodske/reldo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reldo-0.2.1-py3-none-any.whl -
Subject digest:
6368113d2d0baccab203982e01489128698053a37cd56ad9062be1e2ff6f905b - Sigstore transparency entry: 835752904
- Sigstore integration time:
-
Permalink:
RasmusGodske/reldo@134d6ecdb50f105135c2ac7c7008f0bc665a09dc -
Branch / Tag:
refs/heads/main - Owner: https://github.com/RasmusGodske
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@134d6ecdb50f105135c2ac7c7008f0bc665a09dc -
Trigger Event:
push
-
Statement type: