ashlr-workbench

Banco de trabajo de agente local que integra OpenHands, Goose, Aider y ashlrcode contra un LLM local, con servidores MCP ashlr-plugin preconfigurados.

Documentación

ashlr-workbench

Tu HQ local de agentes de codificación — cuatro agentes, un LLM local, diez servidores MCP, cero dependencias en la nube.

Qué es esto

Una caja de herramientas curada y totalmente local que conecta cuatro agentes de codificación de código abierto (OpenHands, Goose, Aider, ashlrcode) con un solo modelo de LM Studio (Qwen3-Coder-30B) y el mismo conjunto de diez servidores MCP de ashlr-plugin. El workbench proporciona una CLI (aw), un healthcheck y una ruta de actualización para que todo el conjunto se sienta cohesionado en lugar de cuatro herramientas sueltas que tienes que cuidar. Ningún dato sale de la máquina a menos que optes por un fallback en la nube.

Inicio rápido

# 1. Clone the supporting plugin (provides the 10 MCP servers)
git clone https://github.com/ashlrai/ashlr-plugin ~/Desktop/ashlr-plugin
cd ~/Desktop/ashlr-plugin && bun install

# 2. Clone the workbench
git clone <this-repo-url> ~/Desktop/ashlr-workbench
cd ~/Desktop/ashlr-workbench
cp .env.example .env   # then edit

# 3. Start LM Studio, load qwen/qwen3-coder-30b, click "Start Server"

# 4. Verify
./bin/aw doctor

# 5. Use
./bin/aw start aider          # interactive session in cwd
./bin/aw start openhands      # autonomous Docker-based agent

Para poner aw en tu PATH (revísalo primero):

ln -sf ~/Desktop/ashlr-workbench/bin/aw /usr/local/bin/aw

La alineación de agentes

AgenteFormaMejor paraCosto
OpenHandsDaemon Docker + GUIPRs autónomos de múltiples pasos, tareas con navegadorMemoria RAM alta
GooseCLI nativa en RustSesiones rápidas con uso de herramientas, bucle de aprobación inteligenteLigero
AiderCLI en PythonRefactorizaciones quirúrgicas archivo por archivo con diffs explícitosLigero
ashlrcodeCLI npm/Bun (de Mason)Trabajo personal del día a día, consciente de hooks, fallback en la nubeLigero

Elige el que se ajuste a la forma del trabajo — consulta "Ejemplos de uso" más abajo.

Arquitectura

                ┌─────────────────────────────────────────────┐
                │              ashlr-workbench                │
                │                                             │
                │   bin/aw  →  scripts/{start,health,update}  │
                └─────────────────────────────────────────────┘
                                    │
        ┌───────────────────┬───────┴────────┬──────────────────┐
        ▼                   ▼                ▼                  ▼
   ┌──────────┐        ┌────────┐       ┌────────┐         ┌──────────┐
   │ OpenHands│        │ Goose  │       │ Aider  │         │ashlrcode │
   │ (docker) │        │ (rust) │       │(python)│         │ (bun)    │
   └────┬─────┘        └───┬────┘       └───┬────┘         └────┬─────┘
        │                  │                │                   │
        └──────────────┬───┴────────────────┴───────────────────┘
                       │  same MCP surface
                       ▼
            ┌─────────────────────────┐         ┌────────────────┐
            │  ashlr-plugin (10 MCPs) │   ←──   │  LM Studio     │
            │  efficiency / sql /     │         │  Qwen3-Coder   │
            │  bash / tree / http /   │         │  -30B  :1234   │
            │  diff / logs / genome / │         └────────────────┘
            │  orient / github        │
            └─────────────────────────┘         ┌────────────────┐
                                                │ Ollama :11434  │
                                                │  (fallback)    │
                                                └────────────────┘

Los cuatro agentes hablan con el mismo LLM y las mismas herramientas MCP, por lo que el comportamiento es consistente sin importar cuál lances.

Requisitos

  • macOS 14+ (Apple Silicon recomendado; Intel funciona pero es más lento)
  • Docker Desktop — para OpenHands
  • LM Studio con qwen/qwen3-coder-30b cargado — LLM principal
  • Bun ≥ 1.1 — para los servidores MCP de ashlr-plugin y ashlrcode
  • Python 3.12+ — para Aider
  • Node ≥ 20 / npm — para npm install -g ashlrcode
  • ~32 GB de RAM libre (Qwen3-Coder-30B en 4-bit necesita ~24 GB en vivo)
  • ~30 GB de disco libre (imágenes de Docker + modelo)
  • Opcional: Ollama como LLM de respaldo
  • Opcional: CLI de gh para el PAT de GitHub (GITHUB_TOKEN="$(gh auth token)")

Instalación

# Plugin (provides the MCP servers all 4 agents share)
git clone https://github.com/ashlrai/ashlr-plugin ~/Desktop/ashlr-plugin
cd ~/Desktop/ashlr-plugin && bun install

# Workbench
git clone <this-repo-url> ~/Desktop/ashlr-workbench
cd ~/Desktop/ashlr-workbench
cp .env.example .env

# Per-agent installers (only run the ones you want)
./scripts/install-goose.sh           # Goose via Homebrew
pipx install aider-chat              # Aider (or: pip install --user aider-chat)
npm install -g ashlrcode             # ashlrcode
# OpenHands needs no install — `aw start openhands` pulls the image on first run

Después de instalar, verifica:

./bin/aw doctor    # actionable diagnosis
./bin/aw health    # full 13-point check

Ejemplos de uso

EscenarioMejor agenteComando
"Refactoriza el manejo de errores de este archivo"Aideraw start aider .
"Agrega pruebas, ejecútalas, corrige hasta que pasen — autónomo"OpenHandsaw start openhands y luego prompt GUI
"Sesión interactiva rápida, mayormente llamadas a herramientas"Gooseaw start goose
"Mi controlador habitual — hooks, memoria, rápido"ashlrcodeaw start ashlrcode
"Abre un PR de principio a fin"OpenHandsdale una URL de GitHub en la GUI
"Explica qué hace este código"Gooseaw start goose → "orienta en el directorio actual"

Configuración

Las configuraciones por agente viven en agents/:

agents/openhands/config.toml      # OpenHands runtime settings
agents/openhands/mcp.json         # MCP servers wired into OpenHands
agents/goose/config.yaml          # Goose source-of-truth (copied to runtime on launch)
agents/aider/aider.conf.yml       # Aider model + UX
agents/ashlrcode/settings.json    # ashlrcode overlay (XAI primary, LM Studio fallback)

El entorno general del workbench vive en .env (ver .env.example).

Solución de problemas

SíntomaArreglo
aw start openhands dice que Docker no está en ejecuciónInicia Docker Desktop, espera el ícono de ballena, reintenta
LM Studio "endpoint no responde"Abre LM Studio → Developer → Start Server, carga el modelo
El servidor MCP falla al iniciar en cualquier agentecd ~/Desktop/ashlr-plugin && bun install
La GUI de OpenHands carga pero el agente falla en el primer turnoConfirma que qwen/qwen3-coder-30b es el modelo cargado
aider no se encuentra después de la instalaciónpipx ensurepath o agrega ~/.local/bin al PATH
ashlrcode se queja de XAI_API_KEYEstablécelo en .env o ejecuta con fallback de LM Studio

Para cualquier otra cosa, ejecuta aw doctor — imprime el arreglo exacto para cada problema que detecta.

Contribución / Extensión

Para agregar un nuevo agente:

  1. Crea agents/<name>/ con el/los archivo(s) de configuración del agente.
  2. Crea scripts/start-<name>.sh que lo lance apuntando a la configuración del workbench y al endpoint de LM Studio.
  3. (Si tiene un daemon) Crea scripts/stop-<name>.sh.
  4. Agrégalo a las declaraciones de case en bin/aw (require_agent, cmd_start, cmd_stop, cmd_status).
  5. Agrega líneas de validación para su configuración en scripts/healthcheck.sh.
  6. Actualiza la tabla de alineación de agentes y el diagrama de arquitectura de este README.

Consulta CLAUDE.md para las convenciones de todo el proyecto.

Licencia

MIT — ver LICENSE.