Skip to content

시작하기

일부 옵션은 설계 단계 (2026-05-15)

HITL 승인 polling 흐름과 HMAC 서명 강제 모드 (pak_secret, X-Panopticon-Signature) 는 현재 logi 서버에 미구현입니다. 콘솔에서 토글이 보이더라도 저장만 되고 enforcement 가 동작하지 않습니다. 자세한 진행 상황은 정책 페이지의 상태표 참조.

5분 안에 application 하나에 판옵티콘을 붙여봅니다.

사전 조건

  • logi 콘솔(start.1pass.dev/developer)에 등록된 OAuth application 1개
  • application의 client_id 확보
  • curl 또는 동등한 HTTP 클라이언트

1. 콘솔에서 Panopticon 활성화

  1. start.1pass.dev/developer 로그인
  2. application 선택 → Panopticon 탭 클릭
  3. 활성화 토글 ON
  4. PAK 발급 클릭 → pano_pak_... 형태의 키가 1회만 표시

⚠️ PAK는 발급 시점 한 번만 노출됩니다. 즉시 안전한 곳(예: 1Password, Doppler, Render env)에 저장하세요. 분실 시 회전 후 새 키를 발급받으면 됩니다.

옵션:

  • HMAC 서명 강제 🔬 (설계 단계): 활성화 시 pak_secret 발급 + 모든 trace 요청에 X-Panopticon-Signature 헤더 필수 (계획). 현재 콘솔 토글은 표시되지만 logi 서버는 PAK 해시 검증만 수행합니다 (상세).

2. 첫 trace 보내기

가장 단순한 형태:

bash
curl -X POST https://api.1pass.dev/panopticon/trace \
  -H "Authorization: Bearer pano_pak_여기에_PAK" \
  -H "Content-Type: application/json" \
  -d '{
    "event_id": "550e8400-e29b-41d4-a716-446655440000",
    "client_id": "logi_f31b6962aef3",
    "tool": "hello",
    "scope_used": "agent:read",
    "status": "ok",
    "started_at": "2026-05-09T10:11:12Z",
    "duration_ms": 12
  }'

기대 응답:

json
HTTP/1.1 202 Accepted
{"event_id":"550e8400-e29b-41d4-a716-446655440000","status":"accepted"}

같은 event_id로 다시 보내면:

json
HTTP/1.1 200 OK
{"event_id":"550e8400-e29b-41d4-a716-446655440000","status":"duplicate"}

멱등성 보장. 재전송에 안전합니다.

3. 콘솔에서 확인

start.1pass.dev/panopticon → application 선택 → Activity Timeline 탭에서 방금 보낸 trace가 보입니다.

Live Trace 탭은 ActionCable 채널로 실시간 스트리밍합니다.

4. RP에 통합

personal-mcp 또는 agent RP의 도구 호출 처리 후 비동기로 trace를 발사하세요:

python
# Python 예시 (FastMCP 등)
import httpx, uuid
from datetime import datetime, timezone

async def emit_trace(tool_name, scope, status, duration_ms, user_sub=None):
    payload = {
        "event_id": str(uuid.uuid4()),
        "client_id": CLIENT_ID,
        "tool": tool_name,
        "scope_used": scope,
        "status": status,
        "started_at": datetime.now(timezone.utc).isoformat(),
        "duration_ms": duration_ms,
        "user_sub": user_sub,
    }
    async with httpx.AsyncClient(timeout=2.0) as client:
        # fire-and-forget, 실패해도 도구 호출 자체는 정상 완료
        try:
            await client.post(
                f"{LOGI_URL}/panopticon/trace",
                headers={"Authorization": f"Bearer {PANOPTICON_PAK}"},
                json=payload,
            )
        except Exception:
            pass  # 로컬 buffer에 쌓아 재전송 권장

5. 사용량 집계 보기

콘솔 Usage 탭 또는 CLI:

bash
logi panopticon usage <client_id> --since 2026-05-01

application × date 단위로 trace 수, 에러 수, HITL 요청 수, kill switch 횟수가 일별로 표시됩니다.

다음

MIT License · Identity가 제품의 신뢰를 만듭니다.