freshcrate
Skin:/
Home > MCP Servers > ironcurtain

ironcurtain

A secure* runtime for autonomous AI agents. Policy from plain-English constitutions. (*https://ironcurtain.dev)

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

A secure* runtime for autonomous AI agents. Policy from plain-English constitutions. (*https://ironcurtain.dev)

README

IronCurtain

CI npm License Website

A secure* runtime for autonomous AI agents, where security policy is derived from a human-readable constitution.

*When someone writes "secure," you should immediately be skeptical. What do we mean by secure?

Warning

Research Prototype. IronCurtain is an early-stage research project exploring how to make AI agents safe enough to be genuinely useful. APIs, configuration formats, and architecture may change. Contributions and feedback are welcome.

Demo

IronCurtain mux demo: trusted input from command mode enables auto-approval of git clone and git push

The agent is asked to clone a repository and push changes. Both git_clone and git_push are escalated by the policy engine, but the auto-approver approves them automatically โ€” the user's trusted input from command mode (Ctrl-A) provided clear intent, so no manual /approve was needed.

The Problem

Autonomous AI agents can manage files, run git commands, send messages, and interact with APIs on your behalf. But today's agent frameworks give the agent the same privileges as the user such as full access to the filesystem, credentials, and network. Security researchers call this ambient authority, and it means a single prompt injection or multi-turn drift can cause an agent to delete files, exfiltrate data, or push malicious code.

The common response is to either restrict agents to a narrow sandbox (limiting their usefulness) or to ask the user to approve every action (limiting their autonomy). Neither is satisfactory.

The Approach

IronCurtain takes a different path: express your security intent in plain English, then let the system figure out enforcement.

You write a constitution which is a short document describing what your agent is and isn't allowed to do. IronCurtain compiles this into a deterministic security policy using an LLM pipeline, validates the compiled rules against generated test scenarios, and then enforces the policy at runtime on every tool call. The result is an agent that can work autonomously within boundaries you define in natural language.

The key ideas:

  • The agent is untrusted. IronCurtain assumes the LLM may be compromised by prompt injection or drift. Security does not depend on the model "being good."
  • English in, enforcement out. You write intent ("no destructive git operations without approval"); the system compiles it into deterministic rules that are enforced without further LLM involvement at runtime.
  • Semantic interposition. Instead of giving the agent raw system access, all interactions go through MCP servers (filesystem, git, etc.). Every tool call passes through a policy engine that can allow, deny, or escalate to the user for approval.
  • Defense in depth. Agent code runs in a V8 isolate with no direct access to the host. The only way out is through semantically meaningful MCP tool calls and every one is checked against policy.

Architecture

IronCurtain supports two session modes with different trust models:

  • Builtin Agent (Code Mode) โ€” IronCurtain's own LLM agent writes TypeScript snippets that execute in a V8 sandbox. IronCurtain controls the agent, the sandbox, and the policy engine. Every tool call exits the sandbox as a structured MCP request, passes through the policy engine (allow / deny / escalate), and only then reaches the real MCP server.

  • Docker Agent Mode โ€” An external agent (Claude Code, Goose, etc.) runs inside a Docker container with no network access. IronCurtain mediates the external effects: LLM API calls pass through a TLS-terminating MITM proxy (host allowlist, fake-to-real key swap), MCP tool calls pass through the same policy engine, and package installations (npm/PyPI) go through a validating registry proxy.

In both modes, the agent is untrusted. Security does not depend on the model following instructions โ€” it is enforced at the boundary.

See SANDBOXING.md for the full architecture with diagrams, layer-by-layer trust analysis, and macOS platform notes.

Quick Start

Prerequisites

  • Node.js 22+ (required by isolated-vm; maximum Node 25)
  • Docker โ€” not required but strongly recommended for Docker Agent Mode, which provides the strongest isolation
  • An API key for at least one LLM provider (Anthropic, Google, or OpenAI)

Install

As a global CLI tool (end users):

npm install -g @provos/ironcurtain

From source (development):

git clone https://github.com/provos/ironcurtain.git
cd ironcurtain
npm install

One-time setup

1. Set your API key:

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 (runs automatically on first ironcurtain start, or explicitly):

ironcurtain setup

Walks you through GitHub token setup, web search provider, model selection, and other settings. Creates ~/.ironcurtain/config.json with your choices.

Running IronCurtain

IronCurtain ships with a default policy geared towards the developer experience โ€” read-only operations are allowed, mutations (writes, pushes, PR creation) escalate for human approval. You can start using it immediately after setup.

Terminal multiplexer (recommended)

The recommended way to use IronCurtain. It gives you the full power of your agent's interactive TUI (Claude Code or Goose) while IronCurtain mediates every tool call through its policy engine โ€” all in a single terminal.

ironcurtain mux

Key capabilities:

  • Full agent TUI โ€” The agent runs in a PTY inside a Docker container with no network access. You interact with it exactly as if it were running locally.
  • Inline escalation handling โ€” When a tool call needs approval, an escalation picker overlays the viewport with single-key actions (a/d/w for approve/deny/whitelist). Use /approve+ N to whitelist a domain or path for the rest of the session.
  • Trusted user input โ€” Text typed in command mode (Ctrl-A) is captured on the host side before entering the container. This creates a verified intent signal that the auto-approver can use โ€” e.g., typing "push my changes to origin" will auto-approve a subsequent git_push escalation.
  • Tab management โ€” Spawn multiple concurrent sessions (/new), switch between them (/tab N, Alt-1..9), close them (/close). Multiple mux instances can run in parallel.

See DEVELOPER_GUIDE.md for the full walkthrough: input modes, trusted input security model, escalation workflow, and keyboard reference.

Builtin agent (no Docker required)

For quick tasks or environments without Docker, IronCurtain's builtin agent runs entirely locally in a V8 sandbox:

ironcurtain start                                    # Interactive multi-turn session
ironcurtain start "Summarize the files in ./src"     # Single-shot mode
ironcurtain start -w ./my-project "Fix the tests"    # Workspace mode
ironcurtain start --persona my-assistant "Check my email"  # Use a persona

Other running modes

IronCurtain also supports PTY mode, session resume (--resume <session-id>), a Signal messaging transport for mobile approval, and a daemon mode for scheduled cron jobs. The daemon has an optional web UI (--web-ui) for browser-based monitoring and escalation handling. See RUNNING_MODES.md for details.

Multi-agent workflows

IronCurtain can orchestrate multiple AI agents through structured workflows -- plan, design, implement, and review cycles with human gates for quality control at each stage. Each agent runs in its own Docker container with role-specific policy boundaries, and the workflow engine manages state transitions, artifact passing, and checkpointing automatically. Tools like Amazon Kiro and Google Jules offer similar multi-agent orchestration for coding tasks, but IronCurtain's workflow system is open source, runs entirely on your machine, enforces per-agent security policies via its constitution-based policy engine, and works with any Docker-containerized agent.

ironcurtain workflow start design-and-code \
  "Build a REST API with authentication" --model anthropic:claude-haiku-4-5

Workflows can also be started, monitored, and reviewed from the web UI (ironcurtain daemon --web-ui). See WORKFLOWS.md for the full documentation.

Customizing Your Policy

The default policy works well for general development, but you can tailor it to your workflow:

1. Customize your constitution (optional but recommended):

ironcurtain customize-policy

An LLM-assisted conversation that generates a constitution tailored to your workflow, saved to ~/.ironcurtain/constitution-user.md. You can also edit this file directly.

2. Compile the policy:

ironcurtain compile-policy

Translates your constitution into deterministic rules, generates test scenarios, and verifies them. Compiled artifacts go to ~/.ironcurtain/generated/.

Personas

Personas are named policy profiles โ€” each bundles a constitution, compiled policy, persistent workspace, and semantic memory. Use them to run agents with different roles or access levels.

ironcurtain persona create my-assistant    # Create a persona
ironcurtain persona compile my-assistant   # Compile its policy
ironcurtain start --persona my-assistant "Check my calendar"

In mux mode, /new my-assistant spawns a tab using that persona. Personas can also be assigned to cron jobs. See DAEMON.md for scheduled job configuration.

Policy: Constitution โ†’ Enforcement

You write intent in plain English; IronCurtain compiles it into deterministic rules:

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 โ€” Classify each MCP tool's arguments by role (read-path, write-path, delete-path, none).
  2. Compile โ€” Translate the English constitution into deterministic if/then rules. Categorical references ("major news sites", "my contacts") are emitted as @list-name symbolic references.
  3. Resolve Lists โ€” Resolve symbolic lists to concrete values via LLM knowledge or MCP tool-use (e.g., querying a contacts database). Written to dynamic-lists.json, user-editable. Skipped when no lists are present.
  4. Generate Scenarios โ€” Create test scenarios from the constitution plus mandatory handwritten invariant tests.
  5. Verify & Repair โ€” Run scenarios against the real policy engine. An LLM judge analyzes failures and generates targeted repairs (up to 2 rounds). Build fails if the policy cannot be verified.

All artifacts are content-hash cached โ€” only changed inputs trigger recompilation.

What compiled rules look like

A constitution clause like:

- 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.

compiles to:

[
  { "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" }
]

Any call that doesn't match an explicit allow or escalate rule is denied by default.

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

Review the generated ~/.ironcurtain/generated/compiled-policy.json โ€” these are the exact rules enforced at runtime.

Configuration

IronCurtain stores configuration and session data in ~/.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)
โ”œโ”€โ”€ 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)

Single-session runs (ironcurtain start, mux tabs, cron jobs) write under sessions/. Shared-container workflow runs write under workflow-runs/ instead โ€” see the next section.

Workflow run layout

A workflow definition can opt in to a shared Docker container by setting settings.sharedContainer: true in its YAML. In that mode every agent state runs inside the same long-lived container and shares one policy engine instance; between states the orchestrator hot-swaps the active policy so each persona sees its own rules. All artifacts for the run land in a single tree:

~/.ironcurtain/workflow-runs/<workflowId>/
โ”œโ”€โ”€ 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/
โ”‚   โ””โ”€โ”€ <stateId>.<visitCount>/   # session.log + session-metadata.json per invocation
โ””โ”€โ”€ proxy-control.sock       # Coordinator UDS for policy hot-swap

No per-session entries are created under ~/.ironcurtain/sessions/ for a shared-container workflow run. User-visible commands (ironcurtain workflow start|resume|inspect|list) are unchanged. See WORKFLOWS.md for authoring workflow definitions and the full lifecycle.

Edit configuration interactively:

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.

Built-in Capabilities

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

Server Tools Key capabilities
Filesystem 14 Read, write, edit, search files; directory tree; move; diff calculation
Git 28 Full git workflow: status, diff, log, commit, branch, push/pull/fetch, clone, stash, blame
Fetch 2 HTTP GET with HTML-to-markdown conversion; web search (Brave, Tavily, SerpAPI)
GitHub 41 Issues, PRs, code search, reviews via ghcr.io/github/github-mcp-server; requires a GitHub personal access token
Google Workspace 128 Gmail, Calendar, Drive, Docs, Sheets โ€” requires OAuth setup via ironcurtain auth
Memory 5 Persistent semantic memory with hybrid vector+keyword search, LLM summarization, and automatic compaction. Enabled for persona and cron sessions.

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)

In Docker Agent Mode, the container has no network access โ€” all traffic goes through IronCurtain's MITM proxy. By default, only LLM provider domains are reachable. The agent can request access to additional domains at runtime via the proxy virtual MCP server (add_proxy_domain). Each request requires human approval via the escalation flow.

Approved domains get a raw passthrough tunnel โ€” HTTP, HTTPS, and WebSocket connections are forwarded without content inspection or credential injection. This gives the agent greater utility (calling third-party APIs, streaming data from external services) but means traffic to those domains is unmediated. See SECURITY_CONCERNS.md Section 2b-i for the threat model and DEVELOPER_GUIDE.md for usage details.

Security Model

IronCurtain is designed around a specific threat model: the LLM goes rogue. This can happen through prompt injection (a malicious email or web page hijacks the agent) or through multi-turn drift (the agent gradually deviates from the user's intent over a long session).

What IronCurtain enforces

  • Filesystem containment โ€” Symlink-aware path resolution prevents path traversal and symlink-escape attacks.
  • Per-tool policy โ€” Each MCP tool call is evaluated against compiled rules. The policy engine classifies tool arguments by role (read-path, write-path, delete-path) to make fine-grained decisions.
  • Structural invariants โ€” Certain protections are hardcoded and cannot be overridden by the constitution: the agent can never modify its own policy files, audit logs, or configuration.
  • Human escalation โ€” When policy says "escalate," the agent pauses and the user must explicitly approve or deny. Optionally, an LLM-based auto-approver handles unambiguous cases (see CONFIG.md).
  • Audit trail โ€” Every tool call and policy decision is logged to an append-only JSONL audit log.
  • Resource limits โ€” Token, step, time, and cost budgets prevent runaway sessions.

Known limitations

This is a research prototype. Known gaps include:

  • Policy compilation fidelity โ€” The LLM-based compiler can misinterpret constitution intent. The verification pipeline catches many errors but is not exhaustive. Always review the compiled compiled-policy.json.
  • V8 isolate boundaries โ€” Code Mode uses V8 isolates, not OS-level virtualization. A V8 zero-day could allow escape.
  • No outbound content inspection โ€” An agent allowed to write files could encode sensitive data to bypass content-level controls. Planned: LLM-based intelligibility checks on outbound content.
  • Escalation fatigue โ€” Too many false-positive escalations can lead to habitual approval. Tune your constitution to minimize unnecessary prompts.

See docs/SECURITY_CONCERNS.md for a detailed threat analysis.

Troubleshooting

Issue Guidance
Missing API key Set the environment variable (ANTHROPIC_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, or OPENAI_API_KEY) or add the corresponding key to ~/.ironcurtain/config.json.
Sandbox unavailable OS-level sandboxing requires bubblewrap and socat. Install both, or set "sandboxPolicy": "warn" in your MCP server config for development.
Budget exhausted Adjust limits in ~/.ironcurtain/config.json under resourceBudget. Set any individual limit to null to disable it.
Node version errors Node.js 22+ is required (isolated-vm needs >=22.0.0). Maximum supported is Node 25 (<26).
Policy doesn't match intent Review compiled-policy.json to see the generated rules. Run ironcurtain customize-policy to refine your constitution, then ironcurtain compile-policy to recompile. Specific wording produces better rules โ€” vague phrasing leads to vague policy.
Auto-approve not triggering The auto-approver only approves when the user's message explicitly authorizes the action (e.g., "push to origin" for git_push). Vague messages always escalate to human review. Verify autoApprove.enabled is true in config.json.
PTY/mux terminal garbled after exit Run reset in that terminal to restore normal mode. This is needed when the process is killed ungracefully and raw mode is not restored.
Mux/listener: "already running" Only one mux or escalation-listener can run at a time. The lock at ~/.ironcurtain/escalation-listener.lock is auto-cleared if the previous process is dead. If it persists, check the PID in the lock file.
Signal bot not responding Verify the signal-cli container is running (docker ps | grep ironcurtain-signal). Check that Signal is configured (ironcurtain setup-signal). See TRANSPORT.md for detailed troubleshooting.

Development

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

See TESTING.md for the full testing guide, including integration test flags and conventions.

Project Structure

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)

License

Apache-2.0

Release History

VersionChangesUrgencyDate
v0.11.0 ### Features - **Vulnerability discovery workflow** โ€” the marquee 0.11.0 feature: an orchestrator-driven, hub-and-spoke FSM that hunts memory-safety and logic bugs in native code under a user-supplied threat model. **Run it from the web UI** (`ironcurtain daemon --web-ui` โ†’ Workflows โ†’ New run): the visual state-machine graph, per-state agent-message timeline, gate review panel, artifact browser, and live escalation modal are the intended way to follow a multi-hour discovery run โ€” agent sessioHigh5/18/2026
v0.10.0 ### Features - **Custom API gateway support** โ€” route LLM traffic through API gateways (LiteLLM, Ollama, etc.) via `ANTHROPIC_BASE_URL`, `OPENAI_BASE_URL`, and `GOOGLE_API_BASE_URL` environment variables or config file fields; the MITM proxy intercepts container traffic as usual but forwards upstream to the custom gateway; Code Mode passes `baseURL` directly to AI SDK providers (#148) - **`--model` CLI flag** โ€” override the agent model on `start` and `mux` commands (e.g., `--model jaahas/qwen3High4/2/2026
v0.9.1 ### Fixes - **macOS mux text selection** โ€” replace X11 mouse tracking with alternate scroll mode on macOS so native text selection (Shift+drag) works in Terminal.app; scroll wheel works in command mode via arrow key mapping (#130) - **macOS OAuth Keychain refresh** โ€” refresh expired OAuth tokens from the macOS Keychain instead of silently falling back to API key auth; write refreshed tokens back to the Keychain via `security add-generic-password -U`; enable `OAuthTokenManager` self-refresh forMedium3/25/2026
v0.9.0 ### Features - **Third-party OAuth onboarding** โ€” full OAuth 2.0 flow for MCP servers with PKCE, callback server, token store with auto-refresh, interactive scope picker for Google services, `ironcurtain auth` CLI with setup guides, import, revocation, and incremental consent (#108) - **Google Workspace MCP server integration** โ€” credential-file rendezvous pattern (access-token-only, no refresh token in MCP server), `TokenFileRefresher` with proactive refresh, strict filesystem sandbox with `dMedium3/24/2026
v0.8.0 ### Features - **Secure package installation proxy** โ€” npm and PyPI registries are proxied through the MITM layer with metadata filtering (age-gate quarantine, allow/denylists), tarball backstop validation, and per-package audit logging; containers can now `npm install` and `pip install` packages at runtime without direct network access (#101) - **Debian apt registry proxy** โ€” `apt-get install` works inside Docker containers by proxying `deb.debian.org` and `security.debian.org` through the MILow3/15/2026
memory-mcp-server/v0.1.3## What's Changed * feat: integrate memory MCP server with personas and sessions by @provos in https://github.com/provos/ironcurtain/pull/98 * feat: server-namespace tool naming with prefix stripping by @provos in https://github.com/provos/ironcurtain/pull/102 * feat: secure package installation proxy for Docker agent mode by @provos in https://github.com/provos/ironcurtain/pull/101 * fix: memory_context missing memories and LLM config passthrough by @provos in https://github.com/provos/ironcurtLow3/15/2026
memory-mcp-server/v0.1.2## What's Changed * fix: retry tool call after roots expansion race condition by @provos in https://github.com/provos/ironcurtain/pull/93 * feat: session resume for Docker PTY sessions by @provos in https://github.com/provos/ironcurtain/pull/94 * feat: add memory MCP server with semantic search and retrieval by @provos in https://github.com/provos/ironcurtain/pull/95 **Full Changelog**: https://github.com/provos/ironcurtain/compare/v0.7.2...memory-mcp-server/v0.1.2Low3/14/2026
v0.7.2 ### Fixes - **Mux command-mode input retention** โ€” preserve the input buffer when toggling between command mode and PTY mode with Ctrl-A; previously any typed text was lost on mode switch - **Stay in command mode after /new** โ€” spawning a new session via `/new` (quick-spawn or directory picker) now returns to command mode instead of switching to PTY mode Low3/11/2026
v0.7.1 ### Fixes - **macOS PTY session networking** โ€” reverse PTY socat direction in the sidecar so the host can reach the container's PTY socket (MCP/MITM remain containerโ†’host); skip the readiness probe for TCP since the container's socat only accepts one connection; add retry logic in `attachPty` that polls until the connection receives data; allocate dynamic host ports via `findFreePort()` to avoid collisions between concurrent PTY sessions (#89) - **Filesystem server path in PTY sessions** โ€” expLow3/10/2026
v0.7.0Release v0.7.0Low3/6/2026
v0.6.0 ### Features - **Terminal multiplexer** โ€” `ironcurtain mux` provides a terminal multiplexer for managing multiple PTY sessions with tab management (`/new`, `/tab N`, `/close`), trusted input forwarding, workspace picker (fresh sandbox or existing directory via interactive file browser), mouse wheel scrollback, and escalation overlay for informed approve/deny decisions; uses headless xterm.js with SGR attribute rendering and resize propagation - **Matrix-style splash screen** โ€” mux startup showLow3/3/2026
v0.5.1 ### Features - **Reverse path rewriting for Docker agent sessions** โ€” MCP server results containing host sandbox paths are now rewritten back to `/workspace` before reaching the agent, completing the symmetric path translation; `CONTAINER_WORKSPACE_DIR` extracted as a shared constant (#49) - **Improved Docker agent system prompt** โ€” remove bind-mount details and host path exposure, replace with clear guidance on when to use `execute_code` vs built-in tools; add attribution guidance for IronCurLow3/2/2026
v0.5.0 ### Features - **PTY mode for Docker agent sessions** โ€” `ironcurtain start --pty` provides interactive terminal access to Claude Code running inside Docker, with host-side Node.js PTY proxy bridging the user's terminal to the container via UDS (Linux) or TCP (macOS), SIGWINCH forwarding, and Ctrl-\ emergency exit (#43) - **Escalation listener TUI** โ€” `ironcurtain escalation-listener` command with a terminal dashboard that aggregates escalations across multiple concurrent PTY sessions; approve/Low3/2/2026
v0.4.1 ### Features - Progressive tool disclosure for Docker agent mode โ€” replace the full inline tool catalog (~3,150 tokens) with compact server-names-only listing (~770 tokens, 75% reduction) and on-demand `help.help()` discovery (#31) - Protect entire `~/.ironcurtain/` directory with scoped sandbox exclusion, preventing new files (e.g. CA certs) from being unprotected (#30) ### Fixes - Fix Docker agent web search โ€” the MITM proxy strips server-side tools but the prompt incorrectly told the agenLow2/27/2026
v0.4.0 ### Features - Signal messaging transport -- run IronCurtain sessions via Signal messages (#27) - macOS Docker Desktop support for Docker Agent Mode via TCP proxy transport, ARM64 base image, and `--internal` network egress restriction (#24, #25, #28) - Content-Encoding filtering in MITM proxy to reject unsupported encodings ### Improvements - Protect `.env` and user config from agent access (#23) - Cross-platform reliability fixes for audit log tailing and sandbox path resolution - Pin NodeLow2/26/2026
v0.3.1 ### Features - Web search tool with multi-provider support (Brave, Tavily, SerpAPI) - Web search configuration in interactive editor and first-start wizard - CONFIG.md documenting all configuration options ### Improvements - Strip server-side injected tools from Anthropic API requests - Fix constitution loading to fall back to bundled user constitution base - Thread sandbox directory path to policy verifier for accurate scenario generation - Add `not-allow` scenario decision type for flexiblLow2/25/2026
v0.3.0 ### Features - TLS-terminating MITM proxy for Docker Agent Mode (#17) - Docker agent broker with auto-mode selection (#14) - First-start wizard for new installations (#15) - Policy customization pipeline and default-deny model - Prompt caching (#12) - Add show-system-prompt script for MCP server tool listing ### Improvements - Enable strictTypeChecked ESLint and eliminate non-null assertions (#13) ### Docs - Update README with customize-policy workflow and current constitution - Correct miLow2/24/2026
v0.2.0 ### Features - Add Readability-based article extraction to fetch server (#11) - Allow user-local constitution override (#9) - Improve escalation timeout handling in proxy and sandbox - Implement escalation timeout for UTCP SDK client requests - Add interactive configuration command and enhance user config management - Add demo GIF and update README for enhanced visualization - Add comprehensive review instructions for copilot ### Fixes - Update Node.js engine requirement to >=20.19.0 - Move Low2/23/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

thoughtboxThoughtbox is an intention ledger for agents. Evaluate AI's decisions against its decision-making.main@2026-06-08
agent-identity-discoveryAgent Interface Discovery main@2026-06-08
better-notion-mcpMarkdown-first MCP server for Notion API - composite tools optimized for AI agentsv2.34.6
claude-team-mcp๐Ÿค– Orchestrate AI models like GPT and Claude for seamless collaboration in multi-agent development tasks with the Claude Team MCP Server.master@2026-06-07
automagik-genieSelf-evolving AI agent orchestration framework with Model Context Protocol supportv4.260606.2

More in MCP Servers

bifrostFastest enterprise AI gateway (50x faster than LiteLLM) with adaptive load balancer, cluster mode, guardrails, 1000+ models support & <100 ยตs overhead at 5k RPS.
claude-code-plugins-plus-skills423 plugins, 2,849 skills, 177 agents for Claude Code. Open-source marketplace at tonsofskills.com with the ccpi CLI package manager.
vexaOpen-source meeting transcription API for Google Meet, Microsoft Teams & Zoom. Auto-join bots, real-time WebSocket transcripts, MCP server for AI agents. Self-host or use hosted SaaS.
npcpyThe python library for research and development in NLP, multimodal LLMs, Agents, ML, Knowledge Graphs, and more.