
자율 AI 에이전트를 위한 보안* 런타임. 일반 영어로 작성된 헌법에서 정책을 수립합니다. (*https://ironcurtain.dev)
자율 AI 에이전트를 위한 안전한* 런타임으로, 보안 정책은 사람이 읽을 수 있는 헌법에서 파생됩니다.
*누군가 "안전한"이라고 쓴다면 즉시 의심해야 합니다. 안전하다는 것은 무슨 의미일까요?
[!WARNING] 연구용 프로토타입. IronCurtain은 AI 에이전트가 실제로 유용할 만큼 안전해지도록 만드는 방법을 탐구하는 초기 단계 연구 프로젝트입니다. API, 구성 형식 및 아키텍처는 변경될 수 있습니다. 기여와 피드백을 환영합니다.
에이전트는 저장소를 클론하고 변경 사항을 푸시하라는 요청을 받습니다. git_clone과 git_push 모두 정책 엔진에 의해 에스컬레이션되지만, 자동 승인기가 자동으로 승인합니다. 명령 모드(Ctrl-A)에서 사용자의 신뢰된 입력이 명확한 의도를 제공했기 때문에 수동 /approve가 필요하지 않았습니다.
자율 AI 에이전트는 사용자를 대신하여 파일을 관리하고, git 명령을 실행하고, 메시지를 보내고, API와 상호작용할 수 있습니다. 그러나 오늘날의 에이전트 프레임워크는 파일시스템, 자격 증명 및 네트워크에 대한 전체 액세스와 같이 사용자와 동일한 권한을 에이전트에 부여합니다. 보안 연구자들은 이를 환경 권한(ambient authority) 이라고 부르며, 이는 단 한 번의 프롬프트 인젝션이나 다중 턴 드리프트(multi-turn drift)로 인해 에이전트가 파일을 삭제하고, 데이터를 유출하고, 악성 코드를 푸시할 수 있음을 의미합니다.
일반적인 대응은 에이전트를 좁은 샌드박스로 제한하거나(유용성을 제한), 사용자에게 모든 작업을 승인하도록 요청하는 것(자율성을 제한) 중 하나입니다. 어느 쪽도 만족스럽지 않습니다.
IronCurtain은 다른 길을 택합니다: 보안 의도를 평범한 영어로 표현하면, 시스템이 강제 실행 방법을 파악하게 하세요.
헌법(constitution) 을 작성하세요. 이는 에이전트가 수행할 수 있는 것과 없는 것을 설명하는 짧은 문서입니다. IronCurtain은 LLM 파이프라인을 사용하여 이를 결정적 보안 정책으로 컴파일하고, 생성된 테스트 시나리오에 대해 컴파일된 규칙을 검증한 다음, 런타임에 모든 도구 호출에 대해 정책을 적용합니다. 그 결과는 사용자가 자연어로 정의한 경계 내에서 자율적으로 작업할 수 있는 에이전트입니다.
핵심 아이디어:
IronCurtain은 서로 다른 신뢰 모델을 가진 두 가지 세션 모드를 지원합니다:
내장 에이전트(코드 모드) — IronCurtain 자체 LLM 에이전트가 V8 샌드박스에서 실행되는 TypeScript 스니펫을 작성합니다. IronCurtain은 에이전트, 샌드박스 및 정책 엔진을 제어합니다. 모든 도구 호출은 구조화된 MCP 요청으로 샌드박스를 빠져나와 정책 엔진(허용 / 거부 / 에스컬레이션)을 통과한 다음에만 실제 MCP 서버에 도달합니다.
Docker 에이전트 모드 — 외부 에이전트(Claude Code, Goose 등)가 네트워크 액세스가 없는 Docker 컨테이너 내부에서 실행됩니다. IronCurtain은 외부 효과를 중재합니다: LLM API 호출은 TLS 종료 MITM 프록시(호스트 허용 목록, 가짜-실제 키 교환)를 통과하고, MCP 도구 호출은 동일한 정책 엔진을 통과하며, 패키지 설치(npm/PyPI)는 검증 레지스트리 프록시를 통해 이루어집니다.
두 모드 모두 에이전트는 신뢰할 수 없습니다. 보안은 모델이 지침을 따르는 것에 의존하지 않습니다. 경계에서 강제됩니다.
다이어그램, 계층별 신뢰 분석 및 macOS 플랫폼 참고 사항이 포함된 전체 아키텍처는 SANDBOXING.md를 참조하세요.
isolated-vm에 필요; 24와 26은 사전 빌드된 바이너리를 설치하고, Node 22는 설치 시 소스에서 컴파일하므로 C/C++ 툴체인이 필요합니다). 홀수 라인(23, 25)은 실행되지만 테스트되지 않았습니다 — ironcurtain doctor가 경고합니다.container가 대체 백엔드로 작동합니다(컨테이너당 VM; 해당 서비스가 실행 중일 때 자동으로 사용됨 — ironcurtain config의 containerRuntime 참조)글로벌 CLI 도구로 사용하는 경우(최종 사용자):```bash npm install -g @provos/ironcurtain
**소스에서 (개발):**```bash
git clone https://github.com/provos/ironcurtain.git
cd ironcurtain
npm install
1. API 키를 설정하세요:```bash export ANTHROPIC_API_KEY=sk-ant-...
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은 개발자 경험에 맞춘 기본 정책을 제공합니다 — 읽기 전용 작업은 허용되고, 변경(쓰기, 푸시, PR 생성)은 인간의 승인을 받도록 상향 조정됩니다. 설정 후 바로 사용할 수 있습니다.
IronCurtain을 사용하는 권장 방법입니다. IronCurtain이 모든 도구 호출을 정책 엔진을 통해 중재하는 동안, 에이전트의 대화형 TUI(Claude Code 또는 Goose)의 모든 기능을 단일 터미널에서 사용할 수 있습니다.```bash ironcurtain mux
**주요 기능:**
- **전체 에이전트 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/master/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와 비슷한 범위를 제공하지만, 최고 수준의 보안과 확장 가능한 워크플로우 정의 형식을 갖추고 있습니다.

웹 UI는 워크플로우 실행을 위한 의도된 인터페이스입니다. 데몬을 시작하고, 출력된 URL을 연 다음, Workflows 페이지에서 실행을 진행하세요. 위의 상태 머신 그래프는 실시간이며, 에이전트 메시지 타임라인은 마크다운 렌더링으로 스트리밍됩니다. 게이트 리뷰에는 작업 공간 + 아티팩트 브라우저가 포함되며, 과거 실행은 계속 목록에 남습니다.```bash ironcurtain daemon --web-ui
스크립팅, 자동화, 디버깅을 위한 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에서 확인하세요.
기본 정책은 일반적인 개발에 잘 작동하지만, 워크플로에 맞게 조정할 수 있습니다: