ashlr-workbench

Bancada de agente local que integra OpenHands, Goose, Aider e ashlrcode em um único LLM local, com servidores MCP ashlr-plugin pré-configurados.

Documentação

ashlr-workbench

Sua central local de agentes de codificação — quatro agentes, um LLM local, dez servidores MCP, zero dependências de nuvem.

O que é isto

Uma caixa de ferramentas curada e totalmente local que conecta quatro agentes de codificação de código aberto (OpenHands, Goose, Aider, ashlrcode) a um único modelo do LM Studio (Qwen3-Coder-30B) e ao mesmo conjunto de dez servidores MCP ashlr-plugin. O workbench fornece uma CLI (aw), um healthcheck e um caminho de atualização, para que toda a pilha pareça coesa em vez de quatro ferramentas soltas que você precisa cuidar. Nenhum dado sai da máquina, a menos que você opte por um fallback em nuvem.

Início 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 colocar aw no seu PATH (revise primeiro):

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

A escalação de agentes

AgentFormaMelhor paraCusto
OpenHandsDaemon Docker + GUIPRs autônomos de múltiplas etapas, tarefas dirigidas por navegadorRAM pesada
GooseCLI nativa em RustSessões rápidas com uso de ferramentas, loop de aprovação inteligenteLeve
AiderCLI em PythonRefatorações cirúrgicas arquivo por arquivo com diffs explícitosLeve
ashlrcodeCLI npm/Bun (do Mason)Trabalho pessoal do dia a dia, ciente de hooks, fallback em nuvemLeve

Escolha o que corresponde ao formato do trabalho — veja "Exemplos de uso" abaixo.

Arquitetura

                ┌─────────────────────────────────────────────┐
                │              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)    │
                                                └────────────────┘

Todos os quatro agentes falam com o mesmo LLM e as mesmas ferramentas MCP, então o comportamento é consistente independentemente de qual você iniciar.

Requisitos

  • macOS 14+ (Apple Silicon recomendado; Intel funciona, mas é mais lento)
  • Docker Desktop — para OpenHands
  • LM Studio com qwen/qwen3-coder-30b carregado — LLM principal
  • Bun ≥ 1.1 — para servidores MCP ashlr-plugin e ashlrcode
  • Python 3.12+ — para Aider
  • Node ≥ 20 / npm — para npm install -g ashlrcode
  • ~32 GB de RAM livre (Qwen3-Coder-30B em 4-bit precisa de ~24 GB em uso)
  • ~30 GB de disco livre (imagens Docker + modelo)
  • Opcional: Ollama como LLM de fallback
  • Opcional: CLI gh para GitHub PAT (GITHUB_TOKEN="$(gh auth token)")

Instalação

# 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

Após a instalação, verifique:

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

Exemplos de uso

CenárioMelhor agenteComando
"Refatorar o tratamento de erros deste arquivo"Aideraw start aider .
"Adicionar testes, executá-los, corrigir até ficar verde — autônomo"OpenHandsaw start openhands depois prompt na GUI
"Sessão interativa rápida, principalmente chamadas de ferramentas"Gooseaw start goose
"Meu driver habitual — hooks, recall, rápido"ashlrcodeaw start ashlrcode
"Abrir um PR para mim de ponta a ponta"OpenHandsdê a ele uma URL do GitHub na GUI
"Explicar o que este codebase faz"Gooseaw start goose → "orientar no cwd"

Configuração

As configurações por agente ficam em 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)

O ambiente do workbench inteiro fica em .env (veja .env.example).

Solução de problemas

SintomaCorreção
aw start openhands diz que o Docker não está em execuçãoInicie o Docker Desktop, aguarde o ícone da baleia, tente novamente
LM Studio "endpoint não responde"Abra LM Studio → Developer → Start Server, carregue o modelo
O servidor MCP falha ao iniciar em qualquer agentecd ~/Desktop/ashlr-plugin && bun install
A GUI do OpenHands carrega, mas o agente erra na primeira interaçãoConfirme que qwen/qwen3-coder-30b é o modelo carregado
aider não encontrado após a instalaçãopipx ensurepath ou adicione ~/.local/bin ao PATH
ashlrcode reclama sobre XAI_API_KEYDefina em .env ou execute com fallback do LM Studio

Para qualquer outra coisa, execute aw doctor — ele imprime a correção exata para cada problema que detecta.

Contribuindo / estendendo

Para adicionar um novo agente:

  1. Crie agents/<name>/ com o(s) arquivo(s) de configuração do agente.
  2. Crie scripts/start-<name>.sh que o inicie apontando para a configuração do workbench e o endpoint do LM Studio.
  3. (Se tiver um daemon) Crie scripts/stop-<name>.sh.
  4. Adicione-o às declarações case em bin/aw (require_agent, cmd_start, cmd_stop, cmd_status).
  5. Adicione linhas de validação para sua configuração em scripts/healthcheck.sh.
  6. Atualize a tabela de agentes e o diagrama de arquitetura deste README.

Consulte CLAUDE.md para convenções do projeto.

Licença

MIT — veja LICENSE.