Set up
1
Install the SDK
It puts an
eesi command on your path.2
Confirm your number
Your API key comes from the API keys page of the EESI console. Nur texts the
number a six-digit code (The settings are kept in
--by call reads it on a call instead); enter it.~/.eesi/companion.json, readable by you only.3
Connect your agent
/nur-companion:setup does the second step from inside the
session, and /nur-companion:call-me asks for an update now.eesi companion status shows the settings and the confirmed numbers.
When Nur calls
By default, after a turn of at least three minutes and when a session ends.eesi companion setup --call-on stop calls after every turn, never turns it
off, and min_minutes sets the threshold. The hook returns at once and the
call runs in the background, so the agent never waits.
What Nur knows
A briefing written on your machine from the session’s transcript andgit:
what you asked for, what the agent said when it finished, the files it wrote,
the commands it ran and how many steps failed, lines added and removed since
the last commit, new files, commits today and languages by lines. It is the
call’s instructions, so it is kept with the call like any session of your
organization.
Follow-ups and call backs
After the call, what you asked for is read off its transcript and run in the same session:claude -p --resume <session> (flags in claude_args, default
--permission-mode acceptEdits) or codex exec resume <thread> (codex_args,
default --sandbox workspace-write with approvals off). The companion waits
for it, up to follow_up_minutes (60), and calls back with what the agent
said, or with why it could not run (the agent’s command line missing or signed
out, say). A call back can bring the next request; the loop ends on a call that
asks for nothing more. Turn follow-ups off with follow_up: false.
Call Nur: the code line
You can also call Nur. Start the listener beside your repository:call_on is never). Call again any time. Nur knows what is
running and its latest steps (the files it edited, the commands it ran), what
is queued, what is done and how the code moved. Ask for more and it joins the
queue.
The listener keeps briefing the line every few seconds; everything about your
code stays on your computer until a brief carries it to a call. Only the phone
the listener answers for (eesi companion setup --phone) hears about your
code: anyone else your organization confirmed reaches Nur, never the code.
Caller ID can be forged, so the code line talks only when the phone carrier
vouches for the caller (STIR/SHAKEN). Otherwise Nur says it will call you right
back, hangs up, and calls your confirmed number, which a forger cannot answer.
Nur calls a number back at most three times an hour.
Talk to Nur: the live line
The live line, 437-782-2634, is Nur with nothing to report: call or text it any time to talk, in any language. Anyone can, with no setup: a caller nobody confirmed gets five calls a day of up to ten minutes and thirty texts, paid by EESI. A confirmed caller the carrier does not vouch for is called back, like on the code line. Where one number serves both lines, it is your coding companion whileeesi companion listen runs, and Nur to talk to when it does not.
Text Nur
Both lines take texts from your confirmed phone. Text the code line to ask how it is going (“is the login page done?”) or to add work (“also add a logout button”): Nur answers from the listener’s live facts. A text’s sender can be forged, so work asked for by text waits for a six-digit code Nur texts back: reply with it from the same phone within fifteen minutes and the work is queued like a request on a call. Text the live line to chat; Nur keeps the day’s texts in mind.eesi companion listen --notify text texts you when a task is done instead of
calling (both does both). Reply to that text and it reaches Nur.
Texts to the lines need the numbers set up for messaging with the carrier
(POST /v1/phone/messages/inbound is the inbound webhook). A number that texts
a line more than 60 times an hour stops getting replies, and an organization
sends at most 200 texts a day; POST /v1/phone/messages texts a confirmed
number from the code line.
Confirmed numbers
On the shared EESI line, Nur calls and texts only numbers confirmed with a code, so an API key can make Nur call its owner and never a stranger. The code comes by text, or read by the phone carrier’s own voice on a call (a text the carrier refuses becomes a call); either way it never reaches a transcript. A number gets one code a minute and five a day from all organizations together, an organization five a day, and a code lasts ten minutes and five tries (fifteen a day for a number, whoever makes them). An organization places at most thirty calls an hour on the shared line. Organizations that call through their own carrier account confirm nothing for the calls they place. The code line answers only confirmed numbers; the live line answers anyone.Calls from your own code
The companion is built on one API: have Nur call a confirmed number about anything.POST /v1/phone/calls places a call and GET /v1/phone/calls/{id} reads it
back; /v1/phone/numbers lists, confirms and forgets numbers. Nur can end the
calls it places: when the conversation is over or the person asks, it says
goodbye and hangs up.