Files
..

tretry · 강사가 수업 준비 때 직접 만든 본 (2026-10-29)

정답 자료 · 학생 저장소에는 수업 뒤 VIBE-A-TRETRY.md와 함께 올립니다. 이 본은 강사가 CLI 에이전트에 단계 요청문을 보내 만든 것이 아니라, Claude Code가 VIBE-Q의 요구 R1~R14와 Doc/IMP-PLAN.md를 보고 직접 썼습니다. 학생이 만든 것과 파일 구성이 달라도 됩니다. 요구의 확인 방법이 같으면 됩니다.

설치 · 실행

cd ~/aio-01d4-stu/Last3Mon/76/tretry
uv sync && uv run pytest -q              # 테스트 17개 (기다리지 않음, 가짜 서버)
uv tool install --editable .             # 어느 폴더에서나 tretry (R14)
cd /tmp && tretry --help
하고 싶은 것 명령
명령을 다시 해 보기 tretry --tries 4 --backoff 0.5 --max-wait 8 --jitter 0.2 --timeout 10 -- <명령 ...>
다 실패하면 대신 --fallback "cat ~/cache/faq.json"
전체 마감 --deadline 5
HTTP 호출 tretry http POST http://localhost:8800/tickets --body '{"title": "t"}' --idem-key auto --body-key key
순위 tretry stats (--json)
화면(TUI) tretry log ([f] 실패만, [r] 다시 읽기, [q] 끝)
다른 프로그램이 읽게 --json
  • 종료 코드: 0 됨(대체 포함) · 1 다 실패 · 2 쓰는 법이 틀림 · 3 고칠 수 없는 실패 (HTTP 4xx, 408 · 425 · 429 빼고).
  • 기록: ~/.tretry/log.jsonl (--log, $TRETRY_LOG). 헤더 값은 남기지 않고 URL · 오류의 sk-… · Bearer … · api_key=…는 ***.
  • 회로 차단: 같은 대상의 최근 60초 시도(대체 제외) 5개가 모두 실패면 시도 없이 바로 대체 (--breaker 0은 끔). 대상은 METHOD URL 또는 명령 줄.

파일

파일 하는 일 요구
src/tretry/retry.py 다시 하기 엔진 (Policy · run_with_retry), sleep · clock · 무작위를 바꿔 끼움 R1 · R2 · R4 · R7 · R13
src/tretry/runners.py 한 번 해 보기: 명령(종료 코드 · 시간 초과) · HTTP(상태 코드 · Retry-After · 멱등 키) R1 · R3 · R5 · R6
src/tretry/log.py JSON Lines 기록 · 키 지우기 · 순위 · 회로 차단 R8 · R9 · R10
src/tretry/cli.py 명령 · --json · 종료 코드 R12
src/tretry/app.py Textual 화면 R11