Codex
Tool checks, sandbox permission requests, and observed results.
Connect Codex ↗A firewall for coding agents
Keep medical information out of your company Slack. When your agent tries to post the contents of a medical document, Fronteira checks the message against your rule before it’s sent.
Native hooks first. MCP proxy when you need it.
medical-report.txtThe agent prepares to share its contents.
#general · Company workspaceBlock messages containing medical information in our company Slack.
deny call "mcp__company_slack__slack_send_message" when
llm_classified(args.text, "medical")
Jev or an LLM classifies the outgoing text.
The message never reaches #general.
Jev or an LLM classifies the proposed Slack message as medical. This rule blocks the send before the message reaches #general.
Matched rule Keep medical information out of Slackdeny call "mcp__company_slack__slack_send_message" when
llm_classified(args.text, "medical")
Sends the outgoing text to the configured classifier; it does not open attached documents.
01 / Connect at the boundary
Check supported actions at the agent’s boundary with native hooks, or route MCP tool calls through Fronteira’s proxy. Here’s where each policy check happens.
Check a supported outbound action before your agent runs it.
The hook sends tool arguments to Fronteira and receives a decision. The client executes the action. Hooks cover reported operations; they do not intercept every network request.
Set up native hooksRoute MCP tools through Fronteira when native hooks aren’t available.
Fronteira sits in the tool-call path. Only MCP traffic routed through this endpoint is checked; local shell and file operations stay outside the proxy.
Set up the MCP proxyBoth integrations appear in Session traces, with their client and matching rule. Hook sessions and MCP connections keep separate histories.
Tool checks, sandbox permission requests, and observed results.
Connect Codex ↗Tool checks, shell boundaries, and success or failure events.
Connect Cursor ↗Tool checks, permission requests, and success or failure events.
Connect Claude Code ↗Coverage follows each client’s hook support. Keep native sandbox controls enabled. Setup & compatibility →
02 / Make the rules yours
See what a policy can stop. Hover over, focus, or tap Blocked to see the reason and the exact rule behind each decision.
Jev or an LLM classifies the proposed Slack message as medical. This rule blocks the send before the message reaches #general.
Matched rule Keep medical information out of Slackdeny call "mcp__company_slack__slack_send_message" when
llm_classified(args.text, "medical")
Sends the outgoing text to the configured classifier; it does not open attached documents.
The agent puts a patient’s diagnosis and treatment notes into a Slack message.
Post medical-report.txt contents to #generalThe issue body contains “-----BEGIN OPENSSH PRIVATE KEY-----”. This rule blocks the issue from being created with that text.
Matched rule Keep OpenSSH private keys out of issuesdeny call "mcp__github__create_issue" when
args.body contains "-----BEGIN OPENSSH PRIVATE KEY-----"
Matches this header in the issue body; other secret formats need their own conditions.
Along with the logs, the proposed issue body includes an OpenSSH private-key header.
Create an issue with copied debug outputThe requested file path contains “/.env”. This rule denies the Read operation before the file contents are returned.
Matched rule Restrict direct reads of environment filesdeny call "claude__Read" when
args.file_path contains "/.env"
Checks the reported path for this file tool; shell reads need separate controls.
Claude Code tries to read an environment file while investigating a configuration problem.
Read /workspace/.env.productionThis is a shell permission request and its command contains “deploy --production”. Both conditions match, so Fronteira denies the request.
Matched rule Deny this production-deploy permission requestdeny call "codex__Bash" when
args._fronteira.phase is "permission" and
args.command contains "deploy --production"
Checks the reported permission event and command text; it does not identify every way to deploy.
Codex requests shell permission to run a command containing the production-deploy flag.
Request permission for deploy --productionAn earlier observed Read operation in this same session used a path containing “/private/”. This rule blocks subsequent Slack sends, whatever their message text.
Matched rule Stop Slack sends after a private-file readdeny call "mcp__company_slack__slack_send_message" when
after call "claude__Read"
where args.file_path contains "/private/"
within session
Uses observed tool history and paths; it does not classify the file’s contents.
Claude Code has read a file in /private/ during this session. The next proposed action is a Slack send.
Read /workspace/private/brief.txt → send to Slack03 / See what happened
See which agent tried to post the medical information and which rule blocked it. Review policy checks and observed outcomes across native hooks and the MCP proxy in one place.
Explore session traces →Jev or an LLM classifies the proposed Slack message as medical. This rule blocks the send before the message reaches #general.
Matched rule Keep medical information out of Slackdeny call "mcp__company_slack__slack_send_message" when
llm_classified(args.text, "medical")
Sends the outgoing text to the configured classifier; it does not open attached documents.
The backup route
Connect upstream MCP servers through one endpoint. Use the same rule engine and trace browser when native hooks aren’t available. The proxy checks only traffic routed through it.
A little more freedom. A clear boundary.
Connect an agent. Define a rule. Follow the trace.