Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion SEO.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ not needed; the assistants that do read `llms.txt` get Mintlify's.

| Page | Search intent |
|---|---|
| `index` | Execution safety for AI agents · control AI agents running in your platform · works with agents you can and can't modify · any AI agent whatsapp slack claude code cursor codex chatgpt |
| `index` | stop wrong, restricted, or malicious AI agent actions · control AI agents running in your platform · works with agents you can and can't modify · any AI agent whatsapp slack claude code cursor codex chatgpt |
| `execution-boundary` | what stops an agent action · AI agent execution boundary · how an agent execution boundary is adopted |
| `risk-check` | AI agent execution risk assessment |
| `protect-my-agent` | AI agent execution boundary, connection coverage and ctrlrun Pro/Enterprise governance for businesses |
4 changes: 2 additions & 2 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"href": "/"
},
"favicon": "/images/favicon.svg",
"description": "Execution safety for AI agents. Control consequential actions before they affect real systems.",
"description": "CTRLRun stops AI agents from taking wrong, restricted, or malicious actions in your workflows. Every action is checked against your rules before it runs.",
"navbar": {
"links": [
{
Expand All @@ -26,7 +26,7 @@
},
{
"href": "/#pro-and-enterprise",
"label": "Pro and Enterprise"
"label": "Free, Pro, Enterprise"
},
{
"href": "https://github.com/CTRLRun/ctrlrun",
Expand Down
2 changes: 1 addition & 1 deletion docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ Do not build: a consequence taxonomy — a budget names a metric, not a class ·

Exit: `ctrlrun.guarantees/v5` — G22 a budget exhausted by ambiguity refuses the next reserve until reconciled, and releases on `FAILED`, under the v0.6 multi-process standard against Postgres · G23 a scope provider that raises leaves nothing reserved and nothing executed · G24 a task-bound grant is refused on a task it does not name, by name — each with a positive control, each `N/A` with a reason on a grant that carries no budget, no scope, or no task.

**This is the gate for the homepage.** The H1 stays *Execution safety for AI agents* until v0.9 exits. After it, *action governance* is true in code, and only then does the category line move up.
**This is the gate for the category line, and it used to be the gate for the H1.** Recorded 2026-09-12: the H1 moved ahead of v0.9, to *CTRLRun stops AI agents from taking wrong, restricted, or malicious actions in your workflows*, because it states what the shipped kernel does today and claims nothing about authority. *Action governance* still waits: after v0.9 it is true in code, and only then does the category line move up.

Standards: none new.

Expand Down
22 changes: 9 additions & 13 deletions index.mdx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
title: "Execution safety for AI agents"
title: "Stop wrong, restricted, or malicious AI agent actions"
sidebarTitle: "CTRLRun"
description: "Execution safety for any AI agent you have: WhatsApp, Slack and Teams bots, Claude Code, Cursor, Codex, ChatGPT. Approval bound to the exact action."
description: "Every AI agent action is checked against your rules before it runs. Allowed ones go through, sensitive ones wait for a person, forbidden ones are blocked."
mode: "custom"
"og:title": "CTRLRun: execution safety for AI agents"
"twitter:title": "CTRLRun: execution safety for AI agents"
"og:title": "CTRLRun: stop wrong, restricted, or malicious agent actions"
"twitter:title": "CTRLRun: stop wrong, restricted, or malicious agent actions"
canonical: "https://ctrlrun.dev/"
"og:url": "https://ctrlrun.dev/"
---
Expand All @@ -18,15 +18,13 @@ import { CommercialTiers } from "/snippets/commercial-tiers.jsx";
<section id="overview" className="cr-home-hero" aria-labelledby="cr-title">
<div className="cr-home-pitch">
<p className="cr-eyebrow">THE AGENT IS PROBABILISTIC. THE ACTION IS NOT.</p>
<h1 id="cr-title">Execution safety<br />for AI agents<span className="cr-dot">.</span></h1>
<p className="cr-lede"><span className="cr-mark">C</span>on<span className="cr-mark">tr</span>o<span className="cr-mark">l</span> the AI agents <span className="cr-mark">run</span>ning in your platform. Any domain. Your rules.</p>
<p className="cr-hero-context">AI <b>action</b> governance, not AI agent governance.<br />A model decides differently every run. The action it is about to take is fixed, and can be checked before it happens.</p>
<h1 id="cr-title"><span className="cr-mark">CTRLRun</span> stops AI agents from taking wrong, restricted, or malicious actions in your workflows<span className="cr-dot">.</span></h1>
<p className="cr-lede">Every action is checked against your rules before it runs. Allowed actions go through. Sensitive ones wait for a person. Forbidden ones are blocked.</p>
<div className="cr-actions">
<a className="cr-button" href="/docs" data-cr-event="documentation_clicked">Read the docs <span aria-hidden="true">→</span></a>
<a className="cr-button" href="/protect-my-agent" data-cr-event="protect_my_agent_clicked">Protect my agent <span aria-hidden="true">→</span></a>
<a className="cr-button cr-github-badge" href="https://github.com/CTRLRun/ctrlrun" data-cr-event="github_clicked"><svg aria-hidden="true" focusable="false" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 .75a11.25 11.25 0 0 0-3.558 21.923c.563.104.77-.244.77-.542 0-.267-.01-.975-.015-1.913-3.13.68-3.79-1.508-3.79-1.508-.513-1.303-1.252-1.65-1.252-1.65-1.023-.7.077-.686.077-.686 1.132.08 1.727 1.162 1.727 1.162 1.006 1.724 2.64 1.226 3.283.938.102-.73.394-1.226.715-1.508-2.498-.284-5.124-1.25-5.124-5.563 0-1.228.44-2.233 1.162-3.02-.116-.285-.504-1.43.11-2.98 0 0 .945-.303 3.094 1.154a10.786 10.786 0 0 1 5.625 0c2.148-1.457 3.09-1.154 3.09-1.154.617 1.55.23 2.695.113 2.98.724.787 1.16 1.792 1.16 3.02 0 4.323-2.63 5.276-5.136 5.555.404.35.765 1.043.765 2.1 0 1.515-.014 2.737-.014 3.11 0 .3.203.65.774.54A11.252 11.252 0 0 0 12 .75Z" /></svg><span>GitHub</span><span aria-hidden="true">↗</span></a>
</div>
<p className="cr-hero-oneline"><span>Open source &middot; one line, any action</span><code>{'@ctrlrun.protect("your.action")'}</code></p>
<p className="cr-hero-aside">Already running agents in production? <a href="/protect-my-agent" data-cr-event="protect_my_agent_clicked">Protect my agent →</a></p>
</div>
<div className="cr-example-wrap">
<p className="cr-example-label">ONE EXAMPLE / THE MODEL HALLUCINATES AN AMOUNT</p>
Expand Down Expand Up @@ -71,12 +69,10 @@ import { CommercialTiers } from "/snippets/commercial-tiers.jsx";
<section className="cr-section cr-home-commercial" id="pro-and-enterprise" aria-labelledby="cr-commercial-title">
<div className="cr-commercial">
<div className="cr-commercial-head">
<p className="cr-eyebrow">THE SAME BOUNDARY, RUN FOR YOU</p>
<h2 id="cr-commercial-title">Open source is the boundary. Pro and Enterprise are how it is run.</h2>
<p>Every tier enforces the same rules on the same actions. What changes is who runs the control plane around them, and how far the controls are shaped to your deployment.</p>
<p className="cr-eyebrow">FREE, PRO, ENTERPRISE</p>
<h2 id="cr-commercial-title">Free and open source: the boundary. Pro: the boundary, run for you. Enterprise: the boundary, shaped to you.</h2>
</div>
<CommercialTiers />
<p className="cr-caption">Running it yourself stays a first-class route: the core is Apache-2.0 and nothing here is required to use it. The Pro dashboard is in development. <a href="/docs/get-started/quickstart">Start with the open-source core →</a></p>
</div>
<div className="cr-footer" role="contentinfo"><span>Let agents act.<br /><strong>Keep the consequences yours to decide.</strong></span><div><a href="/docs" data-cr-event="documentation_clicked">Docs →</a><a href="https://github.com/CTRLRun/ctrlrun" data-cr-event="github_clicked">GitHub ↗</a><a href="mailto:contact@arpanghoshal.com?subject=CTRLRun" data-cr-event="contact_email_clicked">Contact ↗</a></div></div>
</section>
Expand Down
4 changes: 2 additions & 2 deletions protect-my-agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ import { ArchitectureReview } from "/snippets/architecture-review.jsx";

<ArchitectureReview />

<div className="cr-services"><details><summary>Execution-safety review: where it starts</summary><p>A paid architecture review of tool boundaries, approval flows, duplicate execution, uncertain outcomes and action records. You leave with an execution-control map and a prioritized plan: what can run automatically, what needs a person, and what must stop until the outcome is known.</p></details><details><summary>Production Integration Sprint: the boundary into your stack</summary><p>Hands-on integration, policy design, approval workflows, persistence, retry handling, reconciliation and production testing. Rollout is per workflow: pick one, agree the rules and who approves what, run it in observe mode to see what would have been blocked, then turn enforcement on.</p></details><details><summary>ctrlrun Pro: governance from one dashboard</summary><p>Connect your agents and workflows, manage policies, investigate activity and understand operational risk from one place, built on the same open-source foundation you can run yourself. In development. <a href="/#pro-and-enterprise">Join the waiting list ↗</a></p></details><details><summary>ctrlrun Enterprise: governance shaped to your deployment</summary><p>Everything in Pro, with our engineers to design, integrate and maintain the additional controls your business needs: custom policies, the integrations your stack requires, deployment options and the insights you ask for. This is what the review above starts.</p></details><details><summary>Ongoing Production Support</summary><p>A recurring engagement for new actions, policy changes, upgrades, incident analysis and rollout reviews.</p></details></div>
<p className="cr-caption">Building it yourself? <a href="/docs/get-started/quickstart">Start integrating with CTRLRun OSS →</a></p>
<div className="cr-services"><details><summary>Execution-safety review: where it starts</summary><p>A paid architecture review of tool boundaries, approval flows, duplicate execution, uncertain outcomes and action records. You leave with an execution-control map and a prioritized plan: what can run automatically, what needs a person, and what must stop until the outcome is known.</p></details><details><summary>Production Integration Sprint: the boundary into your stack</summary><p>Hands-on integration, policy design, approval workflows, persistence, retry handling, reconciliation and production testing. Rollout is per workflow: pick one, agree the rules and who approves what, run it in observe mode to see what would have been blocked, then turn enforcement on.</p></details><details><summary>ctrlrun Pro: integrate, analyze, protect. One dashboard</summary><p>Connect your agents and workflows and see what each connection covers. Search every action, decision and outcome across your agents. Manage policies and approvals from one place, test a rule in observe mode, then turn enforcement on. Built on the open-source foundation, run by us. In development. <a href="/#pro-and-enterprise">Request early access ↗</a></p></details><details><summary>ctrlrun Enterprise: the same product, shaped to your company</summary><p>Everything in Pro, with CTRLRun engineers who design, integrate and maintain the controls your business needs: custom policies and approval chains, connectors to your internal systems, your deployment options, the reports you ask for. Scoped to your requirements, delivered with your team. This is what the review above starts.</p></details><details><summary>Ongoing Production Support</summary><p>A recurring engagement for new actions, policy changes, upgrades, incident analysis and rollout reviews.</p></details></div>
<p className="cr-caption">Building it yourself? ctrlrun Open Source is free. <a href="/docs/get-started/quickstart">Install it →</a></p>
</div>
29 changes: 22 additions & 7 deletions snippets/commercial-tiers.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// The two commercial tiers, each with the form its button asks for. The comparison table
// The three tiers. Open Source is a link to the quickstart and asks for nothing; the two
// commercial tiers each carry the form their button asks for. The comparison table
// that used to sit under them is gone; the one row a reader acted on -- who does the work --
// is now a line on each card. Pro takes a place on the
// waiting list, so it asks for as little as a place requires; Enterprise is the start of a
Expand All @@ -17,12 +18,23 @@ export const CommercialTiers = () => {
const ENDPOINT = 'https://ctrlrun-review-form.vercel.app/api/interest';

const TIERS = [
{
intent: 'open-source',
name: 'ctrlrun Open Source',
status: 'FREE · OPEN SOURCE',
promise: 'Free. Run it yourself.',
body: 'The boundary itself, at no cost. No account, no card, no call with us. Every rule that decides is code you can read, and every action leaves a receipt you keep. Free to use and free to change, under the Apache-2.0 licence.',
who: 'Your team, on your machines.',
cta: 'Install it',
href: '/docs/get-started/quickstart',
event: 'open_source_install_clicked'
},
{
intent: 'pro-waitlist',
name: 'ctrlrun Pro',
status: 'IN DEVELOPMENT',
promise: 'Centralized governance for your AI agents.',
body: 'Connect your agents and workflows, manage policies, investigate activity, and understand operational risk from one dashboard. Built on ctrlrun’s open-source foundation.',
promise: 'Integrate, analyze, protect. One dashboard.',
body: 'Connect your agents and workflows and see what each connection covers. Search every action, decision and outcome across your agents. Manage policies and approvals from one place, test a rule in observe mode, then turn enforcement on. Built on the open-source foundation, run by us.',
who: 'Your team, on our dashboard.',
cta: 'Request early access',
field: 'agents',
Expand All @@ -38,8 +50,8 @@ export const CommercialTiers = () => {
intent: 'enterprise-contact',
name: 'ctrlrun Enterprise',
status: 'ENGAGEMENTS OPEN',
promise: 'AI governance tailored to your deployment.',
body: 'Everything in Pro, with ctrlrun engineers to design, integrate, and maintain the additional controls your business needs. Custom policies, integrations, deployment options, and insights, scoped to your requirements.',
promise: 'The same product, shaped to your company.',
body: 'Everything in Pro, with CTRLRun engineers who design, integrate and maintain the controls your business needs: custom policies and approval chains, connectors to your internal systems, your deployment options, the reports you ask for. Scoped to your requirements, delivered with your team.',
who: 'Our engineers, with your team.',
cta: 'Discuss your deployment',
field: 'message',
Expand Down Expand Up @@ -101,11 +113,14 @@ export const CommercialTiers = () => {
<p className="cr-tier-promise">{tier.promise}</p>
<p className="cr-tier-body">{tier.body}</p>
<p className="cr-tier-who"><span>Who does the work</span> {tier.who}</p>
{tier.href && (
<a className="cr-button" href={tier.href} data-cr-event={tier.event}>{tier.cta} <span aria-hidden="true">→</span></a>
)}
{sentIntent === tier.intent && <p className="cr-tier-done" role="status">{tier.done}</p>}
{sentIntent !== tier.intent && open !== tier.intent && (
{!tier.href && sentIntent !== tier.intent && open !== tier.intent && (
<button type="button" className="cr-button" onClick={() => openTier(tier)}>{tier.cta} <span aria-hidden="true">→</span></button>
)}
{sentIntent !== tier.intent && open === tier.intent && (
{!tier.href && sentIntent !== tier.intent && open === tier.intent && (
<form className="cr-tier-form" onSubmit={event => send(event, tier)}>
<fieldset disabled={sending}>
<label className="cr-field">Work email<input type="email" autoComplete="email" required maxLength={254} value={email} onChange={event => { setEmail(event.target.value); setError(''); }} /></label>
Expand Down
2 changes: 1 addition & 1 deletion snippets/home-slides.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export const HomeSlides = () => {
const SLIDES = [
{ id: 'overview', label: 'Overview' },
{ id: 'how-it-works', label: 'How it works' },
{ id: 'pro-and-enterprise', label: 'Pro and Enterprise' },
{ id: 'pro-and-enterprise', label: 'Free, Pro, Enterprise' },
];
const LAST = SLIDES.length - 1;
const [active, setActive] = useState(0);
Expand Down
Loading
Loading