DeadMeme5441/arrodes

A coding agent built around a persistent Clojure REPL. Self-contained macOS and Linux binaries.

Clojure

10

54 commits

updated Oct 5, 2026

See the code

See what people are saying

README

Arrodes

Arrodes is a terminal coding agent built around a persistent Clojure REPL. The agent composes ordinary functions and retains native values between steps, while your conversation, results, and project configuration stay outside the repository.

Arrodes is open source under the MIT license. It runs trusted local code with your permissions; it is not a sandbox. See the security policy.

Install

Install the latest release on macOS or glibc-based Linux:

curl -fsSL https://raw.githubusercontent.com/DeadMeme5441/arrodes/main/install.sh | sh

The installer detects your OS and architecture, verifies the SHA-256 checksum, and installs to ~/.local/bin/arrodes. No sudo, language runtimes, or package managers required.

If ~/.local/bin is not on your PATH, the installer prints the command to add it. Then run arrodes inside a project to begin setup.

Prefer to inspect scripts before running them? Read the installer, or use the manual downloads below.

Update

arrodes update --check
arrodes update
arrodes update --version 0.1.7

The packaged executable checks published stable releases, verifies the selected asset against its SHA-256 metadata and checksum file, and atomically replaces itself. Failed downloads leave the installed executable unchanged. Restart Arrodes afterward; the updater never opens or modifies your settings, credentials or sessions. Default updates never downgrade. Selecting an older version is explicit and does not roll back session data; check the format contract first. Source checkouts do not replace their Bun executable: update the checkout instead.

Manual download

Download the executable for your system and its matching .sha256 file from Releases.

SystemExecutable
macOS Apple siliconarrodes-darwin-arm64
macOS Intelarrodes-darwin-x64
Linux arm64, glibcarrodes-linux-arm64
Linux x64, glibcarrodes-linux-x64

The executable is self-contained. End users do not need to install a language runtime or package manager.

Windows support is experimental and is not included in this release.

macOS

Verify before renaming or moving the file:

shasum -a 256 -c arrodes-darwin-arm64.sha256
chmod +x arrodes-darwin-arm64
mkdir -p ~/.local/bin
mv arrodes-darwin-arm64 ~/.local/bin/arrodes

Use the x64 filename on an Intel Mac. Ensure ~/.local/bin is on PATH.

The macOS binaries are not Developer ID signed or notarized. After verifying the checksum, the first launch may require System Settings → Privacy & Security → Open Anyway. Only approve an artifact obtained from the release you trust.

Linux

sha256sum -c arrodes-linux-x64.sha256
chmod +x arrodes-linux-x64
mkdir -p ~/.local/bin
mv arrodes-linux-x64 ~/.local/bin/arrodes

Use the arm64 filename on arm64. The preview targets glibc-based Linux systems.

Confirm the install:

arrodes --version

First run

Open a repository and start Arrodes:

cd /path/to/project
arrodes

On first run, the Providers browser opens. Connect an account, browse its models, choose a supported reasoning level, and select Make default for new conversations. Arrodes then asks about project trust when needed and opens your first conversation. You can connect several accounts; signing in never changes an existing conversation's model.

Return with /providers (also /setup or /login). Connected providers appear first, with their authentication method and connection status. Enter manages the selected provider; F5 checks its status. Esc cancels an active sign-in or returns to chat.

/models opens the model browser: providers on the left, models on the right, and details below. Tab switches between provider and model navigation, arrows select, and typing filters models. Change provider also works in narrow terminals. F5 discovers models from the selected provider. Enter chooses reasoning and then:

  • Use in this conversation — preserves history and live REPL definitions.
  • Make default for new conversations — saves defaults and applies them to the current conversation; other saved conversations remain unchanged.

OAuth can open a browser or show a URL for manual completion. API keys and pasted authorization codes are masked and excluded from conversation drafts and history. Press Esc to cancel a setup screen without exiting; run /setup or /login later to continue.

Codex supports ChatGPT sign-in. Anthropic access uses a Console API key or a supported cloud provider; Claude.ai subscription OAuth is not supported. GitHub Copilot login is not included. Each provider's account terms and data practices apply.

Existing valid defaults skip setup. Launch selections take precedence for a new session:

arrodes --provider codex-backend --model MODEL_ID --thinking high

Use /models, /refresh-models, and /thinking to change the current session from the interface.

Daily use

Launch in the repository you want Arrodes to work on, then describe the change or question in the composer. A one-line starting prompt can also be supplied at launch:

arrodes "Explain the failing command, fix the cause, and verify the result."

Arrodes keeps one live evaluator per session. Function calls appear compactly in the conversation; select a row to inspect its summary, output, native value, or evaluation source. Pending follow-ups can be edited or removed before delivery.

Session agents (development branch)

On feature/session-agents, the model can call agents/start! inside the same persistent REPL to start an independently evaluated child session. Children and their parent exchange addressed messages, inspect operation-specific outcomes, and continue work without turning function jobs into agents. /agents opens a team browser for navigation, messages, results and explicit cancel/stop/resume; the ordinary composer retains its unsent text across navigation. Children share the working checkout and process permissions, not the parent's live REPL bindings. Foreground cancellation does not cancel accepted jobs or children. See the agent/session contract. Current schema-6 stores reopen directly; supported schema-3/4/5 layouts upgrade transactionally after a retained backup. Unknown/newer, malformed and foreign stores are rejected intact, not reset. See compatibility for supported layouts and recovery.

Keys

ActionKey
Send while idle; steer while runningEnter
Insert a newlineShift+Enter or Ctrl+J
Queue a follow-upCtrl+Q
Close a panel; otherwise request cancellationEsc
SessionsF2
CommandsF3 or Ctrl+P
Agent roster (development branch)F4
Move to the next paneF6
Compose a message in /agents (development branch)F7
Inspect messages in /agents (development branch)F8
Attach a project file@
Discover commands/
Scroll without following outputPgUp / PgDn
Inspect / expand a selected conversation rowEnter / Space
Follow the latest outputEnd
Inspector tabs1 Summary, 2 Output, 3 Value, 4 Code
Copy selected text; otherwise stop workCtrl+C
ExitCtrl+D

Commands

CommandPurpose
/newCreate a session
/sessionsSwitch sessions
/historyInspect history and create a branch
/refreshReconcile recorded session state without repeating a mutation
/jobsInspect and cancel background function jobs; read output and native results
/agentsBrowse and control the agent team (development branch)
/parentReturn from a child conversation (development branch)
/pendingEdit or drop queued input
/attach, /attachmentsAdd or remove project-file context
/providers, /setup, /loginManage provider connections and sign-in
/models, /refresh-models, /thinkingSelect or refresh model settings
/renameRename the current session
/continueContinue from the current conversation
/compactCompact model context without deleting history
/usageInspect measured cache tokens and active-path estimated spend
/evalEvaluate trusted Clojure input in the live session
/reloadReset the evaluator and reload resources; live definitions are lost
/reconnectRestart the owned core without repeating an interrupted mutation
/copyCopy the visible conversation
/exportWrite a local HTML export
/reasoningShow or hide reasoning
/expand, /collapseExpand or collapse recorded activity
/deletePermanently delete the current session after confirmation
/helpShow keyboard help
/quitExit Arrodes

Prefix a message with // to send a literal leading slash.

Sessions and results

Sessions are durable and can be reopened through /sessions or directly:

arrodes --session SESSION_ID

Conversation history, session configuration, stored artifacts, and supported retained values survive restart. Arbitrary live definitions, JVM objects, and live-only results do not. Branching changes conversation history; it does not undo edits, commands, or other filesystem effects. See Sessions and results.

For automation and integrations, the only headless terminal mode is:

arrodes --rpc

It serves the versioned JSON Lines API documented in the RPC protocol reference.

State, privacy, and trust

Application home resolves in this order: --home, ARRODES_HOME, then ~/.arrodes.

~/.arrodes/
  config/
    settings.edn
    keybindings.edn
    trust.edn
  auth/
  skills/
  extensions/
  prompts/
  themes/
  packages/
  projects/
    <readable-name>-<sha256-of-real-worktree-root>/
      project.edn
      settings.edn
      data/
      skills/ extensions/ prompts/ themes/ packages/
  cache/
    models/ jna/ bun/ opentui/
  runtime/
    <version>-<platform>-<arch>-<payload-digest>/

The project identity is the real Git worktree root, or the launch directory outside Git. Subdirectories and symlink aliases share a project bucket; separate worktrees do not. Arrodes does not create .arrodes, instructions, or ignore-file changes in the repository. Use project.info over RPC to discover the exact external directory.

Each project data store has one live owner. Different projects can run concurrently; a second process opening the same store is rejected. Use --data-dir only when deliberately selecting another store.

Trust allows project instructions and executable resources to load; it is not an operating-system sandbox. The evaluator, shell, MCP clients, and trusted extensions run with the Arrodes process's permissions. Credentials stay under auth/ or in referenced environment variables, not settings files.

Nothing is shared automatically. The RPC session.share method explicitly creates an unlisted GitHub gist; anyone with its URL can read it.

See Configuration and project state and Troubleshooting for current-format storage, ownership, and recovery details.

Documentation

Start with the documentation map for product contracts, architecture, development, compatibility and releases. AGENTS.md routes coding agents to the project workflows.

License

MIT. Copyright 2026 DeadMeme5441.

Bundled third-party components retain their own licenses. Each release includes third-party notices and a corresponding-source companion with the applicable source code and rebuild instructions.

clojure
coding-agent
llm
repl
terminal

DeadMeme5441/arrodes

A coding agent built around a persistent Clojure REPL. Self-contained macOS and Linux binaries.

Clojure

10

54 commits

updated Oct 5, 2026

See the code

See what people are saying

README

Arrodes

Arrodes is a terminal coding agent built around a persistent Clojure REPL. The agent composes ordinary functions and retains native values between steps, while your conversation, results, and project configuration stay outside the repository.

Arrodes is open source under the MIT license. It runs trusted local code with your permissions; it is not a sandbox. See the security policy.

Install

Install the latest release on macOS or glibc-based Linux:

curl -fsSL https://raw.githubusercontent.com/DeadMeme5441/arrodes/main/install.sh | sh

The installer detects your OS and architecture, verifies the SHA-256 checksum, and installs to ~/.local/bin/arrodes. No sudo, language runtimes, or package managers required.

If ~/.local/bin is not on your PATH, the installer prints the command to add it. Then run arrodes inside a project to begin setup.

Prefer to inspect scripts before running them? Read the installer, or use the manual downloads below.

Update

arrodes update --check
arrodes update
arrodes update --version 0.1.7

The packaged executable checks published stable releases, verifies the selected asset against its SHA-256 metadata and checksum file, and atomically replaces itself. Failed downloads leave the installed executable unchanged. Restart Arrodes afterward; the updater never opens or modifies your settings, credentials or sessions. Default updates never downgrade. Selecting an older version is explicit and does not roll back session data; check the format contract first. Source checkouts do not replace their Bun executable: update the checkout instead.

Manual download

Download the executable for your system and its matching .sha256 file from Releases.

SystemExecutable
macOS Apple siliconarrodes-darwin-arm64
macOS Intelarrodes-darwin-x64
Linux arm64, glibcarrodes-linux-arm64
Linux x64, glibcarrodes-linux-x64

The executable is self-contained. End users do not need to install a language runtime or package manager.

Windows support is experimental and is not included in this release.

macOS

Verify before renaming or moving the file:

shasum -a 256 -c arrodes-darwin-arm64.sha256
chmod +x arrodes-darwin-arm64
mkdir -p ~/.local/bin
mv arrodes-darwin-arm64 ~/.local/bin/arrodes

Use the x64 filename on an Intel Mac. Ensure ~/.local/bin is on PATH.

The macOS binaries are not Developer ID signed or notarized. After verifying the checksum, the first launch may require System Settings → Privacy & Security → Open Anyway. Only approve an artifact obtained from the release you trust.

Linux

sha256sum -c arrodes-linux-x64.sha256
chmod +x arrodes-linux-x64
mkdir -p ~/.local/bin
mv arrodes-linux-x64 ~/.local/bin/arrodes

Use the arm64 filename on arm64. The preview targets glibc-based Linux systems.

Confirm the install:

arrodes --version

First run

Open a repository and start Arrodes:

cd /path/to/project
arrodes

On first run, the Providers browser opens. Connect an account, browse its models, choose a supported reasoning level, and select Make default for new conversations. Arrodes then asks about project trust when needed and opens your first conversation. You can connect several accounts; signing in never changes an existing conversation's model.

Return with /providers (also /setup or /login). Connected providers appear first, with their authentication method and connection status. Enter manages the selected provider; F5 checks its status. Esc cancels an active sign-in or returns to chat.

/models opens the model browser: providers on the left, models on the right, and details below. Tab switches between provider and model navigation, arrows select, and typing filters models. Change provider also works in narrow terminals. F5 discovers models from the selected provider. Enter chooses reasoning and then:

  • Use in this conversation — preserves history and live REPL definitions.
  • Make default for new conversations — saves defaults and applies them to the current conversation; other saved conversations remain unchanged.

OAuth can open a browser or show a URL for manual completion. API keys and pasted authorization codes are masked and excluded from conversation drafts and history. Press Esc to cancel a setup screen without exiting; run /setup or /login later to continue.

Codex supports ChatGPT sign-in. Anthropic access uses a Console API key or a supported cloud provider; Claude.ai subscription OAuth is not supported. GitHub Copilot login is not included. Each provider's account terms and data practices apply.

Existing valid defaults skip setup. Launch selections take precedence for a new session:

arrodes --provider codex-backend --model MODEL_ID --thinking high

Use /models, /refresh-models, and /thinking to change the current session from the interface.

Daily use

Launch in the repository you want Arrodes to work on, then describe the change or question in the composer. A one-line starting prompt can also be supplied at launch:

arrodes "Explain the failing command, fix the cause, and verify the result."

Arrodes keeps one live evaluator per session. Function calls appear compactly in the conversation; select a row to inspect its summary, output, native value, or evaluation source. Pending follow-ups can be edited or removed before delivery.

Session agents (development branch)

On feature/session-agents, the model can call agents/start! inside the same persistent REPL to start an independently evaluated child session. Children and their parent exchange addressed messages, inspect operation-specific outcomes, and continue work without turning function jobs into agents. /agents opens a team browser for navigation, messages, results and explicit cancel/stop/resume; the ordinary composer retains its unsent text across navigation. Children share the working checkout and process permissions, not the parent's live REPL bindings. Foreground cancellation does not cancel accepted jobs or children. See the agent/session contract. Current schema-6 stores reopen directly; supported schema-3/4/5 layouts upgrade transactionally after a retained backup. Unknown/newer, malformed and foreign stores are rejected intact, not reset. See compatibility for supported layouts and recovery.

Keys

ActionKey
Send while idle; steer while runningEnter
Insert a newlineShift+Enter or Ctrl+J
Queue a follow-upCtrl+Q
Close a panel; otherwise request cancellationEsc
SessionsF2
CommandsF3 or Ctrl+P
Agent roster (development branch)F4
Move to the next paneF6
Compose a message in /agents (development branch)F7
Inspect messages in /agents (development branch)F8
Attach a project file@
Discover commands/
Scroll without following outputPgUp / PgDn
Inspect / expand a selected conversation rowEnter / Space
Follow the latest outputEnd
Inspector tabs1 Summary, 2 Output, 3 Value, 4 Code
Copy selected text; otherwise stop workCtrl+C
ExitCtrl+D

Commands

CommandPurpose
/newCreate a session
/sessionsSwitch sessions
/historyInspect history and create a branch
/refreshReconcile recorded session state without repeating a mutation
/jobsInspect and cancel background function jobs; read output and native results
/agentsBrowse and control the agent team (development branch)
/parentReturn from a child conversation (development branch)
/pendingEdit or drop queued input
/attach, /attachmentsAdd or remove project-file context
/providers, /setup, /loginManage provider connections and sign-in
/models, /refresh-models, /thinkingSelect or refresh model settings
/renameRename the current session
/continueContinue from the current conversation
/compactCompact model context without deleting history
/usageInspect measured cache tokens and active-path estimated spend
/evalEvaluate trusted Clojure input in the live session
/reloadReset the evaluator and reload resources; live definitions are lost
/reconnectRestart the owned core without repeating an interrupted mutation
/copyCopy the visible conversation
/exportWrite a local HTML export
/reasoningShow or hide reasoning
/expand, /collapseExpand or collapse recorded activity
/deletePermanently delete the current session after confirmation
/helpShow keyboard help
/quitExit Arrodes

Prefix a message with // to send a literal leading slash.

Sessions and results

Sessions are durable and can be reopened through /sessions or directly:

arrodes --session SESSION_ID

Conversation history, session configuration, stored artifacts, and supported retained values survive restart. Arbitrary live definitions, JVM objects, and live-only results do not. Branching changes conversation history; it does not undo edits, commands, or other filesystem effects. See Sessions and results.

For automation and integrations, the only headless terminal mode is:

arrodes --rpc

It serves the versioned JSON Lines API documented in the RPC protocol reference.

State, privacy, and trust

Application home resolves in this order: --home, ARRODES_HOME, then ~/.arrodes.

~/.arrodes/
  config/
    settings.edn
    keybindings.edn
    trust.edn
  auth/
  skills/
  extensions/
  prompts/
  themes/
  packages/
  projects/
    <readable-name>-<sha256-of-real-worktree-root>/
      project.edn
      settings.edn
      data/
      skills/ extensions/ prompts/ themes/ packages/
  cache/
    models/ jna/ bun/ opentui/
  runtime/
    <version>-<platform>-<arch>-<payload-digest>/

The project identity is the real Git worktree root, or the launch directory outside Git. Subdirectories and symlink aliases share a project bucket; separate worktrees do not. Arrodes does not create .arrodes, instructions, or ignore-file changes in the repository. Use project.info over RPC to discover the exact external directory.

Each project data store has one live owner. Different projects can run concurrently; a second process opening the same store is rejected. Use --data-dir only when deliberately selecting another store.

Trust allows project instructions and executable resources to load; it is not an operating-system sandbox. The evaluator, shell, MCP clients, and trusted extensions run with the Arrodes process's permissions. Credentials stay under auth/ or in referenced environment variables, not settings files.

Nothing is shared automatically. The RPC session.share method explicitly creates an unlisted GitHub gist; anyone with its URL can read it.

See Configuration and project state and Troubleshooting for current-format storage, ownership, and recovery details.

Documentation

Start with the documentation map for product contracts, architecture, development, compatibility and releases. AGENTS.md routes coding agents to the project workflows.

License

MIT. Copyright 2026 DeadMeme5441.

Bundled third-party components retain their own licenses. Each release includes third-party notices and a corresponding-source companion with the applicable source code and rebuild instructions.

clojure
coding-agent
llm
repl
terminal