Skip to content

[Epic] Coding agent parity: close the harness gaps #940

Description

@DROOdotFOO

Our roadmap benchmarks the agent against Hermes and openclaw (ROADMAP.md, "Fast-Follow: Hermes Parity"). Hermes is a personal-assistant agent. If the goal is the best coding agent, that is the wrong comparison class, and it shows: before this epic, not one open issue tracked a coding-agent capability gap. A keyword sweep of the whole tracker returned zero issues ever mentioning lsp, hashline, edit format, subagent, vision, DAP, or debugger.

This epic adds the missing comparison class. The reference point is omp (31 built-in tools, 60+ providers, 14 LSP ops, 28 DAP ops), whose thesis is that the harness, not the model, is the bottleneck.

Where we are ahead

Worth stating, because none of it should be traded away to close the gaps below: durable journal with offset replay and reattach; ACP sessions that actually resume (session/load); multi-tenant SSH hosting with per-tenant jails; LLM spend metered into a real ledger; crash isolation via OTP; and surfaces omp has no equivalent for (LiveView, Telegram/Discord/Email gateway, cron, Symphony).

Shipped

  • AGENTS.md / CLAUDE.md discovery, across the TUI, ACP (per session root), and headless surfaces. Withheld under RAXOL_PROFILE=benchmark for the same reason skills are.
  • Hash-anchored edit format. read_file prefixes every line LINE:HASH|; edit_file addresses ranges by copying those prefixes into from/to. The model stops retyping the text it replaces, and a file that changed underneath fails the hash check instead of being corrupted. old_string stays as a fallback.
  • Actionable tool errors. ToolConverter.public_error/2 is a whitelist, so every edit failure previously reached the model as the bare string tool error. Each failure mode now says what to do next.
  • LSP wiring (Wire the LSP client into the coding agent toolset #932, PR Wire the LSP client into the coding agent #943). The client was not merely disconnected: Port.open was passed {:packet, 0}, which is not a valid option, so no server had ever started, and it never sent textDocument/didOpen, without which servers publish no diagnostics at all. Now two tools (lsp read-only, lsp_rename gated), servers pooled per language and owned by the session, .raxol/lsp.json config, and UTF-16 column handling so a rename cannot corrupt a line holding non-ASCII. A jailed session gets no LSP.
  • Parallel sub-agents. task takes prompts and fans out up to four concurrent delegations under Raxol.Agent.TaskSupervisor, unlinked, so one crash or timeout is a failed entry rather than a dead turn.

Open

Roughly in priority order:

Deliberately not scheduled

Named so the omission is a decision rather than an oversight: DAP/debugger control, ast_grep/ast_edit structural rewrites, persistent Python/JS eval cells, browser and desktop control, atomic commit splitting, a /review verdict command, shell completions, and read-write collab. Several are strong features; none is on the critical path to a coding agent that lands its edits.

Guard

Nothing here may compromise the single-module invariant, the frame budget, or the fail-closed posture of the authorizer, the jail, and the spend gate.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions