> ## Documentation Index
> Fetch the complete documentation index at: https://learn.actionist.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Agents, prompts and instructions

> Build client agents with a clear role and real boundaries, and improve the prompts behind them, all inside a delegated session.

<div className="mxp-hero xc-border">
  <div className="exp-eyebrow mxp-rise">BUILD THE TEAM</div>

  <h2 className="mxp-hero-title mxp-rise" style={{animationDelay:'0.06s'}}>
    Give the agent a clear role. <span style={{background:'linear-gradient(90deg,#24A4FF,#9000FF,#E3008E)',WebkitBackgroundClip:'text',backgroundClip:'text',color:'transparent'}}>Then decide how much rope it gets.</span>
  </h2>

  <p className="mxp-hero-dek mxp-rise" style={{animationDelay:'0.13s'}}>
    One permission gates the entire agent surface in a delegated session: the ability to edit an agent's Instructions and Soul. This page covers what that gate unlocks, the two fields that actually shape behavior, and the difference between editing an agent and running one. For the full agent reference, see <a href="/Folders/agents">Agents</a>.
  </p>
</div>

<div className="w-full py-10">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">One toggle, one door</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">What the scope unlocks.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      The client-facing toggle is called **Allow reseller to modify agent Prompts & Instructions**. In the API and in this doc it is the scope `prompts_and_instructions`. It is not a per-tab setting, it is the gate for the whole Agents surface, and this page is scoped narrowly to what changes for you inside that gate, not a general tour of Agent Studio.
    </p>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginBottom:'6px'}}>
    Without it, Agent Studio never opens at all. Not read-only, not grayed out: the route is locked before it renders.
  </p>

  <div className="xrs-two">
    <div className="xrs-two-col can">
      <div className="xrs-two-tag">GRANTED</div>
      <div className="xrs-two-item">Home, Onboarding, Impact and Agents appear in the delegated nav.</div>
      <div className="xrs-two-item">The full `/agents` surface opens, Agent Studio included.</div>
      <div className="xrs-two-item">You can rewrite Instructions and Soul, rename an agent, and change its approval mode.</div>
      <div className="xrs-two-item">Identity, Tools, Channels, Collaboration, Triggers, Runs and Settings are all reachable.</div>
    </div>

    <div className="xrs-two-col cant">
      <div className="xrs-two-tag">NOT GRANTED</div>
      <div className="xrs-two-item">Home, Onboarding, Impact and Agents drop out of the nav entirely.</div>
      <div className="xrs-two-item">Agent Studio does not open. There is nothing to unlock inside it, because you cannot get in.</div>
      <div className="xrs-two-item">You cannot see or edit an agent's Instructions, Soul, tool list, or approval mode.</div>
      <div className="xrs-two-item">Chat may still be visible on its own scope, see <a href="#chat-access">Chat access</a> below, but it is a different permission.</div>
    </div>
  </div>

  <Note>
    The toggle's own description reads: "Edit agent configuration, including system prompts, instructions, and few-shot examples on this workspace's agents." Read that plainly: there is no separate few-shot field in the product today. Examples live inline, inside the Instructions text, written as part of the same Markdown block.
  </Note>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'14px'}}>
    Of the eight scopes a client can grant, this is the widest reaching by nav surface alone: Onboarding, Impact and Agents require it and nothing else, and Home requires it or `chat_history`. The other seven toggles each gate a single, narrower area. That is worth keeping in mind when you talk a client through what to enable first: this one toggle is doing most of the work. See <a href="/resellers/permissions">Client permissions</a> for how all eight sit together.
  </p>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Identity tab</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">The two fields that matter.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Everything you change on an agent's behavior comes down to two free-text Markdown fields on the Identity tab. They do different jobs, and conflating them is the most common way a first agent goes wrong.
    </p>
  </div>

  <div className="exp-surface-grid" style={{marginTop:0, marginBottom:'18px'}}>
    <div className="exp-surface-tile"><strong>Instructions.</strong> "The system prompt this agent runs under. Keep it specific: the behaviors it always does, the ones it never does, and the tone it uses." This is behavior.</div>
    <div className="exp-surface-tile"><strong>Soul.</strong> "How the agent sounds. Short, vivid prose the model uses as voice reference. Different from instructions, this shapes personality, not behavior." This is voice.</div>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginBottom:'14px'}}>
    A worked example for a plausible client agent, an inbox triage agent for a design studio. Notice the Instructions block states what the agent always does, what it never does, and how it should sound when reporting back, while the Soul block only carries voice.
  </p>

  <CodeGroup>
    ```md Instructions theme={null}
    You triage the shared inbox for a design studio. Sort every incoming
    message into one of four categories: client feedback, new inquiry,
    vendor invoice, or internal noise.

    Always flag anything mentioning a deadline or a signed contract for
    human review before you archive it. Always summarize a thread in
    three sentences or fewer before moving it.

    Never reply to a client on the studio's behalf. Draft a reply as a
    suggestion only, and leave it for a human to send. Never mark a
    message as handled without first sorting it into a category.

    Tone: plain, factual, no exclamation points. You are reporting, not
    performing.
    ```

    ```md Soul theme={null}
    Calm and precise, a little dry. Talks like a studio manager who reads
    every message twice before saying anything. Short sentences. No
    corporate cheer, no filler words.
    ```
  </CodeGroup>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'16px'}}>
    The product's own readiness heuristics look for Instructions running past roughly 200 characters and Soul past roughly 40. Treat that as a rough floor, not a target: it flags an agent that is clearly underspecified, it does not certify one that is well written. A few sentences that name real behaviors will always beat a longer paragraph that only restates the agent's job title.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'12px'}}>
    The mistake worth avoiding: don't fold personality into Instructions, and don't fold behavior into Soul. "Be warm and friendly" is a vibe, it belongs in Soul. "Always flag anything mentioning a contract" is a rule, it belongs in Instructions. A model asked to infer a rule from a voice description will apply it inconsistently, because it was never actually given a rule.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'12px'}}>
    Both fields are plain Markdown, both are editable the moment you have `prompts_and_instructions`, and both save independently of the agent's Tools, Channels, or Schedule configuration. Changing one never resets the other.
  </p>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Inside the studio</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Agent Studio, tab by tab, in a delegated session.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Reaching any tab at all needs `prompts_and_instructions`. Three tabs then carry a second lock on top of that one, tied to their own scope. Everything else opens as soon as you have the agent scope.
    </p>
  </div>

  <div>
    | Tab           | What it configures                                       | Scope required                                              |
    | ------------- | -------------------------------------------------------- | ----------------------------------------------------------- |
    | Identity      | Instructions, Soul, the agent's name and avatar          | `prompts_and_instructions`                                  |
    | Tools         | Which tools the agent can call, and its approval mode    | `prompts_and_instructions`                                  |
    | Skills        | The skill packs the agent loads on demand                | `prompts_and_instructions` **and** `skills`                 |
    | Memory        | What the agent has stored from past runs                 | `prompts_and_instructions` **and** `agent_memories`         |
    | Channels      | Telegram and Slack connections the agent replies through | `prompts_and_instructions`                                  |
    | Collaboration | Which other agents this one can delegate work to         | `prompts_and_instructions`                                  |
    | Triggers      | Event-based automations that start a run                 | `prompts_and_instructions`                                  |
    | Schedule      | Recurring runs and their cadence                         | `prompts_and_instructions` **and** `calendar_and_schedules` |
    | Runs          | Run history for this agent                               | `prompts_and_instructions`                                  |
    | Settings      | Everything else on the agent record                      | `prompts_and_instructions`                                  |
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'16px'}}>
    Skills, Memory and Schedule are the exceptions, not the rule. A session with `prompts_and_instructions` but missing one of those three lands on that tab and finds it locked, while every other tab in the studio behaves normally. See <a href="/resellers/skills">Skills</a> and <a href="/Folders/oversight">Oversight</a> for what those companion scopes gate elsewhere.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'10px'}}>
    Reaching a tab is not the same as the agent being able to act on what you set there. Editing the Tools tab, for example, always works once you have the agent scope, but whether the agent can actually call the tools you enable depends on a completely separate set of scopes, covered next.
  </p>

  <Note>
    When a session lacks `prompts_and_instructions`, the studio does not render a locked version of itself tab by tab. It renders the whole thing inside a single disabled fieldset, which natively disables every control across every tab panel at once. The locked panel itself reads "Access restricted" and, in code format, `The client hasn't granted access to {{scope}} in this delegated session.`
  </Note>

  <AccordionGroup>
    <Accordion title="What if the client revokes the scope while I'm mid-edit?" icon="clock">
      Nothing changes inside your session the instant they save. Scopes are resolved when the session is minted, not re-checked on every click, so your edits keep working until you hit **Refresh permissions** in the banner or start a fresh session. Save what you're working on if you suspect a client is adjusting your access.
    </Accordion>

    <Accordion title="Is prompts_and_instructions granted per agent, or for the whole workspace?" icon="layers">
      Per workspace, not per agent. It is one toggle on the client's Manage Reseller panel. If it is on, it applies to every agent you can see in that client's workspace, there is no way for a client to hand you one agent and withhold another.
    </Accordion>
  </AccordionGroup>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Tools tab</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Approval modes.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Four modes are selectable on an agent's Tools tab. A reseller with `prompts_and_instructions` can change the mode for a client's agent like any other Identity or Tools setting.
    </p>
  </div>

  <div>
    | Mode          | Description                                                                                                                                                       |
    | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Suggest       | "Propose tool calls; user runs them manually."                                                                                                                    |
    | Ask each time | "Require approval before every tool execution."                                                                                                                   |
    | Guarded auto  | "Run safe tools automatically, ask for risky ones."                                                                                                               |
    | Full auto     | "Runs automatically, but asks before irreversible actions such as deleting or overwriting files, making payments, or sending messages outside your organization." |
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'16px'}}>
    For a client who is new to automation, start cautious. **Ask each time** or **Guarded auto** give them a few weeks of watching the agent's tool calls before anything runs unsupervised, and moving to **Full auto** later is a one-click change, not a redo. Going the other direction, tightening a mode after something went wrong, reads worse to a client than starting careful and loosening on purpose. The full approval and blockers story, including what counts as a risky tool call, lives at <a href="/Folders/oversight">Oversight</a>.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'12px'}}>
    For the inbox triage agent from the example above, **Guarded auto** is often the right starting point. Reading and sorting a shared inbox is low risk, so there is little reason to make a client approve every message, while anything the agent should escalate is already written into its Instructions as a flag for human review, not an action it takes on its own.
  </p>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">The distinction that trips people up</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">What the agent can actually run.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      `prompts_and_instructions` controls whether **you** can edit an agent's configuration. It does not control what tools the agent itself can call when it runs. Those are separate, and each is gated by its own scope on the same delegated session.
    </p>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginBottom:'6px'}}>
    You can have full edit access to an agent's Instructions and still watch it fail every tool call, because the client never granted the scope those tools need. That is expected behavior, not a bug to work around.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginBottom:'6px'}}>
    Not every scope on the client's Manage Reseller panel affects this. `chat_history`, `billing_summary` and `audit_logs` govern what a reseller can see, not what an agent is able to do, so they never appear in the table below.
  </p>

  <div>
    | Missing scope            | What the agent loses                        |
    | ------------------------ | ------------------------------------------- |
    | `tools_and_integrations` | The external tool list empties out entirely |
    | `skills`                 | Skill tools are hidden and cannot run       |
    | `agent_memories`         | Memory lookups are blocked                  |
    | `files`                  | File tools are blocked                      |
    | `calendar_and_schedules` | Schedule management is blocked              |
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'16px'}}>
    When one of these is missing, the agent reports it plainly rather than failing silently, in code format: `Permission denied: reseller delegated session does not include {scope} access.` If a client asks why an agent you configured "isn't doing anything," check this table before you check your prompt. See <a href="/resellers/apps">Apps, tools and integrations</a> and <a href="/resellers/skills">Skills</a> for what granting each of these actually looks like from the client's side.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'12px'}}>
    A concrete version of the mismatch: a client grants `prompts_and_instructions` but leaves `skills` off. You can open Agent Studio, rewrite the agent's Instructions to say "use the invoicing skill for any vendor bill," save it, and everything looks correct. The first time the agent runs, it cannot find that skill and reports the permission denial above. The fix is on the client's Manage Reseller panel, not in your prompt, no amount of rewording changes what scopes the session was minted with.
  </p>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">A separate scope</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Chat access.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Chatting with an agent is gated on its own scope, `chat_history`, which is independent from editing that agent's configuration. Three combinations are possible, and only one of them lets you actually send a message.
    </p>
  </div>

  <div className="exp-surface-grid" style={{marginTop:0}}>
    <div className="exp-surface-tile"><strong>Blocked.</strong> No `chat_history`. The agent's chat page is not reachable at all.</div>
    <div className="exp-surface-tile"><strong>Read-only.</strong> `chat_history` granted, `prompts_and_instructions` not. History is visible, the composer is disabled.</div>
    <div className="exp-surface-tile"><strong>Interactive.</strong> Both scopes granted. You can read history and send messages.</div>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'16px'}}>
    Opening an agent's chat page needs `chat_history` at the route level. Sending anything into it needs both scopes together, `chat_history` for the history and `prompts_and_instructions` for the send action.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'10px'}}>
    In practice, read-only looks exactly like the client's own chat view, scrollback, timestamps, tool call traces, with one difference: the composer at the bottom is disabled. There is no separate "view only" banner on that field, so if a client has only granted `chat_history`, expect the input to simply refuse focus rather than announce why.
  </p>

  <Warning>
    Trying to send a message with only `chat_history` does not queue, retry, or silently drop the send. The app denies it outright, and the main process reports: "Conversation History and Agents permissions are required to modify conversations in View as Client mode." If a client grants you chat access alone, expect to read, not to answer on their behalf.
  </Warning>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'12px'}}>
    If a client wants you to be able to reply, not just read, the fix is on their side, not yours: both toggles live on the same Manage Reseller panel. See <a href="/resellers/permissions">Client permissions</a> for exactly where.
  </p>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Session hygiene</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Working across several clients.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Agents belong to the client organization that owns the workspace, never to you. Every delegated session is scoped to exactly one client, and Actionist actively clears cached workspace data on both ends of that session.
    </p>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginBottom:'6px'}}>
    Entering a session and leaving one both clear the cached workspace data. The practical consequence: always leave a session with the **Exit** button, or the Escape key, rather than navigating away in the app or closing the window. That is what actually triggers the clear. Wandering off mid-session risks stale data from one client's workspace bleeding into your view of the next.
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginBottom:'6px'}}>
    A delegated session runs for one hour. Scopes are resolved from the client's live grants at the moment you start it, so if a client flips a toggle while you are inside, your session keeps its original scopes until you use **Refresh permissions** in the banner to re-mint them, you do not need to exit and re-enter for that. Session expiry itself is silent: if the hour runs out mid-task, or the session is otherwise no longer valid, the app tears it down and drops you back at your own Reseller dashboard with no error dialog. If you find yourself unexpectedly back on your dashboard, that is very likely why.
  </p>

  <Note>
    "Delegation" is an overloaded word in Actionist's own docs. A reseller's **delegated session**, this page's whole subject, is a different feature from **agent-to-agent delegation**, where one agent hands work to another through the Collaboration tab. The full agent reference at <a href="/Folders/agents">Agents</a> uses "delegation" for the second meaning. When you read that page, mentally substitute "View as client" for anything on this one.
  </Note>

  <div className="xc-recipes" style={{marginTop:'18px'}}>
    <div className="xc-recipe">
      <div className="xc-recipe-who"><i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />Omar · Agency owner, 6 clients</div>
      <div className="xc-recipe-flow">Omar rewrites an <em>Instructions</em> block for a support agent, checks the result in Chat, then hits **Exit to Reseller Dashboard** before opening the next client. Every session starts from a clean cache.</div>
      <span className="xc-recipe-save">clean handoff between clients</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who"><i style={{background:'linear-gradient(135deg,#E3008E,#FD840C)'}} />Priya · Solo reseller</div>
      <div className="xc-recipe-flow">Priya tabs away mid-edit to answer a Slack message, then comes straight back into the same browser tab instead of exiting first. The next client's agent list briefly shows the previous client's data before it catches up. She now exits with Escape every time, no exceptions.</div>
      <span className="xc-recipe-save">the exit habit that avoids this</span>
    </div>
  </div>
</div>

<hr className="xc-divider" />

<div className="w-full py-10">
  <div className="actionist-cta-panel xc-border">
    <div className="relative z-10 flex flex-col items-center gap-5 max-w-2xl mx-auto">
      <span className="actionist-eyebrow">Certified reseller program</span>

      <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-white leading-tight">
        Configure agents that earn their trust.
      </h2>

      <p className="text-base md:text-lg text-white/85">
        A clear Instructions block, a sensible approval mode, and a scope list the client actually understands.
      </p>

      <div className="flex flex-wrap items-center justify-center gap-3 pt-2">
        <a className="actionist-cta-btn-primary" href="https://app.actionist.ai" target="_blank" rel="noreferrer">
          Open the Dashboard

          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round">
            <path d="M5 12h14" />

            <path d="m12 5 7 7-7 7" />
          </svg>
        </a>

        <a className="actionist-cta-btn-secondary" href="https://actionist.ai/partners/" target="_blank" rel="noreferrer">
          Signup as a Partner
        </a>
      </div>
    </div>
  </div>
</div>

<div className="w-full pt-2 pb-6">
  <p className="actionist-trust-line">
    One scope gates the whole Agents surface. Tool access is gated separately, scope by scope.<br />
    Credentials and API keys stay off-limits regardless of what a client enables here.
  </p>
</div>

<div className="w-full pb-16 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Keep going</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Next steps.</h2>
  </div>

  <Columns cols={4}>
    <Card title="Agents" icon="users" href="/Folders/agents">
      The full agent reference: every tab, every setting, outside the reseller context.
    </Card>

    <Card title="Skills" icon="puzzle" href="/resellers/skills">
      What the `skills` scope unlocks, and how to add a skill pack to a client's agent.
    </Card>

    <Card title="Client permissions" icon="toggle-right" href="/resellers/permissions">
      All eight toggles, from the client's side of the Manage Reseller panel.
    </Card>

    <Card title="Oversight" icon="shield-check" href="/Folders/oversight">
      Approval modes and blockers, in full, including what counts as an irreversible action.
    </Card>
  </Columns>
</div>
