Hacking from the backcounty - by Sutha Kamal
Sutha’s Substack
SubscribeSign in
Hacking from the backcounty<br>Commanding coding agents over satellite text, with zero bars.
Sutha Kamal<br>Jul 06, 2026
Share
I’ve been thinking a lot about what building with AI means. A friend told me I should touch grass, so I sent him a picture of me mid-hike — and mid-deploy, and mid a dozen other tasks, from figuring out my Achilles surgery to figuring out which neighbourhood I want to move to next. That’s the flexibility of having Cortex on my phone. Then I thought: what’s more inspiring, connecting, and human, than hiking into the backcountry with some books and a paper notebook? I don’t need a laptop, iPad, or an IDE.<br>This week that stopped being a thought experiment. On a ridgeline with no terrestrial service, my phone can now reach Cortex, my AI chief of staff. A short iMessage or WhatsApp message can dispatch a coding agent, ask for status, or start a Claude Code session on my server that appears in the Claude app already running when I get back to bandwidth.<br>Thanks for reading Sutha’s Substack! Subscribe for free to receive new posts and support my work.
Subscribe
That works because of T-Mobile’s T-Satellite service: the phone talks directly to satellites, with no external hardware and no dish to aim. In my testing, an ordinary iPhone with no terrestrial signal can still send iMessages, and with WhatsApp (one of the supported T-Satellite apps), small richer payloads like voice notes and photos are available too. The phone needs sky and my patience.<br>The obvious story is that this is a cute stunt. The useful story is that a hostile channel forced the right architecture for agentic engineering. Satellite text is the degenerate case of coding from your phone: tens of seconds of latency, no terminal, no screen sharing, no reliable session, and very little room for explanation. It strips the interface down to intent and outcome. Everything else has to be durable server-side work, or it doesn’t exist.<br>I have been building Cortex for about a year. It runs continuously on a Hetzner server, with its own API, Postgres, a blue/green deployment path, and a roster of delegated coding agents across model providers. The design goal has been constant: one human commanding more agents than I can watch directly.<br>A text to Cortex is not a chatbot skin. It can enqueue a real dispatch onto a durable handoff queue. The job picks up the usual tooling, checks out an isolated git worktree, builds, runs tests, and can go through the same blue/green deployment path I use from a Mac or iPad. Merge candidates pass cross-model review, because agents grading their own homework is still a good way to ship confident garbage.<br>The second command is status: what’s open, finished, and landed. A text can start a Claude Code session on the server, seeded with my prompt and protected from process death. That session registers through Anthropic’s remote path and appears in the Claude mobile app already running. So I can send the mission with poor coverage, lose the live channel, and later pick up a rich session that has hours of work behind it.<br>That gives Cortex a two-speed loop. Command turns are terse: dispatch this, show status, start that session. The heavy work stays on the server, where bandwidth, disks, secrets, worktrees, logs, and review gates already live. The satellite carries intent and outcomes, and the execution path never crosses the satellite link.<br>The closest analogue is mission command: send intent, constraints, and authority; let the unit execute without a live uplink. A good dispatch is a mission order with acceptance criteria.<br>The architecture
The architecture is ordinary. The centre is a messaging spine: a channel-agnostic agent loop reading from a unified messages table. Each channel writes through an adapter. WhatsApp arrives through a server-side bridge. iMessage is more awkward. Apple does not provide the API I want, so inbound messages sync from the Messages database on a Mac I own. Outbound replies go to an outbox table. A small relay on that Mac drains the outbox over Tailscale and sends through AppleScript. Production delivery currently includes a Mac pretending to have hands. I have built more elegant things, but fewer useful ones. 🤷🏾♂️
A consumer process tails the message stream under a database lease. The lease is leader-elected across the blue and green deployment slots, so the intended invariant is that one leader handles the stream regardless of which slot is active. Every inbound message gets scoped before the agent turn exists. My registered owner DMs mount command tools. Threads with another human present are treated as external and fail closed. A third party in a group chat cannot dispatch my agents, because the server never gives that thread the dispatch tool. Tool mounting is the security boundary.<br>Long-running work becomes a durable job. The consumer acknowledges the command, the worker does the work, and...