For three years, the default shape of AI in software has been the chatbot. A sidebar, a floating window, a modal. Something you go to, ask a question, and walk away from. Almost every AI feature shipped in mainstream apps in that period took the same shape, because it was the shape the model providers offered first.
Chatbots are useful. They're also wrong as a default. They put the AI where you have to remember to ask, they make you supply the context every single time, and they pull you out of whatever you were actually doing.
There's a different pattern, and it's getting clearer in 2026: the shadow agent.
What a shadow agent is
A shadow agent has three properties:
- It runs ambiently. It doesn't sit in front of you. It runs in the background, on your machine, watching the work you're already doing.
- It executes in place. When you give it a command, you don't switch to a different AI tab and brief it. The agent is already loaded with the context, and it acts where you are.
- It's a context layer first. Watching the work, building a private graph — that's the differentiation. The agent that operates on top of that graph is downstream of having the right context to operate from.
The "shadow" part is the deliberate choice to be quiet. A good shadow agent should feel less like an app and more like a permission you granted, weeks ago, that just keeps making things smoother.
Why the chatbot pattern is the wrong default
A chatbot is great for the moment when you've decided to ask. It's terrible at the much more common moment: when you're already in another tool, doing real work, and an AI could have helped if it had been there — without you having to leave the work to ask.
When the AI is something you have to summon, three things happen:
- You only summon it for big asks. Small ones aren't worth the context-load and the tab switch.
- When you do summon it, you spend the first minute briefing.
- The output is shaped by the brief you wrote, not the work you're doing.
When the AI is ambient — when the context is already there and the agent acts where you are — the math flips:
- Small asks are cheap. You make more of them.
- The brief is automatic. You spend zero minutes on it.
- The output is shaped by the actual work, not your summary of it.
The reason we didn't get here sooner
The shadow agent pattern requires three pieces, none of which were obvious until recently:
- Reliable, scoped access to your screen state. macOS accessibility APIs make this possible through structured app text rather than pixels.
- Per-tool integrations that respect read-only, scoped access. OAuth-style flows for Notion, Slack, Linear, Gmail, GitHub.
- Local-first storage as a defensible default. Cloud-first context graphs about your work feel wrong the moment you think about them. Local-first feels right.
Two years ago, you could have shipped a version of this, but every part of it would have been worse. Today, the pieces compose.
How Corivo embodies the pattern
Corivo is the shadow agent we're building. The choices follow directly from the pattern:
- It runs as a Mac app in the background. It's rarely the thing in front of you.
- It is its own AI agent. Talk to it where you are; you don't switch to Corivo to use Corivo.
- Your context graph lives on your machine. Tokens for connected tools live in your local keychain.
- Permissions are intentional and minimal — accessibility and full disk access, because the agent executes for you.
What this changes
If the shadow agent pattern is right, the next generation of AI products will be much smaller, far less in-your-face, and far better at getting out of the way. Most of the value will move from the chat surface to the context layer that feeds the agent.
The question every AI product team should be asking themselves in 2026 is not "how do we add another chat surface?" — it's "what context do our users keep re-explaining, and how do we make that re-explaining unnecessary?"
The answer, increasingly, lives one layer below the chat. That's where Corivo lives.
Try Corivo — the Free tier is enough to feel the pattern.