How to resume AI coding sessions from your phone
Resume an inactive session without starting over — what “resume” actually means, when it’s available, and what to do when it isn’t.
- CLI
- 0.1.0
- Preview ref
- f36aa45
The most frustrating kind of interruption isn’t a crash — it’s the moment you come back and realize:
- the session is inactive,
- you still want to continue it,
- but you’re not sure whether you’re about to resume the same session or accidentally start a fresh one.
On desktop, you can usually sort it out. On a phone, it’s easy to give up and start over.
- Happier: gives me a strict “attach vs resume” workflow, so I don’t accidentally fork my work by starting a fresh session when I meant to continue. Trade-off: resume only works when the provider supports it and the session has valid resume metadata.
TL;DR
- Attach = reconnect to a session that’s still running.
- Resume = reopen the same provider session for an inactive Happier session (only when the provider supports it).
- Resume is strict: if vendor resume fails, Happier errors instead of silently starting a new session.
On your phone:
- Set up Happier (or attach via Direct sessions), then open the inactive session.
- If input is enabled, send your next message — Happier will resume first.
- If input is disabled, the session is not resumable (or the machine is offline). Use Attach (if it’s actually still running), or start a new session.
The problem (in plain language)
When you’re doing real work with an AI coding agent, “session continuity” is the difference between:
- keeping momentum, or
- losing an hour re-explaining context.
But not every provider session is resumable, and not every inactive Happier session can be resumed.
So the goal isn’t “always resume.” The goal is:
Know what you’re resuming, and don’t accidentally fork your work by starting a fresh session.
What I mean by “resume from your phone”
I don’t mean your phone is running the agent.
I mean:
- the session runs on a machine you trust (laptop / server / dev box)
- from your phone, you can reopen/resume the session and keep going (while the session still runs on the owning machine)
Attach vs resume (this clears up 80% of the confusion)
Attach
Use attach when the session is still running locally and you just want to reconnect to the live process.
Resume
Use resume when the session is inactive and the provider supports reopening the same provider session.
In Happier, resume is a strict workflow:
- Find the existing Happier session
- Check whether it’s actually vendor-resumable
- Ask the provider backend to resume the same vendor session
- If it fails, show an error (don’t silently start a fresh session)
That strictness is intentional. It preserves one session identity and one transcript source of truth.
When a session is resumable (what has to be true)
A session is resumable only when all of these are true:
- it’s a normal Happier-managed session
- it’s currently inactive
- it is not archived
- Happier has a valid provider resume id stored in session metadata
- the selected backend/provider supports resume for that session
- your settings don’t disable that backend
If any of those checks fail, Happier treats the session as not resumable.
If you’re new to Happier (what it is, and where to get it)
If you haven’t seen Happier before: it’s an open-source companion app (mobile/web/desktop) for AI coding agents like Claude Code, Codex, and OpenCode.
The workflow here is: use Happier from your phone to resume/continue a session, while the session still runs on the machine that owns it (laptop/server/dev box).
For this guide, that means you can keep one session identity (and one transcript) instead of starting over every time something goes inactive.
Get set up:
- How to run Happier from your phone
- GitHub: https://github.com/happier-dev/happier
- Install/download: https://github.com/happier-dev/happier#how-it-works
- Discord (community + support): https://discord.gg/W6Pb8KuHfg
Phone workflow: resume an inactive session
1) Open the session
From your phone, open the inactive session you want to continue.
What you’ll usually see:
- Inactive + resumable + machine reachable → input is enabled; sending a message resumes first
- Inactive + not resumable → input disabled
- Inactive + machine offline → input disabled until the owning machine is reachable
2) Send the next message (if enabled)
If the session is resumable, just send your next prompt.
Happier will resume the provider session first, then deliver your message.
3) If input is disabled, decide what you’re doing instead
If the session isn’t resumable, you have a few options:
- If the session is actually still running: use Attach from a terminal on the owning machine.
- If it’s truly dead: start a new session and link the relevant files / summary.
- If the machine is offline: bring the machine back online first.
Codex note (why resume sometimes surprises people)
Codex can run through multiple backends in Happier.
In current Happier builds:
- Codex defaults to App Server (the normal resumable path when metadata exists)
- plain MCP can still run fresh sessions, but it’s not a vendor-resume path
- resume is strict: Happier does not replace a failed Codex resume with a new session
So for Codex, resumability depends on:
- whether the session has valid resume metadata
- whether the current backend path supports resume for that session
- whether machine dependencies for that resume path are available
Troubleshooting
Symptom: the session is inactive, but I can’t type a message
Likely causes:
- it’s not vendor-resumable (unsupported backend, missing resume id)
- the session is archived
- the owning machine is offline/unreachable
Fix:
- confirm the machine is online
- if it’s not resumable, start a new session (don’t keep poking it expecting it to resume)
Symptom: I expected resume, but it started a fresh session
In Happier, explicit resume is designed to fail closed.
If you see a “fresh session” feeling, it’s usually because:
- you didn’t resume; you created a new session, or
- you reopened a direct/provider-native session rather than a Happier-managed synced session
Fix:
- double-check you’re operating on the existing Happier session id you care about
Symptom: I can resume on desktop but not on my phone
Likely causes:
- you’re on the wrong server/profile on your phone
- the phone hasn’t trusted/added the same server
Fix:
- switch to the same server/profile on mobile, then open the session again
FAQ
Does resume work after a reboot?
Sometimes.
Resume depends on provider support + stored resume metadata, not on whether your machine rebooted. If the provider can reopen the same session, resume can work.
Why is resume strict?
Because “silently starting a new session” is the fastest way to lose continuity. Failing closed is annoying in the moment, but it preserves the meaning of a session.