이 글이 마지막으로 손본 때는이에요. 일부 내용이 더 이상 맞지 않을 수 있으니, 궁금한 점은 글쓴이에게 여쭤 주세요.
AI 번역简体中文한국어
요약 ·
gas(Grok Account Switch)는 한 대의 기기에서 여러 Grok CLI 로그인을 관리하는 경량 CLI입니다. ~/.grok/auth.json 파일을 스냅숏으로 찍어 번호별 계정으로 저장해 두고, gas sw / gas to 한 줄 명령으로 전환합니다. Claude Code의 ccs와 유사한 방식입니다.
gas(Grok Account Switch)는 오픈소스 커맨드라인 도구로, 한 대의 기기에서 여러 Grok CLI 로그인을 관리합니다. Grok은 현재 세션을 ~/.grok/auth.json.gas는 이 파일을 번호별 계정으로 스냅숏 찍어 두고, 한 줄 명령으로 전환합니다. 업무 계정, 개인 계정, 실험 계정 — 반복적인 logout/login이 필요 없습니다.
계기는 아주 구체적이었습니다. 저는 Grok을 개인 프로젝트와 일상적인 agent 세션에 동시에 사용하고 있고, 계정도 여러 개입니다. Grok CLI는 세션을 ~/.grok/auth.json이라는 단 하나의 파일에 고정시킵니다. 계정을 바꾸려면 logout한 뒤 login를 해야 하고, 브라우저에서 기기 인증을 거쳐야 하며, 그 사이에 실행 중인 세션이 꼬이기 쉽습니다.
Claude Code 쪽에는 이미 ccs라는 로컬 멀티 계정 전환기가 있었습니다. 접근 방식이 깔끔했습니다. 로그인을 가로채지 않고, '지금 어떤 자격 증명이 활성화되어 있는지'만 관리하는 겁니다. Grok 쪽에는 당시 그런 짝이 될 만한 작은 도구가 없어서, 같은 제품 형태로 gas를 만들었습니다.
설계상 범위를 일부러 좁혔습니다.
로그인 흐름은 건드리지 않음 — 로그인은 여전히 공식 grok login, gas는 스냅숏과 전환만 담당
자격 증명은 로컬에만 보관 — 파일은 전부 ~/.grok-switch/에 있으며, 업로드하거나 중계하지 않음
agent를 위한 여지도 마련 — 설치 경로 고정, gas exec에서 격리된 GROK_HOME를 사용해 여러 agent가 동일한 live auth를 동시에 쓰지 못하게 함
전환 가능 롤백 — 잠금, 원자적 쓰기, 실패 시 복구. 그래야 매일 반복 전환을 써도 안심
구현은 Grok과 함께 모두 작성한 뒤, 테스트와 설치 스크립트를 덧붙였습니다. 저에게는 무엇보다 제 불편을 해결하는 도구였습니다. 오픈소스로 공개한 것은, Grok CLI를 여러 계정으로 사용하는 사람들이 같은 바퀴를 다시 발명하지 않았으면 하는 바람에서입니다.
이 도구가 필요한 이유
Grok CLI는 기본적으로 '현재 로그인' 하나만 유지합니다. 멀티 계정 상황은 흔합니다.
회사 계정과 개인 계정을 모두 사용해야 함
프로젝트별로 사용량이나 권한을 분리하고 싶음
스크립트를 작성하거나 agent를 실행할 때, 전역 세션을 바꾸지 않고 특정 계정으로 실행하고 싶음
수동으로 계정을 전환하는 비용은 적지 않습니다. 로그아웃 → 재로그인 → 다시 되돌리기. gas는 이 과정을 이렇게 바꿉니다.
BASH
gas sw # 다음 계정으로 순환
gas to work # work라는 이름의 구성으로 이동
gas to 2 # 번호로 이동
Grok은 auth.json를 핫로드하므로, 대부분의 경우 전환 후 TUI를 재시작할 필요가 없습니다.
하는 일과 하지 않는 일
하는 일:
현재 로그인된 세션 캡처(gas add), 로컬 아카이브에 저장
계정 나열, 순환, 번호/이메일/별칭으로 전환
선택사항: 디렉터리 → 계정 매핑 (특정 프로젝트 디렉터리에 들어가면 자동 전환)
선택사항: 격리된 GROK_HOME로 명령 실행, 전역 세션에 영향 없음(gas exec)
상태 확인, 사용량 통계, 드라이런(gas -n sw)
하지 않는 일:
로그인 흐름을 대신 처리하지 않음 — 로그인은 여전히 공식 grok login
token을 어떤 서버에도 업로드하지 않음. 파일은 전부 로컬 ~/.grok-switch/
xAI 공식 도구가 아님. Grok CLI의 auth 형식이 변경되면 적응이 필요할 수 있음
Note
명령어 이름은 gas이며, gss가 아닙니다. 많은 셸에서 gss를 git status -s의 별칭으로 사용합니다.
작동 원리 (간략 버전)
디렉터리 역할은 대략 다음과 같습니다.
TEXT
~/.grok/auth.json # Grok이 실제로 읽는 현재 세션
~/.grok-switch/
sequence.json # 계정 인덱스, 순환 순서, 통계
accounts/<n>/auth.json # 각 계정의 백업
dir-accounts.json # 선택사항: 경로 → 계정
isolated/ # gas exec용 격리된 홈
전환할 때마다 gas는 다음을 수행합니다.
배타적 잠금(.switch.lock)을 획득하여 동시 쓰기로 상태가 망가지는 것을 방지
현재 live 메일로 아카이브에서 사용자 슬롯을 찾음
현재 로그인이 아직 관리 목록에 없으면 전환을 거부합니다(먼저 gas add)
live 토큰을 현재 슬롯에 기록한 다음 대상 슬롯을 원자적으로 auth.json에 다시 씁니다(권한 600)
통계를 갱신합니다. 실패 시 live auth와 sequence를 롤백합니다.
즉, 전환은 '현재 백업 → 대상 복원' 방식의 로컬 파일 조작이며, 제3자를 거치지 않습니다.
설치
필요 사항: Python 3.9+. Grok CLI는 로그인할 때만 필요하며, gas 자체는 이에 의존하지 않고 실행됩니다.
git clone https://github.com/pintaste/gas.git
cd gas
./install.sh
기본적으로 ~/.local/bin/gas에 설치되며, 이 디렉터리가 PATH에 있어야 합니다. coding agent용 최소 수용 기준:
BASH
curl -fsSL https://raw.githubusercontent.com/pintaste/gas/main/install.sh | bash
export PATH="${HOME}/.local/bin:${PATH}"
command -v gas && gas version # 예상: gas 0.1.0
Warning
의 token 파일을 출력하거나 커밋하지 마세요. ~/.grok/와 ~/.grok-switch/ 아카이브 자체가 세션 자격 증명입니다.
빠른 시작
Grok에 로그인된 상태에서:gas add(현재 세션만 캡처, 로그아웃하지 않음)
두 번째 계정 로그인:grok logout && grok login
다시 한 번 실행:gas add
그 후 언제든지 전환:
BASH
gas sw # 다음으로 순환
gas to 1 # 번호로
gas to you@email.com # 메일로
gas to work # 지정한 별칭으로
계정에 기억하기 쉬운 이름 붙이기:
BASH
gas profile 1 work
gas profile 2 personal
gas ls # * / (active)가 현재 계정을 표시
명령어 한눈에 보기
명령어
기능
gas add
현재 로그인 추가 또는 갱신
gas ls
관리 중인 계정 목록 보기
gas sw
다음 계정으로 순환
gas to <id>
번호/이메일/별칭으로 전환
gas profile <id> <name>
계정에 별명 설정
gas rm <id>
저장된 계정 삭제 (live auth에는 영향 없음)
gas dir [path] <id>
디렉터리를 계정에 매핑
gas auto
현재 디렉터리 매핑에 따라 전환
gas exec <id> -- <cmd>
해당 계정으로 격리된 명령 실행
gas config-dir <id>
격리된 home을 구체화하여 export GROK_HOME=...
gas check
내보내기 출력
gas status/gas whoami
현재 계정과 token 상태
gas stats
각 계정의 전환 횟수/사용 시간
gas -n sw
드라이런 — 누구로 전환될지만 확인
이전 별칭도 계속 사용 가능: gas save, gas use, gas list.
고급: 프로젝트별 자동 전환, 병렬 사용 시 세션 충돌 없음
디렉터리 매핑은 '이 repo에 들어가면 업무 계정 사용' 방식에 적합합니다.
BASH
gas dir ~/work/acme 1
cd ~/work/acme
gas auto
격리 실행은 agent/CI/병렬 작업에 적합합니다. 전역 auth.json를 변경하지 않습니다.
BASH
gas exec 2 -- grok -p "hello"
# 또는 독립된 홈을 얻어서 export:
eval "$(gas config-dir 2 | tail -1)"
환경 변수 (선택사항):
변수
기본값
의미
GAS_HOME/GSS_HOME
~/.grok-switch
아카이브 위치
GROK_HOME/GROK_DIR
~/.grok
Grok 설정 디렉터리
GAS_SILENT=1
—
스크립트 자동 모드
NO_COLOR
—
ANSI 색상 비활성화
보안 및 제거
아카이브와 live auth는 모두 로컬 파일입니다. 백업 드라이브, 동기화 드라이브, 클라우드 클라이언트가 ~/.grok-switch를 스캔하면 로그인 자격 증명이 동기화되는 셈입니다.
직접 파일을 수정하면 인덱스, 잠금, 롤백이 없습니다. gas는 번호별 아카이브, 순환 순서, 실패 시 롤백, 그리고 exec격리 경로를 제공하므로, 일상적인 반복 전환에 적합합니다.
전환 후 Grok 계정이 바뀌지 않았어요.
먼저 gas whoami/gas status로 live 이메일이 변경되었는지 확인하세요. 극히 드물게 TUI를 재시작해야 할 수 있습니다. 문서에 따르면 Grok은 일반적으로 auth.json를 핫로드합니다.
'현재 로그인이 관리되지 않음'이라는 메시지가 나와요.
방금 grok login로 새 세션에 로그인했지만, 아직 gas add을 실행하지 않은 상태입니다. 먼저 캡처한 후 전환하세요.
coding agent에서 사용할 수 있나요?
네. 설치 경로가 ~/.local/bin/gas로 고정되어 있습니다. 병렬 작업은 gas exec <id> -- ...를 우선 사용하여 여러 agent가 동일한 live auth.json를 동시에 쓰지 않도록 하세요.
ccs와는 어떤 관계인가요?
제품 형태가 유사합니다. 둘 다 '로컬 멀티 계정 전환기'입니다. ccs는 Claude Code용, gas는 Grok CLI용이며, 서로 독립적이고 의존 관계도 없습니다.
요약
이미 Grok CLI를 여러 계정으로 사용 중이라면, gas는 '로그아웃했다 다시 로그인'하는 과정을 몇 줄의 로컬 명령어로 줄여주고, 디렉터리 매핑과 격리 실행까지 제공합니다. curl 한 줄로 설치하고, 먼저 gas add를 두 번 실행한 뒤 gas to로 전환하면 대부분 충분합니다.
gas(Grok Account Switch)는 오픈소스 커맨드라인 도구로, 한 대의 기기에서 여러 Grok CLI 로그인을 관리합니다. Grok은 현재 세션을 ~/.grok/auth.json.gas는 이 파일을 번호별 계정으로 스냅숏 찍어 두고, 한 줄 명령으로 전환합니다. 업무 계정, 개인 계정, 실험 계정 — 반복적인 logout/login이 필요 없습니다.
프로젝트 주소: github.com/pintaste/gas(MIT). 디자인 영감은 Claude Code 쪽의 ccs / cc-account-switcher에서 받았습니다.
이 도구를 만든 이유
계기는 아주 구체적이었습니다. 저는 Grok을 개인 프로젝트와 일상적인 agent 세션에 동시에 사용하고 있고, 계정도 여러 개입니다. Grok CLI는 세션을 ~/.grok/auth.json이라는 단 하나의 파일에 고정시킵니다. 계정을 바꾸려면 logout한 뒤 login를 해야 하고, 브라우저에서 기기 인증을 거쳐야 하며, 그 사이에 실행 중인 세션이 꼬이기 쉽습니다.
Claude Code 쪽에는 이미 ccs라는 로컬 멀티 계정 전환기가 있었습니다. 접근 방식이 깔끔했습니다. 로그인을 가로채지 않고, '지금 어떤 자격 증명이 활성화되어 있는지'만 관리하는 겁니다. Grok 쪽에는 당시 그런 짝이 될 만한 작은 도구가 없어서, 같은 제품 형태로 gas를 만들었습니다.
설계상 범위를 일부러 좁혔습니다.
구현은 Grok과 함께 모두 작성한 뒤, 테스트와 설치 스크립트를 덧붙였습니다. 저에게는 무엇보다 제 불편을 해결하는 도구였습니다. 오픈소스로 공개한 것은, Grok CLI를 여러 계정으로 사용하는 사람들이 같은 바퀴를 다시 발명하지 않았으면 하는 바람에서입니다.
이 도구가 필요한 이유
Grok CLI는 기본적으로 '현재 로그인' 하나만 유지합니다. 멀티 계정 상황은 흔합니다.
수동으로 계정을 전환하는 비용은 적지 않습니다. 로그아웃 → 재로그인 → 다시 되돌리기. gas는 이 과정을 이렇게 바꿉니다.
Grok은 auth.json를 핫로드하므로, 대부분의 경우 전환 후 TUI를 재시작할 필요가 없습니다.
하는 일과 하지 않는 일
하는 일:
하지 않는 일:
명령어 이름은 gas이며, gss가 아닙니다. 많은 셸에서 gss를 git status -s의 별칭으로 사용합니다.
작동 원리 (간략 버전)
디렉터리 역할은 대략 다음과 같습니다.
전환할 때마다 gas는 다음을 수행합니다.
즉, 전환은 '현재 백업 → 대상 복원' 방식의 로컬 파일 조작이며, 제3자를 거치지 않습니다.
설치
필요 사항: Python 3.9+. Grok CLI는 로그인할 때만 필요하며, gas 자체는 이에 의존하지 않고 실행됩니다.
또는 소스에서:
기본적으로 ~/.local/bin/gas에 설치되며, 이 디렉터리가 PATH에 있어야 합니다. coding agent용 최소 수용 기준:
의 token 파일을 출력하거나 커밋하지 마세요. ~/.grok/와 ~/.grok-switch/ 아카이브 자체가 세션 자격 증명입니다.
빠른 시작
계정에 기억하기 쉬운 이름 붙이기:
명령어 한눈에 보기
이전 별칭도 계속 사용 가능: gas save, gas use, gas list.
고급: 프로젝트별 자동 전환, 병렬 사용 시 세션 충돌 없음
디렉터리 매핑은 '이 repo에 들어가면 업무 계정 사용' 방식에 적합합니다.
격리 실행은 agent/CI/병렬 작업에 적합합니다. 전역 auth.json를 변경하지 않습니다.
환경 변수 (선택사항):
보안 및 제거
테스트는 임시 디렉터리에서 진행되며, 실제 계정에는 영향을 주지 않습니다.
자주 묻는 질문
gas와 auth.json을 직접 수정하는 것의 차이는?
직접 파일을 수정하면 인덱스, 잠금, 롤백이 없습니다. gas는 번호별 아카이브, 순환 순서, 실패 시 롤백, 그리고 exec격리 경로를 제공하므로, 일상적인 반복 전환에 적합합니다.
전환 후 Grok 계정이 바뀌지 않았어요.
먼저 gas whoami/gas status로 live 이메일이 변경되었는지 확인하세요. 극히 드물게 TUI를 재시작해야 할 수 있습니다. 문서에 따르면 Grok은 일반적으로 auth.json를 핫로드합니다.
'현재 로그인이 관리되지 않음'이라는 메시지가 나와요.
방금 grok login로 새 세션에 로그인했지만, 아직 gas add을 실행하지 않은 상태입니다. 먼저 캡처한 후 전환하세요.
coding agent에서 사용할 수 있나요?
네. 설치 경로가 ~/.local/bin/gas로 고정되어 있습니다. 병렬 작업은 gas exec <id> -- ...를 우선 사용하여 여러 agent가 동일한 live auth.json를 동시에 쓰지 않도록 하세요.
ccs와는 어떤 관계인가요?
제품 형태가 유사합니다. 둘 다 '로컬 멀티 계정 전환기'입니다. ccs는 Claude Code용, gas는 Grok CLI용이며, 서로 독립적이고 의존 관계도 없습니다.
요약
이미 Grok CLI를 여러 계정으로 사용 중이라면, gas는 '로그아웃했다 다시 로그인'하는 과정을 몇 줄의 로컬 명령어로 줄여주고, 디렉터리 매핑과 격리 실행까지 제공합니다. curl 한 줄로 설치하고, 먼저 gas add를 두 번 실행한 뒤 gas to로 전환하면 대부분 충분합니다.