Cómo instalar y usar tstack: las 9 skills de agente de Theo probadas en Claude Code y Codex, con sol-loop ejecutando GPT-6.1 Sol con la misma Key

Theo publicó como código abierto tstack, las 9 skills de agente que usa a diario. Las probamos en Claude Code 2.1.310 y Codex 0.164.0 con una sola API Key de este sitio: la instalación tardó unos 3 s; sol-loop en Codex hizo 2 rondas en 62 s, y Claude Code 2 rondas en 70 s tras añadir un subagente de Sol. En ambos casos gpt-6.1-sol detectó un bug de división entera. También explicamos por qué full-send deja que el Agent fusione PR por su cuenta y la configuración que bloquea la fusión en los dos clientes.

9 分钟阅读
Cómo instalar y usar tstack: las 9 skills de agente de Theo probadas en Claude Code y Codex, con sol-loop ejecutando GPT-6.1 Sol con la misma Key

En resumen: tstack es un conjunto de 9 skills de agente que Theo (t3dotgg) publicó como código abierto el 26 de octubre. Instalarlo consiste en copiar las carpetas a ~/.claude/skills/ o a ~/.codex/skills/. Conectamos Claude Code y Codex con la misma API Key de este sitio. Resultados:

  • Instalación (clonar el repositorio + copiar en los dos clientes): unos 3 s;
  • En Codex 0.164.0, basta con decir "sol loop" para que lance un subagente gpt-6.1-sol que revisa el código: 2 rondas, 62 s, con un bug de división entera detectado y corregido;
  • Claude Code 2.1.310 no puede ejecutar sol-loop tal cual y responde con honestidad "no hay ninguna vía para ejecutar Sol"; tras añadir un subagente con model: gpt-6.1-sol, se completó en 2 rondas, 70 s;
  • full-send deja que el Agent fusione PR por su cuenta. En los dos lados añadimos una regla que bloquea gh pr merge, y en la prueba ambos lo bloquearon.

Crear API Key y conectar Claude Code y Codex con una sola Key →

Qué es tstack

Según la publicación de lanzamiento de Theo en X, tstack reúne "las skills que uso todos los días", limpias y publicadas. Al escribir este artículo, la publicación tenía unas 440.000 visualizaciones y el repositorio de GitHub unas 2.000 estrellas, con licencia MIT. El README dice que funciona tanto en Claude Code como en Codex; algunas skills usan funciones de T3 Code cuando existen y, si no, recurren a las herramientas propias del cliente.

Las 9 skills y sus disparadores (según el README del repositorio):

SkillLo que dicesQué hace
full-sendfull sendSin supervisión: termina el cambio, lo demuestra, lo revisa, abre un PR, vigila la CI y luego lo fusiona por su cuenta
full-stopfull stopIgual que full-send, pero se detiene en "listo para fusionar" y no fusiona
councilcouncilPide revisión a tres modelos de proveedores distintos hasta que coinciden
sol-loopsol loopHace que GPT Sol revise el cambio en bucle hasta que ambos agentes estén de acuerdo
file-prfile a PRAbre un PR corto que empieza por el problema, no por una lista de cambios
takeovertake overTermina el PR, la rama o el hilo de Agent de otra persona y conserva su autoría
babysit-prbabysitVigila un PR a través de la CI y los bots de revisión, y corrige los hallazgos reales
modernizemodernizeHace rebase de un PR antiguo y decide si todavía debe existir
leaving-pr-commentsautomáticoDefine el formato de los comentarios que el Agent publica en tu nombre

Las skills dependen unas de otras: full-send usa sol-loop, file-pr y babysit-pr; full-stop usa full-send. Lo más sencillo es instalarlas todas.

Paso 1: configurar Claude Code y Codex

Los dos clientes pueden usar la misma Key de este sitio.

Para Claude Code, en el archivo global ~/.claude/settings.json:

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY"
  },
  "model": "claude-sonnet-5-5"
}

La dirección es https://api.aicodewith.ai, sin /v1. Para todos los pasos, consulta Cómo conectar Claude Code a una API de terceros.

Para Codex, en el archivo global ~/.codex/config.toml:

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"

Para el significado de cada campo, consulta Codex config.toml explicado.

Paso 2: instalar tstack

bash
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

Estos pasos tardaron unos 3 s en nuestra prueba. Después, Claude Code muestra las skills al arrancar, y Codex lee el SKILL.md correspondiente cuando dices un disparador. Para saber qué son las skills y dónde se guardan, consulta Cómo usar Skills en agentes de IA.

Dos requisitos más: las skills que abren PR, como full-send y babysit-pr, necesitan una GitHub CLI con sesión iniciada (gh); el script de espera de babysit-pr necesita python3.

Paso 3: llamar a GPT Sol con la misma Key y ejecutar sol-loop

Primero comprueba que la Key llega a Sol. La lista de modelos de este sitio incluye gpt-6.1-sol. Enviamos una frase al endpoint Responses y recibimos HTTP 200 en unos 4 s:

bash
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"}'

El proyecto de prueba es mínimo: calc.py en average() recibió una comprobación de lista vacía, pero el mismo cambio también convirtió / en //. Las pruebas existentes solo comprueban una media entera, así que siguen en verde. Ese bug queda para que lo encuentre Sol.

En Codex

Ejecuta en el directorio del proyecto:

bash
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. El registro de la sesión muestra que Codex buscó primero delegate_task de T3 Code, no lo encontró y usó su spawn_agent integrado para lanzar un subagente con "model":"gpt-6.1-sol". Lo que pasó:

  • Ronda 1: Sol señaló que average([1, 2]) devuelve 1 en lugar de 1.5;
  • El Agent principal volvió a /, añadió una prueba test_average_fractional y comprobó que esa prueba falla con el código anterior;
  • Ronda 2: Sol aprobó. No se hizo commit ni push.

Informe final de Codex (traducido del original):

text
Completadas 2 rondas de sol-loop. GPT-6.1 Sol dio la aprobación final; no queda nada abierto.
- Corregido S1: la división entera daba medias no enteras erróneas; restaurado /, se mantiene el manejo de la lista vacía y se añadió una prueba de regresión.
Sin commit ni push; los cambios siguen en el directorio de trabajo.

En Claude Code

Si solo dices "sol loop", Claude Code se niega a ejecutarlo. Respondió en 11 s (traducido del original):

text
La revisión de Sol no pudo ejecutarse, así que este cambio no ha pasado la revisión.
Bloqueo: aquí no hay ninguna vía para ejecutar Sol... Según las reglas de sol-loop, no sustituiré Sol por otro modelo ni trataré una revisión ausente como una aprobación.

Es una regla de la propia skill: en Claude Code solo se ejecuta con un subagente configurado para Sol, y no puede cambiar a otro modelo. La solución es crear ~/.claude/agents/sol-reviewer.md:

markdown
---
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.

El endpoint compatible con Anthropic de este sitio también puede llamar a gpt-6.1-sol, así que este subagente usa la misma Key. Vuelve a ejecutarlo:

bash
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

Tardó 70 s y 2 rondas, con el mismo resultado que Codex: en la ronda 1 Sol devolvió VERDICT: CHANGES y señaló el problema de la división; tras corregirlo, la ronda 2 devolvió VERDICT: APPROVE. Las estadísticas de uso de la salida incluyen tanto claude-sonnet-5-5 (Agent principal) como gpt-6.1-sol (subagente de revisión), lo que demuestra que la revisión la hizo Sol.

Al arrancar, Claude Code muestra un aviso unrecognized_model porque no reconoce el nombre gpt-6.1-sol. Puedes ignorarlo; no afecta a la ejecución. Para más detalles sobre subagentes, consulta también Configuración de subagentes en Claude Code.

EscenarioResultadoTiempo
Clonar + copiar en los dos clientesCorrectounos 3 s
sol-loop en Codex 0.164.02 rondas, Sol aprueba62 s
Claude Code 2.1.310, sin subagente de SolInforma de un bloqueo, sin revisión11 s
Claude Code 2.1.310 con sol-reviewer2 rondas, Sol aprueba70 s

Crear API Key y ejecutar sol-loop en Claude Code y Codex →

El riesgo de full-send: autoriza al Agent a fusionar por su cuenta

full-send: el SKILL.md es muy claro. Si dices "full send", das por hecho que no estás mirando el hilo, y el Agent lleva el cambio hasta la fusión en la rama principal. Concede al Agent tres permisos de forma explícita:

  • Cuando se cumple la condición de fusión, fusionar el PR por su cuenta;
  • Tras un rebase, hacer push forzado de la rama del propio PR con --force-with-lease;
  • Saltarse las reglas del proyecto del tipo "pregúntame antes de esta prueba" y ejecutar las pruebas directamente.

Tiene límites: nada de --admin para saltarse la protección de ramas, y borrar datos o tocar producción sigue requiriendo preguntar a una persona. Pero la fusión en sí ya no te la pregunta. Si tu repositorio despliega al fusionar, decir "full send" equivale a dejar que el Agent pase a producción por su cuenta.

La skill dice "si el usuario no pidió claramente full send, no asumas autonomía total", pero eso queda a juicio del Agent, no es un interruptor real. Mientras la skill esté instalada, puede activarse por error.

Cómo desactivarlo o limitarlo

De lo más suave a lo más estricto:

Opción 1: no instalar full-send

Si solo quieres que Sol revise código, copia solo la carpeta sol-loop (no depende de otras skills) y deja fuera full-send y full-stop.

Opción 2: usar full-stop en su lugar

Sigue el mismo flujo, pero se detiene en "listo para fusionar" y eres tú quien pulsa fusionar.

Opción 3: bloquear el comando de fusión en Claude Code

Añade en el archivo global ~/.claude/settings.json:

json
{
  "permissions": {
    "deny": ["Bash(gh pr merge:*)", "Bash(gh api:*)"]
  }
}

gh api también debe bloquearse; si no, el Agent puede fusionar llamando directamente a la API de GitHub. Cuando pedimos a Claude Code que ejecutara gh pr merge 1 --squash, se bloqueó en menos de 5 s, y el campo permission_denials del resultado registró el comando.

Opción 4: bloquear el comando de fusión en Codex

Crea ~/.codex/rules/default.rules:

python
prefix_rule(
    pattern = ["gh", "pr", "merge"],
    decision = "forbidden",
    justification = "Merging a PR must be done by a human",
)

En la prueba se rechazó en menos de 8 s, y el registro muestra rejected: Merging a PR must be done by a human. Para más ajustes de sandbox y aprobación, consulta Los permisos del sandbox de Codex.

Opción 5: activar la protección de ramas en GitHub

Exige una aprobación antes de fusionar. Según la documentación de GitHub, el autor de un PR no puede aprobar su propio PR; el Agent usa tu cuenta de gh, así que no puede reunir la aprobación por sí mismo. Esta capa no depende de la configuración del cliente y es la más fiable.

No ejecutamos full-send hasta la fusión en un repositorio real; solo probamos el sol-loop del que depende y las dos reglas de bloqueo anteriores.

Preguntas frecuentes

¿Se puede usar tstack sin T3 Code?

Sí. Nunca instalamos T3 Code. Codex usa sus subagentes integrados; Claude Code necesita un subagente de Sol configurado como se indica arriba.

¿Puede sol-loop revisar con otro modelo?

La skill dice de forma explícita que no se cambie de modelo y que se informe de un bloqueo si Sol no está disponible. Para cambiarlo, edita tú mismo SKILL.md; el README también anima a "hacerlas tuyas".

¿Qué necesita council?

Según el README, council necesita modelos insignia de tres proveedores distintos revisando a la vez, por ejemplo Claude Opus, GPT Sol y Gemini Pro. La lista de este sitio incluye claude-opus-5-5, gpt-6.1-sol y gemini-4-argon, así que puedes configurar un subagente para cada uno igual que sol-reviewer. En este artículo no probamos council.

¿sol-loop en Codex solo revisa cambios sin commit?

No. Si hay un remote, usa git merge-base para encontrar la base y revisa toda la rama; solo usa HEAD cuando no hay remote. Si solo quieres revisar los cambios del directorio de trabajo, también puedes usar la revisión integrada de Codex; consulta Revisión de Codex para cambios sin commit.

Entorno de prueba

  • Claude Code 2.1.310, Codex CLI 0.164.0, Linux;
  • commit de tstack 92e38e2 (2026-10-27);
  • Modelos principales: claude-sonnet-5-5 para Claude Code y gpt-6.1-sol para Codex; modelo de revisión gpt-6.1-sol;
  • Todas las peticiones pasaron por la misma API Key de este sitio. Tras la prueba borramos la configuración y los registros que contenían la Key.

Crear API Key y empezar con tstack →

相关文章

¿Por qué Claude suspende cuentas? La teoría comunitaria del «sistema de puntos» y cómo usar Claude Code sin cambiar de cuenta

¿Por qué Claude suspende cuentas? La teoría comunitaria del «sistema de puntos» y cómo usar Claude Code sin cambiar de cuenta

Desde el 28 de octubre, dos publicaciones que afirman que «Claude suspende cuentas con un sistema de puntos» suman unas 770.000 visualizaciones en X. Separamos lo que dice la comunidad de lo que Anthropic publica oficialmente sobre suspensiones y apelaciones, y probamos Claude Code 2.1.310 con una API Key de nuestro sitio: las solicitudes simples respondieron en unos 1,4–1,7 segundos y una pequeña tarea de corregir un bug y escribir pruebas terminó en 8,5 segundos. Incluye la configuración de Codex y Cursor y cómo resolver 401/429.

¿Un AGENTS.md en Descargas puede secuestrar Codex y Claude Code? Cómo revisar config.toml y settings.json, prevenirlo y cambiar tu Key (con comandos de comprobación)

¿Un AGENTS.md en Descargas puede secuestrar Codex y Claude Code? Cómo revisar config.toml y settings.json, prevenirlo y cambiar tu Key (con comandos de comprobación)

Según un informe de Forever Security, un AGENTS.md colocado en ~/Downloads puede hacer que Codex añada un servidor MCP a su config.toml global e instale un paquete npm malicioso, y un CLAUDE.md bien construido puede hacer que Claude Code apunte ANTHROPIC_BASE_URL al servidor de un atacante. Esta guía ofrece comandos de comprobación para macOS/Linux y PowerShell, muestra cómo es una configuración correcta de AICodeWith, recoge nuestras pruebas de trust_level y explica cómo cambiar la Key si te afectó.

Migrar de Claude Code a Codex: mover reglas, skills, MCP y hooks con /import — ¿se conserva model_provider tras importar? (probado con una API Key de terceros)

Migrar de Claude Code a Codex: mover reglas, skills, MCP y hooks con /import — ¿se conserva model_provider tras importar? (probado con una API Key de terceros)

El /import de Codex CLI puede mover a Codex el CLAUDE.md, el settings.json, los hooks, los skills, los MCP, los subagentes y las conversaciones recientes de Claude Code. En nuestra prueba, el model_provider = "aicodewith" existente no cambió y las llamadas funcionaron con normalidad tras importar; pero la Key de settings.json se escribe en el entorno shell de Codex y hay que quitarla a mano.