@athsra/cli
v0.1.0
Published
athsra CLI — E2EE secret manager on Cloudflare edge. Doppler-style dev UX + zero-knowledge encryption + soft-delete + version history. MIT.
Maintainers
Readme
@athsra/cli
athsra — E2EE secret manager on Cloudflare edge. Doppler 의 dev UX + zero-knowledge encryption + Cloudflare 글로벌 edge <50ms latency.
Brand: 한국어 "아스라이" (어렴풋이) 어원, 발음 Ah-sra.
핵심 가치
- Zero-knowledge E2EE — server (CF Worker) 는 ciphertext + Argon2id proof 만, master password 절대 X
- Self-hosted — 본인 Cloudflare 계정 (R2 + KV + Workers, free tier 충분)
- Doppler-style —
athsra run <project> -- <cmd>으로 env inject 후 명령 실행 - Soft-delete + version history — 모든 PUT 은 immutable version 보존, DELETE 는 default soft (restore 가능)
- Cross-machine — handoff TTL + single-use settle 로 새 머신 추가
- BIP-39 12-word phrase — master pw 권장 형식 (paper backup + checksum)
설치 (prereq: Bun 1.3+)
# Bun 설치 (없으면)
curl -fsSL https://bun.sh/install | bash
# CLI 설치
bun add -g @athsra/cliBun runtime 강제 — TypeScript 직접 실행 + native crypto 성능. Node 호환은 후속 버전.
Linux/WSL2:
gnome-keyring+libsecret-1-dev+dbus-x11필요. macOS/Windows 자동 (Keychain / Cred Manager).
Quick start
1. Worker 배포 (1머신 1회)
athsra-worker 를 본인 CF 계정에 배포:
gh repo clone modfolio/athsra ~/code/athsra
cd ~/code/athsra && bun install
bash scripts/setup-worker.sh # R2 + KV + GLOBAL_SALT + deploy 멱등2. 첫 머신 등록 (PROOF bootstrap)
# (권장) BIP-39 12-word recovery phrase 생성
athsra new-phrase # 12 단어 출력 → 종이에 정확히 적기
athsra login
# Worker URL: https://athsra-worker.<account>.workers.dev
# Master password: <위 phrase 또는 자유 phrase>
# Paper backup confirm: yes3. 평소 사용
# secret 추가 / 수정
athsra set my-app DATABASE_URL=postgres://...
athsra set my-app API_KEY=sk_xxx STRIPE_KEY=sk_yyy
# .env 형식 일괄 import
athsra set my-app --from-file .env
# 조회
athsra get my-app # dump 모두 (.env 형식)
athsra get my-app DATABASE_URL # 특정 key
athsra ls # project 목록
athsra ls my-app # key 이름 목록 (값 X)
# Doppler-style env inject
athsra run my-app -- bun run dev
athsra run my-app -- npm run build4. 실수 복구 (Phase 1.x.1)
athsra versions my-app # 모든 version + tombstone 상태
athsra rollback my-app v1234 # 특정 version 으로 current 복원
athsra delete my-app # soft-delete (versions 보존)
athsra ls --all # 'my-app (deleted)' 표시
athsra restore my-app # 최신 version 으로 활성화
athsra purge my-app # 영구 삭제 (double-confirm)원리: R2 secrets/<project>/{current,versions/<id>,tombstone}.json 3-tier layout. PUT 시 새 version + current 갱신 + tombstone 자동 제거 (auto-restore).
5. 다른 머신 추가
# 기존 머신
athsra handoff # New machine label → handoff token (1h TTL, single-use)
# 새 머신
ATHSRA_HANDOFF_TOKEN='atk_...' \
ATHSRA_HANDOFF_MACHINE='home-desktop' \
ATHSRA_WORKER_URL='https://...' \
ATHSRA_MASTER_PW='<기존과 동일>' \
athsra handoff --accept전체 명령
| 명령 | 동작 |
|---|---|
| athsra login | 첫 등록 (PROOF bootstrap) |
| athsra set <p> KEY=val [...] | secret 추가/수정 (--from-file / --stdin 지원) |
| athsra unset <p> KEY [...] | 특정 key 제거 (envelope 유지) |
| athsra get <p> [KEY] | 값 출력 (single 또는 dump) |
| athsra ls [<p>] [--all] | project 또는 key 목록 |
| athsra run <p> -- <cmd> | env inject 후 명령 실행 |
| athsra versions <p> | 모든 version + tombstone 상태 |
| athsra rollback <p> <vid> | 특정 version 으로 current 복원 |
| athsra delete <p> [--hard] | soft-delete (default) 또는 hard-delete |
| athsra restore <p> | tombstone 제거 + 최신 version 활성화 |
| athsra purge <p> | hard-delete 별칭 (double-confirm) |
| athsra rotate-master | master pw 변경 (모든 envelope re-encrypt) |
| athsra new-phrase | BIP-39 12-word recovery phrase 생성 |
| athsra handoff [--accept] | 새 머신 추가 |
| athsra revoke [<atk_*>] | self 또는 명시 token revoke |
| athsra doctor | 환경 검증 (keyring/dbus/worker phase) |
| athsra init <p> | 신규 project 안내 |
보안
| 위협 | 완화 |
|---|---|
| R2 leak (CF 침해) | E2EE — ciphertext 만 노출. Argon2id m=64MB × t=3 brute-force 비용 |
| token leak (머신 도난) | athsra revoke (KV ~60s eventual). master pw 모름 → decrypt 불가 |
| handoff token 가로챔 | TTL 1h + single-use settle (Phase 1.2) |
| master pw leak | rotate-master — 모든 PROOF/token 갱신 + 모든 envelope re-encrypt |
| master pw 분실 | 종이 backup 필수 + BIP-39 12-word phrase. recovery 없음 (E2EE 본질) |
| 실수 삭제 / 덮어쓰기 | soft-delete + version history (Phase 1.x.1) — restore/rollback 으로 복구 |
| keyring leak | OS 자체 격리 (libsecret D-Bus / Keychain / Cred Manager DPAPI) |
자세한 architecture + threat model: github.com/modfolio/athsra/blob/main/docs/ARCHITECTURE.md.
Cryptographic primitives
- Argon2id (memory-hard KDF) — PHC 2015 winner, OWASP 2024+ 1순위. m=64MB.
@noble/hashes/argon2(Cure53 부분 audit, 0 deps) - AES-256-GCM — WebCrypto native. NIST SP 800-38D / FIPS 140-2 approved. nonce 12B per-envelope
- SHA-256 — WebCrypto subtle.digest (token hash)
- BIP-39 mnemonic —
@scure/bip39(paulmillr audited). 128-bit entropy + 4-bit checksum
License
MIT — LICENSE
Server (athsra-worker, BSL 1.1) 는 별도 license — see main repo.
Status
Phase 1.x.1 active (2026-05-04+) — soft-delete + version history. universe internal alpha.
ROADMAP.md — 남은 작업 + 미래 분기점 SSoT.
