leonardoaguiar.com coder-leo
Idioma

coder-leo

Um agente de código para o terminal que corre com modelos locais. Lê, escreve e edita código, executa comandos, pesquisa um projeto e mantém uma lista de tarefas, guiado por um modelo que corre na sua própria máquina através do Ollama ou de qualquer servidor com a API de chat da OpenAI (LM Studio, llama-server, vLLM, mlx). Trabalha como o Claude Code, e foi feito para janelas de contexto pequenas: mede a janela, mantém cada resultado de ferramenta dentro do orçamento, limpa os resultados antigos, resume a conversa por partes quando é preciso e dá ao modelo ferramentas que encontram as coisas sem ler tudo.

Instalar

macOS, com Homebrew, dois comandos, uma vez:

brew tap leonardoaguiar/coder-leo https://leonardoaguiar.com/apps/coder-leo/tap.git
brew install leonardoaguiar/coder-leo/coder-leo

brew upgrade traz as versões novas, e coder-leo update também.

Linux (qualquer distribuição, x86_64 ou ARM), Android dentro do Termux e Windows dentro do WSL:

curl -fsSL https://leonardoaguiar.com/apps/coder-leo/install.sh | sh

Escolhe a versão para a máquina, verifica o SHA-256 publicado e instala o binário, a página de manual e os preenchimentos automáticos da shell em /usr/local (pedindo sudo quando é preciso), em ~/.local ou na pasta do próprio Termux. Executar de novo atualiza; sh -s -- --uninstall remove.

É preciso também um servidor de modelos com um modelo que suporte ferramentas:

Começar

Abra um terminal num projeto e execute coder-leo. Da primeira vez, escolha um modelo da lista; fica memorizado. Escreva o que pretende; /help lista os comandos.

coder-leo                         uma sessão nesta pasta
coder-leo "add tests for parser"  uma sessão com um primeiro pedido
coder-leo -p "explain main.go"    uma resposta e sai (também lê o stdin)
coder-leo -c                      continua a última sessão daqui
coder-leo --sessions              escolhe uma sessão anterior
coder-leo --list                  os modelos instalados

A caixa de boas-vindas mostra o modelo, a janela de contexto, o modo de permissões e a pasta. A linha por baixo da linha de comandos mostra o modo, o modelo, quanto do contexto está em uso e o ramo do git.

Trabalhar com ele

Ferramentas

O modelo trabalha através destas ferramentas, com os nomes do Claude Code (também entende os nomes que outros agentes usam, como read_file ou run_command):

FerramentaO que faz
ReadUm ficheiro, numerado, com offset e limit; imagens para modelos com visão; PDFs através do pdftotext; notebooks como células. Um ficheiro grande lido por inteiro devolve o esboço e o início
Write, EditCria um ficheiro; substitui um excerto exato (tolera números de linha copiados e diferenças de indentação)
LS, Glob, GrepLista, encontra ficheiros por padrão, pesquisa o conteúdo com uma expressão regular (conteúdo, nomes de ficheiro ou contagens, com contexto)
SearchOs ficheiros e as linhas mais relevantes para uma pergunta em linguagem corrente, ordenados pelas palavras dos identificadores
Outline, RepoMapAs funções e os tipos de um ficheiro; o mapa do repositório, ordenado por quanto o código se refere a cada ficheiro
Bash, BashOutput, KillShellExecuta um comando com tempo limite; os longos em segundo plano
WebFetch, WebSearchUma página como texto legível; uma pesquisa na web
TodoWriteA lista de tarefas, mostrada à medida que muda
TaskUm subagente com janela de contexto própria (explore, plan, general, review, ou um seu) que devolve apenas o relatório
RecallPesquisa a conversa inteira, incluindo o que foi resumido
AskUserQuestion, ExitPlanMode, SkillFaz-lhe uma pergunta; apresenta um plano; carrega uma skill
mcp__servidor__ferramentaAs ferramentas dos seus servidores MCP

A janela de contexto

Os modelos locais têm janelas pequenas (8k a 32k tokens é o habitual numa máquina de 16 GB), e reler um prompt longo custa segundos a cada turno. O coder-leo mantém a janela a funcionar:

Permissões

Quatro modos: default pergunta antes de editar e de executar comandos; acceptEdits deixa passar as edições dentro do projeto e pergunta pelos comandos; plan só lê, e o modelo apresenta um plano para aprovação; yolo executa tudo sem perguntar, como faziam as primeiras versões, e é a predefinição a não ser que as suas definições digam outra coisa. Os comandos destrutivos (remover pastas largas, descartar trabalho do git, push forçado, sudo, apagar tabelas) continuam a perguntar no modo yolo; "guard": false nas definições desliga isso.

As regras nas definições decidem antes do modo: "allow": ["Bash(git *)", "Read"], "deny": ["Bash(rm *)"], "ask": ["Write"]. Responder a a um pedido de permissão autoriza essa ferramenta durante a sessão; responder com palavras envia-as ao modelo como instruções.

Sessões

Cada sessão é guardada à medida que acontece em ~/.config/coder-leo/sessions/<projeto>/. coder-leo -c continua a última, --resume <id> ou /resume escolhe uma, /rename dá-lhe nome, /export grava-a em Markdown. Antes de cada edição o ficheiro ganha um ponto de reposição: /rewind (ou Esc Esc) recua até um turno anterior, repondo os ficheiros alterados desde então e cortando ali a conversa.

Instruções, comandos, skills, agentes

Definições

~/.config/coder-leo/settings.json, depois .coder-leo/settings.json e .coder-leo/settings.local.json no projeto, cada um a sobrepor-se ao anterior; depois o ambiente (CODER_MODEL, CODER_API, CODER_HOST ou OLLAMA_HOST, CODER_API_KEY).

{
  "model": "qwen2.5-coder:14b",
  "api": "ollama",
  "numCtx": 16384,
  "think": "low",
  "permissions": { "mode": "default", "allow": ["Bash(git *)"], "guard": true },
  "compact": { "micro": 0.7, "full": 0.85, "keepRecent": 6 },
  "repoMap": { "enabled": true, "budget": 3000 },
  "tools": { "minimal": false, "disabled": ["WebSearch"] },
  "hooks": { "PreToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "./check.sh" }] }] },
  "mcpServers": { "fs": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."] } },
  "statusLine": { "command": "~/.config/coder-leo/status.sh" },
  "notify": "bell"
}

/config mostra o que está em vigor e de onde veio; /doctor verifica o servidor, o modelo, a memória e a configuração.

Sem terminal

coder-leo -p "pedido" responde uma vez: a resposta no stdout, tudo o resto no stderr. --output-format json imprime um objeto com o resultado, o id da sessão e as contagens de tokens; --output-format stream-json imprime um evento JSON por linha à medida que as coisas acontecem. --max-turns, --allowedTools, --disallowedTools, --system-prompt, --append-system-prompt e --mode moldam a execução; -c ou --resume continuam uma sessão.

Privacidade

Tudo corre na sua máquina: o modelo, os ficheiros, a conversa. O programa só acede à rede quando o modelo chama WebFetch ou WebSearch para a sua tarefa (com pedido de permissão, fora do modo yolo), quando configura um servidor MCP que sai para fora e quando executa coder-leo update. Sem contas, sem telemetria, nada enviado para lado nenhum.

Atualizações

coder-leo update verifica no site se há uma versão mais recente e instala-a (através do Homebrew, numa cópia do Homebrew); coder-leo update --check apenas avisa. O programa nunca verifica por iniciativa própria.

Ajuda e comunicação de problemas

Problemas e ideias: o endereço de apoio no fim da página do coder-leo. Inclua o modelo, o servidor, coder-leo version e a saída de /doctor.