Skip to content

Latest commit

 

History

950 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReuleauxCoder

Reinventing the wheel, but only for those who prefer it non-circular.

A terminal-native AI coding agent with a FORGE-styled CLI, scoped subagents, approvals, sessions, MCP, skills, LSP, and a thin remote execution peer.

The CLI uses native terminal scrollback, Rich Markdown output and prompt_toolkit line editing. The independent React + Ink TUI lives in reuleauxcoder-tui/. Both frontends use the same JSON-RPC runtime for chat, slash commands and approvals.

Web tools use environment proxies by default; web.proxy can force a direct connection or a fixed HTTP/SOCKS5 proxy. See web tool networking.

Inspired by and started as a complete rewrite of CoreCoder.

中文

VS Code extension

Download reuleauxcoder-0.11.6.vsix and run Extensions: Install from VSIX in VS Code. In a Remote window, install it on the workspace host. The extension provides a right-side conversation, native diff approvals, editor context and file/image uploads, with Chinese/English UI and a bundled compatible core installer. See the extension guide for setup and requirements.

Install

Install globally (recommended)

Install pipx first, then install the release wheel globally:

pipx install https://github.com/RC-CHN/ReuleauxCoder/releases/download/v0.11.6/reuleauxcoder-0.11.6-py3-none-any.whl

Or use uv:

uv tool install https://github.com/RC-CHN/ReuleauxCoder/releases/download/v0.11.6/reuleauxcoder-0.11.6-py3-none-any.whl

The wheel includes the React TUI and its JavaScript dependencies. Installation does not require Node or npm. Three commands are available globally:

rcoder --version
rcoder       # TUI with Node >=22 in an interactive terminal; otherwise CLI
rcoder-cli   # Always use the linear CLI
rcoder-tui   # Require the TUI; report missing/old Node or non-terminal I/O

Automatic CLI fallback explains why Node is unavailable. --prompt, --server, --rpc-stdio and redirected input/output always use CLI/backend mode. A missing TUI bundle is an installation error with rebuild/reinstall instructions. The TUI starts its backend with the Python interpreter from the tool's own environment.

Run from source (for developers)

uv run rcoder only works inside the project directory. This is intended for development, not for end users.

uv sync
uv run rcoder-cli
# For the TUI, build the bundled resources once (requires Node >=22 and npm):
npm ci --prefix reuleauxcoder-tui
npm run bundle --prefix reuleauxcoder-tui
uv run rcoder

Quick Start

Create ~/.rcoder/config.yaml on the host where the core runs and enter your model credentials:

app:
  api_key: "your-api-key"
  model: "your-provider-model-id"

Then run rcoder config check and rcoder. Loading configuration does not create or rewrite files. The repository's config.yaml.example documents more settings.

Workspace-level config (optional)

For per-project overrides — such as different models, custom MCP servers, or approval rules — create .rcoder/config.yaml in your project root. This file is merged on top of the global config and is entirely optional.

# Only needed if you want project-specific overrides
mkdir -p .rcoder
cp config.yaml.example .rcoder/config.yaml   # or write your own

Use rcoder config inspect to inspect redacted settings and rcoder config check to validate them without starting an Agent. The read-only configuration API describes fields, inspects layers and checks files or unsaved buffers even when normal startup fails. Edit YAML through your editor or file tools; model connection tests are optional. Persistent changes take effect on the next core start.

React TUI

Paste a local image path into CLI or TUI to insert an [Image #1] attachment marker. /attach <path> remains available. Set support_modal: [text, image] on a vision model profile; the default is [text]. Images use compact 256 KiB previews and follow history; switching to a text model preserves saved references. See image input and retention for compression, user-turn retention and remote paths.

The independent React + Ink frontend lives in reuleauxcoder-tui/. It uses the Python runtime over JSON-RPC, with top-level slash menus, command panels, approvals and a persistent composer. Release-wheel users run rcoder or rcoder-tui with Node.js 22+. For frontend development:

npm --prefix reuleauxcoder-tui ci
npm --prefix reuleauxcoder-tui run build
node reuleauxcoder-tui/dist/cli.js

Use rcoder-tui --cwd /path/to/project to choose a workspace, or rcoder-cli for the linear CLI. See the frontend README for TUI keyboard controls and SSH backends.

Remote Bootstrap (Host/Peer)

The VS Code extension supports local and Remote workspaces with a right-side conversation, native editor diff approvals, editor context and clipboard/file uploads. It includes Chinese/English UI and can install a compatible core on the workspace host.

Configure remote relay in .rcoder/config.yaml on machine A:

remote_exec:
  enabled: true
  host_mode: true
  relay_bind: 127.0.0.1:8765
  bootstrap_access_secret: <long-random-secret>
  bootstrap_token_ttl_sec: 120
  peer_token_ttl_sec: 3600

Then start host mode with:

rcoder --server

Note: --server is still required. It enables server mode, but the relay now listens exactly on the configured relay_bind address.

After that, you can bootstrap a peer on machine B with:

RC_HOST="https://<HOST>" \
RC_BOOTSTRAP_SECRET='<your-bootstrap-secret>' \
sh -c 'curl -fsSL -H "X-RC-Bootstrap-Secret: ${RC_BOOTSTRAP_SECRET}" "${RC_HOST}/remote/bootstrap.sh" | sh'

The bootstrap access secret is checked over HTTPS before the server issues a short-lived one-time bootstrap token embedded into the returned script.

Note: the bootstrap script now includes TTY fallback handling. Even when executed via a pipe (curl | sh), it will try to attach interactive mode via /dev/tty; if no TTY is available, it automatically falls back to non-interactive mode and keeps the peer online.

Language Server Protocol (LSP)

ReuleauxCoder integrates with real language servers for code intelligence: go-to-definition, find-references, document-symbols, and on-save diagnostics.

Supported Languages

Language LSP Server Install
Python pyright-langserver (npx) auto-installed via npx
TypeScript / JavaScript TypeScript 7 native LSP; TypeScript 6 legacy adapter auto-selected (lsp.typescript_mode)
YAML yaml-language-server (npx) auto-installed via npx
Bash bash-language-server (npx) + shellcheck apt install shellcheck
Go gopls go install golang.org/x/tools/gopls@latest
C / C++ clangd apt install clangd
Rust rust-analyzer rustup component add rust-analyzer

npx-based servers (Python, TS/JS fallback, YAML, Bash) are installed on first use with npx -y. TypeScript mode is auto, native, or legacy: native uses TypeScript 7's tsc --lsp --stdio, while legacy uses typescript-language-server for TypeScript 6 workspaces. Go, C/C++, and Rust servers must be installed separately.

Active LSP Tools

The lsp tool provides read-only code intelligence:

  • goToDefinition — find where a symbol is defined
  • findReferences — find all references to a symbol across the codebase
  • documentSymbol — list all symbols (functions, classes, variables) in a file

The argument-free lsp_status tool reports configured languages, current transport states, and bounded availability/diagnostic counters without probing PATH or starting a server. Its single in-memory snapshot exposes only hashed workspace identities and typed state; launcher commands, paths, and stderr references are never included.

All LSP operations are read-only and do not require approval.

Commands

/help              Show help
/reset             Clear current in-memory conversation only
/new               Start a new conversation (auto-save previous)
/model             List model profiles and current active profile
/model <profile>   Switch the session main model profile
/model set-main <profile>  Persist the workspace main profile
/model set-sub <profile>   Persist the workspace subagent profile
/mode              Show available modes
/mode switch <n>   Switch the current session mode
/shell             Choose an execution shell by name, path and environment
/shell wsl <distribution>  Discover shells inside a Windows WSL distribution
/shell use <id|name|path>   Choose a discovered shell
/shell auto        Restore automatic shell selection
/skills            Show discovered skills
/skills reload     Reload skills from disk
/skills enable <n>   Enable one skill
/skills disable <n>  Disable one skill
/tokens            Show token usage
/goal              Manage a persistent goal (TUI panel or CLI controls)
/goal create <objective>  Start a goal with the configured budget (unlimited by default)
/goal pause        Let the current turn finish; disable automatic continuation
/goal resume       Resume the saved goal
/goal budget <tokens|none>  Set or remove the cumulative token limit
/compact           Compress conversation context
/save              Save session to disk
/session           List saved sessions (`/session <#|id|latest>` restores one)
/session all       Include sessions from every fingerprint
/session <#|id|latest>  Restore in the current process
/approval show     Show approval rules
/approval set ...  Update approval rules
/debug on|off      Toggle LLM debug trace
/mcp show          Show MCP server status
/mcp enable <s>    Enable one MCP server
/mcp disable <s>   Disable one MCP server
/agents              List background subagent jobs (`/jobs` is an alias)
/agents get <id>     Show one subagent job
/agents wait <id>    Wait for one subagent job
/agents message <id> <text>  Send input at the next safe child round
/agents resume <id> <text>   Resume a completed child transcript
/agents cancel <id>          Request cooperative cancellation
/agents stop <id>            Stop a child, escalating to hard kill if required
/agents cleanup <id>         Remove a retained isolated worktree
/config            Show effective config values and sources
/thinking          Show reasoning content from the last turn
/thinking inline   Toggle inline streaming of reasoning content
/thinking effort   Show current reasoning effort budget
/thinking effort <low|medium|high>  Set reasoning effort (session-scoped)
/quit              Exit

Mistyped slash commands (e.g. /thiking) are fuzzy-matched and suggest the closest known command if within edit distance ≤ 2.

Command Notes

  • /reset only clears the current in-memory conversation. It does not delete saved sessions.
  • /new starts a fresh conversation and saves the previous one first when session.auto_save is enabled.
  • /model lists configured profiles and routing. Session switches do not rewrite global defaults; use /model set-main or /model set-sub for persisted workspace defaults.
  • /shell selects the shell for new local commands in this runtime. Windows users can also choose a WSL distribution and its shell. Existing processes keep running with their original shell. See Shell selection.
  • /skills shows bundled, user and workspace skills; /skills reload rescans those sources; /skills enable|disable <name> persists skill state in workspace config. Workspace skills override user skills, which override bundled skills with the same name.
  • The core includes rcoder-config for configuring itself through ordinary file edits and read-only checks. Its field reference covers defaults, inheritance, reasoning/thinking, replay and provider limitations. No separate installation is needed in CLI, TUI or VS Code; disable it with /skills disable rcoder-config. Configuration file edits take effect on the next core start; skills reload is not configuration hot reload.
  • There are 17 bundled skills, including PowerPoint, Word, Excel, PDF, skill creation/installation, project guidance, review, simplification, tests, GitHub CI, UI acceptance, documentation, translation, prose editing and structured data. Instructions and resources are self-contained and written in English; replies follow the user's language. Office libraries and renderers are prepared only when needed, not installed as core dependencies.
  • /session shows a numbered, newest-first list for the current fingerprint. Its preview is the latest real user request, or the goal objective when no user message exists. Restore accepts the displayed number, a full ID, or latest; it saves the session being left when auto-save is enabled and replays the latest three user turns in the CLI. rcoder -r <id> restores directly on startup.
  • /goal manages one persistent objective per session. The backend continues it between turns, prioritizes user input, and preserves status and cumulative usage across compaction and restore. Budgets default to unlimited and count input minus cached input plus output. See Goal controls and accounting.
  • /approval set currently supports targets like tool:<name>, mcp, mcp:<server>, and mcp:<server>:<tool> with actions allow, warn, require_approval, or deny.
  • /mcp enable <server> and /mcp disable <server> update workspace config and try to apply the change at runtime.
  • /thinking shows reasoning content retained from the most recent turn. /thinking inline toggles inline streaming; the FORGE activity row advances as reasoning chunks arrive and remains in history. /thinking effort views or sets the session reasoning budget.
  • Subagents use bounded minimal, recent, or full parent-context projections and Codex-style asynchronous lifecycle controls: spawn returns immediately; the root can message, inspect, wait for activity, or interrupt a job. Children run in isolated processes, cannot recurse or edit the root Plan, and route scoped tools through the parent Tool Broker and approval path. Typed mailboxes, cumulative budgets, exact transcript checkpoints, cancellation epochs and late-result quarantine survive park/resume; request_guidance releases the worker slot and resumes the same job after parent/human guidance, including after session restore. Execute jobs retain automatic verification in the live runtime and may use isolated worktrees.

Automatic context compression strategies can be controlled independently with context.auto_snip, context.auto_summarize, and context.auto_collapse. All default to true. A model profile may override any switch under models.profiles.<name>.context; omitted profile fields inherit the global policy. Disabling an automatic strategy does not disable its manual /compact force <strategy> command.

The CLI uses terminal scrollback in every mode. Interactive line editing remains available during execution: additional prompts and deferred commands enter the backend queue, and approvals temporarily take over input while preserving the draft. Tab completes slash commands; Alt+Enter inserts a newline. F2 / Ctrl+O prints session, plan, job, startup and queued-input details; F4 prints retained tool arguments and full output; /thinking displays reasoning. Ctrl+C clears a draft or interrupts execution; with queued prompts, the first interrupt promotes them and a second requests a stop. Press it twice while idle, or use Ctrl+D / /quit, to save and exit. Live tool output is appended to scrollback; timeout/cancel preserves partial output. Write/edit approval uses a framed diff and refreshes if the saved file changes. Assistant output renders as Markdown, formatting complete blocks while streaming. Sessions persist an append-only JSONL ledger, canonical replay state with wire-affecting settings, exact hook-transformed request audits, usage observations, Plan/Progress state, validated semantic checkpoints, and tool artifacts. Resume preserves the committed prefix and appends environment/config changes at its tail. The first message creates a discoverable snapshot immediately. During generation, response text, visible reasoning, and tool output are checkpointed to the ledger about once per second (or sooner at 64 Ki characters); completed tool results are written immediately. After a crash, saved output reappears as Recovered … — session interrupted, without becoming a completed model response or rerunning tools. A crash can still lose the latest pending batch. Snapshot files are flushed before atomic replacement, with directory syncing on POSIX. Use rcoder -r <id> or /session <id> to restore a session. Unsent input drafts are not covered by backend session persistence.

CLI Options

rcoder [-c CONFIG] [-m MODEL] [-p PROMPT] [-r ID] [--server]
  • -c, --config: path to config.yaml
  • -m, --model: override model from config
  • -p, --prompt: one-shot prompt mode (non-interactive)
  • -r, --resume: resume a saved session by ID
  • --server: run as a dedicated remote relay host using remote_exec.relay_bind
  • -v, --version: show version

Development checks

uv run ruff check .
uv run pytest -q
(cd reuleauxcoder-agent && go test ./...)

The package supports Python 3.10 and newer; CI currently exercises Python 3.12. The real LSP matrix has its own opt-in integration suite.

License

AGPL-3.0-or-later

About

Reinventing the wheel, but only for those who prefer it non-circular.

Resources

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages