tretry · 강사가 수업 준비 때 직접 만든 본 (2026-10-29)
정답 자료 · 학생 저장소에는 수업 뒤 VIBE-A-TRETRY.md와 함께 올립니다.
이 본은 강사가 CLI 에이전트에 단계 요청문을 보내 만든 것이 아니라, Claude Code가 VIBE-Q의 요구 R1~R14와 Doc/IMP-PLAN.md를 보고 직접 썼습니다. 학생이 만든 것과 파일 구성이 달라도 됩니다. 요구의 확인 방법이 같으면 됩니다.
설치 · 실행
| 하고 싶은 것 |
명령 |
| 명령을 다시 해 보기 |
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 |