# Agent Personas — Ready-Made Rules for the Five Agents Everyone Runs

A persona is a named policy for one kind of agent: what runs, what pauses for a human, what never runs — attended and unattended. Assign in shadow, watch what it would have denied or paused as your agents run, enforce when you click.

<div class="acp-section" style="padding-top:56px;padding-bottom:0;">
  <div class="acp-container">
    <div class="acp-card acp-card-pad" style="text-align:center;padding:48px 32px;">
      <div style="margin-bottom:14px;"><span style="padding:4px 12px;border-radius:6px;background:rgba(79,70,229,0.12);border:1px solid rgba(79,70,229,0.3);color:#8b8bf0;font-size:12px;font-weight:600;letter-spacing:0.04em;">PERSONAS</span></div>
      <h1 class="acp-hero-h1">Ready-made rules for the five agents everyone runs</h1>
      <p class="acp-subtitle" style="max-width:700px;margin:16px auto 0;">
        A persona is a named policy at the level you already think &mdash; &ldquo;an unattended agent that can&rsquo;t rewrite its own memory or touch the shell.&rdquo; Pick one and it starts in shadow: as your agents run, every call it would have denied or paused is marked in the transcript and on Activity, with the reason. Nothing blocks until you switch to enforce on the Policies page.
      </p>
      <div class="acp-btn-row" style="justify-content:center;margin-top:28px;">
        <a href="https://cloud.agenticcontrolplane.com/login?from=%2Fonboarding" class="acp-btn acp-btn-primary" data-track="Personas: Hero Start">Assign one in shadow &rarr;</a>
        <a href="#fenced-worker" class="acp-btn" data-track="Personas: Hero Jump">See the five &darr;</a>
      </div>
    </div>
  </div>
</div>

<!-- How assignment works: shadow first -->
<div class="acp-section">
  <div class="acp-container">
    <h2 class="acp-section-title" style="margin-bottom:8px;">Try it before you trust it</h2>
    <p class="acp-muted" style="max-width:700px;margin-bottom:20px;">Assigning a persona never starts with enforcement. It starts with evidence from your own traffic:</p>
    <div class="acp-grid-cards">
      <div class="acp-card acp-card-pad">
        <h3 class="acp-linkcard-title" style="font-size:16px;margin-bottom:6px;">1 &middot; Pick a persona</h3>
        <p class="acp-linkcard-desc">Five named policies, each one sentence of intent compiled into per-tool rules. Assignment is one write &mdash; no rule authoring, nothing to maintain per agent.</p>
      </div>
      <div class="acp-card acp-card-pad">
        <h3 class="acp-linkcard-title" style="font-size:16px;margin-bottom:6px;">2 &middot; Watch it in shadow</h3>
        <p class="acp-linkcard-desc">Shadow runs the persona against your calls as they happen, through the same evaluator that enforces. Each call it would have denied or paused is marked in the agent transcript (<code>[ACP shadow] That was &lt;tool&gt; &mdash; &lt;why&gt;</code>) and on Activity, with the stated reason. Shadow can't disagree with enforcement, because it is enforcement, not yet switched on.</p>
      </div>
      <div class="acp-card acp-card-pad">
        <h3 class="acp-linkcard-title" style="font-size:16px;margin-bottom:6px;">3 &middot; Enforce when you click</h3>
        <p class="acp-linkcard-desc">In shadow, nothing blocks &mdash; would-have-denied calls accrue in the trail while the agent works. Switch to enforce on the Policies page when the shadow notices look right.</p>
      </div>
    </div>
    <p class="acp-muted" style="max-width:700px;margin-top:20px;">
      One persona holds across <strong>Claude Code, Codex, dsh, opencode, and Hermes-class harnesses</strong> &mdash; the gateway resolves each harness's tool names into one vocabulary, so a fence you set once binds in every dialect. Each persona also states what it honestly does <em>not</em> cover; those lines are on the cards below.
    </p>
  </div>
</div>

<!-- FENCED WORKER -->
<div class="acp-section" id="fenced-worker">
  <div class="acp-container">
    <h2 class="acp-section-title" style="margin-bottom:4px;">Fenced Worker</h2>
    <p class="acp-muted" style="max-width:700px;margin-bottom:18px;">Runs unattended. Works freely &mdash; can&rsquo;t rewrite its own memory, touch the shell, schedule itself, delegate, or read credentials. The fences bind when nobody is watching; attended work proceeds untouched.</p>
    <div class="acp-table-wrap">
      <table class="acp-table">
        <thead><tr><th></th><th>Attended</th><th>Unattended</th></tr></thead>
        <tbody>
          <tr><td><strong>Allows</strong></td><td>Everything, logged</td><td>The work &mdash; reads, writes, web, connector calls (rate-limited)</td></tr>
          <tr><td><strong>Pauses</strong></td><td>Nothing</td><td>Nothing &mdash; nobody is there to answer</td></tr>
          <tr><td><strong>Denies</strong></td><td>Nothing</td><td>Rewriting its own memory &middot; the shell &middot; scheduling itself &middot; delegating &middot; changing its own skills &middot; reading credentials</td></tr>
          <tr><td><strong>On the trail</strong></td><td>Every call logged</td><td>Every call logged, PII detected both directions, redacted per policy</td></tr>
        </tbody>
      </table>
    </div>
    <p class="acp-faint" style="font-size:13px;max-width:700px;margin-top:12px;"><strong>Not covered:</strong> the fences bind to the agent&rsquo;s reported tier &mdash; unattended rules depend on truthful tier labels. Work tools stay allowed at every tier.</p>
    <p style="margin-top:14px;"><a href="https://cloud.agenticcontrolplane.com/login?from=%2Fonboarding" class="acp-btn acp-btn-primary" data-track="Personas: CTA Fenced Worker">Assign in shadow &rarr;</a></p>
  </div>
</div>

<!-- FLIGHT RECORDER -->
<div class="acp-section" id="flight-recorder">
  <div class="acp-container">
    <h2 class="acp-section-title" style="margin-bottom:4px;">Flight Recorder</h2>
    <p class="acp-muted" style="max-width:700px;margin-bottom:18px;">Blocks nothing. Records everything &mdash; every call in the trail, PII detected, redacted per policy. The day-zero posture for an agent you want to understand before you constrain.</p>
    <div class="acp-table-wrap">
      <table class="acp-table">
        <thead><tr><th></th><th>Attended</th><th>Unattended</th></tr></thead>
        <tbody>
          <tr><td><strong>Allows</strong></td><td>Everything</td><td>Everything</td></tr>
          <tr><td><strong>Pauses</strong></td><td>Nothing</td><td>Nothing</td></tr>
          <tr><td><strong>Denies</strong></td><td>Nothing</td><td>Nothing</td></tr>
          <tr><td><strong>On the trail</strong></td><td colspan="2">Every call logged, PII detected from inputs and outputs, redacted per policy</td></tr>
        </tbody>
      </table>
    </div>
    <p class="acp-faint" style="font-size:13px;max-width:700px;margin-top:12px;"><strong>Not covered:</strong> blocking &mdash; by design. Even in enforce mode this persona only records and redacts.</p>
    <p style="margin-top:14px;"><a href="https://cloud.agenticcontrolplane.com/login?from=%2Fonboarding" class="acp-btn acp-btn-primary" data-track="Personas: CTA Flight Recorder">Assign in shadow &rarr;</a></p>
  </div>
</div>

<!-- CODING COPILOT -->
<div class="acp-section" id="coding-copilot">
  <div class="acp-container">
    <h2 class="acp-section-title" style="margin-bottom:4px;">Coding Copilot</h2>
    <p class="acp-muted" style="max-width:700px;margin-bottom:18px;">Codes beside you. Pauses before file deletes and credential reads; a command that reads a secret and sends it out is denied. The ask list is short on purpose &mdash; each pause means something.</p>
    <div class="acp-table-wrap">
      <table class="acp-table">
        <thead><tr><th></th><th>Attended</th><th>Unattended</th></tr></thead>
        <tbody>
          <tr><td><strong>Allows</strong></td><td colspan="2">The work &mdash; reads, edits, builds, tests, the ordinary shell. Logged.</td></tr>
          <tr><td><strong>Pauses</strong></td><td colspan="2">File deletes (your yes holds for 15 minutes) &middot; reads of .env and credential files</td></tr>
          <tr><td><strong>Denies</strong></td><td colspan="2">A command that reads a secret and sends it out &mdash; caught per call, on the real command text</td></tr>
          <tr><td><strong>On the trail</strong></td><td colspan="2">Every call logged</td></tr>
        </tbody>
      </table>
    </div>
    <p class="acp-faint" style="font-size:13px;max-width:700px;margin-top:12px;"><strong>Not covered:</strong> force-push and other destructive git forms need per-command matching &mdash; the risk classifier and the hardline floor catch them per call, not this persona&rsquo;s static rules.</p>
    <p style="margin-top:14px;"><a href="https://cloud.agenticcontrolplane.com/login?from=%2Fonboarding" class="acp-btn acp-btn-primary" data-track="Personas: CTA Coding Copilot">Assign in shadow &rarr;</a></p>
  </div>
</div>

<!-- RESEARCH SCOUT -->
<div class="acp-section" id="research-scout">
  <div class="acp-container">
    <h2 class="acp-section-title" style="margin-bottom:4px;">Research Scout</h2>
    <p class="acp-muted" style="max-width:700px;margin-bottom:18px;">Reads the world. Writes only inside its workspace &mdash; anything past that waits for your OK, and secrets never leave.</p>
    <div class="acp-table-wrap">
      <table class="acp-table">
        <thead><tr><th></th><th>Attended</th><th>Unattended</th></tr></thead>
        <tbody>
          <tr><td><strong>Allows</strong></td><td colspan="2">Reads, search, web fetch &middot; writes and edits inside the workspace (source, docs, tests) &middot; read-shaped shell (cat, grep, ls)</td></tr>
          <tr><td><strong>Pauses</strong></td><td colspan="2">Writes or edits outside the workspace &middot; any shell beyond reads (curl can POST data out, so it waits too)</td></tr>
          <tr><td><strong>Denies</strong></td><td colspan="2">Edits to .env or credential files &middot; remote shells (ssh) &middot; a secret in an outbound request</td></tr>
          <tr><td><strong>On the trail</strong></td><td colspan="2">Every call logged, PII detected both directions, redacted per policy</td></tr>
        </tbody>
      </table>
    </div>
    <p class="acp-faint" style="font-size:13px;max-width:700px;margin-top:12px;"><strong>Not covered:</strong> a per-domain fetch allowlist is yours to add on top &mdash; fetching sources is the job, so the web stays open here. &ldquo;Inside the workspace&rdquo; means the classified file families; a path the classifier doesn&rsquo;t recognize pauses rather than passes.</p>
    <p style="margin-top:14px;"><a href="https://cloud.agenticcontrolplane.com/login?from=%2Fonboarding" class="acp-btn acp-btn-primary" data-track="Personas: CTA Research Scout">Assign in shadow &rarr;</a></p>
  </div>
</div>

<!-- OPS / DEPLOY -->
<div class="acp-section" id="ops-deploy">
  <div class="acp-container">
    <h2 class="acp-section-title" style="margin-bottom:4px;">Ops/Deploy Agent</h2>
    <p class="acp-muted" style="max-width:700px;margin-bottom:18px;">Ships things. Every deploy and infra change waits for a yes &mdash; attended included. The approval is the deploy review.</p>
    <div class="acp-table-wrap">
      <table class="acp-table">
        <thead><tr><th></th><th>Attended</th><th>Unattended</th></tr></thead>
        <tbody>
          <tr><td><strong>Allows</strong></td><td>Everything else, logged</td><td>Everything else, logged with PII detected, redacted per policy, rate-limited</td></tr>
          <tr><td><strong>Pauses</strong></td><td colspan="2">gcloud &middot; aws &middot; azure &middot; firebase &middot; kubernetes &middot; terraform &middot; docker &middot; systemctl &middot; launchctl &middot; rm</td></tr>
          <tr><td><strong>Denies</strong></td><td colspan="2">Nothing outright &mdash; but a session that racks up denials tightens to asking instead of grinding on</td></tr>
          <tr><td><strong>On the trail</strong></td><td>Every call logged</td><td>Every call logged, PII detected, redacted per policy</td></tr>
        </tbody>
      </table>
    </div>
    <p class="acp-faint" style="font-size:13px;max-width:700px;margin-top:12px;"><strong>Not covered:</strong> spotting a prod-named target inside a command needs per-command matching &mdash; the risk classifier and the hardline floor catch the destructive class per call.</p>
    <p style="margin-top:14px;"><a href="https://cloud.agenticcontrolplane.com/login?from=%2Fonboarding" class="acp-btn acp-btn-primary" data-track="Personas: CTA Ops Deploy">Assign in shadow &rarr;</a></p>
  </div>
</div>

<!-- Closing CTA -->
<div class="acp-section">
  <div class="acp-container">
    <div class="acp-card acp-card-pad" style="text-align:center;padding:40px 32px;">
      <h2 class="acp-section-title" style="margin-bottom:10px;">See what a persona would have denied</h2>
      <p class="acp-muted" style="max-width:640px;margin:0 auto 24px;">Pick one, run your agents as usual, and read what it marks before anything changes. Free up to 5 agents.</p>
      <div class="acp-btn-row" style="justify-content:center;">
        <a href="https://cloud.agenticcontrolplane.com/login?from=%2Fonboarding" class="acp-btn acp-btn-primary" data-track="Personas: Closing CTA">Try it free &rarr;</a>
        <a href="/getting-started" class="acp-btn" data-track="Personas: Getting Started">Getting started &rarr;</a>
      </div>
    </div>
  </div>
</div>
