/ command
in Claude Code and OpenCode, a $ skill in Codex.
None of them can fail loudly. Every one exits cleanly even when there’s nothing
to do —
Not paired is a success, not an error.
The empty cells on the last row aren’t an omission: Claude Code and Codex update
through their own hosts, so Nomo adds no command there. What each of them needs
— which for Codex is usually nothing — is in
Installation.
pair
code argument skips the browser entirely and prints a typeable one-time
code, for a headless box or an SSH session. It’s the second-choice path on
purpose: that code lands in your terminal, and therefore in the agent’s
transcript.
Pairings expire after 10 minutes unused. One pairing covers the machine, not
the agent — Claude Code, Codex and OpenCode on the same Mac share it. Full
walkthrough in Pairing.
status
— you are here.
Whether this computer is paired at all, plus the worker it talks to and the
pairing it holds.
NOT PAIRED means nothing from here reaches the app, and
the arrow underneath prints the pair command for the agent you’re
standing in.When an event last actually left this computer, and whether the watchdog is
up. A watchdog that isn’t running is fine on its own — it starts itself on the
next session.
never sent, with a session genuinely running, is not fine.The direct local network link: the port
and id this computer listens on, when your phone last reached it, and when the
Mac last advertised its address. The middle line is the one that matters —
it’s the only proof the direct leg has ever worked. Advertised long ago and
never reached means your phone can’t get here; advertised seconds ago and not
yet reached is simply too early to tell. A refused request prints its reason
rather than leaving silence. The row is absent entirely on a computer that has
never listened — the switch is on your phone and off by default.
on means permission prompts are held here and sent to your phone. PAUSED
means they aren’t — they go to the terminal instead, and stay that way until
someone resumes them, however many months later. If your phone has stopped
asking you anything, this row is the entire explanation: see Pausing
it.Whether your agent is feeding Nomo, and how long ago it last did. OpenCode has
no hooks, so there the row is called
Plugin instead. Nothing firing? Restart
Claude Code so its hooks load; in Codex run /hooks; in OpenCode restart it so
the plugin loads.Counted per agent now:
1 of 4 tracked here means this computer is tracking
four sessions and one of them is yours. Rows that should have died are what
reset is for.! is the problem, → is what to do
about it, written in the command dialect of the agent you asked from. Every
other agent on the computer gets one condensed line under Also on this
computer — and when one of those is broken, it says so here rather than
waiting for you to go and look:
approvals
reset
unpair
update
OpenCode
/nomo-*
command the release added — and tells you to restart OpenCode. Plugins are
imported once when its server starts, so until you do, the old copy is still the
one running.
It refuses rather than acting when it can’t be sure, and each refusal says what
to do instead: a checkout pinned by an earlier --ref install, a working tree
with uncommitted changes, a checkout that’s been moved or deleted, or nothing
installed here at all.
It updates the checkout the stub points at — the copy OpenCode actually
imports — which isn’t necessarily the one whose command file you typed. If you
keep more than one clone, that’s the distinction that matters.
Where state lives
Everything the plugin keeps sits in~/.config/cc-status/ — the pairing, the
encryption key (mode 0600), one file per tracked session, and a local trace
log. Nothing in that folder is sent anywhere.
Read the source
These commands are the plugin, and the plugin is open source. If you want to know exactly what runs on your machine and what leaves it, the answer is in one repository — marketplace installs are a plain clone of it.KarrixLee/nomo
The full plugin source, MIT licensed. Issues and bug reports live here too.

