ARNO
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ARNO_JSON | No | Set to '1' to emit machine-readable JSON instead of plain text. | 0 |
| ARNO_STATE_DIR | No | Keep the telemetry log outside the workspace, one subdirectory per workspace. | |
| ARNO_TELEMETRY | No | Set to '0' to disable local usage recording entirely. | 1 |
| ARNO_UPDATE_CHECK | No | Set to '0' to turn off the daily check for a newer release. | 1 |
| ARNO_METALS_IMPORT | No | Set to '1' to let metals import an sbt build so Scala edits get diagnostics. Runs sbt; creates .bloop/ and .metals/. | 0 |
| ARNO_WORKSPACE_ROOT | No | Repository to operate on. Overridden by --root. Defaults to the working directory if neither is set. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| arno.read_rangeA | Read a file verbatim, whole or by line range — the replacement for |
| arno.findA | Locate declarations by name AND return their source in one call — the fused search-and-read that replaces |
| arno.insertA | Add text to a file without replacing anything — a new function, a new section, an extra case. Use this for additive work instead of rewriting a surrounding symbol. With no anchor it appends to the end of the file; with one it places the text before or after that anchor, refusing if the anchor is absent or matches more than once. Several additions or edits at once belong in apply. |
| arno.replace_textA | Replace an exact, unique string in a file. An anchor string does not move when the lines around it do, which is why follow-up edits address text rather than line numbers. Refuses when the anchor is absent or matches more than once — extend it with surrounding context to disambiguate. For several sites, use apply: atomic, one validation, no diagnostics from half-done intermediate states. |
| arno.create_fileA | Create a brand-new file, and any missing parent directories. Refuses to overwrite an existing one — use replace_text or apply to modify existing content. |
| arno.applyA | Apply several edits as one atomic unit: all land or none do. Ops: replace_text, replace_range, replace_symbol, delete_symbol, insert. Anchors are validated before anything is written, touched files are formatted, and one validation runs at the end instead of one per edit. Prefer this over several single edits when changing more than one site. |
| arno.delete_fileA | Delete a file, not a directory; fails if it does not exist. Reverting to an earlier checkpoint recreates it. To edit content use replace_text or apply. |
| arno.checkA | Run a validation command on demand and wait for the verdict: kind build (default), typecheck or tests. Uses the repository's own Makefile target, npm script or cargo command when present. Waits by default and returns pass/fail directly. Every result names the command that ran; dryRun names it without running anything. In a repository with several projects, pass target to check one; with no command at the root, the answer lists the projects. |
| arno.grepA | Literal or regex text search across the workspace, returning path:line matches with optional trailing context — the replacement for |
| arno.run_commandA | Run a command the repository declares, by name, and wait for the verdict: pass/fail with the decisive output. Use it instead of a shell for anything check does not cover. No name lists the declared commands. Nothing fits? declare_command it once. |
| arno.declare_commandA | Declare a named command in .arno/commands.json — a reproduction, a benchmark — to run with run_command in this and later sessions; the file is reviewed like any change. Declaring an existing name replaces it; do not redeclare one just to run it. |
| arno.run_testsA | Rerun a failing test, a test file, or changed files' tests; waits for pass/fail and the first failure. Full suite: check kind tests. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Most tools occupy clearly distinct roles: create/read/update/delete file operations, declaration search, text search, batched edits, and validation. The only mild ambiguities are check vs. run_tests vs. run_command, and find vs. grep vs. read_range, but the descriptions do enough to steer an agent toward the right one.
Names are all lowercase and imperative, but the pattern is mixed: several are verb_noun (delete_file, read_range, replace_text, create_file, run_command, run_tests, declare_command) while others are bare verbs (find, insert, apply, check, grep). It is readable and predictable in tone, but not structurally consistent.
Twelve tools is a well-scoped set for a coding-assistant server covering file operations, search, batched edits, and validation. Each tool has a reason to exist, and none feel redundant or like filler.
Core file lifecycle, search, atomic edits, validation, and test reruns are covered, so agents can work through typical multi-step coding tasks without obvious dead ends. Minor gaps such as no explicit directory listing or rename/move operation are easily worked around with grep and read_range.