
클라우드 코딩 에이전트에 개인 데이터, 내부 인프라, 시크릿을 노출하지 않으면서 워크플로를 유지하세요.
워크플로를 망가뜨리지 않으면서 프라이빗 데이터, 내부 인프라, 시크릿을 클라우드 코딩 에이전트로부터 차단하세요.
설치 · 빠른 시작 · 정책 · 모니터링 · Pi / OMP · 보안
Cover는 AI 코딩 에이전트를 위한 양방향 프라이버시 프록시입니다. 요청이 여러분의 머신을 떠나기 전에 일치하는 민감한 값을 로컬에서 현실적이고 결정론적인 대체 값으로 바꾸고, 일반 및 스트리밍 응답에서 일치하는 가짜 값을 원래 값으로 되돌립니다. 모델은 일관성 있는 컨텍스트를 받고, 여러분의 에이전트와 도구는 실제 환경에서 계속 작동합니다.
대화가 처음부터 끝까지 계속 작동해야 할 때는 되돌릴 수 있는 pseudonymize 또는
placeholder 규칙을 사용하세요. 복원이 필요하지 않을 때는 단방향 mask 또는
redact 규칙을, 요청을 로컬에서 중단하려면 block을, 명시적 예외에는 allow를
사용하세요.
지원되는 클라이언트로는 Codex, Claude Code, Cursor, Pi / Oh My Pi, 그리고 OpenAI 또는 Anthropic 호환 SDK 및 라우터가 있습니다.
설치 프로그램은 사용자의 OS와 CPU에 맞는 릴리스를 다운로드하고, 게시된 SHA-256
체크섬으로 검증한 뒤, ~/.local/bin/cover에 원자적으로 설치하고, 선택한 클라이언트를
구성하며, 프록시를 시작합니다.
curl -fsSL https://raw.githubusercontent.com/DavidCarliez/cover/main/scripts/install.sh | bash
Go 툴체인이나 Git 체크아웃은 필요하지 않습니다. curl, 아카이브
추출기(Linux/macOS에서는 tar, Windows에서는 unzip), 그리고 검증을 위한 sha256sum,
shasum, 또는 openssl만 있으면 됩니다.
미리 빌드된 Linux, macOS, Windows 아카이브와 해당 체크섬은 GitHub Releases에서 이용할 수 있습니다.
비대화형 설치의 경우:
curl -fsSL https://raw.githubusercontent.com/DavidCarliez/cover/main/scripts/install.sh | \
COVER_AGENTS=openai,claude bash
릴리스를 고정하거나 bash 프로세스에 환경 변수를 적용한 상태로 바이너리만 설치하세요:
curl -fsSL https://raw.githubusercontent.com/DavidCarliez/cover/main/scripts/install.sh | \
COVER_VERSION=v0.1.0 COVER_SKIP_SETUP=1 bash
git clone https://github.com/DavidCarliez/cover.git
cd cover
go build -o cover ./cmd/cover
install -m 0755 cover ~/.local/bin/cover
핵심 바이너리는 cgo 의존성이 없습니다. 표준 Go 크로스 컴파일이 작동합니다:
GOOS=linux GOARCH=arm64 go build -o cover-linux-arm64 ./cmd/cover
GOOS=windows GOARCH=amd64 go build -o cover.exe ./cmd/cover
| 영역 | Cover 기능 |
|---|---|
| 정책 | allow, placeholder, pseudonymize, mask, redact, block 액션을 사용하는 선언적 규칙 |
| 현실적인 대체 | IP 주소, 호스트, 도메인, 이메일, 사용자 이름, 비밀번호, UUID, URL, 별칭, 숫자 식별자, IBAN, 전화번호를 위한 결정적 생성기 |
| 컨텍스트 인식 규칙 | 도구 결과 문자열 내부의 JSON 키, HTTP 헤더, 쿠키, 쿼리 매개변수 및 폼 필드, 그리고 정규식 및 내장 탐지기 |
| 안정적인 신원 | 설치 키 기반 HMAC 가명은 요청, 세션, 재시작 전반에 걸쳐 일관되게 유지됨 |
| 매핑 안전성 | TTL 및 용량 제한이 있는, 세션 격리된 메모리 전용 가역 매핑 |
| 검사 | cover inspect는 LLM에 연결하지 않고 보호된 JSON을 미리 보여줌 |
| 진단 | cover doctor는 정책, 데몬 상태, 로컬 fail-closed 동작, Codex 라우팅을 검증함 |
| 모니터링 | 메타데이터 전용 감사 및 모니터 뷰, 그리고 포착 및 전달된 콘텐츠에 대한 명시적 라이브 전용 검사 |
| 프록시 강화 | 기본 루프백 리스너, 본문 및 스트림 제한, 일반적인 안전 오류, fail-closed 파싱 |
| 스트리밍 호환성 | 델타 이벤트, 하트비트, 인터리브 채널 전반에 걸친 OpenAI Responses, Chat Completions, Anthropic SSE 복원; JSON 안전 도구 인수 |
| Codex 호환성 | Responses API 및 라우터 구성, 압축 검사, 불변 encrypted_content 필드 |
| 선택적 시맨틱 패스 | 로컬 llama.cpp 탐지기가 정규식이 놓치는 자유 형식 텍스트를 검사할 수 있음 |
cover init # write ~/.config/cover/config.yaml
cover start --detach # run in the background
cover doctor # verify the local setup
cover test # local redaction round trip, no network call
cover monitor # watch privacy-safe request metadata
cover init는 OpenAI, Anthropic 또는 사용자 지정 업스트림을 묻는 프롬프트를 표시합니다. 전체
구성은 configs/config.example.yaml에 문서화되어 있습니다.
| 명령어 | 목적 |
|---|---|
cover install | 클라이언트, 셸 export, 백그라운드 프록시 구성 |
cover init | 구성 파일 생성 |
cover start [--detach] | Cover를 포그라운드 또는 백그라운드에서 시작 |
cover stop | 백그라운드 프로세스 중지 |
cover restart | 백그라운드에서 재시작 |
cover status [--json] | 프로세스, 리스너, 마스킹된 업스트림 상태 표시 |
cover version [--json] | 빌드 버전, 커밋, 날짜 표시 |
cover update [--version vX.Y.Z] | 검증된 GitHub 릴리스 설치; 실행 중이면 재시작 및 상태 확인 (Linux/macOS) |
cover update --rollback | 구성은 유지한 채 이전 바이너리 복원 |
cover env | 구성된 클라이언트용 셸 export 출력 |
cover test | 합성 로컬 마스킹 및 복원 검사 실행 |
cover inspect request.json | Cover가 전달할 내용을 정확히 미리보기 |
cover doctor [--json] | 구성, 프라이버시, 데몬, 라우팅 검사 실행 |
cover monitor | 최근 안전 메타데이터 표시 및 새 이벤트 추적 |
cover monitor --show-content | 줄당 하나의 민감한 원본 → 대체 쌍 표시; 전체 이벤트는 --json 추가 |
cover models pull | 선택적 로컬 탐지기 런타임 및 모델 다운로드 |
cover models status | 로컬 탐지기 설치 및 구성 보고 |
cover completion | 셸 완성 스크립트 생성 |
Cover를 중지해도 클라이언트 구성은 변경되지 않습니다. 여전히 Cover를 가리키는 클라이언트는 Cover가 재시작되거나 클라이언트가 직접 공급자 또는 라우터를 다시 가리킬 때까지 연결에 실패합니다.
stop, restart, update는 Cover인 프로세스에만 신호를 보냅니다. 리스너가
루프백 전용 /__cover/health 엔드포인트에서 해당 프로세스를 보고하거나, 프로세스 실행 파일 이름이
cover여야 합니다. 오래된 pidfile(프로세스 ID가 이제 다른 프로그램에 속한 경우 포함)은 제거되며,
Cover의 포트에 있는 다른 프로그램은 절대 중지되지 않습니다.
중지 및 재시작은 최대 30초 동안 활성 요청을 드레인하며, shutdown_timeout_ms로
구성할 수 있습니다. SIGTERM이 없는 Windows에서는 cover stop이 드레인 없이 프로세스를
종료합니다. 해당 기한이 지나면 남은 연결이 닫힙니다.
재시작 중 새 연결이 잠시 실패할 수 있으며, 이는 무중단 전환이 아닙니다.
cover status와 cover doctor는 실행 중인 데몬이 설치된 바이너리와 다를 때 보고합니다.
Linux/macOS에서 cover update는 HTTPS를 통해 게시된 릴리스를 다운로드하고,
릴리스 체크섬과 SHA-256을 검증하고, 후보를 검증한 뒤, 롤백을 위해 현재 바이너리를 저장합니다.
재시작된 데몬이 상태 확인에 실패하면 Cover는 이전 바이너리를 복원하고 재시작을 시도합니다.
구성은 유지됩니다. Windows 사용자는 Cover를 중지하고 릴리스 설치 프로그램을 다시 실행해야 합니다.
업데이트는 main의 미출시 커밋이 아닌 게시된 릴리스를 사용합니다. 체크섬은 손상된 다운로드를
탐지하지만 독립적인 서명은 아닙니다.
내장 정규식 탐지는 AWS 및 GCP 키, GitHub, GitLab, Slack,
Stripe, Anthropic 토큰, 개인 키 블록, JWT, 명시적 일반 시크릿
할당, 이메일, SSN, 신용카드, 전화번호, IBAN을 포함합니다. 순수한 OpenAI
sk-... 값은 의도적으로 전용 내장 카테고리가 아닙니다. 환경에 필요하면
명시적 규칙을 정의하세요. 내장 탐지기는 단일 줄 내에서 일치합니다:
여러 줄에 걸쳐 분할된 전화번호, SSN, 카드 번호 또는 secret = value 할당은
탐지되지 않습니다.
규칙은 ~/.config/cover/config.yaml의 rules 아래에 있습니다. 각 규칙은
pattern, detector, keys, headers, cookies, query_params,
form_fields 중 하나의 선택자를 사용합니다. 하나의 규칙에 선택자 종류를 결합하지 마세요.
rules:
password_fields:
keys: [password, passwd, pwd, passphrase, user_password, database_password]
category: password
action: pseudonymize
generator: password
priority: 220
ipv4_addresses:
detector: builtin_ipv4
category: ip_address
action: pseudonymize
generator: ipv4
priority: 100
customer_name:
pattern: '(?i)\bNIKE\b'
category: customer
action: pseudonymize
generator: alias
priority: 80
forbidden_secret:
pattern: '(?i)secret\s*[:=]\s*(?P<value>[^\s,;]+)'
action: block
priority: 200
키 선택자는 짧은 문자열을 포함한 완전한 값을 보호합니다. 예를 들어,
{"password":"admin"}은 모든
{"username":...}을 비밀번호로 취급하지 않고 보호됩니다. 선택된 배열이나 객체는
그 스칼라 하위 항목에 정책을 적용하며, 우선순위가 더 높은 자식 규칙이 이를
재정의할 수 있습니다. 명명된 (?P<value>...) 그룹을 사용하면 정규식이 캡처된
값만 대체할 수 있습니다.
어떤 규칙이 값을 보호하면, Cover는 그 동일한 값이 다시 나타나는 모든 곳에서 동일한 동작과 동일한 결정적 대체로 그 값을 보호합니다: