{"id":51040283,"url":"https://github.com/yangtaeyoung/claude-switch","last_synced_at":"2026-06-22T10:03:00.810Z","repository":{"id":364343323,"uuid":"1267048831","full_name":"YangTaeyoung/claude-switch","owner":"YangTaeyoung","description":"🔄 Switch between multiple Claude Code subscription accounts with one command — Keychain-native, with per-account usage limit visibility (macOS)","archived":false,"fork":false,"pushed_at":"2026-06-12T16:02:12.000Z","size":334,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T18:08:05.570Z","etag":null,"topics":["account-switcher","anthropic","claude","claude-code","cli","developer-tools","golang","keychain","macos","rate-limit"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YangTaeyoung.png","metadata":{"files":{"readme":"README.ko.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-12T07:09:59.000Z","updated_at":"2026-06-12T16:02:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/YangTaeyoung/claude-switch","commit_stats":null,"previous_names":["yangtaeyoung/claude-switch"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/YangTaeyoung/claude-switch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YangTaeyoung%2Fclaude-switch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YangTaeyoung%2Fclaude-switch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YangTaeyoung%2Fclaude-switch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YangTaeyoung%2Fclaude-switch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YangTaeyoung","download_url":"https://codeload.github.com/YangTaeyoung/claude-switch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YangTaeyoung%2Fclaude-switch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34643624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["account-switcher","anthropic","claude","claude-code","cli","developer-tools","golang","keychain","macos","rate-limit"],"created_at":"2026-06-22T10:03:00.193Z","updated_at":"2026-06-22T10:03:00.796Z","avatar_url":"https://github.com/YangTaeyoung.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🔄 claude-switch\n\n**Claude Code 토큰 리밋이 찼다면? 명령 하나로 다음 구독 계정으로 전환하세요.**\n\n[![CI](https://github.com/YangTaeyoung/claude-switch/actions/workflows/ci.yml/badge.svg)](https://github.com/YangTaeyoung/claude-switch/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/YangTaeyoung/claude-switch?logo=github)](https://github.com/YangTaeyoung/claude-switch/releases/latest)\n[![Go Version](https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go\u0026logoColor=white)](https://go.dev/)\n[![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-black)](https://github.com/YangTaeyoung/claude-switch/releases/latest)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n[English](README.md) · [한국어](README.ko.md)\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n![claude-switch 인터랙티브 TUI 데모](docs/demo.gif)\n\n\u003c/div\u003e\n\n```console\n$ claude-switch next\nSwitched to profile \"personal\" (personal@example.com)\nTakes effect for new claude sessions. Restart any running session.\n\n$ claude-switch status\nActive profile: personal\n\n  work      work@example.com      limit: allowed | 5h 80% (resets 06-12 16:00) | 7d 12% (resets 06-19 14:00)\n* personal  personal@example.com  limit: allowed | 5h 3%  (resets 06-12 18:00) | 7d 40% (resets 06-15 09:00)\n```\n\n## ✨ 주요 기능\n\n- **🖥️ 인터랙티브 TUI** — 인자 없이 `claude-switch`를 실행하면 풀스크린 홈 메뉴: 프로필 관리(전환·이름변경·삭제 + 실시간 사용량), 현재 계정 저장, 설정. [Bubble Tea v2](https://github.com/charmbracelet/bubbletea) 기반.\n- **🌐 English / 한국어** — 설정 화면 또는 `claude-switch lang ko`로 표시 언어 전환.\n- **🔔 항상 최신 버전** — TUI가 하루 한 번 조용히 GitHub 릴리즈를 확인해 새 버전이 있으면 알려줍니다. 언제든 `claude-switch update`로 직접 업데이트하거나, 설정에서 **시작 시 자동 업데이트**를 켜면 자동으로 최신 버전으로 올라갑니다.\n- **⚡ 명령 하나로 전환** — `claude-switch next` 한 번이면 다음 등록 계정으로 순환. 셸 래퍼도, 환경변수도, 재로그인도 필요 없습니다.\n- **📊 계정별 사용량 한눈에** — `status`가 Anthropic의 `anthropic-ratelimit-unified-*` 헤더에서 읽어온 **실제 5시간/7일 사용률과 리셋 시각**을 계정별로 보여줍니다. 어느 계정에 여유가 있는지 전환 *전에* 알 수 있습니다.\n- **🔐 Claude Code와 동일한 방식으로 저장** — macOS에서는 키체인(평문 저장 없음), Linux/Windows에서는 Claude Code 자체의 `.credentials.json` 옆에 `0600` 권한 파일로 저장합니다. OS가 쓰는 방식을 그대로 따릅니다.\n- **🔁 토큰 회전 대응** — Claude Code는 사용 중 refresh token을 회전시킵니다. claude-switch는 전환 직전 살아있는 자격증명을 활성 프로필에 *sync-back* 하므로, 지난주에 저장한 프로필도 오늘 그대로 동작합니다.\n- **🪶 최소 의존성** — Go 표준 라이브러리 + Charm 스택(Bubble Tea v2, Lip Gloss v2). 작은 바이너리 하나.\n\n## 📦 설치\n\n[최신 릴리즈](https://github.com/YangTaeyoung/claude-switch/releases/latest)에서 **빌드된 바이너리**(macOS 유니버설, Linux amd64/arm64, Windows amd64/arm64)를 받거나:\n\n```shell\ngo install github.com/YangTaeyoung/claude-switch@latest\n```\n\n소스에서 빌드:\n\n```shell\ngit clone https://github.com/YangTaeyoung/claude-switch.git\ncd claude-switch \u0026\u0026 go build -o claude-switch .\n```\n\n## 🚀 빠른 시작\n\n**1. 계정마다 한 번씩 등록** — Claude Code로 로그인한 뒤 스냅샷:\n\n```shell\nclaude              # A계정으로 /login 후 종료\nclaude-switch save work\n\nclaude              # B계정으로 /login 후 종료\nclaude-switch save personal\n```\n\n**2. 리밋이 차면:**\n\n```shell\nclaude-switch next\n```\n\n끝. 새로 시작하는 `claude` 세션부터 다음 계정이 적용됩니다.\n\n### 전체 명령\n\n| 명령 | 동작 |\n|---|---|\n| `claude-switch` | 인터랙티브 대시보드(TUI) — 전환·삭제·실시간 사용량 |\n| `claude-switch save \u003cname\u003e` | 현재 로그인된 계정을 프로필로 저장 |\n| `claude-switch use \u003cname\u003e` | 지정 프로필로 전환 |\n| `claude-switch next` | 다음 프로필로 순환 전환 |\n| `claude-switch list` | 프로필 목록 (`*` = 활성) |\n| `claude-switch status` | 계정별 사용량(5h/7d)과 리셋 시각 |\n| `claude-switch rename \u003cold\u003e \u003cnew\u003e` | 프로필 이름 변경 |\n| `claude-switch delete \u003cname\u003e` | 프로필 삭제 (활성 프로필은 보호) |\n| `claude-switch lang \u003cen\\|ko\u003e` | 표시 언어 설정 |\n| `claude-switch update` | 최신 릴리즈를 내려받아 설치 |\n| `claude-switch version` | 버전 출력 |\n\n### 자동 업데이트\n\nclaude-switch는 [GitHub 릴리즈](https://github.com/YangTaeyoung/claude-switch/releases)에서 새 버전을 확인합니다. 기본값은 **알림만** — 새 버전이 있으면 TUI에 배너가 뜹니다(최대 24시간에 한 번 확인하며, `go install`로 빌드한 dev 바이너리에서는 확인하지 않습니다). 업데이트 시점은 `claude-switch update`로 직접 정하세요.\n\nTUI 시작 시 자동으로 올리려면 설정에서 **시작 시 자동 업데이트**를 켜거나, `~/.config/claude-switch/config.json`에 직접 설정하세요:\n\n```json\n{ \"autoUpdate\": true }\n```\n\n\u003e 자가 업데이트는 실행 중인 바이너리를 제자리에서 교체하므로, 설치된 위치에 쓰기 권한이 필요합니다(`go install` 경로와 직접 다운로드는 문제없음). 추후 패키지 매니저로 설치한다면 자동 업데이트는 끄고 매니저로 업그레이드하는 것을 권장합니다.\n\n## ⚙️ 동작 원리\n\nClaude Code는 OS가 비밀값을 보관하는 곳에 OAuth 자격증명을 저장합니다 ([공식 문서](https://code.claude.com/docs/en/authentication)). macOS에서는 **키체인 항목** `Claude Code-credentials`, Linux/Windows에서는 파일 `~/.claude/.credentials.json`(권한 `0600`)입니다. claude-switch는 OS에 맞는 방식으로 이 자격증명을 프로필 단위로 교체합니다:\n\n```mermaid\nflowchart LR\n    subgraph Store[\"🔐 자격증명 저장소 (macOS는 키체인 · Linux/Windows는 0600 파일)\"]\n        CC[\"Claude Code-credentials\u003cbr/\u003e(라이브)\"]\n        P1[\"profile: work\"]\n        P2[\"profile: personal\"]\n    end\n    next[\"claude-switch next\"] -- \"① sync-back\u003cbr/\u003e(회전된 토큰 반영)\" --\u003e P2\n    CC -. \"①\" .-\u003e P2\n    P1 -- \"② 복원\" --\u003e CC\n    next -- \"③ ~/.claude.json의\u003cbr/\u003eoauthAccount 교체\" --\u003e CJ[\"~/.claude.json\"]\n```\n\n1. **Sync-back** — 살아있는(회전됐을 수 있는) 자격증명을 현재 활성 프로필에 먼저 반영\n2. **복원** — 대상 프로필의 자격증명을 라이브 `Claude Code-credentials` 항목에 기록\n3. **계정 정보 교체** — `~/.claude.json`의 `oauthAccount`를 교체해 `/status`에 올바른 계정이 표시되게 함\n\n`~/.config/claude-switch/config.json`에는 비밀값이 아닌 메타데이터(프로필명, 순서, 이메일)만 저장됩니다.\n\n## ⚠️ 한계\n\n- **크로스 플랫폼.** macOS는 키체인을, Linux/Windows는 Claude Code 자체의 `~/.claude/.credentials.json`(`0600`)을 직접 읽고 씁니다. Linux/Windows에서는 자격증명이 평문 파일로 저장되며 — Claude Code 자체와 동일한 방식 — 사용자 계정의 파일 권한 수준만큼만 보호됩니다.\n- **실행 중인 세션은 기존 계정 유지** — 전환은 새 `claude` 세션부터 적용됩니다.\n- **`status`는 프로필당 최소 inference 요청 1회를 보냅니다** (haiku 1토큰) — 무과금 엔드포인트는 리밋 헤더를 반환하지 않는 것을 실측으로 확인했습니다. 비용은 극미하지만 0은 아닙니다.\n- macOS에서는 첫 키체인 접근 시 허용 프롬프트가 뜰 수 있습니다 — \"항상 허용\"을 선택하세요.\n\n## 📄 라이선스\n\n[MIT](LICENSE)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\u003csub\u003eGo로 제작 · Anthropic과 무관한 개인 프로젝트\u003c/sub\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyangtaeyoung%2Fclaude-switch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyangtaeyoung%2Fclaude-switch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyangtaeyoung%2Fclaude-switch/lists"}