Kurz gesagt: tstack ist eine Sammlung von 9 Agent-Skills, die Theo (t3dotgg) am 26. Oktober als Open Source veröffentlicht hat. Installiert wird, indem man die Ordner nach ~/.claude/skills/ oder ~/.codex/skills/ kopiert. Wir haben Claude Code und Codex mit demselben API Key dieser Seite verbunden. Ergebnisse:
- Installation (Repo klonen + in beide Clients kopieren): etwa 3 s;
- In Codex 0.164.0 genügte „sol loop“, und es startete einen gpt-6.1-sol-Subagenten für das Review: 2 Runden, 62 s, dabei wurde ein Bug durch Ganzzahldivision gefunden und behoben;
- Claude Code 2.1.310 kann sol-loop nicht direkt ausführen und meldet ehrlich „kein Weg kann Sol ausführen“; nach dem Anlegen eines Subagenten mit
model: gpt-6.1-sollief es in 2 Runden, 70 s; full-sendlässt den Agenten PRs selbst mergen. Wir haben auf beiden Seiten eine Regel gegengh pr mergeeingerichtet, und beide haben den Befehl im Test blockiert.
API Key erstellen und Claude Code und Codex mit einem Key verbinden →
Was ist tstack
Laut Theos Ankündigungspost auf X ist tstack „die Skills, die ich jeden Tag nutze“, aufgeräumt und veröffentlicht. Als wir diesen Text schrieben, hatte der Post etwa 440.000 Aufrufe und das GitHub-Repo etwa 2.000 Sterne, unter MIT-Lizenz. Laut README funktioniert es in Claude Code und in Codex; manche Skills nutzen Funktionen von T3 Code, wenn vorhanden, und greifen sonst auf die eingebauten Werkzeuge des Clients zurück.
Die 9 Skills und ihre Auslöser (laut README des Repos):
| Skill | Sagen | Was er tut |
|---|---|---|
| full-send | full send | Unbeaufsichtigt: Änderung fertigstellen, belegen, reviewen, PR einreichen, CI beobachten und dann selbst mergen |
| full-stop | full stop | Wie full-send, hält aber bei „bereit zum Mergen“ an und merged nicht |
| council | council | Lässt drei Modelle verschiedener Anbieter reviewen, bis sie sich einig sind |
| sol-loop | sol loop | Lässt GPT Sol die Änderung in einer Schleife reviewen, bis beide Agenten zustimmen |
| file-pr | file a PR | Reicht einen kurzen PR ein, der mit dem Problem beginnt statt mit einer Liste der Änderungen |
| takeover | take over | Bringt den PR, Branch oder Agent-Thread eines anderen zu Ende und nennt ihn weiter als Urheber |
| babysit-pr | babysit | Begleitet einen PR durch CI und Review-Bots und behebt echte Befunde |
| modernize | modernize | Rebased einen alten PR und entscheidet, ob er noch existieren sollte |
| leaving-pr-comments | automatisch | Legt das Format für Kommentare fest, die der Agent in Ihrem Namen schreibt |
Die Skills hängen voneinander ab: full-send nutzt sol-loop, file-pr und babysit-pr; full-stop nutzt full-send. Am einfachsten ist es, alle zu installieren.
Schritt 1: Claude Code und Codex einrichten
Beide Clients können denselben Key dieser Seite verwenden.
Für Claude Code in die globale ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY"
},
"model": "claude-sonnet-5-5"
}
Die Adresse ist https://api.aicodewith.ai, ohne /v1. Alle Schritte finden Sie unter Claude Code mit einer Drittanbieter-API verbinden.
Für Codex in die globale ~/.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"
Was jedes Feld bedeutet, steht unter Codex config.toml erklärt.
Schritt 2: tstack installieren
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
Diese Schritte dauerten im Test etwa 3 s. Danach zeigt Claude Code die Skills beim Start an, und Codex liest die passende SKILL.md, sobald Sie einen Auslöser sagen. Was Skills sind und wo sie liegen, steht unter Skills in KI-Agenten nutzen.
Zwei weitere Voraussetzungen: Skills, die PRs einreichen, etwa full-send und babysit-pr, brauchen eine angemeldete GitHub CLI (gh); das Warteskript von babysit-pr braucht python3.
Schritt 3: GPT Sol mit demselben Key aufrufen und sol-loop starten
Prüfen Sie zuerst, ob der Key Sol erreicht. Die Modellliste dieser Seite enthält gpt-6.1-sol. Wir haben einen Satz an den Responses-Endpunkt geschickt und nach etwa 4 s HTTP 200 erhalten:
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"}'
Das Testprojekt ist winzig: calc.py in average() bekam eine Prüfung auf leere Listen, aber dieselbe Änderung machte aus / auch //. Die vorhandenen Tests prüfen nur einen ganzzahligen Mittelwert, also bleiben sie grün. Diesen Bug soll Sol finden.
In Codex
Im Projektordner ausführen:
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."
Nach 62 s war es fertig. Das Sitzungsprotokoll zeigt: Codex suchte zuerst delegate_task von T3 Code, fand es nicht und startete mit dem eingebauten spawn_agent einen Subagenten mit "model":"gpt-6.1-sol". Ablauf:
- Runde 1: Sol wies darauf hin, dass
average([1, 2])den Wert1statt1.5liefert; - Der Haupt-Agent stellte
/wieder her, fügte einen Testtest_average_fractionalhinzu und prüfte, dass dieser Test am alten Code scheitert; - Runde 2: Sol gab die Freigabe. Es wurde nichts committet oder gepusht.
Abschlussbericht von Codex (aus dem Original übersetzt):
2 Runden sol-loop abgeschlossen. GPT-6.1 Sol hat final freigegeben; nichts ist offen.
- S1 behoben: Ganzzahldivision verfälschte nicht ganzzahlige Mittelwerte; / wiederhergestellt, Behandlung leerer Listen beibehalten, Regressionstest ergänzt.
Nicht committet, nicht gepusht; die Änderungen bleiben im Arbeitsverzeichnis.
In Claude Code
Sagt man nur „sol loop“, verweigert Claude Code die Ausführung. Antwort nach 11 s (aus dem Original übersetzt):
Das Sol-Review konnte nicht laufen, daher hat diese Änderung das Review nicht bestanden.
Blocker: Hier gibt es keinen Weg, Sol auszuführen... Nach den Regeln von sol-loop ersetze ich Sol nicht durch ein anderes Modell und werte ein fehlendes Review nicht als Freigabe.
Das ist eine Regel des Skills selbst: In Claude Code läuft er nur mit einem Subagenten, der Sol ausführen kann, und er darf nicht auf ein anderes Modell wechseln. Die Lösung ist, ~/.claude/agents/sol-reviewer.md anzulegen:
---
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.
Der Anthropic-kompatible Endpunkt dieser Seite kann ebenfalls gpt-6.1-sol aufrufen, also nutzt dieser Subagent denselben Key. Noch einmal ausführen:
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 und 2 Runden, gleiches Ergebnis wie in Codex: In Runde 1 lieferte Sol VERDICT: CHANGES und wies auf das Divisionsproblem hin; nach dem Fix lieferte Runde 2 VERDICT: APPROVE. Die Nutzungsstatistik in der Ausgabe listet sowohl claude-sonnet-5-5 (Haupt-Agent) als auch gpt-6.1-sol (Review-Subagent), also hat wirklich Sol das Review gemacht.
Beim Start gibt Claude Code einen Hinweis unrecognized_model aus, weil es den Namen gpt-6.1-sol nicht kennt. Den können Sie ignorieren, er beeinträchtigt den Lauf nicht. Mehr zur Einrichtung von Subagenten unter Subagenten in Claude Code konfigurieren.
| Szenario | Ergebnis | Dauer |
|---|---|---|
| Klonen + in beide Clients kopieren | Erfolgreich | etwa 3 s |
| sol-loop in Codex 0.164.0 | 2 Runden, Sol gibt frei | 62 s |
| Claude Code 2.1.310, ohne Sol-Subagent | Meldet Blocker, kein Review | 11 s |
| Claude Code 2.1.310 mit sol-reviewer | 2 Runden, Sol gibt frei | 70 s |
API Key erstellen und sol-loop in Claude Code und Codex ausführen →
Das Risiko von full-send: Sie erlauben dem Agenten, selbst zu mergen
full-send: Die SKILL.md ist deutlich. Wenn Sie „full send“ sagen, schauen Sie dem Thread nicht zu, und der Agent bringt die Änderung bis zum Merge in den Hauptbranch. Er gibt dem Agenten ausdrücklich drei Rechte:
- Sobald das Merge-Gate erfüllt ist, den PR selbst mergen;
- Nach einem Rebase den eigenen Branch des PR mit
--force-with-leaseforce-pushen; - Regeln im Projekt wie „frag mich vor solchen Tests“ überspringen und die Tests direkt ausführen.
Es gibt Grenzen: kein --admin, um Branch-Schutz zu umgehen, und Daten löschen oder an Produktion arbeiten erfordert weiterhin eine Rückfrage bei einem Menschen. Aber für den Merge selbst fragt er Sie nicht mehr. Wenn Ihr Repo bei jedem Merge deployt, heißt „full send“, dass der Agent selbst in Produktion geht.
Der Skill sagt: „Wenn der Nutzer nicht klar full send verlangt hat, keine volle Autonomie annehmen.“ Das bleibt aber dem Urteil des Agenten überlassen und ist kein harter Schalter. Solange der Skill installiert ist, kann er versehentlich ausgelöst werden.
Abschalten oder begrenzen
Von leicht bis streng:
Option 1: full-send nicht installieren
Wenn Sol nur Code reviewen soll, kopieren Sie nur den Ordner sol-loop (er hängt von keinem anderen Skill ab) und lassen full-send und full-stop weg.
Option 2: full-stop stattdessen nutzen
Gleicher Ablauf, aber Halt bei „bereit zum Mergen“, und Sie klicken selbst auf Merge.
Option 3: den Merge-Befehl in Claude Code sperren
In die globale ~/.claude/settings.json eintragen:
{
"permissions": {
"deny": ["Bash(gh pr merge:*)", "Bash(gh api:*)"]
}
}
gh api muss ebenfalls gesperrt werden, sonst kann der Agent direkt über die GitHub-API mergen. Als wir Claude Code gh pr merge 1 --squash ausführen ließen, wurde der Befehl innerhalb von 5 s blockiert, und das Feld permission_denials im Ergebnis hielt ihn fest.
Option 4: den Merge-Befehl in Codex sperren
Legen Sie ~/.codex/rules/default.rules an:
prefix_rule(
pattern = ["gh", "pr", "merge"],
decision = "forbidden",
justification = "Merging a PR must be done by a human",
)
Im Test innerhalb von 8 s abgelehnt, im Log steht rejected: Merging a PR must be done by a human. Mehr zu Sandbox- und Freigabe-Einstellungen unter Sandbox-Berechtigungen in Codex erklärt.
Option 5: Branch-Schutz auf GitHub einschalten
Verlangen Sie vor dem Merge eine Freigabe. Laut GitHub-Dokumentation kann der Autor eines PR seinen eigenen PR nicht freigeben; der Agent nutzt Ihr gh-Konto und kann die Freigabe daher nicht selbst beschaffen. Diese Ebene hängt nicht von der Client-Konfiguration ab und ist die zuverlässigste.
Wir haben full-send nicht bis zum Merge in einem echten Repo laufen lassen; getestet haben wir nur das zugrunde liegende sol-loop und die beiden Sperrregeln oben.
Häufige Fragen
Geht tstack auch ohne T3 Code?
Ja. Wir haben T3 Code nie installiert. Codex nutzt seine eingebauten Subagenten; Claude Code braucht einen Sol-Subagenten wie oben beschrieben.
Kann sol-loop mit einem anderen Modell reviewen?
Der Skill sagt ausdrücklich, das Modell nicht zu wechseln und einen Blocker zu melden, wenn Sol nicht verfügbar ist. Wer das ändern will, bearbeitet SKILL.md selbst; das README ermutigt auch dazu, sie „zu Ihren eigenen zu machen“.
Was braucht council?
Laut README braucht council Flaggschiff-Modelle von drei verschiedenen Anbietern, die gleichzeitig reviewen, etwa Claude Opus, GPT Sol und Gemini Pro. Die Liste dieser Seite enthält claude-opus-5-5, gpt-6.1-sol und gemini-4-argon, Sie können also für jedes einen Subagenten nach dem Muster von sol-reviewer anlegen. council haben wir hier nicht getestet.
Reviewt sol-loop in Codex nur nicht committete Änderungen?
Nein. Mit einem Remote nutzt es git merge-base, um die Basis zu finden, und reviewt den ganzen Branch; nur ohne Remote nimmt es HEAD. Wenn Sie nur Änderungen im Arbeitsverzeichnis reviewen wollen, können Sie auch das eingebaute Review von Codex nutzen; siehe Codex-Review für nicht committete Änderungen.
Testumgebung
- Claude Code 2.1.310, Codex CLI 0.164.0, Linux;
- tstack-Commit
92e38e2(2026-10-27); - Hauptmodelle:
claude-sonnet-5-5für Claude Code undgpt-6.1-solfür Codex; Review-Modellgpt-6.1-sol; - Alle Anfragen liefen über denselben API Key dieser Seite. Konfiguration und Logs mit dem Key haben wir nach dem Test gelöscht.



