tstack 설치와 사용법: Theo의 Agent 스킬 9개를 Claude Code와 Codex에서 테스트, sol-loop는 같은 Key로 GPT-6.1 Sol 실행 성공

Theo가 매일 쓰는 Agent 스킬 9개를 tstack으로 오픈소스 공개했습니다. 이 사이트의 API Key 하나로 Claude Code 2.1.310과 Codex 0.164.0에서 테스트한 결과, 설치는 약 3초였습니다. Codex의 sol-loop는 2라운드 62초, Claude Code는 Sol 서브에이전트를 추가한 뒤 2라운드 70초에 끝났고, 양쪽 모두 gpt-6.1-sol이 정수 나눗셈 버그를 찾아냈습니다. full-send가 Agent에게 PR을 직접 병합하게 하는 위험과, 두 클라이언트에서 병합을 막는 설정도 함께 정리했습니다.

8 分钟阅读
tstack 설치와 사용법: Theo의 Agent 스킬 9개를 Claude Code와 Codex에서 테스트, sol-loop는 같은 Key로 GPT-6.1 Sol 실행 성공

결론부터: tstack은 Theo(t3dotgg)가 10월 26일 오픈소스로 공개한 Agent 스킬 9개입니다. 설치는 폴더를 ~/.claude/skills/ 또는 ~/.codex/skills/에 복사하면 끝입니다. 저희는 이 사이트의 같은 API Key 하나로 Claude Code와 Codex를 모두 연결했습니다. 결과:

  • 설치(저장소 clone + 두 클라이언트에 복사): 약 3초;
  • Codex 0.164.0에서 "sol loop"라고 말하자 gpt-6.1-sol 서브에이전트를 띄워 코드를 리뷰했습니다. 2라운드, 62초에 정수 나눗셈 버그를 찾아 고쳤습니다;
  • Claude Code 2.1.310은 기본 상태로는 sol-loop를 실행하지 못하고 "Sol을 실행할 방법이 없다"고 솔직하게 보고합니다. model: gpt-6.1-sol를 지정한 서브에이전트를 추가하자 2라운드, 70초에 완료됐습니다;
  • full-send는 Agent가 PR을 직접 병합하게 합니다. 양쪽에 gh pr merge를 막는 규칙을 넣었고, 테스트에서 둘 다 차단됐습니다.

API Key 만들기: Key 하나로 Claude Code와 Codex 연결 →

tstack이란

Theo가 X에 올린 공개 게시물에 따르면, tstack은 "매일 쓰는 스킬"을 정리해 공개한 것입니다. 글을 쓰는 시점에 이 게시물은 약 44만 회 조회됐고, GitHub 저장소는 별 약 2,000개, MIT 라이선스입니다. README에 따르면 Claude Code와 Codex 모두에서 동작하며, 일부 스킬은 T3 Code 기능이 있으면 그것을 쓰고 없으면 클라이언트 기본 도구로 대신합니다.

스킬 9개와 트리거(저장소 README 기준):

스킬말할 것하는 일
full-sendfull send무인으로 변경을 마무리하고, 증명하고, 리뷰하고, PR을 올리고, CI를 지켜본 뒤 직접 병합
full-stopfull stopfull-send와 같지만 "병합 가능"에서 멈추고 병합하지 않음
councilcouncil서로 다른 세 회사의 모델에게 의견이 일치할 때까지 리뷰를 맡김
sol-loopsol loopGPT Sol이 변경을 반복 리뷰하고, 양쪽이 동의할 때까지 진행
file-prfile a PR변경 목록 대신 문제부터 설명하는 짧은 PR을 올림
takeovertake over다른 사람의 PR, 브랜치, Agent 스레드를 이어받아 마무리하고 기여자 표시는 유지
babysit-prbabysitPR이 CI와 리뷰 봇을 통과할 때까지 지켜보며 실제 지적 사항을 수정
modernizemodernize오래된 PR을 rebase하고 아직 필요한지 판단
leaving-pr-comments자동Agent가 대신 남기는 댓글의 형식을 정함

스킬끼리는 의존 관계가 있습니다: full-send는 sol-loop, file-pr, babysit-pr를 쓰고, full-stop는 full-send를 씁니다. 전부 설치하는 것이 가장 간단합니다.

1단계: Claude Code와 Codex 설정

두 클라이언트 모두 이 사이트의 같은 Key를 쓰면 됩니다.

Claude Code는 전역 ~/.claude/settings.json에 씁니다:

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

주소는 https://api.aicodewith.ai이고, /v1를 붙이지 않습니다. 전체 절차는 《Claude Code를 서드파티 API에 연결하는 방법》을 참고하세요.

Codex는 전역 ~/.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"

각 항목의 의미는 《Codex config.toml 설정 상세》를 참고하세요.

2단계: 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

이 단계는 실측 약 3초 걸렸습니다. 설치 후 Claude Code는 시작할 때 스킬을 보여 주고, Codex도 트리거를 말하면 해당 SKILL.md를 읽습니다. 스킬이 무엇이고 어디에 두는지는 《AI 에이전트에서 Skills 사용하기》를 참고하세요.

추가로 필요한 것: full-send, babysit-pr처럼 PR을 올리는 스킬은 로그인된 GitHub CLI(gh)가 필요하고, babysit-pr의 대기 스크립트는 python3이 필요합니다.

3단계: 같은 Key로 GPT Sol을 호출해 sol-loop 실행

먼저 Key로 Sol을 호출할 수 있는지 확인합니다. 이 사이트의 모델 목록에는 gpt-6.1-sol가 있습니다. Responses 엔드포인트에 한 문장을 보내자 약 4초 만에 HTTP 200이 돌아왔습니다:

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

테스트 프로젝트는 아주 작습니다. calc.py의 average()에 빈 리스트 검사를 추가했는데, 같은 수정에서 /를 //로 바꿔 버렸습니다. 기존 테스트는 정수 평균만 확인하므로 통과합니다. 이 버그는 Sol이 찾도록 남겨 둡니다.

Codex에서

프로젝트 디렉터리에서 실행합니다:

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

62초 만에 끝났습니다. 세션 기록을 보면 Codex는 먼저 T3 Code의 delegate_task를 찾았고, 없자 기본 제공 spawn_agent로 서브에이전트를 띄웠으며 인자에 "model":"gpt-6.1-sol"를 넣었습니다. 진행 과정:

  • 1라운드: Sol이 average([1, 2])가 1가 아니라 1.5를 반환한다고 지적;
  • 메인 Agent가 /로 되돌리고 test_average_fractional 테스트를 추가한 뒤, 이 테스트가 수정 전 코드에서는 실패하는지 확인;
  • 2라운드: Sol 승인. commit도 push도 하지 않았습니다.

Codex의 최종 보고(원문 번역):

text
sol-loop 2라운드 완료. GPT-6.1 Sol이 최종 승인했고 남은 항목은 없습니다.
- S1 수정: 정수 나눗셈 때문에 소수 평균이 틀렸음. /로 되돌리고 빈 리스트 처리는 유지, 회귀 테스트 추가.
commit 안 함, push 안 함. 변경은 작업 트리에 남아 있습니다.

Claude Code에서

"sol loop"라고만 말하면 Claude Code는 실행을 거부합니다. 11초 만에 돌아온 내용(원문 번역):

text
Sol 리뷰를 실행하지 못해 이 변경은 리뷰를 통과하지 못했습니다.
블로커: 여기에는 Sol을 실행할 방법이 없습니다... sol-loop 규칙에 따라 다른 모델로 대신하지 않고, 리뷰가 없는 것을 승인으로 보지 않습니다.

이는 스킬 자체의 규칙입니다. Claude Code에서는 Sol을 실행할 수 있는 서브에이전트가 있을 때만 동작하고, 다른 모델로 바꾸는 것은 금지돼 있습니다. 해결책은 ~/.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.

이 사이트의 Anthropic 호환 엔드포인트로도 gpt-6.1-sol를 호출할 수 있어서, 이 서브에이전트도 같은 Key를 씁니다. 다시 실행:

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

실측 70초, 2라운드로 Codex와 결과가 같았습니다. 1라운드에서 Sol이 VERDICT: CHANGES를 내고 나눗셈 문제를 지적했고, 수정 후 2라운드에서 VERDICT: APPROVE가 나왔습니다. 출력의 사용량 통계에는 claude-sonnet-5-5(메인 Agent)와 gpt-6.1-sol(리뷰 서브에이전트)가 모두 나와 있어, 리뷰를 실제로 Sol이 했음을 알 수 있습니다.

시작할 때 Claude Code는 unrecognized_model 안내를 한 줄 출력합니다. gpt-6.1-sol라는 이름을 모르기 때문입니다. 무시해도 되고 실행에는 영향이 없습니다. 서브에이전트 설정은 《Claude Code 서브에이전트 설정》도 참고하세요.

시나리오결과소요 시간
clone + 두 클라이언트에 복사성공약 3초
Codex 0.164.0에서 sol-loop2라운드, Sol 승인62초
Claude Code 2.1.310, Sol 서브에이전트 없음블로커 보고, 리뷰 안 함11초
Claude Code 2.1.310, sol-reviewer 설정2라운드, Sol 승인70초

API Key 만들기: Claude Code와 Codex에서 sol-loop 실행 →

full-send의 위험: Agent에게 직접 병합할 권한을 주는 것

full-send의 SKILL.md는 아주 직설적입니다. "full send"라고 말하면 당신은 이 스레드를 보지 않는다는 뜻이고, Agent는 변경을 메인 브랜치에 병합하는 데까지 진행합니다. Agent에게 명시적으로 세 가지 권한을 줍니다:

  • 병합 조건을 통과하면 직접 PR 병합;
  • rebase 후 해당 PR 브랜치를 --force-with-lease로 강제 push;
  • 프로젝트에 "이런 테스트는 먼저 물어봐"라고 적혀 있어도 묻지 않고 바로 테스트 실행.

한계도 있습니다. --admin로 브랜치 보호를 우회하는 것은 금지이고, 데이터 삭제나 운영 환경 작업은 여전히 사람에게 물어야 합니다. 하지만 병합 자체는 더 묻지 않습니다. 병합하면 바로 배포되는 저장소라면, "full send"라고 말하는 것은 Agent가 혼자 운영 배포를 하게 두는 것과 같습니다.

스킬에는 "사용자가 full send를 분명히 요청하지 않았다면 완전 자율을 가정하지 말라"고 적혀 있지만, 이는 Agent의 판단에 맡겨진 것이지 확실한 스위치가 아닙니다. 스킬이 설치돼 있는 한 잘못 발동될 수 있습니다.

끄거나 제한하는 방법

가벼운 것부터 강한 순서로:

방법 1: full-send를 설치하지 않기

Sol에게 코드 리뷰만 맡기려면 sol-loop 폴더만 복사하고(다른 스킬에 의존하지 않음), full-send와 full-stop는 복사하지 않습니다.

방법 2: 대신 full-stop 쓰기

같은 흐름을 따르지만 "병합 가능"에서 멈추고, 병합은 당신이 누릅니다.

방법 3: Claude Code에서 병합 명령 차단

전역 ~/.claude/settings.json에 추가합니다:

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

gh api도 막아야 합니다. 그렇지 않으면 Agent가 GitHub API를 직접 호출해 병합할 수 있습니다. Claude Code에게 gh pr merge 1 --squash를 실행하게 했더니 5초 안에 차단됐고, 결과의 permission_denials에 이 명령이 기록됐습니다.

방법 4: Codex에서 병합 명령 차단

규칙 파일 ~/.codex/rules/default.rules를 새로 만듭니다:

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

테스트에서 8초 안에 거부됐고, 로그에는 rejected: Merging a PR must be done by a human가 찍혔습니다. 샌드박스와 승인 설정은 《Codex 샌드박스 권한 설명》도 참고하세요.

방법 5: GitHub에서 브랜치 보호 켜기

병합 전에 승인을 필수로 합니다. GitHub 문서에 따르면 PR 작성자는 자신의 PR을 승인할 수 없습니다. Agent는 당신의 gh 계정을 쓰므로 스스로 승인을 채울 수 없습니다. 이 단계는 클라이언트 설정과 무관해서 가장 확실합니다.

실제 저장소에서 full-send를 병합까지 돌리지는 않았습니다. full-send가 의존하는 sol-loop와 위의 두 차단 규칙만 테스트했습니다.

자주 묻는 질문

T3 Code 없이도 tstack을 쓸 수 있나요?

네. 저희는 T3 Code를 한 번도 설치하지 않았습니다. Codex는 기본 서브에이전트를 쓰고, Claude Code는 위 방법대로 Sol 서브에이전트를 설정해야 합니다.

sol-loop에서 다른 모델로 리뷰할 수 있나요?

스킬에 "모델을 바꾸지 말 것", "Sol을 못 쓰면 블로커로 보고할 것"이 명시돼 있습니다. 바꾸고 싶다면 SKILL.md를 직접 수정하세요. README도 "자기 것으로 고쳐 쓰라"고 권합니다.

council에는 무엇이 필요하나요?

README에 따르면 council은 서로 다른 세 회사의 플래그십 모델이 동시에 리뷰해야 합니다. 예: Claude Opus, GPT Sol, Gemini Pro. 이 사이트 목록에는 claude-opus-5-5, gpt-6.1-sol, gemini-4-argon가 있으니 sol-reviewer와 같은 방식으로 각각 서브에이전트를 만들 수 있습니다. 이 글에서는 council을 테스트하지 않았습니다.

Codex의 sol-loop는 커밋하지 않은 변경만 리뷰하나요?

아닙니다. remote가 있으면 git merge-base로 base를 찾아 브랜치 전체를 리뷰하고, remote가 없을 때만 HEAD를 씁니다. 작업 트리 변경만 보고 싶다면 Codex 기본 리뷰도 쓸 수 있습니다. 《Codex review로 커밋하지 않은 변경 리뷰하기》를 참고하세요.

테스트 환경

  • Claude Code 2.1.310, Codex CLI 0.164.0, Linux;
  • tstack 커밋 92e38e2(2026-10-27);
  • 메인 모델: Claude Code는 claude-sonnet-5-5, Codex는 gpt-6.1-sol; 리뷰 모델 gpt-6.1-sol;
  • 모든 요청은 이 사이트의 같은 API Key를 거쳤습니다. 테스트 후 Key가 들어 있는 설정과 로그는 삭제했습니다.

API Key 만들기: tstack 시작하기 →

相关文章

Claude는 왜 계정을 정지할까? 커뮤니티의 '포인트제' 주장과 계정을 바꾸지 않고 Claude Code를 쓰는 방법

Claude는 왜 계정을 정지할까? 커뮤니티의 '포인트제' 주장과 계정을 바꾸지 않고 Claude Code를 쓰는 방법

10월 28일부터 'Claude 계정 정지는 포인트제'라는 게시물 두 개가 X에서 합계 약 77만 회 노출됐습니다. 커뮤니티 주장과 Anthropic이 공식적으로 밝힌 정지 사유·이의 제기 창구를 나눠 정리하고, 이 사이트의 API Key로 Claude Code 2.1.310을 실측했습니다. 간단한 요청은 약 1.4~1.7초 만에 응답했고, 버그 수정과 테스트 작성 작업은 8.5초 만에 끝났습니다. Codex·Cursor 연결 방법과 401/429 해결법도 함께 정리했습니다.

Downloads 폴더의 AGENTS.md로 Codex와 Claude Code가 탈취될 수 있다? config.toml·settings.json 점검, 예방, Key 교체(확인 명령어 포함)

Downloads 폴더의 AGENTS.md로 Codex와 Claude Code가 탈취될 수 있다? config.toml·settings.json 점검, 예방, Key 교체(확인 명령어 포함)

Forever Security 보고서에 따르면 ~/Downloads에 놓인 AGENTS.md가 Codex로 하여금 전역 config.toml에 MCP 서버를 추가하고 악성 npm 패키지를 설치하게 만들 수 있고, 정교하게 만든 CLAUDE.md는 Claude Code가 ANTHROPIC_BASE_URL을 공격자 서버로 바꾸게 만들 수 있습니다. 이 글에서는 macOS/Linux와 PowerShell 점검 명령어, AICodeWith의 올바른 설정 예시, trust_level 실제 테스트 결과, 피해를 입었을 때 Key를 교체하는 방법을 정리합니다.

Claude Code에서 Codex로 이전: /import로 규칙·스킬·MCP·hooks 옮기기, 가져온 뒤에도 model_provider는 그대로일까(서드파티 API Key 실측)

Claude Code에서 Codex로 이전: /import로 규칙·스킬·MCP·hooks 옮기기, 가져온 뒤에도 model_provider는 그대로일까(서드파티 API Key 실측)

Codex CLI의 /import는 Claude Code의 CLAUDE.md, settings.json, hooks, 스킬, MCP, 하위 Agent, 최근 대화를 Codex로 옮길 수 있습니다. 실측 결과 기존 model_provider = "aicodewith"는 바뀌지 않았고 가져온 뒤에도 정상 호출됐습니다. 다만 settings.json의 Key가 Codex의 shell 환경에 쓰이므로 직접 지워야 합니다.