En bref : tstack est un ensemble de 9 skills d'agent que Theo (t3dotgg) a publié en open source le 26 octobre. Pour l'installer, il suffit de copier les dossiers dans ~/.claude/skills/ ou ~/.codex/skills/. Nous avons connecté Claude Code et Codex avec la même API Key de ce site. Résultats :
- Installation (cloner le dépôt + copier dans les deux clients) : environ 3 s ;
- Dans Codex 0.164.0, dire « sol loop » lui a fait lancer un sous-agent gpt-6.1-sol pour relire le code : 2 tours, 62 s, avec un bug de division entière repéré et corrigé ;
- Claude Code 2.1.310 ne peut pas lancer sol-loop tel quel et répond honnêtement « aucune voie ne permet de lancer Sol » ; après ajout d'un sous-agent avec
model: gpt-6.1-sol, il passe en 2 tours, 70 s ; full-sendlaisse l'Agent fusionner les PR tout seul. Nous avons ajouté des deux côtés une règle qui bloquegh pr merge, et elle a bloqué la commande dans les deux cas.
Créer une API Key et connecter Claude Code et Codex avec une seule clé →
Qu'est-ce que tstack
D'après le post d'annonce de Theo sur X, tstack regroupe « les skills que j'utilise tous les jours », nettoyés et publiés. Au moment de la rédaction, le post comptait environ 440 000 vues et le dépôt GitHub environ 2 000 étoiles, sous licence MIT. Le README indique qu'il fonctionne dans Claude Code comme dans Codex ; certains skills utilisent les fonctions de T3 Code quand elles existent et se rabattent sinon sur les outils natifs du client.
Les 9 skills et leurs déclencheurs (d'après le README du dépôt) :
| Skill | À dire | Ce qu'il fait |
|---|---|---|
| full-send | full send | Sans surveillance : termine la modification, la prouve, la relit, ouvre une PR, surveille la CI, puis la fusionne lui-même |
| full-stop | full stop | Comme full-send, mais s'arrête à « prête à fusionner » sans fusionner |
| council | council | Fait relire par trois modèles de fournisseurs différents jusqu'à ce qu'ils soient d'accord |
| sol-loop | sol loop | Fait relire la modification par GPT Sol en boucle jusqu'à accord des deux agents |
| file-pr | file a PR | Ouvre une PR courte qui commence par le problème, pas par la liste des changements |
| takeover | take over | Termine la PR, la branche ou le fil d'Agent de quelqu'un d'autre en lui laissant le crédit |
| babysit-pr | babysit | Suit une PR à travers la CI et les bots de revue, et corrige les vrais problèmes |
| modernize | modernize | Rebase une vieille PR et décide si elle doit encore exister |
| leaving-pr-comments | automatique | Fixe le format des commentaires que l'Agent publie en votre nom |
Les skills dépendent les uns des autres : full-send utilise sol-loop, file-pr et babysit-pr ; full-stop utilise full-send. Le plus simple est de tout installer.
Étape 1 : configurer Claude Code et Codex
Les deux clients peuvent utiliser la même clé de ce site.
Pour Claude Code, dans le fichier global ~/.claude/settings.json :
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY"
},
"model": "claude-sonnet-5-5"
}
L'adresse est https://api.aicodewith.ai, sans /v1. Pour toutes les étapes, voir Connecter Claude Code à une API tierce.
Pour Codex, dans le fichier global ~/.codex/config.toml :
model = "gpt-6.1-sol"
model_provider = "aicodewith"
[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "YOUR_API_KEY"
Pour le sens de chaque champ, voir Codex config.toml expliqué.
Étape 2 : installer tstack
git clone https://github.com/t3dotgg/tstack
mkdir -p ~/.claude/skills ~/.codex/skills
cp -R tstack/skills/* ~/.claude/skills/ # Claude Code
cp -R tstack/skills/* ~/.codex/skills/ # Codex
Ces étapes ont pris environ 3 s dans notre test. Une fois installés, Claude Code affiche les skills au démarrage, et Codex lit le SKILL.md correspondant quand vous dites un déclencheur. Pour savoir ce que sont les skills et où ils se rangent, voir Utiliser les Skills dans les agents IA.
Deux autres prérequis : les skills qui ouvrent des PR, comme full-send et babysit-pr, demandent une GitHub CLI authentifiée (gh) ; le script d'attente de babysit-pr demande python3.
Étape 3 : appeler GPT Sol avec la même clé et lancer sol-loop
Vérifiez d'abord que la clé atteint Sol. La liste des modèles de ce site contient gpt-6.1-sol. Nous avons envoyé une phrase à l'endpoint Responses et reçu un HTTP 200 en environ 4 s :
curl https://api.aicodewith.ai/chatgpt/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-6.1-sol","input":"Reply with exactly: SOL_OK"}'
Le projet de test est minuscule : calc.py dans average() a reçu un test de liste vide, mais la même modification a aussi changé / en //. Les tests existants ne vérifient qu'une moyenne entière, donc ils restent verts. Ce bug est laissé à Sol.
Dans Codex
Lancez dans le dossier du projet :
codex exec --sandbox workspace-write "sol loop: review the current uncommitted changes (no remote, use HEAD as the base). After approval, do not commit or push."
Terminé en 62 s. Le journal de session montre que Codex a d'abord cherché delegate_task de T3 Code, ne l'a pas trouvé, puis a utilisé son spawn_agent intégré pour lancer un sous-agent avec "model":"gpt-6.1-sol". Déroulé :
- Tour 1 : Sol signale que
average([1, 2])renvoie1au lieu de1.5; - L'Agent principal remet
/, ajoute un testtest_average_fractionalet vérifie que ce test échoue sur l'ancien code ; - Tour 2 : Sol approuve. Rien n'a été commité ni poussé.
Rapport final de Codex (traduit de l'original) :
2 tours de sol-loop terminés. GPT-6.1 Sol a donné son approbation finale ; rien ne reste ouvert.
- S1 corrigé : la division entière faussait les moyennes non entières ; / restauré, gestion de la liste vide conservée, test de régression ajouté.
Rien commité, rien poussé ; les changements restent dans le répertoire de travail.
Dans Claude Code
Si vous dites simplement « sol loop », Claude Code refuse de le lancer. Réponse en 11 s (traduite de l'original) :
La revue Sol n'a pas pu tourner, donc cette modification n'a pas passé la revue.
Blocage : aucune voie ici ne permet de lancer Sol... Selon les règles de sol-loop, je ne remplacerai pas Sol par un autre modèle, et je ne traiterai pas une revue absente comme une approbation.
C'est la règle du skill : dans Claude Code, il ne tourne qu'avec un sous-agent configuré pour Sol, et il ne doit pas changer de modèle. La solution consiste à créer ~/.claude/agents/sol-reviewer.md :
---
name: sol-reviewer
description: Read-only code reviewer running GPT Sol. Use for the sol-loop skill.
model: gpt-6.1-sol
tools: Read, Grep, Glob, Bash
---
You are a read-only code reviewer. Never edit, commit, or push. Follow the review brief you are given and reply in its exact format.
L'endpoint compatible Anthropic de ce site peut aussi appeler gpt-6.1-sol, donc ce sous-agent utilise la même clé. Relancez :
claude -p "sol loop: review the current uncommitted changes (no remote, use HEAD as the base). After approval, do not commit or push." --permission-mode acceptEdits
70 s et 2 tours, même résultat que Codex : au tour 1, Sol renvoie VERDICT: CHANGES et signale le problème de division ; après correction, le tour 2 renvoie VERDICT: APPROVE. Les statistiques d'usage de la sortie listent à la fois claude-sonnet-5-5 (Agent principal) et gpt-6.1-sol (sous-agent de revue), ce qui montre que c'est bien Sol qui a relu.
Au démarrage, Claude Code affiche une notice unrecognized_model parce qu'il ne reconnaît pas le nom gpt-6.1-sol. Vous pouvez l'ignorer, elle n'empêche pas l'exécution. Pour configurer les sous-agents, voir aussi Configuration des sous-agents Claude Code.
| Scénario | Résultat | Durée |
|---|---|---|
| Cloner + copier dans les deux clients | Réussi | environ 3 s |
| sol-loop dans Codex 0.164.0 | 2 tours, Sol approuve | 62 s |
| Claude Code 2.1.310, sans sous-agent Sol | Signale un blocage, pas de revue | 11 s |
| Claude Code 2.1.310 avec sol-reviewer | 2 tours, Sol approuve | 70 s |
Créer une API Key et lancer sol-loop dans Claude Code et Codex →
Le risque de full-send : autoriser l'Agent à fusionner lui-même
full-send : le SKILL.md est sans détour. Si vous dites « full send », vous ne regardez pas le fil, et l'Agent mène la modification jusqu'à la fusion dans la branche principale. Il accorde explicitement trois permissions à l'Agent :
- Une fois la porte de fusion passée, fusionner la PR lui-même ;
- Après un rebase, pousser de force la branche de la PR avec
--force-with-lease; - Ignorer les règles du projet du type « demande-moi avant ce genre de test » et lancer les tests directement.
Il a des limites : pas de --admin pour contourner la protection de branche, et supprimer des données ou toucher la production exige toujours de demander à une personne. Mais la fusion elle-même ne vous est plus demandée. Si votre dépôt déploie à chaque fusion, dire « full send » revient à laisser l'Agent mettre en production tout seul.
Le skill dit « si l'utilisateur n'a pas clairement demandé full send, ne suppose pas l'autonomie totale », mais c'est laissé au jugement de l'Agent, pas à un vrai interrupteur. Tant que le skill est installé, il peut se déclencher par erreur.
Comment le désactiver ou le limiter
Du plus léger au plus strict :
Option 1 : ne pas installer full-send
Si vous voulez seulement que Sol relise le code, copiez uniquement le dossier sol-loop (il ne dépend d'aucun autre skill) et laissez de côté full-send et full-stop.
Option 2 : utiliser full-stop à la place
Il suit le même déroulé mais s'arrête à « prête à fusionner », et c'est vous qui cliquez sur fusionner.
Option 3 : bloquer la commande de fusion dans Claude Code
Ajoutez dans le fichier global ~/.claude/settings.json :
{
"permissions": {
"deny": ["Bash(gh pr merge:*)", "Bash(gh api:*)"]
}
}
gh api doit aussi être bloqué, sinon l'Agent peut fusionner en appelant directement l'API GitHub. Quand nous avons demandé à Claude Code d'exécuter gh pr merge 1 --squash, la commande a été bloquée en moins de 5 s, et le champ permission_denials du résultat l'a enregistrée.
Option 4 : bloquer la commande de fusion dans Codex
Créez ~/.codex/rules/default.rules :
prefix_rule(
pattern = ["gh", "pr", "merge"],
decision = "forbidden",
justification = "Merging a PR must be done by a human",
)
Refusée en moins de 8 s dans notre test, avec dans le journal rejected: Merging a PR must be done by a human. Pour plus de réglages de bac à sable et d'approbation, voir Les permissions du bac à sable Codex.
Option 5 : activer la protection de branche sur GitHub
Exigez une approbation avant la fusion. D'après la documentation de GitHub, l'auteur d'une PR ne peut pas approuver sa propre PR ; l'Agent utilise votre compte gh, il ne peut donc pas réunir l'approbation seul. Cette couche ne dépend pas de la configuration du client, c'est la plus fiable.
Nous n'avons pas lancé full-send jusqu'à la fusion sur un vrai dépôt ; nous avons seulement testé sol-loop, dont il dépend, et les deux règles de blocage ci-dessus.
Questions fréquentes
Peut-on utiliser tstack sans T3 Code ?
Oui. Nous n'avons jamais installé T3 Code. Codex utilise ses sous-agents intégrés ; Claude Code a besoin d'un sous-agent Sol configuré comme ci-dessus.
sol-loop peut-il relire avec un autre modèle ?
Le skill dit explicitement de ne pas changer de modèle et de signaler un blocage si Sol n'est pas disponible. Pour changer cela, modifiez vous-même SKILL.md ; le README vous encourage d'ailleurs à « vous les approprier ».
De quoi council a-t-il besoin ?
D'après le README, council a besoin des modèles phares de trois fournisseurs différents qui relisent en même temps, par exemple Claude Opus, GPT Sol et Gemini Pro. La liste de ce site contient claude-opus-5-5, gpt-6.1-sol et gemini-4-argon, vous pouvez donc configurer un sous-agent pour chacun comme sol-reviewer. Nous n'avons pas testé council ici.
Dans Codex, sol-loop ne relit-il que les modifications non commitées ?
Non. Avec un remote, il utilise git merge-base pour trouver la base et relit toute la branche ; il n'utilise HEAD que s'il n'y a pas de remote. Pour relire seulement le répertoire de travail, vous pouvez aussi utiliser la revue intégrée de Codex ; voir La revue Codex des modifications non commitées.
Environnement de test
- Claude Code 2.1.310, Codex CLI 0.164.0, Linux ;
- commit tstack
92e38e2(2026-10-27) ; - Modèles principaux :
claude-sonnet-5-5pour Claude Code etgpt-6.1-solpour Codex ; modèle de revuegpt-6.1-sol; - Toutes les requêtes sont passées par la même API Key de ce site. Nous avons supprimé après le test la configuration et les journaux contenant la clé.



