Appliquer toutes les connaissances acquises dans un projet complet en utilisant OpenCode et ses extensions.
📌 Git Workflow: Avant de commencer, créez une branche :
git checkout main && git pull git checkout -b feature/opencode-setup
Options de base :
| Configuration | Usage | Coût |
|---|---|---|
| OpenCode nu | Découverte | Gratuit (modèles free tier) |
| OpenCode + provider | Production | Selon provider |
| Oh My OpenCode | Projects complexes | + fonctionnalités avancées |
Source : github.com/code-yeongyu/oh-my-openagent (48K+ stars)
Oh My OpenCode transforms OpenCode into a multi-agent coding harness: an orchestrator delegates work to specialist agents that run in parallel.
Caractéristiques principales :
Orchestrateur multi-agents
Outils avancés
Compatible Claude Code
Installation :
# Via OpenCode
opencode install oh-my-opencode
# Ou manuellement
git clone https://github.com/code-yeongyu/oh-my-openagent ~/.opencode/plugins/oh-my-opencode
Configuration type :
{
"agents": {
"build": { "model": "claude-sonnet-4", "tools": ["write", "edit", "bash"] },
"explore": { "model": "claude-haiku", "tools": ["read", "grep", "glob"] },
"oracle": { "model": "claude-opus-4", "tools": ["read"] }
}
}
📌 Git: Committez votre configuration :
git add .opencode/ && git commit -m "feat: add OpenCode configuration"
Source : claudecodecamp.com/p/how-prompt-caching-actually-works-in-claude-code
“Prompt caching is the architectural constraint around which Claude Code is built. They declare SEVs when cache hit rates drop.” — Thariq Shihipar, Claude Code team
Sans caching :
Avec caching (90% hit rate) :
Request 1 (cold start):
input_tokens: 2854
cache_creation_input_tokens: 2727 ← écrit dans le cache
cache_read_input_tokens: 0
Request 2 (warm):
input_tokens: 127
cache_read_input_tokens: 2727 ← lu depuis le cache (90% moins cher)
| ✅ Faire | ❌ Ne pas faire |
|---|---|
| Contenu statique en premier | Timestamp en haut du system prompt |
| Données dynamiques en messages | Modifier le system prompt |
| Garder les mêmes outils | Ajouter/retirer des MCP mid-session |
| Garder le même modèle | Switcher modèle mid-session |
Cache TTL : 5 minutes d’inactivité. Chaque hit reset le timer.
{
"system": [
{
"type": "text",
"text": "You are a senior developer...",
"cache_control": { "type": "ephemeral" }
}
]
}
📌 Note: Cette partie est théorique. Pas de code à commit, mais prenez des notes.
Source : news.ycombinator.com/item?id=47460525 (1274 points, 621 comments)
Sécurité
“The default model sends prompts to Grok’s free tier, which trains on your data. You need to set an explicit ‘small_model’ in OpenCode to disable that.” — HN comment
“Provider auth shell commands executed without validation — potential RCE vulnerability.” — HN comment
Pratiques de développement
“They’re constantly releasing at extremely high cadence, where they don’t even spend time to test or fix things… they add, remove, refine, change, fix, and break features constantly.” — logicprog on HN
Performance
“1GB+ RAM for a TUI. The TypeScript codebase is probably larger than it needs to be.” — HN comment
“Codex (Rust) uses 80MB and 6% CPU vs Claude Code at multiple GBs and 100% CPU for the same task.” — jmmv on HN
# RECOMMANDATIONS HN
## Avant de commencer
1. Configurer explicitement le modèle principal ET le small_model
2. Utiliser un user dédié sans accès aux fichiers sensibles
3. Vérifier les permissions avant exécution
## Pendant l'usage
1. Tester dans un container sans internet pour projets sensibles
2. Monitorer les appels réseau (mitmproxy)
3. Piner les versions pour éviter les breaking changes
Source : codeintelligently.com/blog/ai-code-review-checklist
“I’ve reviewed over 500 AI-assisted PRs in the past year. Every team I worked with asked for the same thing: a concrete checklist.”
## Review Checklist (AI-generated code)
### Compréhension
- [ ] Le code est compréhensible sans explication
- [ ] Je peux expliquer chaque fonction à un collègue
- [ ] Pas de "magic" que personne ne comprend
### Qualité
- [ ] Style cohérent avec le reste du code
- [ ] Pas de code mort
- [ ] Dépendances légitimes (vérifier sur npm/pypi)
### Sécurité
- [ ] Pas de credentials en clair
- [ ] Pas d'APIs hallucinées
- [ ] Inputs validate
### Tests
- [ ] Couverture des cas critiques
- [ ] Tests significatifs (pas juste "expect true")
- [ ] Edge cases couverts
# Créer le label
gh label create ai-generated \
--color B8B8B8 \
--description "Code généré par IA - review approfondie requise"
# L'appliquer
gh pr edit <number> --add-label ai-generated
📌 Git Workflow (OBLIGATOIRE):
# Créer la branche projet git checkout main && git pull git checkout -b feature/projet-final⚠️ Travaillez TOUJOURS sur une branche. Ne jamais commit sur main.
Les LLM excellent sur ces types de projets :
| Projet | Stack suggérée | Pourquoi c’est facile |
|---|---|---|
| Lecteur RSS | Python/FastAPI ou Node/Express | CRUD simple, API standard |
| Lecteur de musique | Python/Flask + SQLite | Entités simples, peu de logique |
| Todo app avec auth | React + Express + SQLite | Patterns bien documentés |
| Blog statique | Hugo/Next.js | Génération de fichiers, sans backend |
| Projet | Stack suggérée | Défis |
|---|---|---|
| Chat temps réel | Elixir/Phoenix LiveView + WebSocket | Concurrency, state management |
| Dashboard analytics | React + FastAPI + PostgreSQL | Data viz, requêtes complexes |
| API gateway | Go ou Rust | Performance, error handling |
⚠️ Les applications “métier” sont AVANCÉES car les agents cassent sans guardrails.
| Projet | Pourquoi c’est difficile |
|---|---|
| E-commerce complet | Beaucoup de règles métier, edge cases |
| Système de facturation | Calculs précis, erreurs coûteuses |
| CRM personnalisé | Logique métier complexe, workflows |
Si vous choisissez un projet avancé :
00_workflow_transversal.md)Rust + Bevy (jeu vidéo 2D) :
# L'agent découvre Rust et Bevy en même temps que vous
cd mon-jeu-bevy
opencode
> I'm new to Rust and Bevy. Suggest a simple 2D game demo I can build.
> Start with movement and collision detection.
Idées de demos Bevy simples :
Elixir + Phoenix LiveView (app temps réel) :
# L'agent apprend Elixir avec vous
cd mon-app-phoenix
opencode
> I'm learning Elixir/Phoenix. Help me build a real-time chat app
> with LiveView. What's the simplest starting point?
Exemples Phoenix LiveView :
📌 Git: Committez la structure initiale :
git add . && git commit -m "chore: init project structure"
mkdir mon-projet-ia && cd mon-projet-ia
# Structure
mkdir -p src tests docs
touch AGENTS.md Makefile README.md
# Fichiers IA
touch .opencode/config.json
touch CLAUDE.md # Optionnel, compatible Claude Code
# AGENTS.md
## Contexte
Ce projet [description]. L'objectif est [objectif].
## Stack technique
- Langage : [Python/JS/Rust]
- Framework : [FastAPI/Express]
- Tests : [pytest/jest]
## Structure
- `src/` : Code source
- `tests/` : Tests
- `docs/` : Documentation
## Conventions
- Style : ruff/black/prettier
- Commits : conventional commits
- PRs : label `ai-generated` obligatoire
## Workflow IA
1. Utiliser Haiku pour exploration/recherche
2. Utiliser Sonnet pour implémentation standard
3. Réserver Opus pour debugging/architecture
4. Générer tests après chaque feature
5. Valider manuellement avant commit
## Prompt Cache Awareness
- Garder le même modèle pendant la session
- Ne pas ajouter/retirer d'outils mid-session
- Timestamp et données dynamiques → en messages
## Coûts
- Budget : $X/mois
- Monitorer usage avec `opencode stats`
- Préférer modèles frugaux
## Guardrails
- ❌ Jamais commit sans comprendre
- ❌ Jamais de credentials en clair
- ❌ Jamais valider dépendances sans vérifier
- ✅ Toujours label `ai-generated` sur PRs
- ✅ Toujours générer tests
Objectif : Comparer des modèles sans biais.
Inspiré de ComparIA (gouvernement français, DINUM) :
Comment utiliser :
YOU: "Je vais te donner deux modèles A et B de façon anonyme.
Tu dois générer la même réponse avec chacun, puis je voterai."
# Pattern pour choisir entre modèles
YOU: "I need to compare approaches. Give me 3 options:
1. A simple solution
2. A robust solution
3. An experimental solution
Just list the approaches, don't implement."
Usage recommandé :
Objectif : Économiser en utilisant un seul modèle.
// .opencode/config.json
{
"model": "openrouter/auto", // Routage automatique vers le meilleur modèle
// OU
"model": "anthropic/claude-3-haiku", // Le moins cher
}
Pattern : Reflection → Implementation
# ÉTAPE 1 : Reflection (modèle gratuit/cheap)
YOU: "Plan this feature. Don't implement yet.
Think through edge cases, error handling, file structure.
Output a detailed plan."
# ÉTAPE 2 : Implementation (modèle frugal)
YOU: "Now implement according to your plan.
Use the structure you defined.
One file at a time, with tests."
Modèles recommandés par phase :
📌 Voir
5_cours_couts.mdpour les détails complets sur l’optimisation des coûts et le pattern Reflection-then-Implement.
| Phase | Free Tier | Cheap Alternative |
|---|---|---|
| Reflection/Planning | Gemini Pro (free) | Haiku ($0.25/M tokens) |
| Implementation simple | Gemini Flash (free) | Minimax 2.5 via OpenRouter |
| Code review | Claude Code free tier | GLM-4.7 via OpenRouter |
| Debugging | Claude Code free tier | Opus (cher mais précis) |
Offres gratuites à connaître :
⚠️ Voir
00_workflow_transversal.mdpour les détails sur Yolo Mode et Catastrophic Forgetting.
Rappel : Ne pas laisser l’agent travailler sans supervision. Si vous utilisez ce mode, obligatoire : Docker OU user Linux sans permissions.
# Vérifier TOUJOURS après
git diff --stat
make test
Objectif : Déléguer automatiquement aux spécialistes.
{
"agents": {
"explore": { "model": "haiku", "tools": ["read", "grep", "glob"] },
"build": { "model": "sonnet", "tools": ["write", "edit", "bash"] },
"oracle": { "model": "opus", "tools": ["read"] }
}
}
Pattern recommandé :
YOU: "Add authentication to this app using the orchestrator pattern"
# Oh My OpenCode distribue automatiquement:
# 1. explore agent: lit le code existant
# 2. build agent: implémente l'auth
# 3. oracle agent: review finale
Suivi des tokens :
# Script de tracking (à ajouter dans Makefile)
def track_costs():
"""Monitor OpenCode costs from usage logs"""
# Check cache hit rate
# Alert if < 80%
# Budget vs actual
Alertes :
# Cost thresholds
budget_monthly: 50 # USD
alert_threshold: 0.8 # 80% of budget
cache_hit_min: 0.85 # 85% minimum
📌 Consulter
00_workflow_transversal.mdpour les règles complètes. Cette section donne les git consignes spécifiques à chaque étape du TP.
Phase 1 : Setup initial
# Créer la branche projet
git checkout main && git pull
git checkout -b feature/projet-final
# Après création de la structure
git add . && git commit -m "chore: init project structure"
Phase 2 : Configuration OpenCode
# Après configuration de .opencode/
git add .opencode/ AGENTS.md
git commit -m "chore: add opencode configuration"
Phase 3 : Implémentation feature
# APRÈS chaque étape logique de l'agent
git diff # Vérifier les changements
git diff --stat # Vue d'ensemble
git add src/feature/ && git commit -m "feat: add feature types"
# Slop removal avant commit si nécessaire
Phase 4 : Tests
# Après génération des tests
git add tests/
git commit -m "test: add tests for feature"
Phase 5 : Review finale
# Si corrections après review
git add src/
git commit -m "fix: address review feedback"
# Push final
git push origin feature/projet-final
gh pr create --label ai-generated
- [ ] Branche créée (pas sur main)
- [ ] Commits atomiques (un concept = un commit)
- [ ] git diff vérifié avant chaque commit
- [ ] Pas de slop (console.log, TODO, code mort)
- [ ] Messages descriptifs (feat/fix/test/docs)
- [ ] Push régulier vers remote
| Symptôme | Cause probable | Solution |
|---|---|---|
| Cache hit < 50% | Timestamp/prompts dynamiques | Déplacer en messages |
| Coût élevé | Mauvais modèle | Utiliser Haiku/Flash pour simple |
| Code incompréhensible | Prompt vague | Être plus spécifique |
| Tests qui passent mais bug | Tests incomplets | Ajouter edge cases |
| Boucle infinie | Tool spam | Simplifier le prompt |
À l’oracle (Opus) :
> I've been stuck on this for 3 attempts.
> Here's what I tried:
> 1. [approche 1] → [résultat]
> 2. [approche 2] → [résultat]
>
> The error is: [erreur complète]
>
> What should I try next?
## Description
[Description de la feature]
## Changements
- [Liste des changements]
## AI Usage
- [x] Code généré avec IA
- [ ] Code reviewed par humain
- [ ] Compris et validé
## Tests
- [ ] Tests unitaires passent
- [ ] Couverture > 70%
## Checklist Review
- [ ] Compréhensible sans explication
- [ ] Pas de credentials
- [ ] Dépendances vérifiées
- [ ] Style cohérent
| Métrique | Cible | Mesure |
|---|---|---|
| Cache hit rate | > 85% | cache_read_input_tokens / total |
| PR review time | Comparable | Temps moyen de review |
| Bug rate IA vs humain | Comparable | Bugs en prod |
| Test coverage | > 70% | pytest –cov |
Objectifs par niveau :
| Niveau | Critères | Points |
|---|---|---|
| Minimum | Code fonctionne, tests basiques, documentation minimale | 50% |
| Bon | + Coverage > 70%, AGENTS.md complet, workflow Git propre | 75% |
| Excellent | + Prompt caching optimisé, costs tracking, retours équipe | 100% |
| Temps | Checkpoint | Action si retard |
|---|---|---|
| 5 min | Structure créée, branche initialisée | Simplifier le scope |
| 15 min | AGENTS.md terminé, premier prompt lancé | Vérifier les guardrails |
| 35 min | Feature principale implémentée | Passer en mode “Yolo” avec Docker |
| 45 min | Tests écrits, documentation à jour | Reviewer puis merger |
| Critère | Points | Détails |
|---|---|---|
| Qualité code | 30% | Lisibilité, style, structure |
| Tests | 25% | Coverage, pertinence |
| Documentation | 15% | AGENTS.md, README, comments |
| Conventions IA | 15% | Labels, workflow, guardrails |
| Présentation | 15% | Rétrospective, learnings |
Avant de soumettre :
make test passemake lint passeai-generatedPattern retenu : L’IA génère, l’humain valide et commit.
Question clé : Comment allez-vous mesurer le ROI de l’IA dans votre workflow ?
Vous avez maintenant toutes les clés pour :
Rappel : L’IA est un outil. Votre responsabilité de développeur reste entière.