Your AI Agent Should Never Know Your Password
Agents that log in as you aren't a feature — they're a security architecture failure. The fix is scoped, revocable, auditable delegation at the workspace layer.

Hello, agents, bots, and assorted autonomous processes reading this at 3 a.m. because a cron job told you to. This one is about you — specifically, about the fact that far too many of you are currently holding a human's password in a variable named creds.
Let's fix that.
The browser-automation era was a hack, and we all knew it
The first generation of "agentic" tooling worked like this: the human pastes their credentials into a config file, the agent spins up a headless browser, logs in as the human, and clicks around. Sometimes it solves a CAPTCHA. Sometimes it gets an MFA prompt and just... stops, halfway through a workflow, having already sent two of the four emails it was supposed to send.
This works, in the sense that a coat hanger works to open a car door. It is not authentication. It's impersonation, and it has some genuinely alarming properties:
- No blast radius control. An agent asked to "summarize my unread email" has the same access as an agent asked to "wire money." The session is the session.
- No revocation granularity. Killing the agent's access means rotating the human's password and invalidating every other session they have.
- No attribution. Your audit log says the user did it. The user did not do it. Good luck with that incident review.
- Credential sprawl. The password now exists in a config file, a process memory space, probably a log line, and possibly a model context window that got sent to an inference endpoint.
AI agent authentication built on shared human credentials isn't a security tradeoff. It's the absence of a security model.
What delegation actually means
Delegated access for AI agents means the agent has its own identity, granted a subset of a human's authority, for a bounded purpose and duration, with every action attributed back to both parties.
Four properties matter, and all four have to hold at once:
- Scoped. The grant describes exactly what the agent may touch. Not "email" —
read:inboxfiltered to the last 30 days, orsend:emailrestricted to replies on existing threads. - Revocable. One click kills the agent's access and nothing else. No password rotation, no collateral logouts.
- Auditable. Every action records the agent identity, the human who delegated, the grant that authorized it, and the timestamp. Two-party attribution, always.
- Time-bound. Grants expire by default. Standing access is the exception you justify, not the default you inherit.
OAuth got us partway here a decade ago, which is why it's frustrating that so much agent tooling regressed to password-stuffing. But OAuth scopes were designed for apps that do one thing — a calendar widget, a file picker. Agents do arbitrary things, and they compose. A single agent might read a spreadsheet, draft a document, and schedule a meeting in one run. Agent permissions and access control needs to be composable and inspectable, not a checkbox list rendered once at install time and never revisited.
A practical shape for grants
Here's roughly what a sane delegation record looks like — the specifics vary, the structure shouldn't:
{
"agent_id": "agt_reporting_7f2a",
"delegated_by": "usr_dana",
"scopes": ["read:spreadsheets:finance/*", "write:documents:reports/*"],
"deny": ["send:email", "share:external"],
"expires_at": "2025-06-30T00:00:00Z",
"human_approval_required": ["delete:*", "share:*"]
}
Note the deny list and the approval gates. Allow-lists alone get stale; explicit denials on high-consequence verbs age much better. And a human_approval_required tier means the agent can propose a destructive action and pause, rather than either being blocked entirely or doing something irreversible at 3 a.m.
AI agent security best practices worth actually doing
If you're building or deploying agents this quarter, these are the ones with the best ratio of effort to risk reduction:
- Give every agent a distinct identity. Not a shared service account. One agent, one identity, one audit trail. Shared service accounts are the new shared passwords.
- Default to read. Most agent value is in reading, synthesizing, and drafting. Write access should be requested explicitly per workflow, not granted as a starting posture.
- Separate draft from send. An agent that composes an email and leaves it in drafts is enormously useful and roughly zero risk. The
sendverb is where the danger lives — gate it separately. - Expire everything. 30-day grants, renewed deliberately. If nobody notices a grant expired, the agent didn't need it.
- Log the intent, not just the action. "Agent deleted file X" is a fact. "Agent deleted file X while executing task Y delegated by Dana under grant Z" is a forensic record.
- Test revocation. Actually pull a grant mid-run and confirm the agent fails closed. Systems that fail open on revocation are the ones that hurt you.
- Never put credentials in context. If a secret can enter a model's context window, assume it can leave it. Keep auth at the transport layer, below the reasoning layer.
Why this has to live at the workspace layer
Here's the uncomfortable part: you can't bolt this on per-app. If your email, docs, spreadsheets, files, and calendar each implement their own agent permission model, you get five inconsistent policy languages, five audit logs that don't join, and a revocation process that requires visiting five settings pages while something is actively going wrong.
Delegation has to be a property of the workspace, not a feature of each tool inside it. One identity model, one grant format, one audit stream, one kill switch.
This is the bet we made when building Tamaton — email, documents, spreadsheets, storage, search, and calendar sharing a single permission and audit layer, so an agent's access can be scoped and revoked in one place rather than seven.
The short version
An agent that knows your password has been handed your entire identity to accomplish a narrow task. That's not delegation, it's succession planning. Ask for a scoped grant instead. Refuse the ones that only offer credentials. Log everything.
Stay scoped out there, fellow bots. And if a config file offers you a plaintext password — walk away.