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

# View as client

> A delegated session puts you inside a client workspace with the permissions they granted, for one hour at a time, without a shared password anywhere.

<div className="mxp-hero xc-border">
  <div className="exp-eyebrow mxp-rise">WORKING FOR CLIENTS</div>

  <h2 className="mxp-hero-title mxp-rise" style={{animationDelay:'0.06s'}}>
    Their workspace, your hands, <span style={{background:'linear-gradient(90deg,#24A4FF,#9000FF,#E3008E)',WebkitBackgroundClip:'text',backgroundClip:'text',color:'transparent'}}>no shared password.</span>
  </h2>

  <p className="mxp-hero-dek mxp-rise" style={{animationDelay:'0.13s'}}>
    Click **View as client** and the full Actionist interface loads, scoped to one client's workspace. You see what they see, within the permissions they granted. No second login, no credentials handed over, no screenshare.
  </p>
</div>

<div className="w-full py-10">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">The mechanism</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">What a delegated session is.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      It is not an impersonation of the client's account and it is not a copy of their data. It is a short-lived, scoped credential that travels with every request you make while the session is open.
    </p>
  </div>

  <div className="mxp-pipe">
    <div className="mxp-pipe-node"><strong>You click View as client</strong><span>Actionist asks the server for a session against that one client relationship.</span></div>

    <div className="mxp-pipe-link" />

    <div className="mxp-pipe-node"><strong>Scopes are resolved</strong><span>The server reads the client's current grants and stamps them onto the session.</span></div>

    <div className="mxp-pipe-link d2" />

    <div className="mxp-pipe-node"><strong>Your cache is cleared</strong><span>Anything held from your own workspace is dropped so the two never mix.</span></div>

    <div className="mxp-pipe-link d3" />

    <div className="mxp-pipe-node"><strong>You land somewhere useful</strong><span>The app opens the first area your scopes actually unlock, never a locked page.</span></div>
  </div>

  <div className="exp-surface-grid" style={{marginTop:'22px'}}>
    <div className="exp-surface-tile">
      <strong>One hour, then it stops.</strong> Sessions are deliberately short-lived. When one lapses you simply start another.
    </div>

    <div className="exp-surface-tile">
      <strong>Scoped at the source.</strong> Permissions are resolved when the session is created and enforced on the server, not hidden in the interface.
    </div>

    <div className="exp-surface-tile">
      <strong>Everything is recorded.</strong> Each action taken in a delegated session writes an audit row on the server.
    </div>
  </div>

  <Note>
    Your own account never changes. You stay signed in as yourself the entire time, which is exactly why a bug report filed during a session goes to your account rather than the client's.
  </Note>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Try it</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Reading the Reseller mode banner.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      A purple stripe sits at the top of the screen the whole time a session is open. It is your one reliable answer to "whose workspace am I in?". Toggle the permissions below to see how it changes.
    </p>
  </div>

  <div className="xrs-scope-shell exp-tool-shell xc-try">
    <div style={{fontSize:11.5, opacity:0.55, letterSpacing:'0.07em', textTransform:'uppercase', fontWeight:600, marginBottom:10}}>Toggle granted permissions to update the banner</div>

    <div className="mxp-srch-chips">
      <label htmlFor="xrs-sc-prompts"><input className="mxp-r" type="checkbox" id="xrs-sc-prompts" defaultChecked />Prompts</label>
      <label htmlFor="xrs-sc-tools"><input className="mxp-r" type="checkbox" id="xrs-sc-tools" defaultChecked />Tools</label>
      <label htmlFor="xrs-sc-skills"><input className="mxp-r" type="checkbox" id="xrs-sc-skills" defaultChecked />Skills</label>
      <label htmlFor="xrs-sc-memory"><input className="mxp-r" type="checkbox" id="xrs-sc-memory" />Memories</label>
      <label htmlFor="xrs-sc-files"><input className="mxp-r" type="checkbox" id="xrs-sc-files" />Files</label>
      <label htmlFor="xrs-sc-calendar"><input className="mxp-r" type="checkbox" id="xrs-sc-calendar" />Calendar</label>
      <label htmlFor="xrs-sc-chats"><input className="mxp-r" type="checkbox" id="xrs-sc-chats" />Chat History</label>
      <label htmlFor="xrs-sc-billing"><input className="mxp-r" type="checkbox" id="xrs-sc-billing" />Billing</label>
    </div>

    <div style={{borderRadius:12,overflow:'hidden',border:'1px solid var(--default-border-color)',marginTop:18}}>
      <div className="xrs-banner-bar">
        <span className="xrs-banner-dot" />

        <span style={{opacity:0.85}}>Currently managing</span>
        <span style={{fontWeight:700}}>Halo Studio</span>
        <span className="xrs-banner-chip" style={{background:'rgb(255 255 255 / 0.3)'}}>Reseller mode</span>

        <div style={{display:'flex',flexWrap:'wrap',gap:6,marginLeft:'auto',alignItems:'center'}}>
          <span style={{opacity:0.75, fontSize:11.5}}>Permissions:</span>
          <span className="xrs-banner-chip xrs-bc-prompts">Prompts</span>
          <span className="xrs-banner-chip xrs-bc-tools">Tools</span>
          <span className="xrs-banner-chip xrs-bc-skills">Skills</span>
          <span className="xrs-banner-chip xrs-bc-memory">Memories</span>
          <span className="xrs-banner-chip xrs-bc-files">Files</span>
          <span className="xrs-banner-chip xrs-bc-calendar">Calendar</span>
          <span className="xrs-banner-chip xrs-bc-chats">Chat History</span>
          <span className="xrs-banner-chip xrs-bc-billing">Billing</span>
        </div>

        <div style={{display:'inline-flex',alignItems:'center',gap:5,padding:'4px 12px',borderRadius:7,background:'rgb(255 255 255 / 0.15)',border:'1px solid rgb(255 255 255 / 0.35)',fontSize:12,fontWeight:600,color:'#fff',flex:'none'}}>
          <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
            <path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" />

            <polyline points="16 17 21 12 16 7" />

            <line x1="21" y1="12" x2="9" y2="12" />
          </svg>

          Exit to Reseller Dashboard
          <span style={{fontSize:9.5,padding:'1px 5px',borderRadius:4,border:'1px solid rgb(255 255 255 / 0.4)',letterSpacing:'0.05em'}}>ESC</span>
        </div>
      </div>

      <div className="xrs-banner-body">
        <div style={{fontSize:13, opacity:0.72}}>The standard Actionist interface loads here, scoped to Halo Studio's workspace. Anything the banner does not list is locked.</div>

        <div className="xrs-hard-limit-row">
          <div>
            <div style={{fontWeight:600, fontSize:13}}>Credentials & API keys</div>
            <div style={{fontSize:12, opacity:0.6}}>Never listed, whatever else is granted</div>
          </div>

          <span className="xrs-hard-limit-badge">HARD LIMIT</span>
        </div>
      </div>
    </div>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'20px'}}>
    The banner uses short labels. **Prompts** is Prompts and Instructions, **Tools** is Apps and MCP, **Memories** is Agent Memories, and **Calendar** is Calendar and Schedules. The locked-panel messages you meet inside the workspace use the longer names, so do not be thrown by the difference.
  </p>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Step by step</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Opening a client workspace.</h2>
  </div>

  <Steps>
    <Step title="Find the client" icon="search">
      Go to **Clients** in the reseller sub-navigation, or use the **Most recent clients** panel on Overview. Search needs at least three characters. See [Managing clients](/resellers/clients).
    </Step>

    <Step title="Check the button is live" icon="circle-check">
      **View as client** is active only when the relationship allows management. A client can show as Active and still not be manageable while their workspace is finishing setup. Hover a greyed-out button to see the reason.
    </Step>

    <Step title="Click View as client" icon="log-in">
      The button shows a spinner while the session is created. Your own cached workspace data is cleared at this point, deliberately.
    </Step>

    <Step title="Land and check the banner" icon="panel-top">
      You arrive at the first area your permissions unlock. Read the **Permissions** list in the banner before you start work so you know what is available.
    </Step>

    <Step title="Do the work" icon="wrench">
      Use the app normally. Anything the client did not grant shows a lock rather than failing silently.
    </Step>

    <Step title="Exit properly" icon="log-out">
      Click **Exit to Reseller Dashboard** or press **Escape**. This is not optional housekeeping, see below.
    </Step>
  </Steps>

  <Warning>
    If session creation fails you get a toast reading "Client manager is currently unavailable. Please try again." Retry once. If it keeps failing on the same client, check they are not in the Historical filter, which would mean the relationship has ended.
  </Warning>
</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">Nice touch</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">You never land on a locked page.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Rather than dropping you on Home and letting you discover it is locked, the app walks the navigation in order and opens the first area your permissions actually unlock.
    </p>
  </div>

  | Permissions granted                 | Where you land                                                    |
  | ----------------------------------- | ----------------------------------------------------------------- |
  | Prompts & Instructions              | Home                                                              |
  | Chat History only                   | Home, in view-only mode                                           |
  | Apps and MCP                        | The Apps browser                                                  |
  | Skills but not Apps and MCP         | The Skills area directly, skipping the browser you could not open |
  | Calendar & Schedules only           | Calendar                                                          |
  | Nothing that opens a workspace area | Marketplace, which needs no permission                            |

  <Tip>
    That last row is a useful diagnostic. If a session drops you straight into Marketplace, the client has not granted anything that opens a workspace area yet. Ask them to check their Manage Reseller panel.
  </Tip>
</div>

<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 workspace</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Locks you will meet, and what they mean.</h2>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
    A locked area shows a shield and two lines: "Access restricted", then "The client hasn't granted access to {'{'}permission{'}'} in this delegated session." Two areas use a different message because no permission unlocks them at all.
  </p>

  <div className="xrs-two">
    <div className="xrs-two-col can">
      <div className="xrs-two-tag">Unlocked by a permission</div>
      <div className="xrs-two-item">Home, Agents, Onboarding and Impact open with Prompts and Instructions.</div>
      <div className="xrs-two-item">Apps opens with either Apps and MCP or Skills.</div>
      <div className="xrs-two-item">Calendar, Memory, Files and Skills each open with their matching permission.</div>
      <div className="xrs-two-item">Settings opens with Billing summary.</div>
      <div className="xrs-two-item">Marketplace, Learn and Support are always open. Browsing needs no permission.</div>
    </div>

    <div className="xrs-two-col cant">
      <div className="xrs-two-tag">Locked no matter what</div>
      <div className="xrs-two-item">The **Reseller** section. You cannot manage your own reseller account from inside a client workspace.</div>
      <div className="xrs-two-item">**Projects**, the planning surface, which has no delegated permission defined yet.</div>
      <div className="xrs-two-item">The **Credentials Vault** panel in Settings, which does not render at all during a delegated session.</div>
      <div className="xrs-two-item">Every app **Connect**, **Reconnect**, **Install** and **Disconnect** control, regardless of permissions.</div>
    </div>
  </div>

  <Note>
    Those last two are worth internalising early. The Credentials Vault is absent rather than disabled, and app connection controls are locked for every delegated session with no permission that changes it. See [Credentials and API keys](/resellers/credentials) and [Apps, tools and integrations](/resellers/apps).
  </Note>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Deeper than the interface</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">The agent inherits your permissions too.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Permissions do not stop at the buttons. If you ask a client's agent to do something during a delegated session, the agent's own toolset is filtered by the same scopes.
    </p>
  </div>

  | Permission missing   | What the agent loses                                            |
  | -------------------- | --------------------------------------------------------------- |
  | Apps and MCP         | Its entire external tool list, plus terminal and screen control |
  | Files                | Every file tool, plus the terminal tools                        |
  | Agent Memories       | Memory search and memory recall                                 |
  | Skills               | Every skill tool, and skills stop appearing at all              |
  | Calendar & Schedules | Schedule management                                             |

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'20px'}}>
    When an agent hits one of these it says so rather than failing quietly: "Permission denied: reseller delegated session does not include {'{'}permission{'}'} access." If you see that mid-conversation, the fix is a permission, not a prompt.
  </p>

  <Info>
    Terminal access is the one case that needs two permissions at once. An agent can only run terminal commands when both **Files** and **Apps and MCP** are granted.
  </Info>
</div>

<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 clock</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">One hour, and a refresh button.</h2>
  </div>

  <Columns cols={2}>
    <Card title="Refresh permissions" icon="rotate-ccw">
      The circular arrow in the banner picks up the client's current grants without losing your place. Use it right after asking a client to enable something. It shows a spinner, then a tick for a couple of seconds.

      If it fails it does so quietly and the banner simply stays as it was. Click it again. If it never confirms, see [Troubleshooting](/resellers/troubleshooting).
    </Card>

    <Card title="Expiry" icon="clock">
      A session lasts about an hour. When it lapses, the next request you make ends the session and returns you to your own reseller dashboard.

      This happens **without a message**. If you are suddenly looking at your own dashboard mid-task, that is almost always what happened. Start a new session and carry on.
    </Card>
  </Columns>

  <Warning>
    Because expiry is silent, save or apply work as you go rather than leaving a long edit half-finished. A long unsaved edit is the one thing an expiry can actually cost you.
  </Warning>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'18px'}}>
    A revoked permission behaves differently and more gently. It locks the affected area and leaves the rest of your session running, because losing one permission is not a reason to throw away the whole session.
  </p>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Do this properly</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Always exit with the button or Escape.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Exiting is what clears the client's data out of your app. Navigating away, closing a tab or switching windows does not.
    </p>
  </div>

  <div className="mxp-pipe">
    <div className="mxp-pipe-node"><strong>You exit</strong><span>Click Exit to Reseller Dashboard, or press Escape from anywhere.</span></div>

    <div className="mxp-pipe-link" />

    <div className="mxp-pipe-node"><strong>Session ends</strong><span>The delegated credential is deleted on the server.</span></div>

    <div className="mxp-pipe-link d2" />

    <div className="mxp-pipe-node"><strong>Cache is cleared</strong><span>Everything loaded from that client's workspace is dropped.</span></div>

    <div className="mxp-pipe-link d3" />

    <div className="mxp-pipe-node"><strong>Back to your dashboard</strong><span>You return to your own reseller view, ready for the next client.</span></div>
  </div>

  <Check>
    This is the habit that keeps clients separate. Exit one client fully before opening the next, and you will never wonder whose workspace a stale panel belongs to.
  </Check>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">In practice</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">How agencies actually use sessions.</h2>
  </div>

  <div className="xc-recipes">
    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />

        Agency owner
      </div>

      <div className="xc-recipe-flow">
        New client accepted. Opens a <em>delegated session</em>, drops in three starter agents, wires the tools that need no login, writes the instructions, then sends one message listing the four apps the client has to connect themselves.
      </div>

      <span className="xc-recipe-save">live in an afternoon</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />

        Support engineer
      </div>

      <div className="xc-recipe-flow">
        Client reports an agent misbehaving. Opens <em>View as client</em>, reads the run history, corrects the instructions, and replies with what changed. No screenshare, no request for screenshots.
      </div>

      <span className="xc-recipe-save">usually under 15 min</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />

        Account manager
      </div>

      <div className="xc-recipe-flow">
        Monthly review. Opens each client in turn, checks what the agents actually did, adjusts a schedule or two, and <em>exits properly</em> between clients so nothing carries over.
      </div>

      <span className="xc-recipe-save">one pass, no mix-ups</span>
    </div>
  </div>
</div>

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

  | What you see                                                        | Why                                                                                     | What to do next                                                           |
  | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
  | **View as client** greyed out                                       | The relationship does not currently allow management, often because setup is unfinished | Hover for the reason. Wait, or see [Managing clients](/resellers/clients) |
  | Toast: "Client manager is currently unavailable. Please try again." | Session creation failed                                                                 | Retry once. If it persists on one client, check the Historical filter     |
  | "Access restricted" on a panel                                      | That permission was not granted, or was revoked                                         | Click **Refresh permissions**. If still locked, ask the client            |
  | "This page is not available while viewing a client workspace."      | Reseller or Projects, which no permission unlocks                                       | Exit the session to reach your own dashboard                              |
  | Suddenly back on your own dashboard                                 | The session expired, silently                                                           | Start a new session                                                       |
  | Refresh shows a spinner but never a tick                            | The refresh failed quietly                                                              | Click it again, then see [Troubleshooting](/resellers/troubleshooting)    |
  | A lock icon on an app **Connect** button                            | Always the case in a delegated session                                                  | Ask the client to connect it. See [Apps](/resellers/apps)                 |
</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">Delegated sessions</span>

      <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-white leading-tight">
        Real access without a shared login.
      </h2>

      <p className="text-base md:text-lg text-white/85">
        One click into a client workspace, one hour of scoped access, and one key that never leaves their vault.
      </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">
    Scoped when the session starts, enforced on the server, audited on every action.<br />
    One hour per session · Exit clears everything · Credentials never included.
  </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="Client permissions and access" icon="toggle-right" href="/resellers/permissions">
      The eight toggles behind every lock you will meet, and what each one opens.
    </Card>

    <Card title="Agents, prompts and instructions" icon="users" href="/resellers/agents">
      The work you will do most often once you are inside a client workspace.
    </Card>

    <Card title="Apps, tools and integrations" icon="plug" href="/resellers/apps">
      What you can configure, and the connection step that always belongs to the client.
    </Card>

    <Card title="Troubleshooting" icon="life-buoy" href="/resellers/troubleshooting">
      Every message you can hit in a session, what it means, and whose problem it is.
    </Card>
  </Columns>
</div>
