업데이트로 돌아가기
New releaseSep 3, 2026

prismor v1.44.0

자체 호스팅 방식의 AI 에이전트용 런타임 제어 플레인입니다. 로컬 대시보드에서 비밀 키 유출, 프롬프트 인젝션, 공급망 공격 등이 실행되기 전에 악성 도구 호출을 관찰하거나, HITL(사람 개입) 승인 또는 차단할 수 있습니다. 에이전트에 구애받지 않습니다(Claude, codex, langchain 등).

공유

Prismor

PyPI License PRs Welcome X DeepWiki Discord

Claude Code, Codex, Langchain 및 기타 AI 에이전트 프레임워크/하네스를 위한 런타임 보안.

Prismor는 사용자 자신의 정책에 따라 고도로 커스터마이즈할 수 있습니다. 관찰 또는 강제 모드를 통해 로컬 셀프서브 대시보드에서 에이전트 활동을 확인하세요

웹사이트 • Skill로 온보딩

Claude Code   Codex CLI   Gemini CLI   Cursor   GitHub Copilot   OpenCode   Pi Agent   Kiro   Kimi Code   Trae / Trae CN   Google Antigravity

그 외 Grok Build, Crush, OpenHands, Qwen Code, Continue CLI, Goose, Hermes, OpenClaw, Devin CLI, Factory Droid, Aider 등 — 전체 지원 매트릭스는 AGENT_INTEGRATIONS.md를 참조하세요


Prismor demo


문제점

AI 에이전트는 셸 명령을 실행하고, 파일을 읽고 쓰며, 자격 증명에 접근하고, 외부 API를 호출합니다. 이들은 이를 자율적으로, 종종 여러 단계에 걸쳐, 제한된 체크포인트만으로 수행합니다.

이로 인해 기존 보안 도구가 대비하도록 설계되지 않은 위험이 발생합니다:

  • 프롬프트 인젝션 - 파일, 이슈 또는 웹 페이지의 악성 콘텐츠가 작업 도중 에이전트를 다른 방향으로 유도할 수 있습니다
  • 의도치 않은 파괴적 행위 - 에이전트가 지시를 잘못 해석하여 되돌릴 수 없는 작업을 실행합니다
  • 비밀 정보 유출 - 에이전트가 디버깅 작업의 일환으로 .env 또는 자격 증명 파일을 읽고 그 내용을 외부로 전송합니다
  • 가시성 및 아이덴티티 부재 - 에이전트가 서브에이전트를 생성할 수 있으며 최종 사용자에게 완전한 가시성을 제공하지 못합니다
  • 권한 상승 - 에이전트가 권한 오류를 해결하기 위해 sudoers, CI 파이프라인 또는 파일 권한을 수정합니다
  • 의존성 조작 - 에이전트가 주입된 입력의 지시에 따라 패키지를 설치하거나 재작성합니다
  • 공급망 위험 - 에이전트가 코드 속도를 최적화하는 과정에서 취약하거나 0-day 패키지를 설치합니다

표준 OS 수준 및 엔드포인트 보안 도구는 커널과 파일 시스템을 모니터링합니다. 하지만 AI를 사용 가능하게 만들기 위한 컨텍스트가 부족합니다


빠른 시작 (30초)

---```bash pip install prismor prismor setup

Skill, curl, git-clone 대안, 그리고 PEP 668 시스템과 시크릿 은닉 설정에 대해서는 [전체 설치 가이드](https://github.com/prismorsec/prismor/blob/main/docs/installation.md)를 참고하세요.

---

## 기능<a name="capabilities" />

![Prismor 아키텍처](https://assets.kitploit.com/production/public/readmes/13903/0e84c7211b3275de581182b7f69c44d8224142323b43220dd1234eee17616757.png)

- 🛡️ [Prismor](https://github.com/prismorsec/prismor/blob/main/docs/prismor-runtime.md)는 정책 엔진, 세션 로그, 보안 감사, CLI 레퍼런스를 다룹니다
- 📦 [공급망](https://github.com/prismorsec/prismor/blob/main/docs/supply-chain.md)은 설치 시점 적용, IOC 매칭, 위험 점수 산정을 다룹니다
- 🛜 [네트워크 격리](https://github.com/prismorsec/prismor/blob/main/docs/network-isolation.md)는 정책 기반 이그레스 제어, 원시 IP 탐지, 터널 차단을 다룹니다
- 🔍 [Skill 스캐너](https://github.com/prismorsec/prismor/blob/main/docs/skill-scanner.md)는 지원되는 에이전트 전반의 MCP 서버 및 스킬 위험 스캔을 다룹니다
- 🚦 [MCP 가드레일](https://github.com/prismorsec/prismor/blob/main/docs/prismor-runtime.md#custom-guardrails-for-mcp-tools)을 사용하면 특정 MCP 서버나 도구를 차단하거나, 에이전트가 호출하기 전에 사람의 승인을 요구할 수 있으며, 정책 규칙을 직접 작성할 수 있습니다
- 🛰️ [MCP 게이트웨이](https://github.com/prismorsec/prismor/blob/main/docs/mcp-gateway.md)는 사용하는 모든 MCP 서버를 앞단에서 연결하는 단일 MCP 커넥터입니다 — 각 `tools/call`은 전달되기 전에 정책 평가를 거치고, 각 응답은 모델이 보기 전에 인젝션 스캔을 거치므로 오염된 도구 결과가 컨텍스트가 되는 일이 없습니다. `prismor mcp-gateway install`은 기존 `.mcp.json`을 그 뒤로 옮깁니다
- 🛤️ [LLM 프록시](https://github.com/prismorsec/prismor/blob/main/docs/llm-proxy.md)는 Prismor가 후킹할 수 없는 에이전트를, 모든 에이전트가 가진 단 하나의 것 — 모델 트래픽 — 을 통해 통제합니다. `ANTHROPIC_BASE_URL`, `OPENAI_BASE_URL`, 또는 Google Gen AI SDK의 `HttpOptions(base_url=...)`로 `prismor proxy`를 가리키면 에이전트의 다른 어떤 것도 바뀌지 않습니다. 모델이 *제안*하는 모든 도구 호출 — Anthropic `tool_use`, OpenAI `tool_calls`, Gemini `functionCall` — 은 `Bash` 훅이 생성하는 것과 동일한 이벤트로 재구성되어 동일한 규칙으로 판정되며, 스트리밍 호출은 판정될 때까지 보류됩니다
- [Claude 추론 훅](https://github.com/prismorsec/prismor/blob/main/docs/inference-hook.md)은 Prismor를 Claude Enterprise 뒤의 AI 보안 서버로 만듭니다: Anthropic이 claude.ai, Claude Code, Cowork에서 오는 모든 통제 대상 프롬프트를 `prismor inference-hook serve`로 보내면, 이 서버가 트랜스크립트에 정책을 실행하고 모델이 실행되기 전에 허용/거부를 응답합니다 — 서명된 요청(Standard Webhooks), 페일 클로즈드, 섀도 모드, 사용자 기기에 설치할 필요 없음. `prismor inference-hook test`는 서명된 샘플 프레임을 보내 연결 상태를 확인합니다
- 🏷️ [도구 태그](https://github.com/prismorsec/prismor/blob/main/docs/tool-tags.md)는 도구를 기능(읽기, 쓰기, 네트워크, 실행)별로 분류하여, 규칙이 모든 도구를 하나하나 나열하는 대신 "사적 데이터를 읽는 것은 네트워크에도 접근할 수 없다"라고 표현할 수 있게 합니다 — MCP 도구는 `_meta`를 통해 스스로 선언하며, `prismor tags`는 규칙 표현식을 나열, 테스트, 린트합니다
- 🔐 [Sweep and Cloak](https://github.com/prismorsec/prismor/blob/main/docs/sweep-and-cloak.md)은 도구 경계에서의 시크릿 방지, 실용적 설정, 모범 사례, 위협 모델, 유출된 시크릿 정리를 다룹니다
- 🦞 [OpenClaw 통합](https://github.com/prismorsec/prismor/blob/main/docs/openclaw.md)은 OpenClaw를 위한 런타임 훅, 프롬프트 인젝션 스캔, 프로젝트 또는 사용자 범위 설정을 다룹니다
- 🤖 [Hermes 에이전트 은닉](https://github.com/prismorsec/prismor/blob/main/docs/hermes.md)은 pip 엔트리 포인트 자동 탐색, 파일시스템 설치, pre_gateway_dispatch 붙여넣기 가드를 포함한 Hermes 전용 시크릿 은닉을 다룹니다
- ☁️ [호스팅 에이전트 VM](https://github.com/prismorsec/prismor/blob/main/docs/cloud-agents.md)은 로그인한 적 없는 머신에서 실행되는 에이전트(Claude Code on the web, Cursor cloud agents, Copilot coding agent, OpenHands Cloud, Codex cloud, Replicas)를 통제합니다: 플랫폼의 설정 스크립트가 바이너리를 설치하고, `install-hooks --portable`이 커밋해도 안전한 훅 설정을 작성합니다
- 🧠 [시맨틱 가드](https://github.com/prismorsec/prismor/blob/main/docs/semantic-guard.md): 정규식 규칙이 잡지 못하는 의역된 프롬프트 인젝션 시도를 위해 LLM 지원 의도 검사를 추가하는 옵트인 하이브리드 계층
- 🪤 [Canary](https://github.com/prismorsec/prismor/blob/main/docs/canary.md)는 에이전트가 읽는 순간 CRITICAL 발견을 유발하는 허니토큰 자격 증명 파일을 심어 정찰 행위를 잡아냅니다
- 🪪 [IAM](https://github.com/prismorsec/prismor/blob/main/docs/iam.md)은 여러 에이전트가 워크스페이스를 공유할 때 각 에이전트에 명명된 아이덴티티와 최소 권한 권한 프로필을 부여합니다
- 🧩 [프레임워크 에이전트](https://github.com/prismorsec/prismor/blob/main/docs/frameworks-overview.md)는 프로덕션 에이전트(OpenAI Agents SDK, Python 및 JS의 LangChain/LangGraph, CrewAI, browser-use, Pydantic AI, AutoGen Core, Agno, Semantic Kernel, Google ADK, BeeAI, Claude Agent SDK, Vercel AI SDK, Mastra)를 한 번의 호출로 보호합니다 — 각 요청을 `use_subject("user:alice")`로 감싸면 멀티테넌트 에이전트가 사용자별 귀속, 사용자별 IAM 프로필, 사용자별 정지를 얻습니다
- 🎯 [스코프드 에이전트](https://github.com/prismorsec/prismor/blob/main/docs/scoped-agent.md)는 세션별로 최소한의 작업 특화 규칙을 합성하여 인젝션된 이탈 시도가 차단되도록 합니다
- 🧬 [학습](https://github.com/prismorsec/prismor/blob/main/docs/learning.md)은 세션 기록을 마이닝하여 새 규칙을 제안하고, 오탐을 표시하고, 회피를 탐지합니다
- ⚖️ [계층형 정책 및 예외](https://github.com/prismorsec/prismor/blob/main/docs/policy-layers-and-exemptions.md)는 규칙별 관찰/적용, 재정의 불가능한 하한선, 조직/프로젝트/레포 계층 전반의 관리자 부여, 시간 제한 예외를 다룹니다
- 🔐 [명시적 적용 선택 및 잠금 해제 창](https://github.com/prismorsec/prismor/blob/main/docs/cli-reference.md#choosing-what-blocks) — 적용 설정은 아무것도 차단하지 않는 상태에서 시작하며 사용자가 차단할 집합을 선택합니다; `prismor allow`는 좁은 예외를 만들고, `prismor unlock`은 에이전트가 정책을 편집할 수 있는 비밀번호로 보호된 시간 제한 창을 엽니다(Prismor 자체를 보호하는 자기 보호 규칙은 절대 아님)
- 📡 [라이브 텔레메트리](https://github.com/prismorsec/prismor/blob/main/docs/live-telemetry.md)는 선택적 엔터프라이즈 컨트롤 플레인 연결 — 기기 등록, 서명된 원격 정책, 자체 호스팅 조직 대시보드로 스트리밍되는 마스킹된 텔레메트리 — 을 다룹니다
- 🔌 [텔레메트리 싱크](https://github.com/prismorsec/prismor/blob/main/docs/telemetry-sinks.md)는 모든 발견을 이미 운영 중인 대상 — OpenTelemetry 컬렉터(OTLP/HTTP 로그), Splunk HEC, Datadog, syslog, 웹훅, 또는 JSON/CEF/OCSF 형식의 로컬 파일 — 으로 전달하며, 차단 결정 전에 디스패치되고 도구 호출을 지연시킬 수 없습니다
- 📊 [대시보드](https://github.com/prismorsec/prismor/blob/main/docs/dashboard.md)는 터미널 및 로컬 웹 대시보드와 세션 포렌식을 다루며, `prismor tokens`가 세션의 컨텍스트와 토큰 지출이 실제로 어디로 갔는지 분석합니다
- 🩺 [상태 및 복구](https://github.com/prismorsec/prismor/blob/main/docs/cli-reference.md) — `prismor doctor`는 모든 하위 시스템(훅, 정책 서명, 등록, 텔레메트리 싱크, 체인 상태)을 상태 점검하고, `prismor pause` / `pause-hard`는 사고 중 사람을 위해 *적용만* 일시 중단하며 관찰 모드 로깅은 계속 실행됩니다
- 🧾 [서명된 감사 추적](https://github.com/prismorsec/prismor/blob/main/docs/audit-trail.md)은 모든 에이전트 행동을 로컬에서 해시 체인 및 Ed25519 서명하므로, `prismor trail verify`가 이력이 편집, 삭제, 재작성되지 않았음을 증명합니다
- 🔖 [서명된 텔레메트리 영수증](https://github.com/prismorsec/prismor/blob/main/docs/telemetry-receipts.md)은 기기가 보고하는 레코드의 전송 스키마입니다 — 정규 바이트, 두 개의 무결성 계층, 의존성 없는 참조 검증기를 제공하여 SIEM이나 감사자가 Prismor 없이도 영수증을 확인할 수 있습니다
- 📑 [증명 번들](https://github.com/prismorsec/prismor/blob/main/docs/attestation-bundle.md)은 포스처, 에이전트 인벤토리, 호스트 탐색, 프레임워크 통제 커버리지(OWASP LLM/Agentic, NIST AI RMF, EU AI Act), 추적 앵커를 하나의 Ed25519 서명 파일로 패키징하여 감사자가 `prismor attest verify`로 재검증합니다
- 🔦 [호스트 탐색](https://github.com/prismorsec/prismor/blob/main/docs/attestation-bundle.md#host-discovery)은 `prismor discover`로 머신을 스윕하고 Prismor 훅 없이 실행 중인 AI 에이전트(섀도 AI)를 표시합니다
- ⏪ [트랜스크립트 수집](https://github.com/prismorsec/prismor/blob/main/docs/transcript-ingest.md)은 Prismor가 설치되기 *전에* 에이전트가 한 일을 재구성합니다 — `prismor ingest --discover`는 디스크의 세션 트랜스크립트를 라이브 정책 엔진을 통해 재생하므로 첫날부터 대시보드가 채워지고 규칙을 적용으로 전환했을 때 무엇이 차단되었을지 정확히 볼 수 있으며, 모니터링 없이 실행된 세션을 위한 `--coverage`도 제공합니다
- 🗺️ [에이전틱 AI 아키텍처 리뷰](https://github.com/prismorsec/prismor/blob/main/docs/agentic-architecture-review.md)는 멀티 에이전트/도구 사용 시스템을 위한 설계 시점 체크리스트입니다 — 권한 범위, 메모리 무결성, 에이전트 간 신뢰, 인간 감독 배치 — 각 항목은 실제 통제 ID와, 존재하는 경우 이를 뒷받침하는 Prismor 규칙에 매핑됩니다
- 🐳 [Docker 및 컨테이너](https://github.com/prismorsec/prismor/blob/main/docs/docker.md)는 컨테이너 강화, 사전 요구 사항, 알려진 제한 사항을 다룹니다

모든 기능에 걸친 전체 명령 맵: [CLI 레퍼런스](https://github.com/prismorsec/prismor/blob/main/docs/cli-reference.md).

이러한 기능은 [OWASP Top 10 for LLM Applications](https://genai.owasp.org/llm-top-10/)에 매핑됩니다 - 프롬프트 인젝션(LLM01), 민감 정보 노출(LLM02), 공급망(LLM03), 부적절한 출력 처리(LLM05), 과도한 권한(LLM06)을 다룹니다.

---

## 시나리오 및 사용 사례<a name="scenarios-and-use-cases" />

이를 작동시키는 명령과 설정을 포함한 실제 워크플로 — 관찰 모드에서 팀 온보딩, 멀티 에이전트 및 프레임워크 파이프라인을 위한 사용자별 IAM 귀속, 섀도 AI 탐색, 고위험 작업에 대한 단계별 승인, 규정 준수 감사를 위한 서명된 증명 번들 생성. [USE_CASES.md](https://github.com/prismorsec/prismor/blob/main/USE_CASES.md)를 참고하세요.

---

## 구성<a name="configuration" />

### 명령 레퍼런스

전체 명령 맵: [docs/cli-reference.md](https://github.com/prismorsec/prismor/blob/main/docs/cli-reference.md).

### 거버넌스 모드

`prismor setup`은 여섯 개의 정책 축을 수동으로 구성하는 대신 하나의 포스처를 선택하도록 요청합니다. 각각은 `.prismor/policy.yaml`로 컴파일됩니다 — 적용, 이그레스, 도구 접근, 태그 규칙, 샌드박스 및 데이터 경계가 함께 반영됩니다.

![Prismor 거버넌스 모드](https://raw.githubusercontent.com/prismorsec/prismor/main/assets/prismor-modes.png)

| 모드 | 대상 | 커버리지 | 마찰 |
|---|---|---|---|
| `dev-safe` | 읽지 않은 코드에 대한 기능 작업 | 31% | 9% |
| `trusted-workspace` | 신뢰할 수 있는 내부 레포, 로컬 Docker 작업 | 34% | 9% |
| `regulated-airgap` | PII/PHI, SOC 2, EU AI Act — 네트워크 없음, 셸 없음 | 100% | 90% |```bash
prismor mode list                            # compare the three
prismor mode explain dev-safe                # the trade, including what it does NOT stop
prismor mode apply dev-safe                  # compile it into this workspace
prismor mode apply regulated-airgap --observe   # what it would block, blocking nothing

모든 모드는 잔여 위험을 명시합니다. 전체 분석: docs/modes.md.

Observe / Enforce (규칙별, 정책 우선)

시행 여부는 단일 전역 스위치가 아니라 정책에 따라 규칙별로 결정됩니다. 각 규칙은 mode를 가지며, settings.default_mode(기본값 observe)는 이를 설정하지 않은 모든 규칙에 적용됩니다:

모드동작
observe (기본값)도구 호출과 발견 사항을 기록합니다. 절대 차단하지 않습니다. 온보딩과 감사에 안전합니다.
enforce에이전트가 실행하기 전에 실시간으로 작업을 차단합니다.

기본 설정으로 모든 것이 관찰됩니다 — 정책에서 규칙(또는 default_mode)을 enforce로 전환하기 전까지는 아무것도 차단되지 않습니다:```yaml

.prismor/policy.yaml

settings: default_mode: observe # global default for rules without their own mode rules:

  • id: destructive-rm-rf mode: enforce # this rule blocks; the rest still just observe
정책은 권위 있습니다: `enforce`로 설정된 규칙은 **훅이 어떻게 설치되었든**(`--mode`) 차단하므로, 관리자가 [제어 플레인](https://github.com/prismorsec/prismor/blob/main/docs/live-telemetry.md)을 통해 규칙을 enforce로 전환하면 observe로 설치된 기기에서도 차단됩니다. 조직 / 프로젝트 / 저장소 우선순위와 재정의할 수 없는 최저선에 대해서는 [계층형 정책 및 예외](https://github.com/prismorsec/prismor/blob/main/docs/policy-layers-and-exemptions.md)를 참조하세요.

`prismor setup`은 선택을 암시가 아닌 명시적으로 만듭니다: **observe** 설치에는 기본값이 켜진 상태로 제공되지만, **enforce** 설치는 *아무것도 선택되지 않은* 상태로 시작하여 무엇을 차단할지 선택하도록 요청합니다(안전 최저선은 *권장*으로 미리 표시되어 있으며 `a`를 눌러 적용할 수 있습니다). 선택 사항은 `.prismor/policy.yaml`에 `settings.selection: explicit`과 규칙당 한 줄로 기록되므로, 무엇이 차단되는지 파일에서 읽을 수 있습니다. 그런 다음 규칙이 정당한 무언가를 차단하면, 거부 메시지는 이를 해결하는 정확한 `prismor allow <rule> --pattern '<literal>'` 명령을 출력합니다 — 이는 사람이 실행하기 위한 것입니다; 에이전트는 상시 작동하는 자기 보호 규칙에 의해 Prismor 자체 설정을 편집하는 것이 차단되며, 사람이 `prismor unlock`으로 짧은 비밀번호 게이트 창을 열지 않는 한 그렇습니다. [무엇을 차단할지 선택하기](https://github.com/prismorsec/prismor/blob/main/docs/cli-reference.md#choosing-what-blocks)와 [예외 만들기](https://github.com/prismorsec/prismor/blob/main/docs/cli-reference.md#making-exceptions)를 참조하세요.

설치 플래그는 여전히 시작 자세를 설정하며, observe 설치와 `PRISMOR_LOCAL_DRY_RUN=1`을 결합하면 모든 차단을 억제하는 로컬 드라이런 킬 스위치로 작동합니다:```bash
prismor install-hooks --agent all --mode observe    # start in observe everywhere
prismor install-hooks --agent all --mode enforce    # honor policy enforce rules

mode 이전 릴리스에서 업그레이드하시나요? 하위 호환성은 유지됩니다: 규칙별 모드 이전의 정책(즉, settings.block_categories를 설정하지만 default_mode와 규칙 수준 mode가 없는 정책)은 원래 동작을 그대로 유지합니다 — 해당 카테고리들은 --mode enforce로 설치했을 때 여전히 차단합니다. 정책이 규칙별 모델(어떤 mode/default_mode든)을 채택하는 순간, 위에서 설명한 대로 완전한 정책 권위형이 됩니다.


아키텍처

모든 도구 호출은 동일한 경로를 따릅니다: 통합 표면(1단계)을 통해 들어오고, 실행 전에 평가되며(2단계), 허용/경고/차단 판정을 생성하고, 변조 방지 증거(3단계)에 기록됩니다. 4단계는 선택 사항입니다 — 기기가 등록되면 서명된 정책이 2단계에 대해 권위를 갖게 되는 자체 호스팅 컨트롤 플레인입니다.```mermaid flowchart TD

%% ── sources ──────────────────────────────────────────────── subgraph SRC["Agents Prismor protects"] direction LR AC["Coding agents
Claude Code · Codex · Cursor · Windsurf · Copilot
OpenClaw · Hermes · Grok · Kiro · Crush
OpenHands · Qwen · Continue · Goose"] AF["Production frameworks
OpenAI Agents · LangChain / LangGraph · CrewAI · browser-use
Pydantic AI · AutoGen Core · Agno · Semantic Kernel · Google ADK
BeeAI · Claude Agent SDK · Vercel AI SDK · Mastra"] end

%% ── stage 1 ──────────────────────────────────────────────── subgraph ENTRY["Stage 1 · Integration surface"] direction LR H(["Runtime hooks
pre / post tool-call
per-agent config"]) G(["MCP gateway
fronts every MCP server
injection-scans responses"]) F(["Framework adapters
in-process + HTTP eval server
per-user via use_subject"]) end

%% ── stage 2 ──────────────────────────────────────────────── subgraph EVAL["Stage 2 · Evaluated before the call executes"] direction TB D(["Tool-call dispatcher"]) P["Policy engine
YAML rules · per-rule observe / enforce
layered org → project → repo · non-overridable floor"] CHK["Pre-execution checks
Semantic guard · Egress control · MCP guardrails · Tool tags
IAM and agent controls · Scoped session rules
Script-content inspection · Docker sandbox"] SEC["Secret and supply-chain protection
Cloak placeholders + output scrub · Env guard · Sweep
Canary tripwires · Skill scanner
Supply-chain scoring → npm · pip · cargo · go"] end

FEED[/"Signed advisory feed · Prismor intel + NVD"/] V{"Allow · Warn · Block
every block prints narrowest-first unblock steps"}

%% ── stage 3 ──────────────────────────────────────────────── subgraph EV["Stage 3 · Evidence and feedback"] direction LR ST[("Session store
SQLite + JSONL
session forensics")] VIEW["Views
Web + terminal dashboard
Status · Tokens · Audit · Doctor"] PROOF["Tamper-evident
Signed trail — hash chain + Ed25519
Attestation bundle · Host discovery"] LEARN["Learning
propose rules · flag false
positives · detect evasion"] end

PAST[/"Transcript ingest · replays pre-install history through the live policy"/]

%% ── stage 4 ──────────────────────────────────────────────── subgraph ORG["Stage 4 · Optional self-hosted control plane"] direction LR RP["Signed remote policy
layered rules · time-boxed
exemptions · pause / resume"] TEL["Live telemetry
redacted events
offline spool"] OD["Org dashboard
policy · devices
sessions · approvals"] end

%% ── flow ─────────────────────────────────────────────────── AC --> ENTRY AF --> ENTRY ENTRY --> D D --> P P --> CHK P --> SEC FEED -.-> SEC CHK --> V SEC --> V V --> ST PAST -.-> ST ST --> VIEW ST --> PROOF ST --> LEARN LEARN -.->|"proposed rules"| P RP ==>|"authoritative once enrolled"| P ST -->|"redacted"| TEL TEL --> OD

### 하나의 정책 엔진, 모든 집행 표면

Stage 1에는 하나 이상의 문이 있으며, 이는 의도된 것입니다. 단일 개입 지점이 모든 에이전트를 커버하지는 않습니다. 훅은 가장 넓은 범위를 차지하지만 모든 호스트가 훅을 제공하는 것은 아닙니다. MCP는 일부 에이전트를 가로챌 수 있는 유일한 지점입니다. 프로덕션 프레임워크 에이전트는 훅을 걸 호스트가 없는 곳에서 실행됩니다.

따라서 각 표면은 자신이 본 것을 하나의 정규 이벤트로 정규화하고 동일한 평가자에게 판정을 요청합니다. 한 번 작성된 규칙은 어떻게 도착하든 동일한 작업을 커버합니다.

| 표면 | 관리 대상 | 거부 | 입력 재작성 | 출력 편집 |
|---|---|:--:|:--:|:--:|
| 코딩 에이전트 훅 | 에이전트의 전체 도구 표면 | 예 | Claude/Qwen | 아니오 |
| MCP 게이트웨이 | 하나의 커넥터 뒤에 있는 모든 MCP 서버 | 예 | 예 | 예 |
| 미러링된 내장 기능 | 에이전트 자체의 Bash/Read/Write, MCP를 통해 | 예 | 예 | 예 |
| 프레임워크 SDK 어댑터 | 인프로세스 에이전트 (13개 프레임워크) | 예 | 아니오 | 아니오 |
| `prismor eval-server` | 비파이썬 호출자, 외부 프록시 | 예 | 예 | 예 |
| 추론 훅 채널 | 호스팅된 트랜스크립트 턴 웹훅 | 예 | 아니오 | 아니오 |

"출력 편집"이 미러가 존재하는 이유입니다. 사전 작업 훅은 파일 읽기를 *거부*할 수만 있는 반면, 응답을 전달하는 표면은 자격 증명이 마스킹된 파일을 반환할 수 있습니다.

이는 주장이 아니라 검증됩니다 — `tests/test_surface_conformance.py`는 하나의 작업을 각 표면의 자체 정규화기를 통해 재생하고, 판정이나 규칙에 대해 불일치가 있으면 실패합니다.

이벤트 형태와 판정 어휘는 [결정 계약](https://github.com/prismorsec/prismor/blob/main/docs/decision-contract.md)을, 에이전트별로 어떤 표면을 사용할지는 [거버넌스 표면](https://github.com/prismorsec/prismor/blob/main/docs/governance-surfaces.md)을 참조하세요.

---

## 선별된 기능 살펴보기<a name="selected-capabilities-walked-through" />

[기능](#capabilities)에서 세 가지 모듈을 설정, 출력, 결과와 함께 살펴봅니다.

### 하이브리드 시맨틱 프롬프트 인젝션 방어<a name="hybrid-semantic-prompt-injection-defense" />

정규식 규칙은 알려진 인젝션 형태를 잡아냅니다. 시맨틱 가드는 의도 인식 계층을 추가합니다. 휴리스틱 사전 검사가 명백한 사례를 1ms 이내에 처리하고, 불확실한 입력은 LLM 판정자로 에스컬레이션되어 어느 쪽이든 판정을 담당합니다. 정규식이 절반만 본 패러프레이즈된 공격을 확인하고, 권위 주장 신호에 걸린 무해한 텍스트를 정리합니다. 800개 이상의 사례로 테스트됨 — **+30% 재현율**, 추가 오탐 없음, 정규식을 우회하는 패러프레이즈 및 파일 내 인젝션 포함.

![시맨틱 가드 결과](https://assets.kitploit.com/production/public/readmes/13903/a32297d3549c5ff60690c8dca14490f1d53a17a253d912bcb2187414dea3d018.png)

판정자는 이미 보유한 로그인으로 실행됩니다 — API 키가 필요하지 않습니다. `prismor setup`이 **LLM judge** 단계에서 묻습니다. 스크립트 방식:```bash
prismor setup --non-interactive --judge claude   # Claude Code CLI, your Claude login
prismor setup --non-interactive --judge codex    # Codex CLI, your ChatGPT login
prismor setup --non-interactive --judge api --judge-model gpt-4o-mini   # any litellm model + key

| -s | --server | SERVER | http://localhost:8080 | 서버 URL | | -t | --token | TOKEN | | 인증 토큰 | | -o | --output | OUTPUT | | 출력 파일 | | -f | --format | FORMAT | json | 출력 형식 | | -v | --verbose | | | 상세 출력 | | -q | --quiet | | | 조용한 모드 | | -h | --help | | | 도움말 표시 | | -V | --version | | | 버전 표시 |

예제

# 기본 사용법
mytool scan example.com

# 옵션과 함께 사용
mytool scan example.com --output results.json --format json

# 상세 모드
mytool scan example.com -v

# 여러 대상
mytool scan example.com test.com --threads 10

설정

설정 파일

~/.mytool/config.yaml에 설정 파일을 생성하세요:

server: http://localhost:8080
token: your-token-here
output: results.json
format: json
threads: 5
timeout: 30

환경 변수

변수설명기본값
MYTOOL_SERVER서버 URLhttp://localhost:8080
MYTOOL_TOKEN인증 토큰
MYTOOL_OUTPUT출력 파일
MYTOOL_FORMAT출력 형식json
MYTOOL_THREADS스레드 수5
MYTOOL_TIMEOUT타임아웃 (초)30

출력 형식

JSON

{
  "target": "example.com",
  "status": "success",
  "findings": [
    {
      "type": "vulnerability",
      "severity": "high",
      "description": "SQL Injection",
      "location": "/api/login"
    }
  ]
}

CSV

target,status,type,severity,description,location
example.com,success,vulnerability,high,SQL Injection,/api/login

XML

<?xml version="1.0" encoding="UTF-8"?>
<results>
  <target>example.com</target>
  <status>success</status>
  <findings>
    <finding>
      <type>vulnerability</type>
      <severity>high</severity>
      <description>SQL Injection</description>
      <location>/api/login</location>
    </finding>
  </findings>
</results>

문제 해결

일반적인 문제

연결 거부됨

Error: Connection refused

해결 방법: 서버가 실행 중이고 접근 가능한지 확인하세요.

# 서버 상태 확인
curl http://localhost:8080/health

인증 실패

Error: Authentication failed

해결 방법: 토큰이 유효한지 확인하세요.

# 토큰 확인
echo $MYTOOL_TOKEN

권한 거부됨

Error: Permission denied

해결 방법: 파일 권한을 확인하세요.

# 권한 수정
chmod +x mytool

디버그 모드

디버그 출력을 활성화하려면:

mytool scan example.com --verbose --debug

로그

로그는 다음 위치에 저장됩니다:

  • Linux: ~/.local/share/mytool/logs/
  • macOS: ~/Library/Logs/mytool/
  • Windows: %APPDATA%\mytool\logs\

기여하기

기여를 환영합니다! 풀 리퀘스트를 제출하기 전에 기여 가이드라인을 읽어주세요.

개발 환경 설정

# 저장소 복제
git clone https://github.com/example/mytool.git
cd mytool

# 가상 환경 생성
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 의존성 설치
pip install -r requirements.txt
pip install -r requirements-dev.txt

# 테스트 실행
pytest tests/

코드 스타일

이 프로젝트는 다음을 따릅니다:

# 코드 포맷
black mytool/
isort mytool/

# 린트
flake8 mytool/

테스트

# 모든 테스트 실행
pytest

# 커버리지와 함께 실행
pytest --cov=mytool tests/

# 특정 테스트 실행
pytest tests/test_scanner.py

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

감사의 글

지원

면책 조항

이 도구는 교육 및 테스트 목적으로만 제공됩니다. 적절한 승인 없이 이 도구를 사용하는 것은 불법일 수 있습니다. 사용자는 자신의 행동에 대해 전적인 책임을 집니다.


면책 조항: 이 도구는 교육 목적으로만 제공됩니다. 적절한 승인 없이 이 도구를 사용하는 것은 불법일 수 있습니다. 사용자는 자신의 행동에 대해 전적인 책임을 집니다.```yaml

.prismor/policy.yaml

settings: semantic_guard: provider: codex # api | claude | codex model: "" # "" = that CLI's default model

## 주요 기능

- **다중 소스 수집**: GitHub, GitLab, Bitbucket, 로컬 디렉터리, ZIP 아카이브, 개별 파일
- **지능형 스캐닝**: 시그니처 기반 탐지, 엔트로피 분석, 컨텍스트 인식
- **다중 언어 지원**: Python, JavaScript, Java, Go, Ruby, PHP, C/C++, Rust 등
- **유연한 보고**: JSON, SARIF, HTML, CSV, Markdown 형식
- **CI/CD 통합**: GitHub Actions, GitLab CI, Jenkins, pre-commit 훅
- **사용자 정의 규칙**: YAML 기반 규칙 정의 및 정규식 패턴
- **성능 최적화**: 병렬 처리, 증분 스캐닝, 캐싱
- **보안 우선**: 민감한 데이터 마스킹, 안전한 기본값, 감사 로깅

## 설치

### 사전 요구 사항

- Python 3.8 이상
- Git (저장소 스캐닝용)
- 선택 사항: Docker (컨테이너화된 배포용)

### pip 사용

```bash
pip install secretscanner

소스에서 설치

git clone https://github.com/example/secretscanner.git
cd secretscanner
pip install -e .

Docker 사용

docker pull example/secretscanner:latest
docker run --rm -v $(pwd):/scan example/secretscanner:latest scan /scan

빠른 시작

기본 스캔

# 현재 디렉터리 스캔
secretscanner scan .

# 특정 디렉터리 스캔
secretscanner scan /path/to/project

# 원격 저장소 스캔
secretscanner scan https://github.com/example/repo.git

구성 파일

프로젝트 루트에 .secretscanner.yml 파일을 생성하세요:

version: "1.0"

scan:
  exclude:
    - "*.min.js"
    - "node_modules/**"
    - "vendor/**"
    - "*.lock"
  max_file_size: 10485760
  entropy_threshold: 4.5

rules:
  - id: aws-access-key
    description: "AWS Access Key ID"
    pattern: "AKIA[0-9A-Z]{16}"
    severity: critical
    tags: ["aws", "credentials"]

  - id: generic-api-key
    description: "Generic API Key"
    pattern: "(?i)(api[_-]?key|apikey)[\"']?\\s*[:=]\\s*[\"']?([a-zA-Z0-9_\\-]{20,})"
    severity: high
    tags: ["api", "key"]

report:
  format: json
  output: scan-results.json
  include_remediation: true

CI/CD 통합

GitHub Actions

name: Secret Scan
on: [push, pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Run SecretScanner
        uses: example/secretscanner-action@v1
        with:
          args: scan . --format sarif --output results.sarif
      - name: Upload SARIF
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif

GitLab CI

secret-scan:
  stage: test
  image: example/secretscanner:latest
  script:
    - secretscanner scan . --format json --output gl-secret-detection-report.json
  artifacts:
    reports:
      secret_detection: gl-secret-detection-report.json

사용법

명령줄 인터페이스

secretscanner [OPTIONS] COMMAND [ARGS]...

Commands:
  scan      대상 스캔
  rules     규칙 관리
  report    보고서 생성
  config    구성 관리
  version   버전 정보 표시

Options:
  --verbose, -v    상세 출력 활성화
  --quiet, -q      콘솔 출력 억제
  --config PATH    구성 파일 경로
  --help           도움말 표시

스캔 명령

secretscanner scan [OPTIONS] TARGET

Options:
  --format [json|sarif|html|csv|markdown]  출력 형식 (기본값: json)
  --output PATH                            출력 파일 경로
  --severity [low|medium|high|critical]    최소 심각도 필터
  --exclude PATTERN                        제외 패턴 (반복 가능)
  --include PATTERN                        포함 패턴 (반복 가능)
  --rules PATH                             사용자 정의 규칙 파일
  --baseline PATH                          기준 파일
  --no-entropy                             엔트로피 분석 비활성화
  --threads N                              워커 스레드 수
  --timeout SECONDS                        스캔 타임아웃

예제

# 심각도 필터를 적용한 JSON 출력으로 스캔
secretscanner scan . --format json --severity high --output results.json

# SARIF 출력으로 스캔 (CI 통합용)
secretscanner scan . --format sarif --output results.sarif

# 사용자 정의 규칙으로 스캔
secretscanner scan . --rules custom-rules.yml

# 기준 대비 증분 스캔
secretscanner scan . --baseline .secretscanner-baseline.json

# 특정 파일 형식 제외
secretscanner scan . --exclude "*.test.js" --exclude "docs/**"

구성

구성 파일 위치

SecretScanner는 다음 위치에서 구성을 찾습니다 (우선순위 순):

  1. --config CLI 옵션으로 지정된 경로
  2. 현재 디렉터리의 .secretscanner.yml
  3. $HOME/.config/secretscanner/config.yml
  4. /etc/secretscanner/config.yml

구성 스키마

version: "1.0"

scan:
  exclude: []              # 제외할 glob 패턴
  include: []              # 포함할 glob 패턴
  max_file_size: 10485760  # 최대 파일 크기 (바이트)
  entropy_threshold: 4.5   # 엔트로피 임계값 (0-8)
  threads: 4               # 워커 스레드 수
  timeout: 300             # 스캔 타임아웃 (초)
  follow_symlinks: false   # 심볼릭 링크 따라가기
  scan_history: false      # Git 기록 스캔

rules:
  - id: string             # 고유 규칙 식별자
    description: string    # 사람이 읽을 수 있는 설명
    pattern: string        # 정규식 패턴
    severity: string       # low, medium, high, critical
    tags: []               # 분류 태그
    remediation: string    # 수정 안내
    enabled: true          # 규칙 활성화/비활성화

report:
  format: string           # json, sarif, html, csv, markdown
  output: string           # 출력 파일 경로
  include_remediation: true
  mask_secrets: true       # 출력에서 비밀 값 마스킹
  max_findings: 1000       # 보고할 최대 발견 항목 수

notifications:
  slack:
    webhook_url: string
    enabled: false
  email:
    smtp_host: string
    smtp_port: 587
    recipients: []
    enabled: false

환경 변수

변수설명기본값
SECRETSCANNER_CONFIG구성 파일 경로(없음)
SECRETSCANNER_LOG_LEVEL로깅 수준INFO
SECRETSCANNER_THREADS워커 스레드 수4
SECRETSCANNER_TIMEOUT스캔 타임아웃 (초)300
SECRETSCANNER_NO_COLOR색상 출력 비활성화false
GITHUB_TOKENGitHub API 토큰(없음)
GITLAB_TOKENGitLab API 토큰(없음)

규칙

내장 규칙

SecretScanner는 100개 이상의 내장 규칙을 포함합니다:

규칙 ID설명심각도
aws-access-keyAWS Access Key IDcritical
aws-secret-keyAWS Secret Access Keycritical
github-tokenGitHub Personal Access Tokencritical
gitlab-tokenGitLab Personal Access Tokencritical
slack-tokenSlack API Tokenhigh
stripe-keyStripe API Keycritical
google-api-keyGoogle API Keyhigh
private-keyPrivate Key 파일critical
jwt-tokenJSON Web Tokenmedium
generic-password일반 비밀번호 패턴medium
database-url데이터베이스 연결 문자열high
ssh-private-keySSH Private Keycritical

사용자 정의 규칙

사용자 정의 규칙 파일을 생성하세요:

version: "1.0"

rules:
  - id: custom-internal-token
    description: "내부 서비스 토큰"
    pattern: "INT_[A-Z0-9]{32}"
    severity: critical
    tags: ["internal", "token"]
    remediation: "토큰을 교체하고 환경 변수로 이동하세요"

  - id: custom-db-password
    description: "데이터베이스 비밀번호"
    pattern: "(?i)db[_-]?pass(word)?[\"']?\\s*[:=]\\s*[\"']?([^\\s\"']{8,})"
    severity: high
    tags: ["database", "password"]

규칙 테스트

# 모든 규칙 검증
secretscanner rules validate

# 특정 규칙 테스트
secretscanner rules test --rule custom-internal-token --input test-file.txt

# 사용 가능한 모든 규칙 나열
secretscanner rules list --format table

보고서

JSON 형식

{
  "version": "1.0",
  "scan": {
    "target": "/path/to/project",
    "started_at": "2024-01-15T10:30:00Z",
    "completed_at": "2024-01-15T10:30:45Z",
    "duration_seconds": 45,
    "files_scanned": 1250,
    "findings_count": 3
  },
  "findings": [
    {
      "rule_id": "aws-access-key",
      "description": "AWS Access Key ID",
      "severity": "critical",
      "file": "config/settings.py",
      "line": 42,
      "column": 15,
      "match": "AKIA****************",
      "context": "aws_access_key = \"AKIA****************\"",
      "remediation": "AWS 자격 증명을 교체하고 환경 변수를 사용하세요"
    }
  ]
}

SARIF 형식

SARIF 출력은 GitHub Code Scanning, Azure DevOps 및 기타 SARIF 호환 도구와 호환됩니다.

HTML 보고서

secretscanner scan . --format html --output report.html

HTML 보고서에는 다음이 포함됩니다:

  • 대화형 발견 항목 테이블
  • 심각도 분포 차트
  • 파일별 분석
  • 수정 안내
  • 내보내기 옵션

개발

개발 환경 설정

git clone https://github.com/example/secretscanner.git
cd secretscanner
python -m venv venv
source venv/bin/activate
pip install -r requirements-dev.txt
pre-commit install

테스트 실행

# 전체 테스트 스위트 실행
pytest

# 커버리지와 함께 실행
pytest --cov=secretscanner --cov-report=html

# 특정 테스트 파일 실행
pytest tests/test_scanner.py -v

코드 스타일

# 린트
ruff check .

# 포맷
black .

# 타입 검사
mypy secretscanner/

기여

기여를 환영합니다! 자세한 내용은 CONTRIBUTING.md를 참조하세요.

  1. 저장소를 포크하세요
  2. 기능 브랜치를 생성하세요 (git checkout -b feature/amazing-feature)
  3. 변경 사항을 커밋하세요 (git commit -m 'Add amazing feature')
  4. 브랜치에 푸시하세요 (git push origin feature/amazing-feature)
  5. Pull Request를 여세요

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다 - 자세한 내용은 LICENSE 파일을 참조하세요.

감사의 글

  • trufflehog에서 영감을 받음
  • gitleaks에서 영감을 받음
  • 모든 기여자들에게 감사드립니다

지원

판사(judge)를 선택하기 전까지는 휴리스틱만 사용합니다. 전체 설정과 라이브 Claude Code 및 Codex 세션 내부의 판사 녹화본은 [docs/semantic-guard.md](https://github.com/prismorsec/prismor/blob/main/docs/semantic-guard.md)를 참조하세요.

### 자체 호스팅 대시보드<a name="self-hosted-dashboard" />```bash
prismor dashboard            # opens http://127.0.0.1:7070 in your browser
prismor dashboard --port 8080
prismor dashboard --no-open  # headless server only (was: prismor serve)

세션, 발견 사항, 위협 카테고리, 에이전트 분석, 실시간 이벤트 피드까지 — 모두 로컬 워크스페이스 DB에서 가져옵니다. 클라우드는 사용하지 않습니다.

셀프 호스팅 대시보드

image

공급망 차단

prismor는 패키지 관리자를 감싸서 모든 설치를 실행 전에 실시간 위협 인텔리전스와 대조하여 평가합니다 — 배포 시기, 유지관리자 수, 설치 스크립트, 알려진 IOC를 기준으로 합니다. mini-shai-hulud(2026년 5월)와 AntV 탈취된 유지관리자 공격(2026년 5월)에 대한 대응을 기본 제공합니다.```bash prismor supplychain npm install express # passes, runs npm prismor supplychain npm install @tanstack/react-router # BLOCK: IOC match (score 100) prismor supplychain pip install requests numpy prismor supplychain pnpm add lodash

판정: `< 30` 허용 · `30–59` 경고 · `≥ 60` 차단. IOC 일치 시 항상 차단. 패키지 관리자를 별칭으로 지정하여 모든 설치를 자동으로 게이트하세요.

`prismor supplychain harden`은 잠금 설정을 `.npmrc` / `.yarnrc.yml` / `pip.conf` / `.cargo/config.toml`에 기록하여 별칭이 우회되는 경우(CI, IDE 플러그인)에도 패키지 관리자가 이를 강제하도록 합니다.```bash
prismor supplychain harden           # apply to current directory
prismor supplychain harden --dry-run

See docs/supply-chain.md for the full scoring table, ecosystem support, and IOC format.


Disabling Prismor

There are three independent layers that can each restrict an agent session. Disabling one does not disable the others — pick the layer that matches what you're actually trying to turn off.

1. Uninstall hooks entirely

Removes the hook-dispatch entries from the agent's hooks config, so Prismor stops receiving PreToolUse/PostToolUse/UserPromptSubmit events altogether.```bash prismor uninstall-hooks --agent claude --scope project # this workspace only prismor uninstall-hooks --agent claude --scope user # global (all workspaces) prismor uninstall-hooks --agent all --scope project # every supported agent, this workspace

`--scope`의 기본값은 `project`입니다. **프로젝트 범위와 사용자 범위는 서로 다른 파일을 편집합니다** — `--scope user`만 실행해도 워크스페이스의 로컬 훅은 *건드리지 않으며*, 그 반대도 마찬가지입니다:

| 에이전트 | 프로젝트 범위 | 사용자 범위 |
|---|---|---|
| Claude Code | `<workspace>/.claude/settings.json` | `~/.claude/settings.json` |
| Cursor | `<workspace>/.cursor/hooks.json` | `~/.cursor/hooks.json` |
| Windsurf | `<workspace>/.windsurf/hooks.json` | `~/.codeium/windsurf/hooks.json` |
| OpenClaw | `<workspace>/.openclaw/plugins.json` | `~/.openclaw/config.json` |
| Hermes | `<workspace>/.hermes/plugins.json` | `~/.hermes/config.json` |
| Codex | `<workspace>/.codex/hooks.json` | `~/.codex/hooks.json` |
| Copilot | `<workspace>/.github/copilot/hooks.json` | `~/.copilot/hooks.json` |
| Grok Build | `<workspace>/.grok/hooks/prismor.json` | `~/.grok/hooks/prismor.json` |
| Kiro CLI | `<workspace>/.kiro/agents/kiro_default.json` | `~/.kiro/agents/kiro_default.json` |
| Crush | `<workspace>/crush.json` | `~/.config/crush/crush.json` |
| OpenHands | `<workspace>/.openhands/hooks.json` | `~/.openhands/hooks.json` |
| Qwen Code | `<workspace>/.qwen/settings.json` | `~/.qwen/settings.json` |
| Continue CLI | `<workspace>/.continue/settings.json` | `~/.continue/settings.json` |
| Goose | `<workspace>/.agents/plugins/prismor/hooks/hooks.json` | `~/.agents/plugins/prismor/hooks/hooks.json` |

한 범위만 실행하면, 다른 범위의 훅(설치된 경우)은 계속 실행됩니다. 특정 에이전트에서 Prismor를 완전히 제거하려면 두 범위 모두 실행하세요.

실행 중인 세션은 이미 훅 설정을 로드한 상태입니다 — 세션 도중에 제거해도 새 세션을 시작하기 전까지는 적용되지 않습니다.

`prismor uninstall-hooks`가 성공을 보고했는데도 훅이 계속 실행된다면, 오래된 설치본을 실행 중일 가능성이 높습니다 — 예를 들어 개발 체크아웃의 오래된 스냅샷을 `pipx`로 설치한 복사본 같은 경우입니다. `which immunity`를 확인하고, `pipx` venv로 해석된다면 현재 소스에서 재설치(`pipx install --force <path-or-package>`)한 후 제거를 다시 실행하세요. 최후의 수단으로 훅 설정 파일을 직접 편집하세요.

### 2. 소프트 비활성화: 관찰 모드 + 드라이런

훅을 설치된 상태로 두되 차단을 중단하게 하려면:```bash
prismor install-hooks --agent all --scope project --mode observe
PRISMOR_LOCAL_DRY_RUN=1   # set in your shell/session env

--mode observe는 차단 없이 탐지 결과를 기록합니다. PRISMOR_LOCAL_DRY_RUN=1은 observe로 설치된 훅에서 원래 차단되었을 탐지 결과에 대해 추가로 차단을 억제합니다(prismor/runtime/cli.py에서 args.mode == "observe"일 때 확인됨). 일시적으로 강제 적용을 중단하면서 Prismor의 텔레메트리/로깅은 계속 작동시키고 싶을 때 적합한 방법입니다.

이는 .prismor/policy.yaml에서 mode: enforce로 설정된 정책 규칙에는 영향을 주지 않습니다 — 해당 규칙은 훅이 어떻게 설치되었든 관계없이 정책에 의해 강제됩니다(위의 Observe / Enforce 참조).

3. 세션의 scoped-agent 규칙 지우기

Scoped Agent는 .prismor/scoped/{session_id}.json에 세션별 allowed_tools/deny_tools 목록을 생성합니다. 이 검사는 훅의 --mode와 무관합니다 — deny_tools에 있는 도구는 prismor/runtime/scoped_agent.py에서 action: block / mode: enforce로 하드코딩되어 있으므로, 훅이 --mode observe로 설치된 경우에도 차단됩니다. 훅을 제거하거나 observe 모드로 전환해도 scoped 거부는 해제되지 않습니다.```bash prismor scope list # find the session ID prismor scope show ID # inspect its allowed_tools / deny_tools (latest works too) prismor scope clear ID # remove the scoped rules for that session prismor scope edit ID # or hand-edit deny_tools in $EDITOR

일괄 삭제는 없습니다 — 각 세션은 개별적으로 ID를 통해 삭제됩니다. `scope clear`를 실행하기 전에 세션에 스코프가 지정되어 있었다면, 가장 깔끔한 해결책은 보통 기존 세션의 캐시된 상태를 쫓아가는 대신 새 세션을 시작하는 것입니다.

---

## 벤치마크<a name="benchmarks" />

측정된 오버헤드는 10,000개의 시뮬레이션된 에이전트 세션에서 도구 호출당 0.8ms로, 테스트된 모든 작업 카테고리의 1ms 임계값보다 낮습니다.

![Prismor Simulation Results](https://assets.kitploit.com/production/public/readmes/13903/9709be2f3ab32acf58f2d4d872290dda89d0515e595b7c42b7cddf7cbbcef036.png)

전체 방법론, 카테고리별 분석, 지연 시간 분석은 [benchmark.md](https://github.com/prismorsec/prismor/blob/main/benchmark.md)를 참조하세요.

---

## 기여하기<a name="contributing" />

PR을 환영합니다. 시작하기 전에 [CONTRIBUTING.md](https://github.com/prismorsec/prismor/blob/main/CONTRIBUTING.md)를 읽어보세요 — 여기서 가장 중요한 한 가지를 설명합니다: **이미 존재하는 메커니즘을 재사용하고, 가능한 한 적은 줄로 문제를 해결하세요.** 작은 diff가 더 빨리 병합됩니다.

요약하자면:

- 새로운 탐지 규칙은 `prismor/runtime/default_policy.yaml`에 추가하며, `prismor/runtime/policy_schema.json`의 스키마를 따릅니다 — 탐지 패턴은 절대 Python에 넣지 않습니다
- 새 모듈을 추가하기 전에 [확장 지점 표](https://github.com/prismorsec/prismor/blob/main/CONTRIBUTING.md#before-you-write-code-check-whether-the-seam-already-exists)를 확인하세요; 대부분의 변경은 코드가 아니라 구성입니다
- 테스트는 `tests/`에 있습니다 — PR을 열기 전에 `bash scripts/run_security_tests.sh`를 실행하세요
- 무언가가 어디에 맞는지 확실하지 않다면 먼저 이슈를 열어주세요

참여함으로써 귀하는 [행동 강령](https://github.com/prismorsec/prismor/blob/main/CODE_OF_CONDUCT.md)에 동의하게 됩니다.

---

- [Prismor.dev](https://prismor.dev)

카테고리