First, for anyone meeting it here: @@ is a small native Mac app. You type @@ in an editable, non-secure text field — a code editor, a Google Doc, a reply box — and the context you attach can go to the agent you already use: Claude Code, Codex, Grok, Cursor, and friends. You add one sentence, press Return, review the answer, and return it to the original field with Tab. There's a proper introduction if you want the tour.
This post is not the tour. It's the story of why the thing exists.
The loop I couldn't stop noticing
@@ started with my own workflow.
I live in the terminal. Claude Code and Codex are open all day, and they are genuinely strong — strong enough that the agent stopped being the bottleneck. But CLI agents have one built-in flaw: they live in the terminal, and my work doesn't.
So every time I wanted my agent to look at something — an error on screen, a UI, a paragraph someone sent me — the same loop ran. Screenshot. Save to desktop. Switch to the terminal. Drag the file in. Explain what I want. Wait. Copy the answer. Switch back. Paste.
Nine steps, and the agent did one of them. I did the other eight. None of the eight was hard — that's what made it insidious. No single trip ever felt worth fixing, but I was making dozens a day, and the sum was a dull ache. Somewhere in those trips I finally named the role I'd been playing: I was the courier.
Nothing fixed it without switching apps
Once I went looking for a fix, I noticed that everything out there shared one assumption: that I would come to the agent. Some wrapped it in a chat window, some in a full workspace with sessions, history, and its own home for my documents. Whatever the shape, the price was the same — switch apps, move in, carry the result back out by hand. That doesn't remove the loop. It renames it.
What I wanted was concrete, and I could say it in one breath: my screenshots, my clipboard history, my screen recordings, and any text I select anywhere on screen should become context for my agent in the fastest, simplest way possible — and the path to the agent should never be "switch apps." Summon it wherever I am; get the result back right there.
Gather, send, return. The agent comes to me. Nothing else changes.
Nothing I could find worked that way. So I followed my heart and built it.
Follow my heart
Follow my heart, for me, means exactly what it says: I want something, so I build it. Every feature in @@ started as a real need of mine — not a guess about what a hypothetical user might want, not a decision made on a whim.
That has a consequence you can feel in the product. You might expect an app like this to hide a graveyard — rewrites, abandoned directions, features cut halfway. @@ has none. Nothing was torn down and nothing was cut, and not because I planned unusually well: when every feature begins as something you personally need, nothing is ever speculative, so there is nothing to walk back.
It's also why the collectors were never an afterthought. A full screenshot tool, a searchable clipboard history, screen recording, a selection bar — they were in the want from day one, because that's where my context actually lives: the shot I took this morning, the paragraph I copied an hour ago, the sentence I just highlighted. Each of them grew until it could stand alone — you could use @@ for months without configuring an agent and it would earn its keep — but they all exist to feed the same panel. Collecting something and handing it to an agent were always the same motion.
What the want decided
Hold that one-breath sentence up against any design question, and it answers for you.
The entry point was never really a choice. If the result must return to where you're typing, the trigger has to start where you're typing. A global hotkey knows nothing about where you are; the two keystrokes @@, typed at the cursor, know everything. The input field you summoned it from is the destination — "where should the answer go?" is answered before you've asked anything.
The same want drew a red line I've defended ever since: @@ is a bridge, not a workspace. Every working window is summoned from the current task and disappears when that task is done. Settings does keep a read-only local Session History so an accepted prompt and answer are not lost, but it is an archive, not another chat workspace to live in.
It decided what happens when a job is too big for a text field. Refactor this project, go through these twenty files — that's not an answer to inject, that's a process to supervise. So @@ gathers the context and the working directory, hands everything to the interactive agent in your own terminal, and exits the stage. No progress wrapper, no task center. Claude Code's own TUI is already the best interface for watching Claude Code work; wrapping it would only produce a worse copy of it. Knowing when to leave turned out to be a feature.
And it decided that @@ could never marry one agent. For local CLIs the boundary is a child process: the prompt goes in as arguments and the final answer comes back on stdout. Direct APIs use your own key, while Ollama and Siri AI provide local paths. No AtAt model account sits between you and the provider. That is why the agent list is a dropdown instead of a partnership announcement — and why the app ships with no bundled model or tokens to meter.
Where it ends up
The agents will keep getting better without any help from me. The distance between them and the place you actually work — that was the part that had to close, and I closed it for myself first.
@@ is my answer, built the way the best tools I own were built: by someone who wanted it before anyone asked for it. If you've ever hovered a screenshot over a terminal window and felt like a courier in your own workflow, type @@ somewhere and see what your agent can do when it finally meets you where you are.