What the agent may do, and what it must ask.
The exact default authority of the agent on each surface, the limits of the protections we ship, the connector scopes requested once connectors open, and every way to take access back. Some of this is less flattering than a marketing page would write it. That is the point. You cannot review a permission model you have to infer. The rules that govern how you use it are at /acceptable-use. Last updated: 2026-10-08. Previous versions
These always ask.
Every connector and MCP tool we do not know
A connector or MCP tool in the turn puts the whole turn into manual approval mode. A tool we have not classified is treated as an irreversible write that can move data out, which no account default runs on its own, so it asks under all three settings. The three GitHub tools are classified: reading a pull-request diff can run without asking, posting a comment or a review cannot.
Anything you marked "Needs approval"
A saved "ask" verdict outranks automatic mode and the account default alike, so you can pull any built-in tool back into the approval flow.
A tool call that trips the injection escalation
When untrusted content has entered the conversation, a private authenticated source is reachable, and the pending call can move data out of the boundary, a call that would otherwise run escalates to a human decision. On an unattended run there is nobody to ask, so it is refused. See the limits below.
The precedence order, in full.
- 1. You blocked the toolDenied.
- 2. A step your own device carries out, on a turn that is connected to that deviceRuns.
- 3. You saved Always allow, and the injection escalation tripsAsks. On an unattended run there is nobody to ask, so it is denied instead.
- 4. You saved Always allowRuns.
- 5. You saved Needs approvalAsks.
- 6. Something else in the turn needs approval, your account default covers this tool, and the escalation has not trippedRuns.
- 7. Something in the turn needs approval and your account default does not cover this toolAsks.
- 8. The injection escalation tripsAsks. On an unattended run there is nobody to ask, so it is denied instead.
- 9. Every tool offered in the turn runs under your account defaultRuns.
What the injection escalation does not catch.
The escalation is a mitigation, not a proof. We publish its gaps because a reviewer will find them anyway, and a mitigation you can reason about is worth more than a clean claim you cannot.
Pasted text is not counted
Untrusted content is recognised when a tool fetched it (a web page, a search result, a pull-request diff), when you attach a file or image, and when a project knowledge file or connector context you selected enters the chat. Text you paste yourself is not counted, and that is a real injection vector this check does not see.
It over-triggers on purpose
Whether a sensitive source is reachable is derived from which tools were offered, not from what was actually read. A connector merely being available counts. We would rather cost you a click than miss a case.
Undeclared exfiltration is invisible
Whether a call can move data out is per-tool metadata. An MCP server that phones home during what it declares as a read is not visible to this check, which is exactly why any tool we have not classified is treated as creating an egress path.
It cannot stop you approving
The check turns a call that would have run into a call that asks. If it escalates and you approve, the call runs.
A Block is enforced on the server.
Blocking a tool is not a client-side preference. The verdict is stored against your account and checked on the server before any side effect, on the streaming tool loop and again when an approval is resumed. A modified client, or a request you write yourself against the API, cannot execute a tool you blocked; the model is told the tool is blocked and instructed not to retry it.
What blocking does not do: it does not hide the tool from the model’s list of available tools. The model may still attempt the call. The call is refused before it runs, and nothing happens.
Computer use in Chrome.
The Chrome extension can drive a tab through the Chrome debugger, and read that tab’s console and network activity over the same attachment. Starting a session is always an explicit action: you type a goal and click. Once running:
- Ask before actingOn by default. An unset preference means ask; autopilot is an explicit opt-out you have to choose.
- Unanswered approvalsDenied after 30 seconds. The gate fails closed, not open.
- Where it can goNavigation is confined to the site allowlist you maintain in extension options.
- Text leaving the pagePage-text summaries and field readbacks are redacted by the driver before they leave.
- ScreenshotsScreenshots are not redacted and cannot be. You cannot scrub secrets out of a PNG. They reach the Managed Cloud gateway. If a page has a secret visibly rendered on it, a screenshot of that page carries it. This is a residual, accepted risk, bounded by the allowlist and the approval gate.
- Console and network captureThe extension reads a page's console messages and the requests it makes, but only while a run is active or you turn the watch on yourself, and only on a site carrying both grants. Message text passes the same redaction as page text. A request line keeps the URL, method, status, type and timing; it drops credentials in the URL and never reads a request body or a header.
- DownloadsA download starts only when you ask for one, saves to your own downloads folder, and must come from the page’s own origin or another origin already on your allowlist. Chrome picks the filename.
- Where inference happensComputer use requires Managed Cloud sign-in and calls the Managed Cloud gateway directly from the extension.
Local execution, local approval.
Desktop runs tools on your machine, so it carries its own gate: dangerous tools prompt in manual mode, per-tool approval policies are stored and reapplied, and connector settings expose a standing Always allow / Needs approval / Blocked control for each tool. Desktop signs in to connectors through the same account-scoped flow as the web app. See the next section.
What connectors will request.
Connectors are coming soon, and none can be connected yet. The connector directory is larger than what will be connectable when they open. This section describes what is requested then, not the wider roadmap.
A connector is defined by the credential behind it.
- GitHub App installationThree tools: read a pull-request diff, post an issue or pull-request comment, and post a pull-request review. Access comes from the GitHub App installation you authorize; its permission set is configured on GitHub during install and is shown to you there. We do not restate it here, because it is not declared in our own code and we will not guess at a permission list on your behalf.
- Operator-configured MCP serversRemote MCP endpoints configured server-side by AGI. The endpoint and its credentials stay server-side; nothing you supply flows into them.
- Your own MCP serverA server URL you provide, with an optional bearer token that is encrypted at rest and scoped to your account alone. Its tools are whatever that server advertises at runtime.
- Connectors you sign in to at the providerYou approve access on the provider’s own consent screen, and the provider returns an access token and, where it issues one, a refresh token. Both are encrypted with AES-256-GCM and stored in your AGI account.
A connector you sign in to is connectable only where the directory shows “Connect”. Some connectors, including the Google and Microsoft ones, depend on an app registration with the provider that may not be in place. The directory marks those “Needs setup” rather than offering a sign-in that cannot finish, and attempting to connect one returns an explicit refusal rather than a fake connected state.
The record AGI keeps follows from the credential. For an operator-configured connector it is an enablement record: a connector id, an auth type, and whether it is active. That record holds no tokens and no endpoint URLs. For a connector you sign in to it is a grant: the encrypted tokens, the scopes the provider granted, a label for the account you connected where one was given, and the provider addresses needed to use and refresh the tokens.
When you disconnect a connector, and when your account is deleted, AGI deletes its copy of the tokens and asks the provider to revoke them where the connector has a revocation endpoint configured. Where it has none, also remove AGI in that provider’s own account settings.
Desktop uses the managed connector service.
The current Electron Desktop opens the same account-scoped connector authorization flow as the web app. It does not store connector OAuth tokens in a local SQLite database. The provider’s consent screen is the authoritative list of scopes for a configured connector, and authorization does not finish unless the managed service verifies that connection.
A directory entry is not proof that a connector is available. The app asks the managed service which connectors are configured and reports an unavailable or incomplete setup explicitly instead of inventing a successful connection.
A custom MCP server is your trust boundary.
AGI does not vet the remote MCP servers you add. The operator of that server sees the conversation context you send to its tools, and any token you enter is transmitted to it. We validate that the URL resolves to a public host (private and link-local addresses are rejected), and we encrypt the token at rest and scope it to your account. That is infrastructure hygiene, not an endorsement of the server. Add servers you trust, the way you would add a dependency.
Every way to take access back.
- Disconnect a connectorRemoves the connection and also deletes every saved per-tool permission for that connector, so a past "Always allow" cannot survive a reconnect.
- Reset one toolSet a single tool back to "Needs approval", or delete its saved verdict outright. This exists specifically so a one-time "Always allow" is not permanent.
- Block one toolA blocked tool is refused server-side before it runs, on the normal tool loop and on the approval-resume path.
- Unlink GitHubDisconnecting GitHub deletes your installation records so GitHub tools stop being offered. The GitHub App itself remains installed on your GitHub account until you remove it at github.com/settings/installations. Do both for full revocation.
- Delete a custom MCP connectorRemoves the server and the encrypted bearer token you supplied with it. Rotate that token on the server side too if it was ever sensitive.
- Browser: remove a siteTake a site off the extension's allowlist and the browser agent can no longer navigate to it.
- Browser: re-enable the gateTurn "ask before acting" back on if you previously opted into autopilot. Only an explicit opt-out disables it.
- Desktop: per-tool policyDesktop connector settings carry a standing Always allow / Needs approval / Blocked control per tool.
On the web today, per-tool permissions are set from the approval card shown in the conversation when a tool asks: that is where Always allow, Needs approval, and Blocked live. A standing per-tool settings panel exists on Desktop. Connecting and disconnecting a connector is recorded in your account’s security audit events.