Aller au contenu
Tool Review

pi — retour d'expérience setup complet et audit, juillet 2026

Sébastien Giband · Setup terminal-first avec layering de modèles par preset, 14 extensions maison, skills partagés avec Claude Code. Le driver quotidien reste Claude Code. ·
PHP/Symfony 7 TypeScript/React Neovim + herdr chezmoi
L'agent CLI le plus extensible que j'aie configuré — et le plus exigeant

pi ne dicte rien : pas de MCP, pas de sub-agents, pas de garde-fous par défaut. Tout ce que d'autres livrent clé en main, tu le construis en TypeScript. En échange tu obtiens un multi-provider natif et un contrôle total, dont le layering d'un modèle par preset. C'est le setup terminal-first le plus propre que j'aie monté — mais il ne remplace pas encore Claude Code au quotidien, et je dis pourquoi.

Points forts

  • + Multi-provider natif réel : Ctrl+P cycle entre Claude, GPT, Gemini, modèles opencode Go et locaux, sans quitter la session — le layering par preset (un modèle par rôle : plan, implement, review) devient trivial
  • + Extensibilité TypeScript de bout en bout : mes 15 hooks bash Claude Code se regroupent en une seule extension typée et testable, avec accès à l'UI (confirm/notify) et au session manager
  • + Agent Skills standard : les 37 skills de ~/.claude/skills sont lues telles quelles (progressive disclosure, ~1 600 tokens de descriptions seulement) — zéro duplication entre pi et le reste du setup
  • + Sessions JSONL avec tree branching natif (/tree, /fork, /clone) — l'historique se ramifie au lieu de s'écraser
  • + Open-source MIT, BYOK, aucun vendor lock-in : le contraire exact du modèle Claude Code
  • + Terminal-first assumé : pipe-friendly (pi -p), s'intègre nativement dans un multiplexeur d'agents comme herdr et via SSH, aucune dépendance IDE

Limites

  • Aucune sandbox : pi tourne avec tes permissions utilisateur. Les seuls garde-fous sont les extensions que tu écris — si tu ne codes pas le blocage rm -rf ou le secret-guard, il n'existe pas
  • Le layering par preset n'est pas une feature native : c'est une extension maison (preset.ts), sans filet en amont — zéro occurrence de 'presets' dans le code de pi
  • Piège en mode non-interactif : en -p / --mode json, defaultProjectTrust vaut 'ask', donc aucun prompt de confiance n'apparaît et les ressources projet sont silencieusement ignorées — il faut --approve, sinon pi ignore ton contexte sans rien dire
  • Dette annoncée : les extensions importent @mariozechner/* (ancien scope), et le CHANGELOG 0.80.0 annonce le retrait futur de l'alias vers @earendil-works/* — inaction = casse programmée
  • Pas de MCP par choix philosophique : tout ce que l'écosystème MCP donne gratuitement ailleurs (context7, connecteurs), tu le réimplémentes en extension ou tu t'en passes
  • Pas d'IDE, pas de sub-agents, pas de plugins LSP — le coût d'entrée est réel pour qui ne vit pas déjà dans le terminal

Contexte de test

pi 0.82.1, paquet @earendil-works/pi-coding-agent, setup et audit complet menés en juillet 2026 sur ma machine principale (Mac, Neovim + herdr, config versionnée via chezmoi). Niveau de certitude à poser d’emblée : ce n’est pas mon agent quotidien principal — ça reste Claude Code. J’ai monté un setup pi complet (14 extensions, layering d’un modèle par preset, skills partagés), je l’ai audité ligne à ligne, mais je ne l’ai pas encore mis en charge sur des semaines de production. Cette review porte sur ce que le setup fait, vérifié contre le code réel — pas sur un ressenti de driver quotidien.

Ce qu’il fait réellement

pi connecte le terminal à 30+ providers avec un core délibérément nu. La phrase de son auteur résume tout : « pi is aggressively extensible so it doesn’t have to dictate your workflow ». Concrètement, il te donne sept outils (read, bash, edit, write, grep, find, ls), un TUI, des sessions JSONL qui se ramifient — et rien d’autre. Pas de serveurs MCP, pas de sub-agents, pas de plan mode, pas de popups de permission. Tout ce qui manque est un choix, pas un oubli : à toi de le construire en extension TypeScript.

Le point qui le rend intéressant pour un workflow agentique sérieux, c’est le multi-provider natif combiné à l’extensibilité. C’est ce qui rend le layering d’un modèle par preset non seulement possible, mais propre.

Ce qui fonctionne

Le multi-provider comme fondation, pas comme option. Ctrl+P cycle entre Claude, GPT, Gemini, les modèles opencode Go et le local, sans quitter la session. Sur ce socle, affecter un modèle à chaque rôle — le plus rapide sur le volume mécanique, le plus capable sur le plan — devient une ligne de config. C’est le model routing que Claude Code, mono-provider, ne peut structurellement pas offrir.

Nuance apprise à l’usage : appeler Claude depuis pi passe par claude -p, qui casse les prompts interactifs (pas d’AskUserQuestion) et aveugle toute supervision. Dans mon layering, les modèles open tiennent donc tous les presets, et le frontier — quand une tâche mérite le meilleur modèle avec tous les gates — part vers Claude Code directement, hors pi. Le multi-provider de pi est réel, mais il s’arrête là où l’interactivité d’un provider compte.

L’extensibilité qui absorbe l’existant. Mes quinze hooks bash de Claude Code — blocage rm -rf, secret-guard, pre-push-gate, review-gate — se regroupent en une seule extension typée. Au lieu de quinze scripts qui se maintiennent séparément, un fichier avec isToolCallEventType("bash", event) qui te donne event.input.command typé, l’accès à ctx.ui.confirm() et au session manager. Testable, importable, versionnable. Le code de ces garde-fous est public, avec leurs bancs de test.

Zéro duplication avec le reste du setup. pi lit les skills standard directement depuis ~/.claude/skills — 37 skills exposées, seulement leurs descriptions en contexte (progressive disclosure, ~1 600 tokens). La connaissance ne se dédouble pas entre outils : elle vit à un seul endroit.

Ce qui ne fonctionne pas

Aucune sandbox, et c’est structurel. pi tourne avec tes permissions utilisateur. Les seuls garde-fous sont les extensions que tu écris. Si tu ne codes pas le blocage des commandes destructrices, il n’y en a pas — et l’audit de mon propre setup l’a prouvé : ma regex de blocage rm -rf laissait passer les formes les plus courantes (rm -rf ~, rm -rf $HOME) parce qu’elle exigeait un caractère après le chemin. Le filet que tu crois avoir n’est réel que si tu le testes.

Le layering n’est pas une feature native. Les presets qui portent tout mon workflow sont une extension maison (preset.ts) — zéro occurrence de « presets » dans le code de pi lui-même. Ça marche, mais sans filet en amont : c’est du code à moi, avec ses bugs à moi.

Le mode non-interactif ment par omission. En pi -p ou --mode json, defaultProjectTrust vaut « ask » — donc aucun prompt de confiance ne s’affiche, et les ressources du projet sont silencieusement ignorées. Tu crois que pi lit ton AGENTS.md ; il ne le lit pas, et ne te le dit pas. Il faut --approve. Un piège que seul un audit révèle.

Une dette d’alias déjà programmée. Les extensions importent encore l’ancien scope @mariozechner/* ; le CHANGELOG 0.80.0 annonce le retrait futur de l’alias vers @earendil-works/*. Aujourd’hui ça passe grâce à un aliasing du loader — le jour où il saute, tout casse d’un coup.

Pour qui ?

pi est le bon choix si tu vis déjà dans le terminal et que l’anti-lock-in est une exigence, pas une préférence : BYOK, MIT, multi-provider, tout portable. C’est aussi le meilleur terrain que je connaisse pour faire du layering de modèles propre — un sujet que je détaille dans un article dédié à opencode Go.

Mais sois lucide sur le contrat : le minimalisme de pi te renvoie la charge. Pas de MCP, pas de sub-agents, pas de garde-fous par défaut — tu construis, ou tu t’en passes. Si tu veux du plug-and-play, Claude Code livre l’écosystème clé en main ; si tu veux le multi-provider sans tout réimplémenter toi-même, OpenCode est un cran moins nu. pi récompense ceux qui veulent tout contrôler, et punit ceux qui espéraient ne rien maintenir.

Recommandé pour

  • Dev terminal-first (Neovim/herdr/SSH) qui veut un multi-provider natif et le layering d'un modèle par tâche
  • Ceux pour qui l'anti-lock-in est une exigence, pas une préférence — BYOK, MIT, tout portable
  • Ceux qui préfèrent écrire leurs propres garde-fous en TypeScript plutôt que subir des popups de permission

Déconseillé pour

  • IDE-first (VS Code, JetBrains) sans confort CLI — pi n'a aucune intégration IDE
  • Ceux qui veulent du plug-and-play : MCP, sub-agents et garde-fous prêts à l'emploi sont ailleurs
  • Un usage où tu ne veux pas maintenir tes propres extensions — le minimalisme de pi te renvoie la charge

Questions fréquentes

C'est quoi pi (pi coding agent) ?
Un agent CLI open-source (MIT) écrit par Mario Zechner, terminal-first et agressivement extensible en TypeScript. Le paquet officiel est @earendil-works/pi-coding-agent (version 0.82.1 en juillet 2026 ; l'ancien @mariozechner/pi-coding-agent est déprécié). Sa philosophie : un core minimal qui ne dicte pas ton workflow — pas de MCP, pas de sub-agents, tout se fait par extension.
Quelle différence entre pi et Claude Code ?
pi est open-source, multi-provider (BYOK, 30+ providers) et terminal only ; Claude Code est propriétaire, mono-provider Anthropic, mais livre MCP, sub-agents, plugins LSP et intégrations IDE clé en main. pi te donne le contrôle total au prix du travail d'intégration. Les skills sont au même standard, donc ~/.claude/skills se partage entre les deux.
Comment fait-on du layering de modèles avec pi ?
Via une extension maison de presets : chaque rôle (plan, implement, review, bulk, fast) reçoit un modèle et un jeu d'outils dédiés. Le multi-provider natif rend l'affectation triviale — un modèle rapide sur le volume, un modèle plus capable sur le plan et la review. À noter : ce n'est pas une feature native de pi, c'est du code à toi.
pi est-il sûr à utiliser sans sandbox ?
Il tourne avec tes permissions utilisateur, sans sandbox. La sécurité repose entièrement sur les extensions que tu écris (blocage de commandes dangereuses, secret-guard, gates de commit). Sans elles, aucun filet. C'est un choix assumé de pi, mais ça déplace la responsabilité sur toi.
Faut-il un abonnement pour utiliser pi ?
Non : pi est gratuit et fonctionne en BYOK avec n'importe quelle clé API. Un login subscription (l'abonnement opencode Go, ~10-25$/mois) donne accès à un pool de modèles sans gérer les clés une par une — utile pour le layering, mais optionnel.

Aller plus loin