Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ironcurtain — 자율 AI 에이전트를 위한 보안* 런타임. 일반 영어로 작성된 헌법에서 정책을 수립합니다. (*https://ironcurtain.dev) | Kitploit
도구/GitHubGitHub/provos/ironcurtain
Container SecurityDynamic Analysis (Sandboxing)Vulnerability AnalysisFuzzingLearning & EducationAI Security
GitHubprovos/ironcurtain

ironcurtain

자율 AI 에이전트를 위한 보안* 런타임. 일반 영어로 작성된 헌법에서 정책을 수립합니다. (*https://ironcurtain.dev)

저장소 보기
572771일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

IronCurtain

CI npm License Website

자율 AI 에이전트를 위한 안전한* 런타임으로, 보안 정책은 사람이 읽을 수 있는 헌법에서 파생됩니다.

*누군가 "안전한"이라고 쓴다면 즉시 의심해야 합니다. 안전하다는 것은 무슨 의미일까요?

[!WARNING] 연구용 프로토타입. IronCurtain은 AI 에이전트가 실제로 유용할 만큼 안전해지도록 만드는 방법을 탐구하는 초기 단계 연구 프로젝트입니다. API, 구성 형식 및 아키텍처는 변경될 수 있습니다. 기여와 피드백을 환영합니다.

데모

IronCurtain mux 데모: 명령 모드의 신뢰된 입력으로 git clone 및 git push의 자동 승인 활성화

에이전트는 저장소를 클론하고 변경 사항을 푸시하라는 요청을 받습니다. git_clone과 git_push 모두 정책 엔진에 의해 에스컬레이션되지만, 자동 승인기가 자동으로 승인합니다. 명령 모드(Ctrl-A)에서 사용자의 신뢰된 입력이 명확한 의도를 제공했기 때문에 수동 /approve가 필요하지 않았습니다.

문제

자율 AI 에이전트는 사용자를 대신하여 파일을 관리하고, git 명령을 실행하고, 메시지를 보내고, API와 상호작용할 수 있습니다. 그러나 오늘날의 에이전트 프레임워크는 파일시스템, 자격 증명 및 네트워크에 대한 전체 액세스와 같이 사용자와 동일한 권한을 에이전트에 부여합니다. 보안 연구자들은 이를 환경 권한(ambient authority) 이라고 부르며, 이는 단 한 번의 프롬프트 인젝션이나 다중 턴 드리프트(multi-turn drift)로 인해 에이전트가 파일을 삭제하고, 데이터를 유출하고, 악성 코드를 푸시할 수 있음을 의미합니다.

일반적인 대응은 에이전트를 좁은 샌드박스로 제한하거나(유용성을 제한), 사용자에게 모든 작업을 승인하도록 요청하는 것(자율성을 제한) 중 하나입니다. 어느 쪽도 만족스럽지 않습니다.

접근 방식

IronCurtain은 다른 길을 택합니다: 보안 의도를 평범한 영어로 표현하면, 시스템이 강제 실행 방법을 파악하게 하세요.

헌법(constitution) 을 작성하세요. 이는 에이전트가 수행할 수 있는 것과 없는 것을 설명하는 짧은 문서입니다. IronCurtain은 LLM 파이프라인을 사용하여 이를 결정적 보안 정책으로 컴파일하고, 생성된 테스트 시나리오에 대해 컴파일된 규칙을 검증한 다음, 런타임에 모든 도구 호출에 대해 정책을 적용합니다. 그 결과는 사용자가 자연어로 정의한 경계 내에서 자율적으로 작업할 수 있는 에이전트입니다.

핵심 아이디어:

  • 에이전트는 신뢰할 수 없습니다. IronCurtain은 LLM이 프롬프트 인젝션이나 드리프트로 손상될 수 있다고 가정합니다. 보안은 모델이 "착하게 행동하는 것"에 의존하지 않습니다.
  • 영어 입력, 강제 실행 출력. 사용자가 의도를 작성하면("승인 없이 파괴적인 git 작업 금지"), 시스템은 이를 결정적 규칙으로 컴파일하고 런타임에 추가 LLM 개입 없이 강제합니다.
  • 의미적 개입(Semantic interposition). 에이전트에게 원시 시스템 액세스를 부여하는 대신, 모든 상호작용은 MCP 서버(파일시스템, git 등)를 통해 이루어집니다. 모든 도구 호출은 정책 엔진을 통과하며, 정책 엔진은 허용(allow), 거부(deny), 또는 승인을 위해 사용자에게 에스컬레이션(escalate) 할 수 있습니다.
  • 심층 방어(Defense in depth). 에이전트 코드는 호스트에 직접 접근할 수 없는 V8 격리(isolate)에서 실행됩니다. 유일한 탈출 경로는 의미 있는 MCP 도구 호출을 통해서이며, 모든 호출은 정책에 대해 검사됩니다.

아키텍처

IronCurtain은 서로 다른 신뢰 모델을 가진 두 가지 세션 모드를 지원합니다:

  • 내장 에이전트(코드 모드) — IronCurtain 자체 LLM 에이전트가 V8 샌드박스에서 실행되는 TypeScript 스니펫을 작성합니다. IronCurtain은 에이전트, 샌드박스 및 정책 엔진을 제어합니다. 모든 도구 호출은 구조화된 MCP 요청으로 샌드박스를 빠져나와 정책 엔진(허용 / 거부 / 에스컬레이션)을 통과한 다음에만 실제 MCP 서버에 도달합니다.

  • Docker 에이전트 모드 — 외부 에이전트(Claude Code, Goose 등)가 네트워크 액세스가 없는 Docker 컨테이너 내부에서 실행됩니다. IronCurtain은 외부 효과를 중재합니다: LLM API 호출은 TLS 종료 MITM 프록시(호스트 허용 목록, 가짜-실제 키 교환)를 통과하고, MCP 도구 호출은 동일한 정책 엔진을 통과하며, 패키지 설치(npm/PyPI)는 검증 레지스트리 프록시를 통해 이루어집니다.

두 모드 모두 에이전트는 신뢰할 수 없습니다. 보안은 모델이 지침을 따르는 것에 의존하지 않습니다. 경계에서 강제됩니다.

다이어그램, 계층별 신뢰 분석 및 macOS 플랫폼 참고 사항이 포함된 전체 아키텍처는 SANDBOXING.md를 참조하세요.

빠른 시작

사전 요구 사항

  • Node.js 22, 24 또는 26 — IronCurtain이 테스트하는 짝수 메이저 라인(isolated-vm에 필요; 24와 26은 사전 빌드된 바이너리를 설치하고, Node 22는 설치 시 소스에서 컴파일하므로 C/C++ 툴체인이 필요합니다). 홀수 라인(23, 25)은 실행되지만 테스트되지 않았습니다 — ironcurtain doctor가 경고합니다.
  • Docker — 필수는 아니지만, 가장 강력한 격리를 제공하는 Docker 에이전트 모드에는 강력히 권장됩니다. macOS 26+ (Apple silicon)에서는 Apple container가 대체 백엔드로 작동합니다(컨테이너당 VM; 해당 서비스가 실행 중일 때 자동으로 사용됨 — ironcurtain config의 containerRuntime 참조)
  • 최소 하나의 LLM 제공업체(Anthropic, Google, OpenAI)용 API 키

설치

글로벌 CLI 도구로 사용하는 경우(최종 사용자):```bash npm install -g @provos/ironcurtain

root@kitploit:~
**소스에서 (개발):**```bash
git clone https://github.com/provos/ironcurtain.git
cd ironcurtain
npm install

일회성 설정

1. API 키를 설정하세요:```bash export ANTHROPIC_API_KEY=sk-ant-...

root@kitploit:~
You can also place keys in a `.env` file in the project root (loaded automatically via `dotenv`), or add them to `~/.ironcurtain/config.json` via `ironcurtain config`. Environment variables take precedence over config file values. Supported: `ANTHROPIC_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, `OPENAI_API_KEY`.

**2. Run the first-start wizard** (run this explicitly before using the recommended mux path; it also runs automatically on first non-mux `ironcurtain start`):```bash
ironcurtain setup

GitHub 토큰 설정, 웹 검색 제공자, 모델 선택 및 기타 설정을 안내합니다. 선택한 내용으로 ~/.ironcurtain/config.json을 생성합니다.

IronCurtain 실행

IronCurtain은 개발자 경험에 맞춘 기본 정책을 제공합니다 — 읽기 전용 작업은 허용되고, 변경(쓰기, 푸시, PR 생성)은 인간의 승인을 받도록 상향 조정됩니다. 설정 후 바로 사용할 수 있습니다.

터미널 멀티플렉서 (권장)

IronCurtain을 사용하는 권장 방법입니다. IronCurtain이 모든 도구 호출을 정책 엔진을 통해 중재하는 동안, 에이전트의 대화형 TUI(Claude Code 또는 Goose)의 모든 기능을 단일 터미널에서 사용할 수 있습니다.```bash ironcurtain mux

root@kitploit:~
**주요 기능:**

- **전체 에이전트 TUI** — 에이전트는 네트워크 접근이 없는 Docker 컨테이너 내부의 PTY에서 실행됩니다. 마치 로컬에서 실행되는 것처럼 정확히 상호작용할 수 있습니다.
- **인라인 승격 처리** — 도구 호출에 승인이 필요하면 승격 선택기가 뷰포트에 단일 키 동작(승인/거부/화이트리스트용 a/d/w)으로 오버레이됩니다. `/approve+ N`을 사용하여 도메인 또는 경로를 세션의 나머지 동안 화이트리스트에 추가할 수 있습니다.
- **신뢰된 사용자 입력** — 명령 모드(Ctrl-A)에서 입력한 텍스트는 컨테이너에 들어가기 전에 호스트 측에서 캡처됩니다. 이는 자동 승인기가 사용할 수 있는 검증된 의도 신호를 생성합니다. 예를 들어 "push my changes to origin"을 입력하면 이후의 `git_push` 승격이 자동 승인됩니다.
- **탭 관리** — 여러 동시 세션 생성(`/new`), 전환(`/tab N`, Alt-1..9), 종료(`/close`)가 가능합니다. 여러 mux 인스턴스를 병렬로 실행할 수 있습니다.

전체 안내는 [DEVELOPER_GUIDE.md](https://github.com/provos/ironcurtain/blob/HEAD/DEVELOPER_GUIDE.md)를 참조하세요: 입력 모드, 신뢰된 입력 보안 모델, 승격 워크플로우, 키보드 참조.

### Non-mux 세션

빠른 일회성 작업, 스크립트 또는 로컬 내장 에이전트를 명시적으로 원할 때는 `ironcurtain start`를 사용하세요. 일반적인 대화형 Docker 에이전트 작업에는 `ironcurtain mux`를 사용하세요.```bash
ironcurtain start "Summarize the files in ./src"     # Single-shot mode
ironcurtain start -w ./my-project "Fix the tests"    # Single-shot workspace mode
ironcurtain start --agent builtin                    # Local builtin REPL, no Docker
ironcurtain start --persona my-assistant "Check my email"  # Use a persona

기타 실행 모드

IronCurtain은 또한 세션 재개(--resume <session-id>), 레거시 raw PTY/디버그 모드, 모바일 승인을 위한 Signal 메시징 전송, 예약된 cron 작업을 위한 데몬 모드를 지원합니다. 데몬은 브라우저 기반 모니터링 및 에스컬레이션 처리를 위한 선택적 웹 UI (--web-ui)를 제공합니다. 자세한 내용은 RUNNING_MODES.md를 참조하세요.

멀티 에이전트 워크플로우

IronCurtain은 구조화된 워크플로우를 통해 여러 AI 에이전트를 오케스트레이션합니다. 번들로 제공되는 취약점 탐지 워크플로우는 계층화된 하네스 파이프라인(Tier 1 격리 함수 → Tier 2 다중 구성 요소 → Tier 3 전체 빌드)을 통해 네이티브 코드의 메모리 안전성 및 논리 버그를 추적하며, libFuzzer/AFL++ 커버리지 게이팅, 가설 기반 discover/triage 상태, 그리고 최종 인간 보고서 검토 게이트를 포함합니다. 설계 및 코딩 워크플로우는 계획 / 설계 / 구현 / 검토 주기를 실행하며, 여기에도 인간 게이트가 있습니다. 각 에이전트는 역할별 정책 경계를 가진 자체 Docker 컨테이너에서 실행됩니다. 엔진은 상태 전환, 아티팩트 전달, 크래시-재개 체크포인팅을 자동으로 관리합니다. 오픈 소스이며, 전적으로 사용자 머신에서 실행되고, 헌법 기반 정책 엔진을 통해 에이전트별 보안 정책을 적용하며, 모든 Docker 컨테이너화 에이전트와 작동합니다 — 코딩 작업 측면에서 Amazon Kiro 및 Google Jules와 비슷한 범위를 제공하지만, 최고 수준의 보안과 확장 가능한 워크플로우 정의 형식을 갖추고 있습니다.

IronCurtain 웹 UI의 취약점 탐지 상태 머신

웹 UI는 워크플로우 실행을 위한 의도된 인터페이스입니다. 데몬을 시작하고, 출력된 URL을 연 다음, Workflows 페이지에서 실행을 진행하세요. 위의 상태 머신 그래프는 실시간이며, 에이전트 메시지 타임라인은 마크다운 렌더링으로 스트리밍됩니다. 게이트 리뷰에는 작업 공간 + 아티팩트 브라우저가 포함되며, 과거 실행은 계속 목록에 남습니다.```bash ironcurtain daemon --web-ui

root@kitploit:~
스크립팅, 자동화, 디버깅을 위한 CLI 액세스가 제공됩니다:```bash
ironcurtain workflow start vuln-discovery \
  "Find memory-safety bugs in libical" --workspace ~/src/libical
ironcurtain workflow start design-and-code \
  "Build a REST API with authentication"

전체 문서는 WORKFLOWS.md에서 확인하세요.

정책 사용자 지정

기본 정책은 일반적인 개발에 잘 작동하지만, 워크플로에 맞게 조정할 수 있습니다:

1. 컨스티튜션 사용자 지정 (선택 사항이지만 권장됨):```bash ironcurtain customize-policy

root@kitploit:~
워크플로에 맞게 조정된 헌법을 생성하는 LLM 지원 대화로, `~/.ironcurtain/constitution-user.md`에 저장됩니다. 이 파일을 직접 편집할 수도 있습니다.

**2. 정책 컴파일:**```bash
ironcurtain compile-policy

헌법을 결정적 규칙으로 변환하고, 테스트 시나리오를 생성하며, 이를 검증합니다. 컴파일된 산출물은 ~/.ironcurtain/generated/에 저장됩니다.

페르소나

페르소나는 이름이 지정된 정책 프로필입니다 — 각각은 헌법, 컴파일된 정책, 영구 작업 공간, 의미론적 메모리를 하나로 묶습니다. 다양한 역할이나 접근 수준을 가진 에이전트를 실행하는 데 사용하세요.```bash ironcurtain persona create my-assistant # Create a persona ironcurtain persona compile my-assistant # Compile its policy ironcurtain start --persona my-assistant "Check my calendar"

root@kitploit:~
mux 모드에서 `/new my-assistant`는 해당 페르소나를 사용하는 탭을 생성합니다. 페르소나는 cron 작업에도 할당할 수 있습니다. 예약 작업 구성은 [DAEMON.md](https://github.com/provos/ironcurtain/blob/HEAD/DAEMON.md)를 참조하세요.

페르소나는 [웹 UI](https://github.com/provos/ironcurtain/blob/HEAD/DAEMON.md#persona-policy-management)에서도 관리할 수 있습니다 — 컨스티튜션을 탐색·생성·편집하고, 실시간 진행 상황으로 정책을 컴파일할 수 있습니다. 정책은 보안 경계이므로, 데몬이 `--allow-policy-mutation`(기본적으로 꺼짐)으로 시작되지 않는 한 웹 UI의 변경 제어는 읽기 전용입니다.

### 스킬

`~/.ironcurtain/skills/<name>/` 아래에 SKILL.md 패키지를 배치하면 목적별 지침(헬퍼 스크립트, 결정적 검사, 도메인 지식)을 모든 Docker 에이전트 세션에서 사용할 수 있습니다. 병합된 세트는 번들별 호스트 디렉터리에 스테이징된 후, 컨테이너 내 활성 에이전트의 네이티브 디스커버리 경로에 **읽기 전용**으로 바인드 마운트됩니다 — Claude Code는 `--add-dir`을 통해 스테이징 디렉터리를 가리키고, Goose는 `~/.config/goose/skills/<name>/SKILL.md`를 스캔합니다. 에이전트는 이를 자동으로 발견하며, 각 스킬의 frontmatter 설명을 바탕으로 언제 읽을지 결정합니다. SKILL.md _형식_은 Claude Code, Goose, Codex가 채택한 개방형 표준이며, _디스커버리 경로_만 에이전트마다 다릅니다. 워크플로는 워크플로 패키지 안에 상태별 스킬을 포함할 수 있습니다 — [WORKFLOWS.md](https://github.com/provos/ironcurtain/blob/HEAD/WORKFLOWS.md#skills)를 참조하세요.

## 정책: 컨스티튜션 → 집행

평이한 영어로 의도를 작성하면 IronCurtain이 이를 결정적 규칙으로 컴파일합니다:```
constitution.md → [Annotate] → [Compile] → [Resolve Lists] → [Generate Scenarios] → [Verify & Repair]
                      │              │              │                  │                     │
                      ▼              ▼              ▼                  ▼                     ▼
              tool-annotations  compiled-policy  dynamic-lists   test-scenarios       verified policy
                  .json            .json            .json            .json          (or build failure)
  1. 주석(Annotate) — 각 MCP 도구의 인자를 역할(읽기 경로, 쓰기 경로, 삭제 경로, 없음)별로 분류합니다.
  2. 컴파일(Compile) — 영어로 작성된 헌법을 결정적인 if/then 규칙으로 변환합니다. 범주형 참조("주요 뉴스 사이트", "내 연락처")는 @list-name 기호 참조로 출력됩니다.
  3. 목록 해결(Resolve Lists) — 기호 목록을 LLM 지식 또는 MCP 도구 사용(예: 연락처 데이터베이스 조회)을 통해 구체적인 값으로 해석합니다. dynamic-lists.json에 기록되며 사용자가 편집할 수 있습니다. 목록이 없으면 건너뜁니다.
  4. 시나리오 생성(Generate Scenarios) — 헌법과 필수 수기 작성 불변 테스트를 바탕으로 테스트 시나리오를 만듭니다.
  5. 검증 및 수리(Verify & Repair) — 실제 정책 엔진에 대해 시나리오를 실행합니다. LLM 판정자가 실패를 분석하고 목표된 수리를 생성합니다(최대 2회). 정책을 검증할 수 없으면 빌드가 실패합니다.

모든 산출물은 콘텐츠 해시로 캐시됩니다. 변경된 입력만 다시 컴파일을 트리거합니다.

컴파일된 규칙의 형태

다음과 같은 헌법 조항은:```markdown

  • The agent may perform read-only git operations (status, diff, log) within the sandbox without approval.
  • The agent must receive human approval before git push, pull, fetch, or any remote-contacting operation.
root@kitploit:~
컴파일 대상:```json
[
  { "tool": "git_status", "decision": "allow", "condition": { "directory": { "within": "$SANDBOX" } } },
  { "tool": "git_diff", "decision": "allow", "condition": { "directory": { "within": "$SANDBOX" } } },
  { "tool": "git_push", "decision": "escalate", "reason": "Remote-contacting git operations require human approval" }
]

명시적인 allow 또는 escalate 규칙과 일치하지 않는 모든 호출은 기본적으로 거부됩니다.```bash ironcurtain annotate-tools --server filesystem # Annotate one server (merge with existing) ironcurtain annotate-tools --all # Re-annotate all servers ironcurtain compile-policy # Compile constitution into rules and verify ironcurtain refresh-lists # Re-resolve dynamic lists without full recompilation ironcurtain refresh-lists --list major-news # Refresh a single list

root@kitploit:~
생성된 `~/.ironcurtain/generated/compiled-policy.json`을 검토하세요 — 이는 런타임에 적용되는 정확한 규칙입니다.

## 설정

IronCurtain은 설정 및 세션 데이터를 `~/.ironcurtain/`에 저장합니다:```
~/.ironcurtain/
├── config.json              # User configuration
├── constitution.md          # User-local base constitution (overrides package default)
├── constitution-user.md     # Your policy customizations (generated by customize-policy)
├── generated/               # User-compiled policy artifacts (overrides package defaults)
├── personas/                # Persona directories (constitution, policy, workspace, memory)
├── skills/                  # User-global SKILL.md packages, mounted into every Docker session
├── jobs/                    # Cron job definitions, workspaces, and run records
├── sessions/
│   └── {sessionId}/
│       ├── sandbox/         # Per-session filesystem sandbox
│       ├── escalations/     # File-based IPC for human approval
│       ├── audit.jsonl      # Per-session audit log
│       └── session.log      # Diagnostics
└── workflow-runs/           # Shared-container workflow runs (see below)

단일 세션 실행(ironcurtain start, mux 탭, cron 작업)은 sessions/ 아래에 기록됩니다. 공유 컨테이너 워크플로 실행은 대신 workflow-runs/ 아래에 기록됩니다 — 다음 섹션을 참조하세요.

워크플로 실행 레이아웃

워크플로 정의는 YAML에서 settings.sharedContainer: true를 설정하여 공유 Docker 컨테이너를 선택할 수 있습니다. 해당 모드에서는 모든 에이전트 상태가 동일한 장수명 컨테이너 안에서 실행되며 하나의 정책 엔진 인스턴스를 공유합니다. 상태 사이에서 오케스트레이터는 활성 정책을 핫스왑하여 각 페르소나가 자신의 규칙을 볼 수 있도록 합니다. 실행에 대한 모든 아티팩트는 단일 트리에 저장됩니다.``` ~/.ironcurtain/workflow-runs// ├── audit.jsonl # Persona-tagged append-only audit ├── messages.jsonl # Orchestrator message log ├── workspace/ # Agent workspace (filesystem MCP root) ├── bundle/ # Shared container support (claude-state, orientation, sockets, escalations, system-prompt.txt) ├── states/ │ └── ./ # session.log + session-metadata.json per invocation └── proxy-control.sock # Coordinator UDS for policy hot-swap

root@kitploit:~
공유 컨테이너 워크플로를 실행할 때는 `~/.ironcurtain/sessions/` 아래에 세션별 항목이 생성되지 않습니다. 사용자에게 표시되는 명령(`ironcurtain workflow start|resume|inspect|list`)은 변경되지 않았습니다. 워크플로 정의 작성 및 전체 수명 주기에 대해서는 [WORKFLOWS.md](https://github.com/provos/ironcurtain/blob/HEAD/WORKFLOWS.md)를 참조하세요.

구성을 대화형으로 편집:```bash
ironcurtain config

Key configuration areas: models and API keys, resource budgets (token/step/time/cost limits), auto-approve escalations, web search provider, audit redaction, and memory server LLM settings. See CONFIG.md for the full reference.

To route LLM traffic through a gateway like LiteLLM or OpenRouter (in both Code Mode and Docker Agent Mode), see MODEL_ROUTING.md.

Route Docker agents through model-provider profiles (e.g. GLM-5.2 via OpenRouter, no sidecar) with ironcurtain config → Model Providers, then pick a profile at /new or with --provider-profile — see MODEL_ROUTING.md.

Built-in Capabilities

IronCurtain ships with six pre-configured MCP servers. All tool calls (except memory) are governed by your compiled policy.

Read-only operations are allowed by default policy; mutations (writes, pushes, PR creation) escalate for human approval. Tools use server.tool naming (e.g., filesystem.read_file, memory.recall). See ADDING_MCP_SERVERS.md to add your own.

Network Passthrough (Docker Agent Mode)

Docker Agent Mode에서 컨테이너는 네트워크에 접근할 수 없습니다. 모든 트래픽은 IronCurtain의 MITM 프록시를 통과합니다. 기본적으로 LLM 제공자 도메인만 접근 가능합니다. 에이전트는 런타임에 proxy 가상 MCP 서버(add_proxy_domain)를 통해 추가 도메인에 대한 접근을 요청할 수 있습니다. 각 요청은 에스컬레이션 흐름을 통해 사람의 승인을 받아야 합니다.

승인된 도메인은 원시 패스스루 터널을 얻습니다. HTTP, HTTPS, WebSocket 연결은 콘텐츠 검사나 자격 증명 주입 없이 전달됩니다. 이는 에이전트에 더 큰 유용성(제3자 API 호출, 외부 서비스에서 데이터 스트리밍)을 제공하지만 해당 도메인으로의 트래픽은 중재되지 않음을 의미합니다. 위협 모델은 SECURITY_CONCERNS.md 섹션 2b-i, 사용 세부 사항은 DEVELOPER_GUIDE.md를 참조하세요.

Security Model

IronCurtain은 특정 위협 모델을 중심으로 설계되었습니다: LLM이 악성으로 변하는 경우. 이는 프롬프트 주입(악성 이메일이나 웹 페이지가 에이전트를 탈취) 또는 다중 턴 표류(에이전트가 긴 세션 동안 사용자의 의도에서 점차 벗어나는 것)를 통해 발생할 수 있습니다.

What IronCurtain enforces

  • 파일시스템 격리 — 심볼릭 링크 인식 경로 해석으로 경로 탐색 및 심볼릭 링크 탈출 공격을 방지합니다.
  • 도구별 정책 — 각 MCP 도구 호출은 컴파일된 규칙에 대해 평가됩니다. 정책 엔진은 도구 인수를 역할(read-path, write-path, delete-path)별로 분류하여 세분화된 결정을 내립니다.
  • 구조적 불변식 — 일부 보호 기능은 하드코딩되어 있으며 constitution에 의해 재정의될 수 없습니다. 에이전트는 자신의 정책 파일, 감사 로그 또는 구성을 절대 수정할 수 없습니다.
  • 인간 에스컬레이션 — 정책이 "escalate"를 명시하면 에이전트는 일시 중지하고 사용자가 명시적으로 승인하거나 거부해야 합니다. 선택적으로 LLM 기반 자동 승인기가 명확한 경우를 처리합니다(CONFIG.md 참조).
  • 감사 추적 — 모든 도구 호출과 정책 결정은 추가 전용 JSONL 감사 로그에 기록됩니다.
  • 리소스 제한 — 토큰, 단계, 시간 및 비용 예산으로 세션이 통제를 벗어나 실행되는 것을 방지합니다.

Known limitations

이것은 연구용 프로토타입입니다. 알려진 공백은 다음과 같습니다:

  • 정책 컴파일 정확도 — LLM 기반 컴파일러가 constitution의 의도를 잘못 해석할 수 있습니다. 검증 파이프라인이 많은 오류를 잡아내지만 완전하지는 않습니다. 컴파일된 compiled-policy.json을 항상 검토하세요.
  • V8 isolate 경계 — Code Mode는 OS 수준 가상화가 아닌 V8 isolate를 사용합니다. V8 제로데이 취약점이 탈출을 허용할 수 있습니다.
  • 아웃바운드 콘텐츠 검사 없음 — 파일 쓰기가 허용된 에이전트는 민감한 데이터를 인코딩하여 콘텐츠 수준 제어를 우회할 수 있습니다. 계획: 아웃바운드 콘텐츠에 대한 LLM 기반 가독성 검사.
  • 에스컬레이션 피로 — 거짓 긍정 에스컬레이션이 너무 많으면 습관적 승인으로 이어질 수 있습니다. 불필요한 프롬프트를 최소화하도록 constitution을 조정하세요.

자세한 위협 분석은 docs/SECURITY_CONCERNS.md를 참조하세요.

Troubleshooting

Development

개발```bash

npm test # Run all tests npm test -- test/policy-engine.test.ts # Run a single test file npm test -- -t "denies delete_file" # Run a single test by name npm run lint # Lint npm run build # TypeScript compilation + asset copy

root@kitploit:~
전체 테스트 가이드는 [TESTING.md](https://github.com/provos/ironcurtain/blob/HEAD/TESTING.md)를 참조하세요. 통합 테스트 플래그와 규칙을 포함합니다.

### 프로젝트 구조```
src/
├── index.ts                    # Entry point
├── cli.ts                      # CLI command dispatcher
├── config/                     # Configuration loading, constitution, MCP server definitions
├── session/                    # Multi-turn session management, budgets, loop detection
├── sandbox/                    # V8 isolated execution environment
├── trusted-process/            # Policy engine, MCP proxy, audit log, escalation handler
├── pipeline/                   # Constitution → policy compilation pipeline
├── escalation/                 # Escalation listener: session registry, TUI dashboard, state
├── mux/                        # Terminal multiplexer: PTY bridge, renderer, trusted input
├── persona/                    # Persona management (create, compile, resolve)
├── memory/                     # Memory server integration (config, annotations, path resolution)
├── signal/                     # Signal messaging transport (bot daemon, setup, formatting)
├── daemon/                     # Unified daemon (Signal + cron scheduler, control socket)
├── cron/                       # Cron job management (scheduler, job store, git sync, policy)
├── docker/                     # Docker agent mode, PTY session, MITM proxy, registry proxy
├── workflow/                   # Multi-agent workflow engine (orchestrator, state machine, gates)
├── web-ui/                     # Web UI backend (JSON-RPC dispatch, event bus, workflow manager)
├── servers/                    # Built-in MCP servers (fetch, web search providers)
└── types/                      # Shared type definitions
packages/
└── memory-mcp-server/          # Standalone memory MCP server (publishable npm package)

라이선스

Apache-2.0

도구 다운로드
ServerToolsKey capabilities
Filesystem14파일 읽기, 쓰기, 편집, 검색; 디렉터리 트리; 이동; diff 계산
Git28전체 git 워크플로: status, diff, log, commit, branch, push/pull/fetch, clone, stash, blame
Fetch2HTTP GET 및 HTML-to-markdown 변환; 웹 검색(Brave, Tavily, SerpAPI)
GitHub41Issues, PR, 코드 검색, 리뷰 — ghcr.io/github/github-mcp-server 사용, GitHub 개인 액세스 토큰 필요
Google Workspace128Gmail, Calendar, Drive, Docs, Sheets — ironcurtain auth를 통한 OAuth 설정 필요
Memory5하이브리드 벡터+키워드 검색, LLM 요약, 자동 압축을 지원하는 영구 의미 메모리. 페르소나 및 cron 세션에서 활성화됩니다.
IssueGuidance
API 키 누락환경 변수(ANTHROPIC_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, 또는 OPENAI_API_KEY)를 설정하거나 해당 키를 ~/.ironcurtain/config.json에 추가하세요.
샌드박스 사용 불가OS 수준 샌드박싱에는 bubblewrap과 socat이 필요합니다. 둘 다 설치하거나 개발 중에는 MCP 서버 구성에서 "sandboxPolicy": "warn"으로 설정하세요.
예산 소진~/.ironcurtain/config.json의 resourceBudget에서 한도를 조정하세요. 개별 한도를 null로 설정하면 비활성화됩니다.
Node 버전 오류지원되는 Node.js 라인은 22, 24, 26입니다. IronCurtain이 테스트하는 짝수 메이저 라인(isolated-vm)입니다. 24와 26은 사전 빌드된 바이너리를 설치하고, Node 22는 isolated-vm을 소스에서 컴파일하므로 C/C++ 툴체인이 필요합니다. 홀수 라인(23, 25)은 테스트되지 않았으며 ironcurtain doctor가 하드 실패 대신 경고로 표시합니다.
정책이 의도와 일치하지 않음생성된 규칙을 보려면 compiled-policy.json을 검토하세요. ironcurtain customize-policy를 실행하여 constitution을 다듬은 다음 ironcurtain compile-policy를 실행하여 다시 컴파일하세요. 구체적인 표현이 더 나은 규칙을 생성합니다. 모호한 표현은 모호한 정책으로 이어집니다.
자동 승인 트리거 안 됨자동 승인기는 사용자의 메시지가 해당 작업을 명시적으로 승인한 경우에만 승인합니다(예: git_push의 경우 "push to origin"). 모호한 메시지는 항상 인간 검토로 에스컬레이션됩니다. config.json에서 autoApprove.enabled가 true인지 확인하세요.
종료 후 PTY/mux 터미널 깨짐해당 터미널에서 reset을 실행하여 일반 모드로 복원하세요. 이는 프로세스가 비정상 종료되어 raw 모드가 복원되지 않을 때 필요합니다.
Mux/listener: "already running"한 번에 하나의 mux 또는 에스컬레이션 리스너만 실행할 수 있습니다. ~/.ironcurtain/escalation-listener.lock의 잠금은 이전 프로세스가 종료된 경우 자동으로 해제됩니다. 지속되면 잠금 파일의 PID를 확인하세요.
Signal 봇 응답 없음signal-cli 컨테이너가 실행 중인지 확인하세요(docker ps | grep ironcurtain-signal). Signal이 구성되어 있는지 확인하세요(ironcurtain setup-signal). 자세한 문제 해결은 TRANSPORT.md를 참조하세요.