개발자
CLI 호출 한 번. 모든 시크릿.
환경 변수 없음. 구성 파일 없음. 로그에 시크릿 없음. 코드에 필요한 모든 시크릿은 에이전트가 우회할 수 없는 볼트에서 런타임에 확인돼요.
패턴
한 번만 저장하면 어디서든 가져올 수 있어요.
각 에이전트는 고유한 토큰, 범위, 속도 제한으로 한 번만 초기화돼요. 그 후 에이전트는 런타임에 시크릿을 가져올 수 있어요. 키는 볼트에 암호화되어 저장되며, 환경 변수나 소스 코드에는 절대 저장되지 않아요. 키가 교체되면 볼트 UI에서 업데이트하세요. 모든 에이전트가 자동으로 이를 반영해요.
# One-time setup — paste the token at the prompt, or pipe it in $ echo "$CLAVITOR_TOKEN" | clavitor-cli init # Single value — piped, never stored $ clavitor-cli get "Deploy Key" --field private_key | ssh-add - # Whole config — secrets resolved, template safe to store anywhere $ clavitor-cli render app.config.json | myapp --config - # Proxy — credentials injected at the network layer $ export HTTPS_PROXY=http://localhost:1983 $ curl -H "Authorization: Bearer clavitor://OpenRouter/key" https://openrouter.ai/api/v1/models
세 가지 사용 방법
필드, 렌더 또는 프록시.
필드
값 하나. 어떤 명령어나 스크립트로든 파이프할 수 있어요. 시크릿은 파이프 안에만 존재해요. 변수에도, 디스크에도 절대 존재하지 않아요.
렌더
전체 구성 파일이에요. 시작 시 모든 clavitor:// 참조를 확인해요. 템플릿은 안전하게 커밋할 수 있어요. 확인된 구성은 파이프 내에 존재해요.
프록시
HTTPS 프록시. 헤더에서 자격 증명이 투명하게 확인돼요. 에이전트는 시크릿이 들어가야 할 곳에 clavitor://를 작성하고, 프록시가 실제 값을 주입해요. 로그에도, 에이전트 메모리에도 아무것도 남지 않아요.
어떤 방식을 사용해야 할까요?
| 기능 | Field | Render | Proxy |
|---|---|---|---|
| 로그에서 시크릿 제외 | |||
| 모든 언어 지원 | |||
| 모든 도구 지원(curl, SDK, 브라우저) | |||
| 에이전트별 범위 지정 및 감사 | |||
| 여러 시크릿 동시 처리 | |||
| 코드 변경 불필요 | |||
| 안전하게 커밋할 수 있는 구성 파일 | |||
| SSH / 비 HTTP 사용 사례 |
빠른 선택: 스크립트나 CLI 도구를 만드나요? 필드를 사용해요. 구성 파일로 서비스를 배포하나요? 렌더를 사용해요. API 호출을 수행하는 AI 에이전트를 실행하나요? 프록시를 사용해요.
다른 모든 자격 증명 프록시보다 우수한 이유예요.
훔칠 것이 없어요. 클라우드 호스팅 프록시는 가치가 높은 표적이에요. 하나만 뚫려도 모든 고객의 자격 증명을 탈취당해요. 로컬 프록시는 자체 구성에 자격 증명을 저장하며, 머신에 있는 모든 에이전트가 읽을 수 있어요. Clavitor의 프록시는 암호화된 구성 파일만 보유해요. 디스크에 평문 시크릿이 없고, 탈취할 자격 증명 저장소도 없어요.
에이전트가 강제로 열 수 없어요. 침해당한 에이전트는 프록시에서 자격 증명을 추출할 수 없어요. 프록시는 API를 노출하거나, 대시보드를 제공하거나, 명령을 수락하지 않아요. 헤더 하나를 읽고, 참조 하나를 확인한 다음, 결과를 아웃바운드 요청에 주입해요. 공격 표면이 없어요.
로그에 아무것도 남지 않아요. 에이전트는 clavitor://Entry/field를 작성해요. 표준 출력, 로그, 대화 기록에 나타나는 것은 이것뿐이에요. 실제 자격 증명은 한 번의 HTTP 호출 동안 프록시 프로세스 내부에만 존재해요. 로그 수집기, 크래시 덤프, CI 아티팩트 모두 깨끗해요.
구성 제로. 라우팅 테이블도, API 매핑도, 관리할 자격 증명 파일도 없어요. 헤더의 clavitor:// 참조가 유일한 지시사항이에요. init 한 번, 환경 변수 하나면 끝나요.
언어
모든 언어에서 작동해요. SDK가 필요 없어요.
Bash
# The proxy handles credential injection — no secrets in the command $ export HTTPS_PROXY=http://localhost:1983 $ curl -H "Authorization: Bearer clavitor://OpenRouter API/key" \ https://openrouter.ai/api/v1/models
Go
key, _ := exec.Command("clavitor-cli", "get", "OpenRouter API", "--field", "key").Output()
client := openai.NewClient(option.WithAPIKey(strings.TrimSpace(string(key))))Python
import subprocess
# Pass directly — or use the HTTPS proxy to avoid holding the key entirely
stripe.api_key = subprocess.check_output(
["clavitor-cli", "get", "Stripe API", "--field", "key"]
).decode().strip()Rust
let key = std::process::Command::new("clavitor-cli")
.args(["get", "AWS Credentials", "--field", "secret_key"])
.output()?;
let client = aws::Client::new(String::from_utf8(key.stdout)?.trim());TypeScript / Node
import { execSync } from 'child_process';
const apiKey = execSync('clavitor-cli get "Anthropic API" --field key').toString().trim();
const client = new Anthropic({ apiKey });C# / .NET
using System.Diagnostics;
var psi = new ProcessStartInfo("clavitor-cli") { RedirectStandardOutput = true, UseShellExecute = false };
psi.ArgumentList.Add("get");
psi.ArgumentList.Add("Stripe API");
psi.ArgumentList.Add("--field");
psi.ArgumentList.Add("key");
var key = Process.Start(psi)!.StandardOutput.ReadToEnd().Trim();
var client = new StripeClient(key);PowerShell
# Single value — pipe or use directly
$key = clavitor-cli get "AWS Credentials" --field secret_key
Set-AWSCredential -AccessKey $env:AWS_ACCESS_KEY -SecretKey $key
# Or use the proxy — no secrets in the script at all
$env:HTTPS_PROXY = "http://localhost:1983"
Invoke-RestMethod -Uri "https://api.openai.com/v1/models" `
-Headers @{ Authorization = "Bearer clavitor://OpenAI/key" }Java
import java.nio.charset.StandardCharsets;
Process p = new ProcessBuilder("clavitor-cli", "get", "Stripe API", "--field", "key").start();
String key = new String(p.getInputStream().readAllBytes(), StandardCharsets.UTF_8).trim();
Stripe.apiKey = key;구성 렌더링
구성만 저장하고 시크릿은 저장하지 않아요.
clavitor-cli render는 모든 파일에서 clavitor://entry/field 참조를 스캔하고, 각 참조를 볼트에 대해 확인한 다음 결과를 출력해요. 템플릿은 어디에나 안전하게 저장할 수 있어요. 확인된 구성은 파이프 내에 존재해요. 시크릿은 절대 디스크에 닿지 않아요.
# Template (safe to store anywhere)
$ cat app.config.json
{"api_key": "clavitor://OpenRouter API/key", "db": "clavitor://Prod DB/password"}
# Resolved (piped to application, never on disk)
$ clavitor-cli render app.config.json
{"api_key": "sk-or-v1-abc123...", "db": "hunter2"}JSON, YAML, TOML, .env 또는 모든 텍스트 파일과 함께 작동해요. clavitor://가 포함되어 있으면 확인돼요.
더 많은 통합 가이드
인프라
Docker, Kubernetes, Terraform, Ansible, GitHub Actions, GitLab CI, SSH. 구성에 시크릿 제로, 로그에 시크릿 제로.
인프라 가이드 →패턴은 항상 동일해요.
CLI 호출 한 번, 어떤 컨텍스트든 가능해요. 에이전트의 범위가 볼 수 있는 것을 결정해요. 암호화 수준이 복호화할 수 있는 것을 결정해요. 감사 로그가 모든 접근을 기록해요.