leonardoaguiar.com coder-leo
Langue

coder-leo

Un agent de programmation pour le terminal qui roule avec des modèles locaux. Il lit, écrit et modifie du code, lance des commandes, cherche dans un projet et tient une liste de tâches, dirigé par un modèle qui roule sur votre propre ordinateur par Ollama ou par tout serveur doté de l’API de clavardage d’OpenAI (LM Studio, llama-server, vLLM, mlx). Il travaille comme Claude Code, et il est conçu pour les petites fenêtres de contexte : il mesure la fenêtre, garde chaque résultat d’outil dans le budget, nettoie les anciens résultats, résume la conversation par morceaux quand il le faut, et donne au modèle des outils qui trouvent sans tout lire.

Installer

macOS, avec Homebrew, deux commandes, une seule fois :

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

brew upgrade apporte les nouvelles versions, et coder-leo update aussi.

Linux (toute distribution, x86_64 ou ARM), Android dans Termux, et Windows dans WSL :

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

Il choisit la version pour l’ordinateur, vérifie son SHA-256 publié et installe le binaire, la page de manuel et les complétions du shell dans /usr/local (en demandant sudo au besoin), dans ~/.local ou dans le dossier de Termux. Le relancer met à jour; sh -s -- --uninstall le retire.

Il vous faut aussi un serveur de modèles avec un modèle qui prend en charge les outils :

Démarrer

Ouvrez un terminal dans un projet et lancez coder-leo. La première fois, choisissez un modèle dans la liste; il est mémorisé. Tapez ce que vous voulez; /help liste les commandes.

coder-leo                         une session dans ce dossier
coder-leo "add tests for parser"  une session avec une première demande
coder-leo -p "explain main.go"    une réponse, puis quitte (lit aussi stdin)
coder-leo -c                      reprend la dernière session d’ici
coder-leo --sessions              choisit une session précédente
coder-leo --list                  les modèles installés

La boîte d’accueil montre le modèle, la fenêtre de contexte, le mode de permissions et le dossier. La ligne sous l’invite montre le mode, le modèle, le remplissage du contexte et la branche git.

Travailler avec lui

Outils

Le modèle travaille par ces outils, nommés comme dans Claude Code (il comprend aussi les noms qu’emploient d’autres agents, comme read_file ou run_command) :

OutilCe qu’il fait
ReadUn fichier, numéroté, avec offset et limit; les images pour les modèles avec vision; les PDF par pdftotext; les carnets en cellules. Un gros fichier lu en entier renvoie son plan et son début
Write, EditCrée un fichier; remplace un extrait exact (tolère les numéros de ligne copiés et les écarts d’indentation)
LS, Glob, GrepListe, trouve des fichiers par motif, cherche dans le contenu avec une expression régulière (contenu, noms de fichiers ou comptes, avec contexte)
SearchLes fichiers et lignes les plus pertinents pour une question en mots de tous les jours, classés d’après les mots des identifiants
Outline, RepoMapLes fonctions et types d’un fichier; la carte du dépôt, classée selon ce que le code référence le plus
Bash, BashOutput, KillShellLance une commande avec un délai; les longues en arrière-plan
WebFetch, WebSearchUne page en texte lisible; une recherche web
TodoWriteLa liste de tâches, affichée à mesure qu’elle change
TaskUn sous-agent avec sa propre fenêtre de contexte (explore, plan, general, review, ou le vôtre) qui ne renvoie que son rapport
RecallCherche dans toute la conversation, y compris ce qui a été résumé
AskUserQuestion, ExitPlanMode, SkillVous pose une question; présente un plan; charge une skill
mcp__serveur__outilLes outils de vos serveurs MCP

La fenêtre de contexte

Les modèles locaux ont de petites fenêtres (8k à 32k jetons est courant sur un ordinateur de 16 Go), et relire une longue invite coûte des secondes à chaque tour. coder-leo garde la fenêtre utile :

Permissions

Quatre modes : default demande avant de modifier et de lancer des commandes; acceptEdits laisse passer les modifications dans le projet et demande pour les commandes; plan ne fait que lire, et le modèle présente un plan à approuver; yolo exécute tout sans demander, comme les premières versions, et c’est le mode par défaut sauf si vos réglages disent autre chose. Les commandes destructrices (supprimer des dossiers entiers, jeter du travail git, push forcé, sudo, supprimer des tables) demandent quand même en mode yolo; "guard": false dans les réglages désactive cela.

Les règles des réglages décident avant le mode : "allow": ["Bash(git *)", "Read"], "deny": ["Bash(rm *)"], "ask": ["Write"]. Répondre a à une demande de permission autorise cet outil pour la session; répondre avec des mots les envoie au modèle comme consignes.

Sessions

Chaque session est enregistrée à mesure dans ~/.config/coder-leo/sessions/<projet>/. coder-leo -c reprend la dernière, --resume <id> ou /resume en choisit une, /rename la nomme, /export l’écrit en Markdown. Avant chaque modification, le fichier reçoit un point de reprise : /rewind (ou Échap Échap) revient à un tour précédent, en restaurant les fichiers changés depuis et en coupant la conversation là.

Instructions, commandes, skills, agents

Réglages

~/.config/coder-leo/settings.json, puis .coder-leo/settings.json et .coder-leo/settings.local.json dans le projet, chacun ayant priorité sur le précédent; puis l’environnement (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 montre ce qui est en vigueur et d’où ça vient; /doctor vérifie le serveur, le modèle, la mémoire et la configuration.

Sans terminal

coder-leo -p "demande" répond une fois : la réponse sur stdout, tout le reste sur stderr. --output-format json imprime un objet avec le résultat, l’identifiant de session et les comptes de jetons; --output-format stream-json imprime un événement JSON par ligne à mesure que les choses se passent. --max-turns, --allowedTools, --disallowedTools, --system-prompt, --append-system-prompt et --mode façonnent l’exécution; -c ou --resume reprennent une session.

Confidentialité

Tout roule sur votre ordinateur : le modèle, les fichiers, la conversation. Le programme n’accède au réseau que lorsque le modèle appelle WebFetch ou WebSearch pour votre tâche (avec une demande de permission, hors mode yolo), lorsque vous configurez un serveur MCP qui sort sur Internet, et lorsque vous lancez coder-leo update. Pas de compte, pas de télémétrie, rien n’est envoyé nulle part.

Mises à jour

coder-leo update vérifie sur le site s’il existe une version plus récente et l’installe (par Homebrew pour une copie Homebrew); coder-leo update --check se contente de le dire. Le programme ne vérifie jamais de lui-même.

Aide et signalement de bogues

Problèmes et idées : l’adresse d’assistance au bas de la page coder-leo. Indiquez le modèle, le serveur, coder-leo version et la sortie de /doctor.