Pivert's Blog

Maîtriser OpenCode et Oh My OpenAgent : un guide pratique pour techniciens et développeurs


Reading Time: 28 minutes

Maîtriser OpenCode et Oh My OpenAgent : un guide pratique pour techniciens et développeurs

Note sur les modèles : cet article utilise exclusivement les modèles GPT d’OpenAI disponibles dans un abonnement Copilot (GPT-5-mini, GPT-5.4-mini, GPT-5.3-Codex, GPT-5.4). C’est le choix par défaut de nombreuses entreprises qui limitent leurs équipes à ces fournisseurs. Pour une approche multi-modèles optimisant le rapport qualité/coût avec un budget d’environ 30€/mois, consultez l’article complémentaire : OpenCode + Oh My OpenAgent : building a multi-model AI coding stack for €30/month.

Vous utilisez déjà Copilot dans votre navigateur, GitHub Copilot CLI ou Claude CLI. Ces outils restent des assistants à la volée : une suggestion par-ci, une commande par-là. OpenCode change le paradigme. C’est un agent de développement complet qui vit dans votre terminal : il lit, modifie, exécute, débogue et déploie du code. Il a accès à votre système de fichiers, à vos outils internes et à vos clusters Kubernetes.

Oh My OpenAgent (OMO) est un plugin d’orchestration multi-agents qui s’installe par-dessus OpenCode. Le package npm s’appelle encore oh-my-opencode pour des raisons de rétrocompatibilité, mais le produit est désormais Oh My OpenAgent. L’abréviation courante est OMO — c’est celle que nous utiliserons dans ce cours.

Ensemble, OpenCode et OMO planifient un projet, explorent une codebase inconnue, corrigent un bug, rédigent un rapport, manipulent git en profondeur et poussent le tout sur Kubernetes.

Ce cours vous donne des bases solides en moins de deux heures. Vous apprendrez à lancer des tâches simples, à orchestrer des agents spécialisés, à maîtriser les coûts d’inférence, et à appliquer OMO à vos cas réels : investigation de pod Kubernetes, debug SQL PostgreSQL/MSSQL, rapports de bugs, automatisation Python/SQL, git avancé et intégration de logiciels. Aucun prérequis en intelligence artificielle n’est nécessaire. Vous devez juste savoir utiliser un terminal, lire du code et avoir accès à une installation OMO. La documentation officielle est disponible sur ohmyopenagent.com/docs.

Durée totale estimée : 1h50.

Public visé : techniciens, développeurs, exploitants, supports de niveau 2 et 3, et toute personne qui passe son temps à déboguer, investiguer, automatiser et documenter.

Table des matières

  1. Introduction & Installation (10 min)
  2. OpenCode : les fondamentaux (20 min) + Mini-lab 1
  3. Oh My OpenAgent : l’orchestration multi-agents (25 min) + Mini-lab 2
  4. Fonctionnalités avancées d’OMO (20 min) + Mini-lab 3
  5. Workflows concrets du quotidien (25 min) + Mini-lab 4
  6. Lab final : projet complet (20 min)
  7. FAQ rapide et bonnes pratiques
  8. Conclusion

1. Introduction & Installation (10 min)

1.1 Qu’est-ce qu’OpenCode

OpenCode est un agent de développement qui vit dans votre terminal. Contrairement à un assistant chat en ligne, il a accès à votre environnement local : il peut lire des fichiers, exécuter des commandes shell, interroger des bases de données, appeler des APIs, interagir avec Kubernetes, et modifier votre code en direct. Il ne se contente pas de répondre : il agit.

Imaginez un collègue senior capable de :

  • Lire tout un projet en quelques secondes.
  • Exécuter kubectl pour inspecter un pod.
  • Corriger un script SQL bogué.
  • Écrire un rapport de bug structuré.
  • Rebaser une branche git et résoudre les conflits.
  • Créer une application web, la dockeriser et la déployer.

C’est ce que fait OpenCode. Son interface principale est un prompt texte dans le terminal. Vous tapez ce que vous voulez faire, et l’agent exécute. Vous gardez toujours le contrôle : chaque action sensible peut être confirmée avant exécution, selon la configuration choisie.

La documentation officielle d’OpenCode est disponible sur GitHub.

1.2 Qu’est-ce qu’Oh My OpenAgent (OMO)

Oh My OpenAgent (OMO) est une surcouche multi-agents au-dessus d’OpenCode. Plutôt que d’envoyer toutes les tâches à un seul agent généraliste, OMO route chaque tâche vers un agent spécialisé. C’est comme passer d’un artisan seul à une petite équipe de spécialistes. Le dépôt officiel est sur GitHub et la documentation sur ohmyopenagent.com/docs.

Les principaux agents sont :

  • Sisyphus : l’exécuteur généraliste. C’est le “faiseur” par défaut.
  • Prometheus : le planificateur. Il découpe un projet en tâches concrètes avant l’exécution. Il est read-only : il ne peut pas exécuter de code.
  • Hephaestus : l’architecte et codeur. Il conçoit et implémente des solutions techniques.
  • Atlas : l’agent d’exploration et de cartographie de code. C’est lui qui exécute les plans de Prometheus via /start-work.
  • Oracle : l’architecte et reviewer. Il fait de la revue, de la sécurité et de la qualité.
  • Metis : le consultant pré-planification. Avant que Prometheus n’écrive un plan, Metis analyse la conversation pour détecter les angles morts : questions oubliées, ambiguïtés, risques de sur-ingénierie. C’est le garde-fou du planificateur. Invoqué automatiquement par Prometheus avant chaque génération de plan.
  • Momus : agent critique et sécurité, pour remettre en question les plans.
  • Explore : agent de recherche locale. Il explore le code avec les outils du shell (grep, glob, ast-grep) pour cartographier la codebase, trouver des patterns et localiser des fichiers.
  • Librarian : agent de recherche externe. Il cherche en ligne : documentation officielle, dépôts GitHub, Context7, web search. Il apporte des connaissances fraîches que le projet local ne contient pas.

Ces agents peuvent travailler en parallèle, se déléguer des sous-tâches, et revenir avec un résultat structuré. Le coût total est souvent inférieur à celui d’un seul agent très gros, parce que chaque agent utilise le modèle adapté à sa mission.

1.3 Comparaison avec les outils que vous connaissez déjà

Outil Paradigme Accès au système Exécution de commandes Multi-agents Coût maîtrisable
Copilot Web Chat, suggestions Non Non Non Limité
GitHub Copilot CLI Suggestions de commandes Local, limité Oui, via suggestions Non Oui, mais simple
Claude CLI Agent conversationnel Oui Oui, limité Non Moyennement
OpenCode natif Agent terminal avec outils Oui Oui, intégré Non (agent unique) Oui, selon le modèle choisi
OpenCode + OMO Agent terminal avec orchestration multi-agents Oui Oui, intégré Oui, via OMO Oui, avec routing par catégorie

Copilot Web est excellent pour poser une question ou générer un snippet. GitHub Copilot CLI aide à compléter des commandes. Claude CLI est plus proche d’un agent, mais reste principalement conversationnel. OMO vont plus loin : ils modifient vos fichiers, exécutent vos outils métier, et peuvent enchaîner des dizaines d’étapes sans intervention.

Pour un technicien ou un développeur, la différence se ressent surtout dans les tâches longues et répétitives. Ouvrir un pod, lire ses logs, comparer avec un autre pod, vérifier une configmap, relancer un job, écrire le rapport : tout cela peut tenir dans un seul prompt.

Pour les utilisateurs de Claude Code

Si vous utilisez déjà Claude Code, cette sous-section est pour vous. Sinon, vous pouvez la sauter.

Claude Code et Oh My OpenAgent partagent le même ADN : ce sont des agents qui vivent dans le terminal, accèdent à votre système de fichiers, exécutent des commandes shell et modifient du code à votre place. Claude Code est aujourd’hui une référence chez les développeurs, et à juste titre : le modèle Claude offre un raisonnement long particulièrement solide, l’interface est immédiate, et l’intégration avec l’écosystème Anthropic (y compris l’extension VS Code) est très soignée.

Claude Code dispose d’un système de skills natif basé sur des fichiers SKILL.md, d’une capacité de sous-agents, et d’un support des MCP servers. L’écosystème tiers est également très actif : Superpowers et GStack proposent des skill packs qui étendent Claude Code vers une approche multi-agents.

Le tableau ci-dessous ne cherche pas à dire « l’un est meilleur que l’autre », mais à identifier les différences de conception qui comptent quand on hésite entre les deux.

Critère Claude Code OMO
Philosophie Agent central puissant, avec sous-agents et MCP en option Orchestration multi-agents explicite par défaut (Sisyphus, Prometheus, Oracle, Atlas…)
Routing Modèle principal + sous-agents et commandes (/plan, /review, /agents) Catégories de tâches prédéfinies (Quick, Plan, Code, Review, Explore, Critical) avec routing automatique
Modèles Modèles Anthropic (Sonnet, Opus, Fable…), choix possible via /model ou –model Multi-fournisseurs : modèles OpenAI, Anthropic, Google, open source, etc. Sélection par catégorie pour optimiser le coût
Extensibilité MCP servers, slash commands / skills (~/.claude/skills/), hooks, plugins, CLAUDE.md projet Skills, plugins, MCP servers, slash commands (/start-work, /init-deep), AGENTS.md projet
Coût Lié au modèle Anthropic choisi ; optimisable via modèle plus léger, /compact, et externalisation MCP Maîtrisable par routing vers des modèles petits pour les tâches simples et modèles grands seulement là où c’est nécessaire
Courbe d’apprentissage Faible : on lance claude et on commence Un peu plus longue : il faut comprendre les agents, les catégories et la config, mais cela paie sur les workflows complexes

Claude Code brille quand :

  • Vous voulez un outil simple, immédiatement opérationnel, avec un raisonnement long natif excellent.
  • Vous êtes déjà dans l’écosystème Anthropic ou vous utilisez l’extension VS Code.
  • Votre besoin est conversationnel ou centré sur un seul agent de confiance.

OMO brille quand :

  • Vous voulez une équipe d’agents spécialisés qui se passent le relais automatiquement (planification → exécution → revue).
  • Vous souhaitez choisir le modèle le plus économique pour chaque sous-tâche, y compris des modèles open source ou spécialisés.
  • Vous avez des workflows répétitifs et structurés (investigation Kubernetes, rapports de bugs, manipulation git complexe, etc.).

Ce qui change concrètement au quotidien :

Dans Claude Code, vous demandez à Claude de faire le travail ; si besoin, vous activez des MCP servers ou vous invoquez des commandes comme /plan ou /review. Dans OMO, le système décide souvent lui-même quel agent est le plus adapté, et il peut enchaîner plusieurs agents sans que vous ayez à les appeler un par un. Ce n’est pas magique : c’est une convention de routing qui devient utile dès que les tâches dépassent une simple question-réponse.

Verdict pratique : gardez Claude Code si vous cherchez un agent unique, puissant et bien intégré. Testez OMO si vous voulez composer avec plusieurs agents et maîtriser finement le rapport qualité/coût sur des tâches longues. Les deux outils sont légitimes ; le meilleur est celui qui correspond à votre façon de travailler.

1.4 Installation générique

L’installation officielle d’OpenCode se fait en deux commandes :

curl -fsSL https://opencode.ai/install | bash
opencode auth login

Une fois OpenCode installé, activez le plugin Oh My OpenAgent dans votre fichier de configuration :

{
 "plugins": [
  "oh-my-openagent"
 ],
 "defaultModel": "gpt-5-mini",
 "agentRouting": true
}

Vérifiez l’installation :

opencode --version
opencode agent list

1.5 Sécurité : bonnes pratiques

OMO exécute des commandes réelles sur votre système et peut modifier vos fichiers. Avant de lancer un agent dans un projet sensible, configurez les permissions dans ~/.config/opencode/opencode.json. La clé officielle est permission. Chaque outil peut être réglé sur ask (demander confirmation), allow (autoriser) ou deny (interdire).

{
 "$schema": "https://opencode.ai/config.json",
 "permission": {
  "*": "ask",    // comportement par défaut
  "bash": "ask",  // chaque commande shell doit être validée
  "edit": "ask",  // toute modification de fichier
  "write": "ask",  // création ou écrasement de fichier
  "lsp": "ask"   // requêtes LSP, y compris le renommage de symboles
 }
}

Pourquoi lsp en ask ? Le renommage de symbole via LSP (lsp_rename) est une opération globale : il modifie toutes les occurrences d’une variable, fonction ou classe dans tout le projet. Une mauvaise interprétation du langage server peut entraîner des centaines de modifications involontaires. Il est prudent de demander confirmation.

Un préprompt global se configure avec la clé instructions. C’est un tableau de chemins vers des fichiers Markdown qui sont injectés dans le system prompt de chaque session. Vous pouvez y mettre un fichier de sécurité (security.md), mais aussi un fichier de conventions générales (global.md) commun à tous vos projets — sans avoir besoin d’un AGENTS.md par projet. C’est l’équivalent d’un CLAUDE.md pour Claude Code.

{
 "instructions": [
  "~/.config/opencode/instructions/security.md",
  "./AGENTS.md"
 ]
}

Exemple de contenu pour ~/.config/opencode/instructions/security.md :

Règles de sécurité :
- Ne jamais exécuter de commande de destruction sans confirmation explicite.
- Ne jamais afficher de secret, mot de passe ou token dans la sortie.
- Ne jamais pousser de code sur production sans revue par Oracle.
- Toujours vérifier git status avant et après une modification.

Pour les environnements sensibles, exécutez OMO dans un conteneur isolé. Seashell (gitlab.com/pivert/seashell) est un environnement de développement DevOps portable et jetable, livré sous forme d’image Docker (~800 Mo). Il préconfigure des centaines d’outils (Python, Kubernetes, Ansible, Neovim…) dans un terminal unifié au thème Solarized Dark. Son intérêt sécuritaire : isolation Docker, sessions éphémères, aucune trace sur l’hôte. Images : docker.io/pivert/seashell, sources : gitlab.com/pivert/seashell.

1.6 Premier lancement

Lancez OMO dans un dossier de test :

mkdir ~/omo-test && cd ~/omo-test
opencode

Vous arrivez sur un prompt interactif. Essayez une commande simple :

Crée un fichier README.md avec un titre "Projet test OMO" et une liste de trois fonctionnalités.

L’agent va créer le fichier, et vous pourrez le lire avec read README.md.

Astuce : Gardez vos premiers prompts courts et mesurables. Cela vous aide à comprendre ce que l’agent fait vraiment avant de lui confier des tâches plus larges.

Attention : Ne lancez jamais OMO dans un dossier contenant des secrets en clair (fichiers .env non versionnés, clés API, mots de passe). L’agent peut les lire et potentiellement les inclure dans des logs ou des réponses.

1.7 Ce que vous devez retenir avant de passer à la suite

OpenCode est un agent terminal. Oh My OpenAgent est un orchestrateur multi-agents. L’installation se fait via le script officiel et le plugin OMO. Le premier réflexe à acquérir est celui du coût : commencez toujours par le modèle le plus petit qui peut faire le job. Dans la grande majorité des cas, c’est la catégorie quick.

2. OpenCode : les fondamentaux (20 min) + Mini-lab 1

2.1 Outils de base

OpenCode dispose d’une boîte à outils riche. Voici les outils que vous utiliserez le plus souvent.

Lecture et édition de fichiers

  • read <fichier> : affiche le contenu d’un fichier.
  • write <fichier> <contenu> : crée ou écrase un fichier.
  • edit <fichier> <ancien> <nouveau> : remplace une portion de texte.
  • glob <pattern> : trouve des fichiers par pattern (**/*.py, src/**/*.ts).
  • grep <pattern> : cherche du texte dans les fichiers.

Exécution et diagnostic

  • bash <commande> : exécute une commande shell.
  • lsp_diagnostics <chemin> : vérifie les erreurs de langage dans un fichier ou dossier.
  • lsp_goto_definition, lsp_find_references : navigation dans le code.

Ces outils sont souvent appelés automatiquement par l’agent quand il en a besoin. Vous pouvez aussi les invoquer explicitement dans vos prompts pour gagner du temps ou forcer une action précise.

2.2 Raccourcis clavier essentiels

OpenCode propose plusieurs raccourcis via la séquence Ctrl+X :

  • Ctrl+X puis M : changer de modèle.
  • Ctrl+X puis E : passer en éditeur Vim.
  • Ctrl+X puis B : afficher ou masquer le bandeau latéral.
  • Ctrl+X puis Q : quitter.
  • Ctrl+X puis ? : afficher la liste de tous les raccourcis.

Ces raccourcis accélèrent le travail sans quitter le prompt.

2.3 Choisir son modèle : la catégorie quick suffit souvent

Le choix du modèle est le premier levier de maîtrise des coûts. Les modèles les plus récents sont plus intelligents, mais aussi beaucoup plus chers. Pour la plupart des tâches de lecture, de grep, de refactor simple ou de debug, un modèle petit et rapide fait parfaitement l’affaire.

Modèle Usage recommandé Prix relatif Rapide ? Précis sur du code ?
GPT-5-mini Tâches simples, refactor, grep, explications, scripts courts Bas Oui Suffisant
GPT-5.4-mini Tâches un peu plus complexes, debug ciblé, explications structurées Modéré Oui Bon
GPT-5.3-Codex Génération de code, architecture moyenne, tâches techniques variées Élevé Moyen Très bon
GPT-5.4 Complexité élevée, raisonnement long, gros projets, revue de sécurité Très élevé Moyen Excellent
GPT-5.5 À éviter sauf cas très spécifiques et justifiés Excessif Variable Excellent mais prohibitif

Coût : Pour 80 % des tâches quotidiennes, la catégorie quick est le bon choix. Réservez GPT-5.4 aux revues de sécurité, aux architectures complexes, ou aux labos finaux. GPT-5.5 est presque toujours une erreur économique dans un contexte professionnel.

Comment changer de modèle dans un prompt :

/model gpt-5-mini
Analyse ce script Python et dis-moi pourquoi il plante.

Ou directement :

@model:gpt-5-mini corrige ce fichier main.py

2.4 Exemple concret : débugguer un script SQL dans PostgreSQL ou MSSQL

Prenons un cas fréquent : un script SQL censé lister les commandes en retard, mais qui renvoie 0 résultat.

SELECT c.id, c.date_commande, c.statut
FROM commandes c
JOIN clients cl ON c.client_id = cl.id
WHERE c.statut = 'EN_ATTENTE'
 AND c.date_commande < NOW() - INTERVAL '7 days'
 AND cl.region = 'NORD';

Vous suspectez un problème de fuseau horaire, de type de donnée, ou de jointure. Vous pouvez demander à OMO :

Le script commandes_retard.sql renvoie 0 résultat alors qu'on sait qu'il y a des commandes en retard. Analyse le fichier, vérifie le schéma des tables commandes et clients dans la base PostgreSQL de recette, et propose une correction.

L’agent va :

  1. Lire le fichier SQL.
  2. Inspecter le schéma (\d commandes, \d clients ou INFORMATION_SCHEMA).
  3. Identifier une incohérence (par exemple cl.region est en majuscules dans la table, ou date_commande est un timestamp without time zone).
  4. Proposer une version corrigée.
  5. Éventuellement exécuter la requête corrigée si vous lui donnez l’autorisation.

Pour MSSQL, les commandes équivalentes utilisent sqlcmd ou SELECT * FROM INFORMATION_SCHEMA.COLUMNS. La logique reste la même : lire, comparer le schéma, corriger, tester.

Astuce : Quand vous demandez une analyse SQL, précisez toujours le SGBD (PostgreSQL, MSSQL, Oracle, MySQL). Cela évite au modèle de proposer une syntaxe incompatible et fait gagner du temps.

2.5 Anti-patterns à éviter avec les modèles

  • Toujours utiliser le plus gros modèle “au cas où” : c’est le meilleur moyen de multiplier par dix votre facture sans améliorer le résultat.
  • Ne pas préciser la stack technique : un modèle petit se débrouille très bien si vous précisez PostgreSQL, MSSQL, Flask, Spring Boot, etc.
  • Demander du code sans demander de tests : OMO peut générer des tests, mais il faut le lui demander explicitement.
  • Oublier le contexte : un modèle n’a pas la mémoire de votre entreprise. Utilisez @librarian ou /init-deep pour l’enrichir.

2.6 Récapitulatif des bons réflexes fondamentaux

Situation Modèle Agent Raison
Lire un fichier et expliquer Catégorie quick Sisyphus Pas besoin de plus
Corriger un script simple Catégorie quick Sisyphus Rapide et économique
Optimiser une requête SQL Catégorie quick Sisyphus Suffisant avec le schéma
Planifier une feature GPT-5.4-mini Prometheus Besoin de structuration
Revue de sécurité GPT-5.4-mini Oracle Précision nécessaire
Architecture complexe GPT-5.4 Hephaestus Raisonnement long

2.7 Mini-lab 1 : Analyser et corriger un petit script Python buggy

Objectif : Utiliser OMO pour diagnostiquer et corriger un script Python simple.

Durée : 10 minutes.

Prérequis : OpenCode installé, Python 3.10+ disponible.

Étapes :

  1. Créez un dossier lab1-python-debug.
  2. Créez un fichier process_orders.py :
import csv

def load_orders(path):
  with open(path, 'r') as f:
    reader = csv.DictReader(f)
    return [row for row in reader]

def total_by_status(orders):
  totals = {}
  for order in orders:
    status = order['status']
    amount = order['amount']
    totals[status] = totals.get(status, 0) + amount
  return totals

if __name__ == '__main__':
  orders = load_orders('orders.csv')
  print(total_by_status(orders))
  1. Créez un fichier orders.csv :
id,status,amount
1,PENDING,120.50
2,PAID,85.00
3,PENDING,45.00
  1. Lancez OMO et demandez :
Le script process_orders.py plante avec une TypeError. Analyse-le, explique l'erreur, corrige-le, puis exécute-le pour vérifier.

Sortie attendue : Le script corrigé doit additionner les montants comme des flottants et afficher {'PENDING': 165.5, 'PAID': 85.0}.

Variante avancée : Demandez ensuite à l’agent d’ajouter des tests unitaires avec pytest.

Ajoute des tests unitaires pour process_orders.py avec pytest. Les tests doivent couvrir le cas nominal et le cas où le fichier CSV est vide.

Critères de réussite :

  • L’agent identifie que order['amount'] est une chaîne de caractères.
  • Il applique float() avant l’addition.
  • Le script s’exécute sans erreur et affiche les totaux corrects.
  • Le modèle utilisé reste dans la catégorie quick.
  • (Optionnel) Des tests pytest sont ajoutés et passent.

3. Oh My OpenAgent : l’orchestration multi-agents (25 min) + Mini-lab 2

3.1 Présentation de l’équipe d’agents

OMO ne fait pas tout avec un seul cerveau. Il délègue. C’est un peu comme une équipe de consultants : chacun a une spécialité, et le routing automatique choisit le bon profil pour la bonne tâche.

Sisyphus

C’est l’agent par défaut, celui qui exécute. Son nom vient du mythe : il pousse le rocher, avance pas à pas, ne se plaint pas. Sisyphus est parfait pour les tâches concrètes : “corrige ce bug”, “ajoute une fonction”, “exécute ce script”, “fais ce rebase”.

Sisyphus utilise souvent des modèles à petit contexte mais de haut niveau comme GPT-5.4, Kimi K2.7-Code ou GLM-5.2 quand on force un modèle au lieu de laisser les catégories. Le routing par catégorie choisit automatiquement le meilleur rapport qualité/coût.

Quand vous ne savez pas quel agent choisir, commencez par Sisyphus. Il est polyvalent, efficace et économique.

Prometheus

Prometheus planifie. Quand vous avez un projet un peu gros, il le découpe en tâches ordonnées. C’est l’agent à invoquer avec @plan ou quand vous voulez une roadmap avant de coder. Prometheus est read-only : il ne peut pas exécuter de code.

Prometheus est particulièrement utile quand plusieurs fichiers, plusieurs technologies ou plusieurs étapes sont en jeu. Il évite de partir tête baissée et de se perdre en cours de route.

Hephaestus

L’architecte. Il conçoit des solutions techniques, choisit les patterns, structure le code. Appelez-le pour des décisions d’architecture ou des implémentations complexes qui demandent un raisonnement structuré.

Atlas

Atlas explore et cartographie. Il est utile pour comprendre une codebase inconnue : “quels sont les modules principaux ?”, “où est défini tel service ?”, “quelle est la dépendance entre ces deux packages ?”. Atlas est un excellent compagnon de premier jour sur un projet.

Oracle

Oracle est l’architecte et reviewer. Il fait de la revue, de la sécurité et de la qualité. Il dit ce qui est bien, ce qui est mal, ce qui est risqué. Utilisez-le systématiquement avant de livrer du code critique. C’est l’agent qui vous évite de pousser un secret en production.

Metis

Metis est le consultant pré-planification. Avant que Prometheus n’écrive un plan, Metis analyse la conversation pour détecter les angles morts : questions oubliées, ambiguïtés, risques de sur-ingénierie. C’est le garde-fou du planificateur. Invoqué automatiquement par Prometheus avant chaque génération de plan.

Exemple concret : vous demandez “ajoute un système d’authentification”. Sans Metis, Prometheus pourrait sur-ingénierie dès le premier plan : trois providers OAuth, gestion des rôles, permissions fines, audit logs. Avec Metis, il pose d’abord les bonnes questions : “quel provider ?”, “besoin de MFA ?”, “rôles simples ou complexes ?”, “exposition publique ou interne ?”. Le plan final est plus juste, plus rapide à exécuter, et moins cher.

Momus

Momus est le critique. Il remet en question les plans, détecte les biais, souligne les risques. C’est un excellent garde-fou avant un déploiement ou une décision d’architecture. Si tout le monde dit oui, Momus dit “attendez, et si…”.

Explore et Librarian

Ce sont des agents de recherche. Explore part à la découverte de code avec les outils du shell (grep, glob, ast-grep). Librarian recherche en ligne (documentation officielle, GitHub, Context7, web search). Ils peuvent tourner en arrière-plan pendant que vous faites autre chose.

3.2 Comment invoquer un agent

La syntaxe la plus simple est la mention @agent au début ou dans le prompt :

@prometheus planifie la création d'un endpoint REST pour lister les pods Kubernetes
@oracle relis ce Dockerfile et dis-moi si tu vois des failles de sécurité

Vous pouvez aussi utiliser des slash commands :

@plan "ajouter une authentification par token à l'API Flask"

3.3 Pourquoi appeler d’autres agents alors que Sisyphus pourrait le faire

La tentation est forte de tout donner à Sisyphus. Il est généraliste, rapide, efficace. Mais deux problèmes apparaissent rapidement.

Premier problème : le coût. Sisyphus avec un gros modèle sur une grosse tâche coûte cher. En décomposant la tâche, on peut utiliser des modèles petits pour les sous-tâches simples et des modèles grands seulement là où c’est nécessaire.

Deuxième problème : la qualité. Un seul agent généraliste peut oublier des étapes, faire des raccourcis, ou ne pas voir un risque de sécurité. Un agent planificateur, un architecte et un reviewer travaillant en chaîne donnent un résultat plus fiable.

Exemple de décomposition :

@plan "Créer un endpoint REST qui expose les statuts des pods Kubernetes d'un namespace donné"

Prometheus va créer un plan : choisir le framework, structurer les routes, appeler l’API Kubernetes, gérer les erreurs. Puis Atlas ou Sisyphus exécute chaque étape. Enfin Oracle relit.

Le coût total est souvent inférieur à celui d’un seul agent GPT-5.4 qui ferait tout en une fois, parce que chaque sous-tâche peut être traitée avec le modèle minimum nécessaire.

3.4 Exemple de décomposition complète

Prenons un cas réel : “corriger une erreur 500 sur l’endpoint /api/orders”. Voici comment OMO peut décomposer la tâche :

  1. Explore : trouve les fichiers liés à /api/orders.
  2. Atlas : cartographie les dépendances entre le contrôleur, le service et la base.
  3. Sisyphus (catégorie quick) : lit les fichiers et les logs récents.
  4. Hephaestus (GPT-5.4-mini) : propose une correction architecturale si le bug est structurel.
  5. Sisyphus (catégorie quick) : applique la correction.
  6. Oracle (GPT-5.4-mini) : relit le patch.
  7. Sisyphus : exécute les tests.

Chaque agent utilise le modèle adapté. Le coût global reste maîtrisé parce que seules les étapes critiques utilisent un modèle moyen.

3.5 Les catégories de tâches et le routing automatique

OMO classe les tâches en catégories. Voici les principales :

Catégorie Agent typique Exemple
Quick Sisyphus Question rapide, commande shell, mini-correction
Plan Prometheus + Metis Découper un projet ou une feature
Code Hephaestus / Sisyphus Implémenter, refactorer
Review Oracle Sécurité, qualité, bug hunt
Explore Explore / Atlas Cartographier, chercher
Memory Librarian Documentation, conventions
Critical Momus + Oracle Décision à haut risque

Le routing automatique examine votre prompt et choisit la catégorie. Vous pouvez aussi forcer un agent avec @agent.

3.6 Le mode ulw (ultrawork)

ulw est un mode d’auto-motivation. Quand une tâche est longue ou répétitive, l’agent peut entrer dans une boucle de travail concentré, où il continue d’avancer sans relâche jusqu’à atteindre l’objectif ou jusqu’à épuisement d’une limite de sécurité.

Utilisez ulw quand :

  • Vous avez une tâche répétitive sur beaucoup de fichiers.
  • Vous voulez qu’un agent continue de travailler en arrière-plan.
  • Vous êtes prêt à laisser l’agent itérer plusieurs minutes.
/ulw refactore tous les scripts Python de ce dossier pour remplacer os.path par pathlib

Attention : ulw peut consommer beaucoup de tokens si la tâche est mal cadrée. Précisez toujours un critère d’arrêt clair et un plafond de modèle.

3.7 Quand utiliser chaque agent : un guide rapide

Votre besoin Agent à privilégier Pourquoi
“Corrige ce bug” Sisyphus Direct, exécuteur
“Comment structurer ce projet ?” Prometheus Planification
“Est-ce que ce code est sûr ?” Oracle Revue de sécurité
“Je ne comprends pas cette codebase” Atlas / Explore Exploration
“Ce plan est-il complet ?” Metis Détection d’angles morts avant planification
“Déploie ça sans risque” Momus + Oracle Garde-fous
“Code-moi cette architecture” Hephaestus Conception technique

3.8 /start-work corrigé : Prometheus planifie, Atlas exécute

Le flux correct est le suivant :

  1. Vous écrivez @plan "tâche" ou un prompt complexe.
  2. Prometheus interviewe, clarifie, et crée un plan structuré.
  3. Vous exécutez /start-work.
  4. Atlas lit le plan et exécute les étapes.

Prometheus est read-only : il ne peut pas exécuter de code. Atlas est l’exécuteur. Confondre les deux rôles mène à des plans qui ne sont jamais appliqués.

@plan "Créer un endpoint REST qui expose les statuts des pods Kubernetes d'un namespace donné"
/start-work

3.9 Pourquoi /init-deep est un investissement, pas une perte de temps

/init-deep scanne le projet en profondeur. Il lit les fichiers clés (package.json, pyproject.toml, Dockerfile…), identifie la stack technique, les conventions de nommage, les règles de linting, les dépendances, mais aussi les skills et MCP pertinents. Il génère un fichier AGENTS.md qui sert de briefing commun à tous les agents : Sisyphus sait dans quel langage coder, Prometheus connaît l’architecture avant de planifier, Oracle applique les règles de sécurité du projet, Explore ne part pas chercher dans les mauvais dossiers. Sans ce contexte partagé, chaque agent repart de zéro à chaque prompt.

Concrètement, /init-deep va lire :

  • Les fichiers de configuration (package.json, pyproject.toml, requirements.txt, Dockerfile).
  • Les règles de style et de linting.
  • La structure des dossiers.
  • Les tests existants.
  • Les conventions de nommage.

Le fichier AGENTS.md produit sert de mémoire partagée. Quand Sisyphus, Hephaestus ou Oracle reprennent le travail, ils n’ont pas besoin de redécouvrir le projet.

Certains utilisateurs trouvent que /init-deep prend du temps au début. C’est vrai. Mais ce temps est rentabilisé dès la deuxième ou troisième question, parce que l’agent connaît déjà la structure du projet, les outils utilisés, les conventions de nommage et les dépendances.

Sans /init-deep, vous risquez de devoir répéter à chaque prompt : “c’est du Python”, “on utilise Flask”, “la base c’est PostgreSQL”, “les tests sont avec pytest”. Avec /init-deep, tout cela devient implicite.

/init-deep

Astuce : Lancez /init-deep dès que vous arrivez sur un projet que vous ne connaissez pas. C’est le meilleur moyen de ne pas perdre du temps en spécifications et d’éviter les mauvaises suppositions.

3.10 Mini-lab 2 : Lancer /init-deep puis utiliser ulw pour automatiser une tâche simple

Objectif : Initialiser un projet et automatiser une tâche répétitive avec ulw.

Durée : 15 minutes.

Prérequis : Un projet existant avec au moins 5 fichiers Python, ou le lab 1 qui peut être réutilisé.

Étapes :

  1. Allez dans le dossier du projet.
  2. Lancez /init-deep et attendez le résumé.
  3. Demandez :
/ulw ajoute une docstring à chaque fonction de chaque fichier Python de ce dossier. Utilise la catégorie quick. Arrête-toi quand toutes les fonctions ont une docstring.
  1. Vérifiez le résultat avec :
opencode lsp_diagnostics .

Sortie attendue : Toutes les fonctions Python ont une docstring concise. Aucune erreur de syntaxe n’est introduite.

Critères de réussite :

  • /init-deep produit un résumé correct de la stack.
  • ulw termine sans intervention manuelle.
  • Les docstrings sont présentes et pertinentes.
  • Le coût reste faible grâce à la catégorie quick.

4. Fonctionnalités avancées d’OMO (20 min) + Mini-lab 3

4.1 Sous-agents et agents background en parallèle

OMO peut lancer des agents en arrière-plan. Cela permet de faire plusieurs choses en même temps : par exemple, demander à Explore de cartographier un projet pendant que Sisyphus corrige un fichier.

Pour lancer un agent en arrière-plan, utilisez run_in_background=true ou la syntaxe @explore background .... Vous pourrez récupérer le résultat plus tard avec un identifiant de tâche.

C’est particulièrement puissant pour les investigations longues. Vous pouvez lancer une recherche, continuer à travailler sur autre chose, et revenir consulter le résultat quand il est prêt.

4.2 Différences entre sous-agents, agents et skills

Élément Description Exemple
Agent Entité autonome avec un rôle Sisyphus, Prometheus, Oracle
Sous-agent Agent appelé par un autre agent pour une sous-tâche Sisyphus appelle Explore pour chercher un fichier
Skill Module de connaissances ou de capacités skill git-master

Les skills sont des extensions qui donnent des super-pouvoirs à un agent. Ils peuvent être globaux (disponibles partout) ou liés au répertoire courant.

4.3 Les skills : créer/utiliser un skill, exemple de skill proxy

Un skill est un fichier de configuration et éventuellement du code qui encapsule une capacité. Par exemple, le skill git-master fournit des commandes avancées de git.

Pour utiliser un skill existant :

/load git-master
Rebase ma branche feature/login sur main et résous les conflits.

Pour créer un skill, vous écrivez un fichier dans .opencode/skills/ ou ~/.config/opencode/skills/. Voici un exemple minimal : un skill “proxy” qui permet de se connecter à des ressources internes sans exposer les mots de passe dans le prompt.

name: proxy
version: 1.0.0
description: Proxy sécurisé pour IBM MQ, Vault, Kafka, psql, sqlcmd
commands:
 connect_mq:
  description: Ouvre une connexion MQ en masquant le mot de passe
  exec: python3 /opt/tools/mq_proxy.py --env {env}
 connect_vault:
  description: Lit un secret Vault via un wrapper
  exec: vault read -field=value {path}

L’idée est simple : le mot de passe n’est jamais dans le prompt ou dans l’historique de chat. Il est lu depuis un gestionnaire de secrets ou une variable d’environnement côté outil.

Astuce : Tous les skills contenant des credentials doivent utiliser des variables d’environnement ou un vault. Ne jamais écrire de secret dans un fichier de skill versionné.

4.4 Les scopes

Les skills et les configurations peuvent être :

  • Globaux : dans ~/.config/opencode/. Ils s’appliquent à tous vos projets.
  • Liés au répertoire courant : dans .opencode/ à la racine du projet. Ils s’appliquent uniquement à ce projet.

L’ordre de priorité est : configuration locale > configuration globale.

Cela permet de partager des conventions d’équipe via le dépôt git du projet, tout en gardant vos préférences personnelles dans votre home.

4.5 Les plugins

Les plugins sont des extensions qui ajoutent des outils à OMO. Ils peuvent intégrer des services externes, des bases de données, ou des systèmes internes.

Exemples de plugins utiles :

  • Plugin Kubernetes pour kubectl.
  • Plugin SQL pour exécuter des requêtes.
  • Plugin git pour des opérations avancées.
  • Plugin LDAP ou Active Directory pour des recherches d’utilisateurs.
  • Plugin JIRA pour créer des tickets automatiquement depuis un bug report.

Un plugin se charge généralement automatiquement quand OMO détecte la configuration correspondante dans votre projet. Vous pouvez aussi le charger explicitement avec /load plugin:<nom>.

4.6 Les MCP

Les MCP (Model Context Protocol) sont des connecteurs normalisés pour enrichir le contexte de l’agent. Ils permettent à OMO d’accéder à des données ou des outils externes sans code spécifique. La liste officielle est sur opencode.ai/docs/mcp-servers/ et github.com/modelcontextprotocol/servers.

Exemples concrets de MCP :

  • MCPs inclus dans OpenCode : Context7 (documentation officielle de librairies), Grep.app (recherche de code dans des dépôts GitHub publics).
  • MCPs de recherche : SearXNG (web search privé).
  • MCPs avancés : Android Emulator (émulation mobile), WordPress (gestion de contenu), Jira/Confluence (Atlassian).

Exemple d’utilisation de SearXNG :

@searxng recherche la dernière version stable de FastAPI et les changements majeurs depuis la 0.100

Exemple d’utilisation de Context7 :

@context7 /django/docs comment configurer un middleware personnalisé

Playwright n’est pas un skill : c’est un MCP. Dans OMO, il est accessible via la slash command /playwright ou comme MCP server. Le serveur s’exécute dans un conteneur Docker qui pilote un navigateur.

Ces outils donnent à l’agent des informations fraîches sans que vous ayez à les copier-coller. Ils sont particulièrement utiles pour des technologies qui évoluent vite.

4.7 Exemple complet : investigation d’une dépendance avec Context7 + SearXNG

Imaginez que vous devez intégrer une librairie Python que vous ne connaissez pas, par exemple httpx pour remplacer requests. Vous pouvez combiner plusieurs sources :

@context7 /encode/httpx montre-moi comment faire une requête GET avec timeout et gestion d'erreur

Puis, pour vérifier les bonnes pratiques actuelles :

@searxng httpx vs requests python best practices 2026

Enfin, demandez à Sisyphus d’appliquer :

@sisyphus remplace requests par httpx dans api_client.py. Gère le timeout et les exceptions.

Ce workflow montre comment OMO combine connaissance statique (Context7), connaissance fraîche (SearXNG) et exécution (Sisyphus).

4.8 Heads-up/tips : @librarian, @explore, @oracle, @plan

Voici quelques mentions rapides très utiles :

  • @librarian : retrouve de la documentation, des conventions, ou des exemples de code dans votre base de connaissances.
  • @explore : explore un projet ou une codebase pour vous.
  • @oracle : demande un avis critique sur une solution.
  • @plan : demande un plan structuré avant toute exécution.

Ces mentions peuvent être combinées :

@plan @explore comment intégrer ce nouveau microservice avec l'API existante

4.9 Mini-lab 3 : Utiliser @librarian + @explore pour une investigation, puis déléguer

Objectif : Combiner la recherche documentaire et l’exploration de code pour résoudre un problème sans intervention manuelle.

Durée : 15 minutes.

Prérequis : Un projet avec une structure un minimum réaliste, ou le lab 2 réutilisé.

Étapes :

  1. Dans le dossier projet, demandez :
@explore liste-moi tous les fichiers Python qui interagissent avec une base de données ou une API externe
  1. Pendant qu’Explore travaille, demandez en parallèle :
@librarian quelles sont les conventions de l'équipe pour nommer les variables de connexion à la base de données
  1. Quand les deux résultats sont revenus, demandez à Sisyphus :
@sisyphus d'après les résultats de @explore et @librarian, refactorise le fichier data_access.py pour utiliser les conventions de nommage de l'équipe. Utilise la catégorie quick.

Sortie attendue : Le fichier est refactorisé avec les bonnes conventions. Les autres fichiers ne sont pas touchés.

Critères de réussite :

  • Explore identifie correctement les fichiers concernés.
  • Librarian retrouve les conventions applicables.
  • Sisyphus applique les changements sans casser le code.
  • Le refactoring est minimal et ciblé.

5. Workflows concrets du quotidien (25 min) + Mini-lab 4

Cette section est la plus proche de votre métier. Nous allons passer en revue cinq workflows très concrets, avec pour chacun un exemple de prompt et les commandes attendues.

5.1 Investigation d’un pod Kubernetes en erreur

Scénario : un pod redémarre en boucle dans le namespace production. Vous voulez comprendre pourquoi sans passer une heure à copier-coller des commandes.

Prompt OMO :

Investigue le pod qui redémarre en boucle dans le namespace production sur Kubernetes. Donne-moi : nom du pod, dernier événement, derniers logs, image utilisée, et une hypothèse de cause. Utilise la catégorie quick.

Commandes que l’agent va probablement exécuter :

kubectl get pods -n production
kubectl describe pod <pod-name> -n production
kubectl logs <pod-name> -n production --previous
kubectl get events -n production --sort-by='.lastTimestamp'

L’agent va synthétiser les résultats en un résumé lisible. Vous n’avez plus qu’à prendre une décision.

Astuce : Quand vous investiguez un pod, demandez toujours --previous pour voir les logs du conteneur avant le redémarrage. Les logs actuels d’un pod qui redémarre en boucle sont souvent vides.

5.2 Debug SQL avancé et rédaction d’un bug report

Vous avez une requête complexe qui est lente ou incorrecte. Vous voulez la corriger ET rédiger un rapport de bug clair pour votre équipe. C’est un workflow quotidien pour les supports de niveau 2 et 3.

Cas PostgreSQL : requête lente

Prompt OMO :

La requête reporting_mensuel.sql sur PostgreSQL met 45 secondes à s'exécuter. Optimise-la sans changer le résultat. Puis rédige un bug report au format Markdown avec : titre, description, requête originale, requête corrigée, explication, et tests suggérés. Utilise la catégorie quick.

Cas MSSQL : résultat incorrect

Prompt OMO :

La procédure stockée sp_GetMonthlySales sur MSSQL retourne des montants doublés à partir du 15 du mois. Analyse la procédure, le schéma des tables impliquées, et propose une correction. Utilise la catégorie quick.

L’agent va, dans les deux cas :

  1. Lire la requête ou la procédure stockée.
  2. Inspecter le schéma des tables concernées.
  3. Expliquer le plan d’exécution (EXPLAIN ANALYZE pour PostgreSQL, plan de requête pour MSSQL).
  4. Proposer une correction.
  5. Rédiger le bug report si demandé.

Exemple de sortie attendue pour le bug report :

## Bug report : lenteur du reporting mensuel

### Description
La requête `reporting_mensuel.sql` met 45 secondes à s'exécuter sur PostgreSQL de recette.

### Requête originale
```sql
SELECT * FROM commandes c
JOIN lignes l ON l.commande_id = c.id
WHERE c.date_commande >= DATE_TRUNC('month', NOW());
```

### Requête corrigée
```sql
CREATE INDEX idx_commandes_date_trunc ON commandes (DATE_TRUNC('month', date_commande));
SELECT c.id, c.date_commande, SUM(l.montant)
FROM commandes c
JOIN lignes l ON l.commande_id = c.id
WHERE c.date_commande >= DATE_TRUNC('month', NOW())
GROUP BY c.id, c.date_commande;
```

### Explication
La requête originale utilisait `SELECT *`, provoquait un seq scan et chargeait trop de colonnes inutiles. La version corrigée limite les colonnes et ajoute un index fonctionnel.

### Tests suggérés
1. Vérifier le temps d'exécution sur un mois complet.
2. Vérifier que le total reste identique avec la requête originale.

5.3 Manipulation git complexe avec le skill git-master

Le skill git-master est obligatoire pour tout ce qui touche à git au-delà d’un simple commit. Il gère le rebase interactif, le bisect, la recherche d’historique (git log -S), et les merges conflictuels.

Exemple de rebase conflictuel :

/load git-master
Rebase ma branche feature/api-v2 sur main. Résous les conflits en gardant les changements de feature/api-v2 pour les routes et ceux de main pour les tests. Utilise la catégorie quick.

Exemple de git log -S :

/load git-master
Trouve dans quel commit la fonction calculateTotal a été supprimée du fichier billing.js

Exemple de bisect :

/load git-master
Git bisect pour trouver le commit qui a introduit l'erreur "connection timeout" dans les tests d'intégration.

Exemple de merge conflictuel :

/load git-master
Merge la branche release/2026-06 dans main. Il y a des conflits sur les fichiers de configuration. Résous-les en conservant les valeurs de production de main et les nouvelles clés de release/2026-06.

Attention : Quand vous demandez une manipulation git, sauvegardez votre travail et vérifiez le résultat avec git status et git log --oneline avant de pousser. Un agent peut faire une erreur, surtout sur des conflits complexes.

5.4 Automatisation Python/SQL pour dépanner une intégration logicielle

Vous devez comparer les données entre deux systèmes, par exemple un CRM et un ERP. OMO peut écrire un script Python qui lit les deux sources, compare les IDs, et produit un rapport d’écart.

Cas 1 : comparaison de clients entre CRM et ERP

Prompt :

Écris un script Python compare_clients.py qui : se connecte à PostgreSQL (table crm.clients) et à MSSQL (table erp.t_customers), compare les clients par email, et génère un CSV avec les écarts. Utilise des variables d'environnement pour les credentials. Utilise la catégorie quick.

Le script attendu ressemblera à ceci :

import os
import csv
import psycopg2
import pyodbc

POSTGRES_DSN = os.environ['POSTGRES_DSN']
MSSQL_DSN = os.environ['MSSQL_DSN']

def load_postgres_emails():
  conn = psycopg2.connect(POSTGRES_DSN)
  cur = conn.cursor()
  cur.execute("SELECT email FROM crm.clients WHERE actif = true")
  return {row[0].lower() for row in cur.fetchall()}

def load_mssql_emails():
  conn = pyodbc.connect(MSSQL_DSN)
  cur = conn.cursor()
  cur.execute("SELECT email FROM erp.t_customers WHERE status = 'A'")
  return {row[0].lower() for row in cur.fetchall()}

def main():
  pg_emails = load_postgres_emails()
  ms_emails = load_mssql_emails()
  only_in_pg = sorted(pg_emails - ms_emails)
  only_in_ms = sorted(ms_emails - pg_emails)

  with open('ecarts_clients.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['source', 'email'])
    for email in only_in_pg:
      writer.writerow(['postgres', email])
    for email in only_in_ms:
      writer.writerow(['mssql', email])

  print(f"Écarts trouvés : {len(only_in_pg)} dans PostgreSQL, {len(only_in_ms)} dans MSSQL.")

if __name__ == '__main__':
  main()

Cas 2 : génération d’un script SQL de réconciliation

Vous pouvez aussi demander à OMO de générer directement une requête SQL de réconciliation, par exemple pour trouver les commandes présentes dans l’ERP mais absentes du CRM.

Écris une requête SQL qui compare les commandes de l'ERP (MSSQL, table erp.t_orders) avec celles du CRM (PostgreSQL, externe via postgres_fdw, table crm.orders). Liste les commandes présentes dans erp.t_orders mais absentes de crm.orders. Utilise la catégorie quick.

Cela permet de déléguer la synthèse de deux sources à une requête exécutable par votre DBA ou votre outil de supervision.

Coût : Ce genre de script ou de requête est un cas d’école pour la catégorie quick. N’utilisez pas un modèle plus gros.

5.5 Mode “proxy” : se connecter à IBM MQ, Vault, Kafka, psql, sqlcmd

Le mode proxy est une pratique de sécurité. Au lieu d’écrire un mot de passe dans le prompt, vous demandez à OMO d’utiliser un outil intermédiaire qui lit le secret depuis un endroit sûr.

Exemple avec psql :

Connecte-toi à la base PostgreSQL de recette via le script /opt/scripts/psql_proxy.sh et exécute la requête dans check_users.sql. N'affiche jamais le mot de passe.

Exemple avec Vault :

Utilise le skill proxy pour lire le secret secret/data/api-keys et injecter la clé dans config.json sans l'afficher.

Exemple avec Kafka :

Publie le message contenu dans message.json sur le topic orders via le wrapper /opt/tools/kafka_proxy.py. Ne me montre pas les credentials.

Le principe est toujours le même : l’agent n’a jamais le secret en clair. Le secret est géré par un outil externe de confiance.

5.6 Anti-patterns dans les workflows OMO

  • Donner les droits root à l’agent “juste pour aller plus vite” : c’est une erreur de sécurité. L’agent doit avoir les droits minimums.
  • Exécuter des commandes de production sans confirmation : configurez OMO pour demander une validation avant toute action critique.
  • Oublier de vérifier les logs de l’agent : l’agent peut mal interpréter une sortie de commande. Relisez toujours les commandes exécutées.
  • Utiliser un modèle trop gros pour une tâche simple : une investigation de pod ou un grep ne mérite pas GPT-5.4.
  • Pousser du code sans revue : même généré par OMO, le code doit être relu, idéalement par Oracle puis par un humain.

5.7 Mini-lab 4 : Scénario d’investigation pod Kubernetes

Objectif : Utiliser OMO pour investiguer un pod en erreur et produire un résumé actionnable.

Durée : 15 minutes.

Prérequis : Accès à un cluster Kubernetes (même de recette) avec au moins un pod en état CrashLoopBackOff ou Error.

Étapes :

  1. Connectez-vous au cluster :
kubectl config use-context <context>
  1. Demandez à OMO :
Dans le namespace recette, trouve le pod qui n'est pas Running, investigue sa cause, et propose une action corrective. Affiche les commandes exécutées et leurs sorties.
  1. L’agent va exécuter des commandes du type :
kubectl get pods -n recette
kubectl describe pod <pod> -n recette
kubectl logs <pod> -n recette --previous

Sortie attendue : Un rapport structuré avec le nom du pod, son statut, l’événement clé, l’erreur dans les logs, et une action corrective (par exemple “augmenter la limite mémoire” ou “corriger la variable d’environnement DATABASE_URL”).

Critères de réussite :

  • Le pod en erreur est identifié.
  • Les logs et événements sont collectés.
  • L’hypothèse de cause est cohérente.
  • L’action proposée est réalisable.

6. Lab final : Projet complet (20 min)

6.1 Objectif

Développer une mini application web de monitoring de pods Kubernetes, la containeriser, et la déployer sur Kubernetes. Vous utiliserez /start-work, Prometheus pour planifier, Atlas pour exécuter, et Oracle pour la revue.

6.2 Durée et prérequis

Durée : 20 minutes.

Prérequis :

  • Accès à un namespace Kubernetes.
  • Python 3.10+ et Flask installés localement.
  • kubectl CLI configuré.
  • Un compte pour pousser des images (registry interne ou Docker Hub).

6.3 Étapes

Étape 1 : Lancer le plan avec @plan

@plan "Créer une application Flask qui affiche la liste des pods d'un namespace Kubernetes avec leur statut. L'application doit être containerisée avec Docker et déployable sur Kubernetes via kubectl apply et un Service/Ingress."

Prometheus va produire un plan structuré, par exemple :

  1. Créer app.py avec Flask et kubernetes-client.
  2. Créer requirements.txt.
  3. Créer Dockerfile.
  4. Builder l’image et la pousser.
  5. Déployer sur Kubernetes.
  6. Exposer le service.
  7. Vérifier le déploiement.

Étape 2 : Exécuter avec /start-work

/start-work
@sisyphus exécute le plan de Prometheus. Utilise la catégorie quick pour les étapes simples et un modèle plus fort uniquement pour la configuration sécurisée de kubernetes-client.

L’agent va créer les fichiers, builder l’image, et déployer.

Exemple de contenu attendu pour app.py :

from flask import Flask, jsonify
from kubernetes import client, config
import os

app = Flask(__name__)

@app.route('/pods')
def pods():
  namespace = os.environ.get('NAMESPACE', 'default')
  config.load_incluster_config()
  v1 = client.CoreV1Api()
  pod_list = v1.list_namespaced_pod(namespace)
  result = []
  for pod in pod_list.items:
    result.append({
      'name': pod.metadata.name,
      'status': pod.status.phase,
      'restarts': pod.status.container_statuses[0].restart_count if pod.status.container_statuses else 0
    })
  return jsonify(result)

@app.route('/health')
def health():
  return jsonify({'status': 'ok'})

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=8080)

Étape 3 : Revue avec Oracle

@oracle relis app.py, Dockerfile et le déploiement Kubernetes. Cherche les problèmes de sécurité, les erreurs évidentes et les améliorations possibles.

Étape 4 : Déploiement sur Kubernetes

Les commandes attendues :

kubectl apply -f deployment.yaml
kubectl expose deployment pod-dashboard --type=LoadBalancer --port=8080
kubectl get svc pod-dashboard

Étape 5 : Vérification

kubectl get pods -n <votre-namespace>
curl http://<service>/pods

6.4 Critères de réussite

  • L’application Flask démarre localement ou dans un contètreur.
  • L’image est buildée et poussée.
  • Le pod tourne sur Kubernetes sans erreur.
  • La route expose bien /pods et /health.
  • Oracle n’a pas identifié de faille critique non corrigée.

6.5 Déroulement type du lab final

Voici comment se déroule concrètement ce lab en 20 minutes :

  1. Minute 0-2 : Lancement de @plan et récupération du plan de Prometheus.
  2. Minute 2-10 : Atlas/Sisyphus crée les fichiers et teste localement.
  3. Minute 10-14 : Revue par Oracle, corrections mineures si nécessaire.
  4. Minute 14-18 : Build, push et déploiement sur Kubernetes.
  5. Minute 18-20 : Vérification finale avec kubectl get pods et curl.

Si le temps est court, vous pouvez remplacer le déploiement réel par une simulation avec kubectl apply -f deployment.yaml sur un fichier généré par l’agent.

7. FAQ rapide et bonnes pratiques

Puis-je laisser OMO tourner sans surveillance ?

Non, sauf en mode ulw sur une tâche très bien cadrée et dans un environnement isolé. L’agent exécute des commandes réelles sur votre système. Surveillez les actions sensibles.

Que faire si l’agent fait une erreur ?

Revenez en arrière avec git, relisez les commandes exécutées, et affinez votre prompt. Les erreurs viennent souvent d’un manque de contexte ou d’une consigne floue.

Comment réduire la facture ?

  • Utilisez la catégorie quick par défaut.
  • Limitez la longueur des prompts.
  • Évitez les modèles gros pour les tâches simples.
  • Utilisez /init-deep une seule fois par session de travail.
  • Faites relire par Oracle seulement sur le code critique.

Est-ce que le code généré est de qualité professionnelle ?

Il est souvent correct, mais il faut le relire. Oracle aide, mais un humain doit valider avant une mise en production. OMO est un accélérateur, pas un remplaçant.

Quelles sont les limites d’OMO ?

  • L’agent ne sait pas ce qu’il ne sait pas. Il peut inventer des APIs ou des chemins.
  • Il peut mal interpréter des logs complexes.
  • Il n’a pas de mémoire permanente sauf si vous utilisez Librarian ou /init-deep.
  • Il ne remplace pas une revue de pair humaine.

Conclusion

Oh My OpenAgent et Oh My OpenAgent ne remplacent pas votre expertise. Ils l’amplifient. En moins de deux heures, vous avez vu comment :

  • Installer et lancer OMO.
  • Utiliser les bons modèles pour maîtriser les coûts.
  • Orchestrer des agents spécialisés selon la nature de la tâche.
  • Exploiter les skills, les plugins et les MCP.
  • Appliquer OMO à vos cas métier : pods Kubernetes, SQL, git, automatisation, rapports.
  • Construire et déployer une petite application avec un workflow multi-agents.

La clé est de choisir le bon agent et le bon modèle pour la bonne tâche. Commencez par la catégorie quick et Sisyphus. Quand le sujet est complexe, faites appel à Prometheus, Hephaestus et Oracle. Quand vous ne connaissez pas le terrain, lancez /init-deep, @explore ou @librarian.

Prochaine étape : choisissez un bug ou une tâche répétitive de votre backlog, et essayez de la résoudre avec OMO en respectant les règles de coût et de sécurité vues dans ce cours. Commencez petit, mesurez le gain, et itérez.

Like it ?

Get notified on new posts (max 1 / month)
Soyez informés lors des prochains articles

Leave a Reply

Your email address will not be published. Required fields are marked *