MichaelLod/byoky
요약
Byoky는 API 키를 노출하지 않고도 토큰 예산을 안전하게 공유할 수 있는 오픈 소스 브라우저 확장 프로그램입니다. 개발자는 SDK를 통해 단 두 줄의 코드로 통합할 수 있으며, 사용자는 암호화된 금고를 통해 여러 AI 제공업체의 자격 증명을 통합 관리할 수 있습니다.
핵심 포인트
- API 키 노출 없이 안전한 토큰 예산 공유 가능
- SDK 통합 시 단 두 줄의 코드로 구현 가능
- Anthropic, OpenAI, Gemini 등 교차 제공업체 라우팅 지원
- 암호화된 금고를 통한 자격 증명 통합 관리
당신의 AI 예산이 낭비되고 있습니다.
Byoky를 사용하면 API 키를 노출하지 않고도 친구, 팀, 또는 멋진 것을 만드는 누구와도 토큰 예산(token budget)을 공유할 수 있습니다.
Website · Docs · Apps · Token Pool · Demo · Quick Start · Discord · Issues
Byoky (Bring Your Own Key)는 AI API 키와 설정 토큰(setup tokens)을 암호화된 금고(vault)에 저장하는 오픈 소스 브라우저 확장 프로그램(browser extension)입니다. 개발자는 @byoky/sdk를 통해 통합할 수 있으며—
—그들의 앱은 사용자의 자격 증명(credentials)을 직접 확인하지 않고도 사용할 수 있습니다.
사용자를 위해— 모든 AI 자격 증명을 위한 하나의 지갑. 키를 추가하고, 앱을 승인하며, 액세스를 취소하고, 암호화된 백업을 내보낼 수 있습니다. 모든 요청에 대한 완전한 가시성을 제공합니다.
개발자를 위해— 단 두 줄의 코드. 선호하는 제공업체 SDK를 사용하세요. 키는 사용자의 앱에 절대 닿지 않습니다.
그룹— 목적에 따라 연결된 앱을 버킷(bucket)으로 분류합니다 (예: "개인용", "업무용"). 각 그룹을 특정 자격 증명에 고정(pin)한 다음, 앱을 그룹 간에 드래그하여 사용할 키를 전환할 수 있습니다. 라이브 세션은 자동으로 경로를 재설정하므로, 어떤 앱에서도 코드 변경이 필요 없습니다.
교차 제공업체 라우팅 (Cross-provider routing)— 앱을 Claude 그룹에서 GPT 그룹으로 드래그하면 지갑이 투명하게 요청을 변환합니다. Anthropic ↔ OpenAI ↔ Gemini ↔ Cohere — 요청 본문(request body), 응답 본문(response body), 그리고 SSE 스트림(SSE streams)이 즉석에서 재작성됩니다. 앱은 선호하는 SDK를 계속 호출하고, 지갑이 상위(upstream)를 선택합니다.
토큰 선물 (Token gifts)— API 키를 공유하지 않고도 친구나 팀원과 토큰 액세스를 공유하세요. 예산과 만료일을 설정할 수 있습니다. 모든 요청은 사용자의 지갑을 통해 중계됩니다.
1. Byoky 지갑 설치 → 마스터 비밀번호 설정
2. API 키 또는 Claude 설정 토큰 추가 → 로컬에 암호화하여 저장
3. Byoky가 지원되는 앱 방문 → 액세스 승인 → 키는 금고에 안전하게 유지
| 플랫폼 | 버전 | 링크 |
|---|---|---|
| Chrome | Chrome Web Store | |
| ... | ||
| 라이브 버전 상태(현재 + 스토어 검토 대기 중)는 byoky.com에서 확인할 수 있습니다. |
Chrome: Chrome Web Store에서 설치
Firefox: Mozilla Add-ons에서 설치
iOS: App Store에서 설치 (지갑 + Safari 확장 프로그램이 하나의 앱에 포함)
Android: Google Play에서 설치 (독립형 지갑. Chrome Android는 확장 프로그램 지원이 되지 않으므로, QR 코드 또는 릴레이(Relay)를 통해 페어링합니다)
새 앱 스캐폴딩 (Scaffold a new app):
npx create-byoky-app
또는 기존 프로젝트에 추가:
npm install @byoky/sdk
import Anthropic from '@anthropic-ai/sdk';
import { Byoky } from '@byoky/sdk';
const byoky = new Byoky();
...
두 줄이 변경되었습니다. 전체 API 호환성을 제공합니다. 스트리밍 (Streaming), 파일 업로드 (File uploads), 비전 (Vision) 기능이 모두 작동합니다. 키 (Keys)는 절대 노출되지 않습니다. 확장 프로그램이 재시작되면 세션 (Sessions)이 자동으로 재연결됩니다.
브라우저 확장 프로그램이 없나요? 사용자는 대신 Byoky iOS 또는 Android 앱으로 연결할 수 있습니다. SDK는 릴레이 (Relay)를 통해 연결되며, 사용자가 휴대폰으로 스캔할 수 있는 페어링 코드 (Pairing code)를 보여줍니다.
Web App ←WebSocket→ Relay Server ←WebSocket→ Phone Wallet → LLM API
modal: true를 사용하면, 연결 모달 (Connect modal)이 확장 프로그램 설치 여부를 자동으로 감지합니다. 설치되어 있지 않은 경우, 릴레이 모드 (Relay mode)로 전환되어 모바일 페어링을 위한 내장 QR 코드를 표시하므로 별도의 커스텀 UI가 필요하지 않습니다. iOS와 Android 앱 모두 동일한 번역 엔진 (Translation engine)을 실행하므로, 모바일에서도 교차 제공자 라우팅 (Cross-provider routing)이 작동합니다.
// 확장 프로그램과 모바일 모두에서 작동 — 모달이 감지 및 QR 코드를 처리합니다
const session = await byoky.connect({ modal: true });
모든 브라우저와 모든 기기에서 작동합니다. 확장 프로그램 설치가 필요하지 않습니다. 키 (Keys)는 휴대폰에 머뭅니다.
서버에서 LLM 호출이 필요한가요? 사용자의 브라우저가 확장 프로그램을 통해 요청을 릴레이합니다. 즉, 귀하의 백엔드 (Backend)는 API 키를 절대 볼 수 없습니다.
Backend ←WebSocket→ User's Frontend ←Extension→ LLM API
// 프론트엔드 (Frontend) — 백엔드가 LLM 호출을 할 수 있도록 릴레이를 엽니다
const session = await new Byoky().connect({ providers: [{ id: 'anthropic' }], modal: true });
const relay = session.createRelay('wss://your-app.com/ws/relay');
// 백엔드 (Backend, Node.js)
import { ByokyServer } from '@byoky/sdk/server';
const byoky = new ByokyServer();
...
CLI 도구 및 데스크톱 앱은 브리지 (bridge)를 통해 API 호출을 라우팅할 수 있습니다. 브리지는 확장에 요청을 전달하는 로컬 HTTP 프록시 (proxy)입니다. 키 (Key)는 절대 확장을 벗어나지 않습니다.
CLI App → HTTP → Bridge (localhost) → Native Messaging → Extension → LLM API
npm install -g @byoky/bridge
byoky-bridge install # 네이티브 메시징 호스트 (native messaging host) 등록
API 키를 공유하지 않고도 토큰 액세스 권한을 공유할 수 있습니다. 송신자의 확장이 모든 요청을 프록시하며, 키는 절대 지갑을 떠나지 않습니다.
Sender's Extension ←WebSocket→ Relay Server ←WebSocket→ Recipient's Extension
선물 만들기:
- 지갑을 엽니다 → 자격 증명 (credential)을 선택합니다 → "Gift"를 클릭합니다
- 토큰 예산 (token budget)과 만료 기간을 설정합니다
- 생성된 선물 링크를 공유합니다
선물 사용하기:
- 지갑을 엽니다 → "Redeem Gift"를 클릭합니다
- 선물 링크를 붙여넣습니다 → 수락합니다
개인정보 보호 보장: 수신자는 사용자의 API 키를 절대 받지 않습니다. 모든 요청은 송신자의 실행 중인 확장을 통해 전달되며, 이 확장은 토큰 예산을 강제하고 언제든지 액세스 권한을 취소할 수 있습니다.
byoky.com/token-pool — 사용자들이 커뮤니티와 무료 토큰 선물을 공유하는 공개 게시판입니다. 사용 가능한 선물을 찾아보고, 어떤 선물이 온라인 상태인지 확인하며, 남은 토큰과 만료 시간을 체크한 뒤 지갑으로 직접 사용할 수 있습니다.
선물을 목록에 올리는 방법:
- 지갑(확장 프로그램 또는 모바일)에서 선물을 생성합니다
- "List on Token Pool"을 체크합니다
- 표시 이름을 추가합니다 (또는 익명으로 유지합니다)
- 사용자의 선물이 토큰 풀에 나타나 누구나 사용할 수 있게 됩니다
토큰 풀은 실시간 온라인/오프라인 상태(초록색/빨간색 점), 남은 토큰 예산, 만료 카운트다운을 보여줍니다. 만료되었거나 소진된 선물은 회색으로 처리된 섹션에 나타납니다.
Byoky 지갑을 OpenClaw의 키 제공자로 사용하세요. 플러그인은 브리지를 통해 연결되므로, CLI 환경에서도 키가 확장을 절대 벗어나지 않습니다.
OpenClaw → HTTP → Bridge (localhost) → Native Messaging → Extension → LLM API
13개의 모든 프로바이더 (providers)를 플러그인을 통해 사용할 수 있습니다. 브리지 (bridge)를 설치하고, 지갑을 연결하면 OpenClaw가 사용자의 Byoky 인증 정보를 투명하게 사용합니다. 설정 방법은 OpenClaw 플러그인을 참조하세요.
설정 토큰 (setup tokens)도 지원합니다. v0.4.19부터 OpenClaw(및 기타 모든 서드파티 에이전트 프레임워크)는 단순히 sk-ant-api03-... 형태의 API 키뿐만 아니라, Claude.ai 설정 토큰을 byoky-anthropic 인증 정보로 사용할 수 있습니다.
브리지는 외부로 나가는 과정에서 도구 이름 (tool names)을 투명하게 재작성하고 프레임워크의 시스템 프롬프트 (system prompt)를 시스템 필드 (system field) 밖으로 재배치하며, 스트리밍 응답 (streaming response) 시에는 도구 이름을 다시 원래대로 되돌립니다. 이를 통해 Anthropic의 퍼스트 파티 탐지 (first-party detection)가 에이전트의 동작을 해치지 않고 요청을 수락할 수 있게 합니다.
OpenClaw를 원격 서버 (Railway, Fly.io 등)에서 실행하고 API 키는 사용자의 기기에 보관하세요. 릴레이 (relay)가 그 간극을 메워줍니다. 즉, 사용자의 클라우드 인스턴스는 사용자의 인증 정보를 절대 볼 수 없습니다.
OpenClaw (Railway) ←WebSocket→ Relay Server ←WebSocket→ Your Wallet → LLM API
환경 변수 (environment variables)도, 비밀 관리 (secrets management)도, 유출될 위험이 있는 .env 파일도 필요 없습니다. 사용자의 키는 지갑에 머물러 있으며, OpenClaw는 사용자가 필요한 어디에서나 실행됩니다.
AES-256-GCM |
Web Crypto API를 통해 PBKDF2 유도 키(600K iterations)로 암호화된 키 |
노출 제로 |
API 키는 확장 프로그램(extension)을 절대 벗어나지 않습니다. 앱은 임시 세션 토큰(session tokens)을 받습니다 |
비밀번호 강도 |
실시간 강도 측정기(엔트로피, 패턴, 일반 비밀번호)를 포함한 최소 12자 |
Vault 백업 |
별도의 내보내기 비밀번호를 사용하는 암호화된 내보내기/가져오기 (.byoky 파일) |
감사 로그 (Audit log) |
모든 요청 기록 — 앱 출처, 제공자, 상태, 타임스탬프 |
지출 한도 (Spending caps) |
앱당 토큰 허용량 — 프록시(proxy)에서 강제되는 총합 및 제공자별 제한 |
토큰 선물 (Token gifts) |
키를 공유하지 않고 액세스 권한 공유 — 예산 집행 기능이 포함된 릴레이 기반, 송신자 측 프록시 |
기본적으로 로컬 저장 (Local by default) |
키는 사용자의 장치에 머뭅니다. 클라우드 동기화는 선택 사항(opt-in)입니다. 자격 증명은 업로드 전 클라이언트 측에서 비밀번호로부터 유도된 키로 암호화되며, Vault는 활성 세션 동안에만 해당 키를 메모리에 보유합니다. 텔레메트리(telemetry), 프롬프트/응답 로그 기록 없음 |
| 제공자 (Provider) | API 키 | OAuth | 상태 (Status) |
|---|---|---|---|
| Anthropic | ✓ | Setup Token | 사용 가능 |
| ... | Custom | ✓ | 확장 가능 |
Setup Token: claude setup-token을 통해 Claude Pro/Max 구독을 사용하세요.
API 키는 제공자 콘솔의 종량제(pay-per-use) 결제를 사용합니다.
Byoky는 **프록시 모델 (proxy model)**을 사용합니다. 키는 절대 확장 프로그램을 벗어나지 않습니다. 세 가지 통합 경로가 있으며, 모두 동일한 보장을 제공합니다:
브라우저 앱 → SDK (createFetch) → 컨텐츠 스크립트 (Content Script) → 확장 프로그램 (Extension) → LLM API
모바일 지갑 → SDK (createFetch) → WebSocket → 릴레이 (Relay) → 휴대폰 앱 → LLM API
백엔드 앱 → SDK/서버 (WebSocket) → 사용자의 브라우저 → 확장 프로그램 (Extension) → LLM API
...
SDK는 createFetch()를 제공합니다. 이는 확장 프로그램을 통해 라우팅되는 fetch 대체용 드롭인(drop-in) 도구입니다. 모든 제공자의 네이티브 SDK와 함께 작동합니다.
byoky/
├── packages/
│ ├── core/ # 공유 타입, 암호화, 프로토콜, 제공자 레지스트리
...
marketing/
marketing/
은 e2e Playwright fixtures와 e2e 스위트가 이미 구동하고 있는 iOS/Android 시뮬레이터를 재사용하여, Chrome Web Store, Firefox AMO, iOS App Store, Google Play, Product Hunt에 필요한 모든 에셋과 나레이션이 포함된 워크스루 (walkthrough) 비디오를 생성하는 독립적인 파이프라인을 포함합니다.
pnpm marketing:install # 1회성: Sharp, Playwright, Chromium
pnpm marketing:desktop # Chrome + web + composites + narration + video
pnpm marketing:capture:ios # 부팅된 iOS 시뮬레이터 필요
...
생성되는 항목 (marketing/ 하위에 위치하며, gitignored 처리됨):
raw/popup-frames/*.png
— Chrome 확장 프로그램 팝업 상태 (16개 화면)
raw/web/*.png
— 랜딩 / 데모 / 채팅 / 마켓플레이스 히어로(hero) + 스토어 샷
raw/ios/*.png
— 1320×2868 해상도의 네이티브 iOS 시뮬레이터 캡처 (App Store 6.9")
raw/android/*.png
— 1080×1920 해상도의 Android 에뮬레이터 캡처 (Play portrait)
composites/*.png
— 6개의 Chrome/Firefox 스토어 슬라이드 · 6개의 iOS App Store 슬라이드 · Chrome 프로모션 small (440×280) + marquee (1400×560) · Product Hunt 커버 (1270×760) + 헤더 (1200×630) + 썸네일 (240×240) · 멀티 스크린 아이캐처 (1920×1080)
voiceover/narration.wav
— 세그먼트별 스타일 지시가 포함된 Gemini 2.5 Flash TTS (Puck 음성)
videos/walkthrough.mp4
— 16:9 나레이션 워크스루 (+ 정사각형 + 세로형)
videos/product-hunt.mp4
— Product Hunt 출시용 변형 (+ 정사각형 + 세로형)
videos/walkthrough-batman.mp4
— 코믹북 스타버스트 오버레이 (POW! BAM! ZOOM!), 하드 줌 펀치, 화면 흔들림, 비트 사이의 컬러 플래시 전환이 포함된 강렬한 Batman-TV 스타일의 리믹스
주요 설계 결정 사항:
-
iOS 마케팅 캡처는
BytekMarketingTests.swift를 실행합니다. 이는 앱을 스토어에 올릴 만한 모든 화면으로 이동시키고, 병렬 bash 러너가xcrun simctl io screenshot을 통해 스냅샷을 찍을 수 있도록 감시 파일 (sentinel files)에서 일시 정지하는 가벼운 XCUITest입니다. -
비디오는 서브 픽셀 단위로 부드러운 Ken-Burns 모션을 구현하기 위해
scale+lanczos+eval=frame(ffmpeg의zoompan필터)을 사용합니다.
라운드 크롭 오프셋(round crop offsets)을 정수로 처리하여 눈에 보이는 1px 흔들림(wobble)이 발생할 수 있으나, 여기서는 이를 방지했습니다). - 종횡비(Aspect-ratio) 변형(1:1 정사각형, 9:16 세로형)은 레터박스(letterbox) 바 뒤에 블러 처리된 채우기 배경(blurred-fill background)을 배치하여 전체 16:9 콘텐츠를 보존하며, 강제적인 중앙 크롭(center-crop)을 수행하지 않습니다.
pnpm install # 의존성 설치
pnpm dev # 개발 모드에서 확장 프로그램 시작 (Chrome)
pnpm build # 모든 패키지 빌드
...
브라우저별 빌드 (Browser-specific builds):
pnpm --filter @byoky/extension dev:firefox
pnpm --filter @byoky/extension build:all # Chrome + Firefox + Safari
Chrome에서 로드하기:
pnpm dev
-
다음으로 이동:
chrome://extensions -
"개발자 모드 (Developer mode)" 활성화
-
"압축해제된 확장 프로그램을 로드합니다 (Load unpacked)" 클릭 →
packages/extension/.output/chrome-mv3선택
확장 프로그램 (Extension) |
WXT · React · Zustand · Web Crypto API |
SDK |
TypeScript · 모바일 페어링을 위한 QR 코드가 포함된 내장 연결 모달 (built-in connect modal) · 의존성 없음 (@byoky/core 제외) |
모노레포 (Monrepo) |
pnpm workspaces · TypeScript 엄격 모드 (strict mode) |
브라우저 (Browsers) |
Chrome (MV3) · Firefox · Safari |
- 백엔드 릴레이 (Backend relay) (
@byoky/sdk/server
) - 앱당 토큰 허용량 (전체 + 프로바이더별 제한)
- 암호화된 금고 내보내기/가져오기 (Encrypted vault export/import) (
.byoky
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기