Skip to main content

Giving your agents reach

AI,Claude Code,agents,tools
Two windows side by side. Left, labeled 'the agent · still working', a terminal where a background session finishes an overnight run — tickets closed through the night, one ask filed — then runs 'reach andrew', picks the imessage channel as quiet hours end, and shows 'sent'. Right, labeled 'reach · how it finds me', an iMessage window from the agent: 'Overnight run's done — 9 tickets landed, tests green' and 'One thing needs you when you're back: the deal-card layout. I put both options on a page:' followed by a link.
The whole idea in one image: the agent keeps working after I leave (left), and when it finishes — or needs me — it comes to me on a channel I actually check (right).

The key to being able to walk away while your agents are working is giving them a way to reach you after you have. I just released reach, a skill that does exactly that — taking a different approach than other solutions.

reach isn’t chat relocated to another channel. An agent you message on your phone is still a conversation you’re tending. With reach the default is silence: the agent speaks up only when something is worth your attention — a finished run, a blocker, a decision only you can make. The channel isn’t where you talk to your agent; it’s where your agent finds you.

One of the core principles of reach is that the models can figure things out on their own. OpenClaw — the open-source personal agent that made messaging-your-agent a household pattern — ships with lots of adapters for various channels; reach ships with none. My agents can contact me through iMessage, email, macOS notifications, and Pushover — and none of that ships as code in reach. Any time you want a new channel, you just ask your agent to set it up — and chances are, whatever the channel or mechanism, your agent will figure it out. What it produces is just a markdown file it writes for itself: how to send, when to use it, where the credentials live (referenced, never inlined).

The same goes for routing decisions. You can tell your agent when to use which channel — urgency, time of day, whatever you like — and it’ll remember, and reach you through the right channel next time.

It’s not zero-config. The config just happens by talking to your agent.

You can use reach to contact other people too, or whole teams (via a shared Slack channel, for example). The same routing approach applies there as well.

In “what does it do” terms, reach is pretty simple: it gives your agents the ability to contact you when they need you, to send you updates, a file, a link. What’s novel about it (imo) is that it adapts to you and your environment without hard-coding anything.

reach is the obvious companion to surface, which I wrote about a few weeks ago. If your agent needs you while you’re away, it mints a surface — deployed somewhere you can access it — and then reaches you with the URL. Fable (Anthropic’s new top-tier model) has been particularly proactive about this: it sends me reaches to update me as it completes work, without being asked.

The surface example points to one surprising aspect of reach: it’s one-way, purely a sending mechanism. That’s mostly for simplicity — no handling arbitrary shapes of input coming back. But a surface ends up being a better reply UI anyway: chat limits what the agent can put in front of you and what you can hand back. If the agent’s answer to your reply would be another page, why round-trip through chat at all?

Install

reach is a skill in a plugin — free and open (Apache-2.0), no binary, no daemon. In Claude Code (CLI or Desktop):

/plugin marketplace add aac/reach
/plugin install reach@reach

On Codex:

codex plugin marketplace add aac/reach
codex plugin add reach@reach

Then tell your agent:

set up reach so you can iMessage me — then send me a test

It walks through the setup conversation — the channel, you as a recipient, your preferences — and the test lands on your phone. From there it’s ambient. Kick off something long and add:

reach me when it's done, or if you get blocked

Or teach it a rule once:

add Pushover as a channel — use it for anything urgent, and stay quiet after 10pm

and it applies from then on, without you thinking about it again.

The piece that makes leaving work

In the time since OpenClaw’s release, Anthropic has kept pushing the Claude ecosystem in this same direction: scheduled tasks, then remote control, then claude agents, then enough loop primitives (/loop, /goal, /schedule) that the Claude Code team published a whole taxonomy of loops — agents repeating cycles of work until a stop condition is met. Claude Tag goes furthest: it’s not chat — you tag the agent in, it goes off and works on its own, and it reports back when it has something to say. Tag bundles both halves of that ambient pattern into one product, inside Slack: the tag-in that starts the work, and the report-back when it’s done. reach is the report-back half as a standalone primitive — for whatever agent you already run, over whatever channels you actually use. The other half, kicking work off from wherever I am, is a piece I’m figuring out. Whatever it ends up being, it’ll make the same bet reach does: adapt to you and your environment. For now, work still starts at my laptop.

These are all building blocks of an autonomous workflow. My act and ask trackers supply the durable queue, and the inbox of things only I can do. surface and reach are how my agents and I interact whenever I’m away from chat, or when the exchange needs a richer interface — on my schedule instead of the session’s.

reach is the smallest of the four tools — by a wide margin — but it’s the one that makes the workflow feel like an evolution. Being able to walk away without the work stopping, and to respond from wherever I am when it needs me, feels more like the future. I’ll describe the full workflow in more detail soon.

One caveat, same as with surface: setting up a channel is a real agentic task — the whole design leans on a capable model working out the mechanism. If a lighter model flails on a setup, try a stronger one before concluding it doesn’t work.

This post was edited with the assistance of AI.