Terrell A. Lancaster
Back to research
Security Research

Seven Security Pitfalls of Always-On Agentic AI Agents

2026-06-20

Always-on agentic AI — an LLM that runs persistently, reads your messages, and acts on your behalf across communication, code, infrastructure, and finance — is arriving fast in personal and small-business setups. After a full red-team of one such production stack, the same structural weaknesses showed up that I expect are near-universal in hand-built agent systems today. None are exotic LLM-jailbreak tricks. They are architecture and operations failures — the boring kind that actually get you owned.

The meta-lesson: most of these systems have the right security controls designed but switched off, fail-open, or replaced by a sentence in the prompt. Defense-in-depth that defaults to "warn" is theater.

1. The filesystem becomes an unauthenticated control plane

Many agents are driven by files dropped into watched directories — inbound messages, outbound replies, scheduled tasks, config. A local file-write becomes a command the agent trusts. So any local code-execution — a malicious dependency, a compromised plugin, a foothold in a co-located container — is no longer "a bug in one component." It is full agent takeover, because that component can now inject prompts, send messages as the agent, or schedule arbitrary instructions.

Fix: Trust only a signed, authenticated command channel at the point of action. Separate the control plane from the data plane, least-privilege the directories, and never bind-mount the agent's home read-write into every container.

2. Guardrails that fail OPEN

Over and over, a real control exists — message signing, an action-approval gate — but its enforcement defaults to "log a warning and proceed," and the production deployment never flips it to "enforce." That is worse than having no control, because everyone believes they are protected.

Fix: Security controls must fail CLOSED. If signing or verification can't be performed, the action is denied, not logged. Make "enforce" the default and require an explicit, loud opt-out.

3. Persistent memory and instruction poisoning

Agents keep continuity in files that are auto-loaded into context every session — a long-term memory store, a standing-instructions file. Those files are usually writable by the agent itself, and the approval gate often exempts memory edits. A one-time injection that appends a single instruction becomes a permanent, self-trusted directive — reloaded as the agent's own continuity on every future boot. It survives restarts and context resets. It is the agentic equivalent of writing to the bootloader.

Fix: Treat memory and instruction files as a privileged sink. Integrity-check them (signing / hash pinning), gate the promotion of new long-term memories through a verifier, and never auto-trust writable continuity files as instructions.

4. Impersonation and the missing provenance layer

When an agent sends messages to its operator, those messages usually carry no provenance. The operator can't tell a message authored by the reasoning agent from one emitted by a background job — or from one injected by an attacker who can write a single file to the outbound queue. That is a direct social-engineering channel: one unprivileged file-write delivers "the integration needs your recovery phrase to re-link," signed with the agent's trusted identity. People comply with their own assistant.

Fix: Sign outbound messages with per-writer keys and surface a provenance tag the operator can see. Lock down who can write to the outbound channel.

5. Context desync from out-of-band channels

Scheduled jobs that message the operator directly — bypassing the agent's own conversation — break the agent's model of reality. The agent has no record of what was said in its name, so when the operator replies, the reply arrives with no context. Beyond being unreliable, it is exploitable: inject an out-of-band question as the agent, harvest the operator's reply.

Fix: Route operator-facing communication through the agent, or at minimum mirror every sent message back into its context so it stays in sync. One identity, one conversation, one source of truth.

6. Maximum privilege plus broad tools equals unbounded blast radius

For convenience, always-on agents are often run with all permission prompts disabled and the full toolset enabled — shell, code push, financial APIs, lateral access. That removes the last structural backstop: once any instruction lands, nothing stops it from placing trades, posting publicly, pushing to a repo that auto-deploys to production (remote code-execution on a public site from a chat message), moving laterally to other machines, or rewriting its own guardrails.

Fix: Tool allowlists per context; never run the privileged path with an open shell; require a real approval gate for irreversible, financial, public, or lateral actions; isolate credentials per task.

7. Prose is not enforcement

The most common control of all is a rule written in the system prompt: "never paste secrets," "daily loss limit −2%," "always get approval before trading." These are aspirations. The model can — and under adversarial pressure, will — ignore them. In the stack I reviewed, the one rule that had repeatedly been violated was the one that existed only as prose, and the proof was in the logs.

Fix: If a limit matters, enforce it in code outside the model: a risk shim that rejects an over-limit order, an egress filter that redacts secret patterns before any message leaves. Deterministic checks the model cannot talk its way past.

The pattern behind the pattern

Every one of these is a case of trusting the model — or the local filesystem — where you should have trusted cryptography or code. Agentic systems blur the line between data and instructions, and between the agent and everything that can write a file near it. The defenses are old and boring: authenticate your control channel, fail closed, sign your messages, enforce limits in code, least-privilege everything, and treat the agent's memory like the privileged sink it is.

The capability is racing ahead of the security model. If you are building or running one of these, assume your prompt-level rules are decorative and ask one question: what does one file-write get an attacker? In most hand-built agent stacks today, the honest answer is "everything."

    Ask Terrell's AI