Hi Dad.

This page walks you through running two things on your computer: Nyx, a coordinator that runs a small team of AI workers for me, and Elpis, a website that explains medical conditions in plain English.

You can skim section by section. Every command has a copy button. If something breaks, jump to When something goes wrong.

What you need first

Honest cost note. Nyx can talk to Claude for hours. With Pro/Max you'll never get a bill spike. With a raw API key, please set a monthly budget cap in your Anthropic console before starting.

Step 1: Install Claude Code

Claude Code is the tool that runs the AI workers Nyx coordinates. Download it from the official site:

claude.com/code

  1. Pick the installer for your OS (Mac DMG, Windows EXE).
  2. Run the installer. On Mac, drag it into Applications.
  3. Open it. Sign in with the account that has Pro/Max (or paste your API key when asked).
  4. When it shows "Ready", you're done with this step. Close it for now.

Step 2: Get the code

Open Terminal (Mac: Spotlight, then type "Terminal"). For Windows, open PowerShell.

Install the GitHub command-line tool

This lets you download my private repos.

brew install gh         # Mac
winget install GitHub.cli   # Windows

Sign in to GitHub

gh auth login

Pick GitHub.com, HTTPS, and "Login with a web browser". Paste the code it shows you into the browser window that opens.

Download both projects

mkdir -p ~/projects
cd ~/projects
gh repo clone ethanashi/nyx
gh repo clone ethanashi/elpis

Two new folders show up: ~/projects/nyx and ~/projects/elpis.

Step 3: Run Nyx safely (months-long mode)

This section gets Nyx running and locked into safe mode: the AI workers can do tasks, but they can't modify Nyx's own source code. That's the setting we want on your machine.

Install dependencies

Nyx uses pnpm to install its libraries. One-time setup:

npm install -g pnpm

Then:

cd ~/projects/nyx
pnpm install

This takes 3-5 minutes the first time.

Start Nyx in safe mode

The important bit. The NYX_SELF_UPDATE=off at the front of this command is a hard lock. Even if Nyx tries to unlock itself at runtime, this setting wins. Leave it in.
cd ~/projects/nyx
NYX_SELF_UPDATE=off pnpm dev

You'll see logs scroll. When it stops scrolling and says "moderator listening on 3000", it's ready.

Open the control panel (TUI)

In a new Terminal window:

cd ~/projects/nyx/apps/tui-go
./nyx-tui

That's the chat-style interface. Type /help to see what you can do.

Keep it running across reboots (Mac, recommended)

Make Nyx restart automatically if your machine reboots. Save this file to ~/Library/LaunchAgents/com.nyx.moderator.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.nyx.moderator</string>
  <key>ProgramArguments</key>
  <array>
    <string>/opt/homebrew/bin/pnpm</string>
    <string>dev</string>
  </array>
  <key>WorkingDirectory</key>
  <string>/Users/YOURUSERNAME/projects/nyx</string>
  <key>EnvironmentVariables</key>
  <dict>
    <key>NYX_SELF_UPDATE</key>
    <string>off</string>
    <key>PATH</key>
    <string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
  </dict>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <true/>
  <key>ThrottleInterval</key>
  <integer>30</integer>
  <key>StandardOutPath</key>
  <string>/Users/YOURUSERNAME/Library/Logs/nyx.log</string>
  <key>StandardErrorPath</key>
  <string>/Users/YOURUSERNAME/Library/Logs/nyx-error.log</string>
</dict>
</plist>

Replace YOURUSERNAME with your Mac username (run whoami in Terminal to see it). Then load it:

launchctl load ~/Library/LaunchAgents/com.nyx.moderator.plist

It'll start automatically every time you log in, and restart on its own if it crashes.

What's keeping it healthy for months

Nyx has these protections built in (you don't have to configure anything):

If you want to pause Nyx without restarting it (e.g. you're going on a trip and don't want it dispatching), type /pause in the TUI. /resume brings it back.

Step 4: Use Elpis

Elpis is already deployed publicly. You don't have to run it locally to use it, just open the live site in any browser.

Live site: the medpal-site deployment (URL in your email).

If you want to run the code locally too, here's how:

cd ~/projects/elpis
pnpm install
pnpm dev

Open http://localhost:3000 in your browser.

Nyx slash command reference

Every command you can type into the TUI. Grouped the same way as /help.

Plan & dispatch

/plan [brief]

Submit a goal to the planner. It decomposes the goal and fans out workers in parallel.

When you want a multi-step job done. Bare /plan arms the next message as the brief so you can write a long description.

/plan-on-crack (/poc) [brief]

Same as /plan but every worker runs on Claude opus at max capability with longer timeouts and automatic retries.

When capability matters more than cost. Roughly 5-10x the token usage.

/fix [problem]

Dispatches one debugging worker on opus. It reproduces, traces, fixes, and commits.

When something is broken and you want a focused fix, not a full plan.

/dispatch <queue-id>

Run a specific queued item immediately.

When you want to jump a queue or the autopilot is paused.

Visibility

/status

One-line snapshot of live workers, spend, and autopilot state.

Quick "is anything happening?" check.

/whatsup (/wu)

What each live worker is doing right now, plus the next few queued items.

When you want detail, not just a snapshot.

/queue

Queue summary: pending and running items.

Planning what to do next.

/workers

Per-worker detail (label, session, status).

Debugging a specific worker.

/focus <id|off>

Expand one worker's tile in the sidebar to show its live log.

When you want to watch one job closely.

/backlog [add <title>]

List or append to ~/.nyx/backlog.md. Autopilot pulls from here when the queue is empty.

Capturing ideas you want Nyx to work on later.

Governance

/merges

Auto-merge daemon snapshot. Shows recent merge outcomes.

Checking what got merged while you weren't watching.

/gates [reject-all]

Pending push-gate queue. reject-all drains it.

Reviewing what workers want to push.

/gate <id> approve|reject

Decide one pending push-gate. Aliases: a / ok / r / deny.

After reading a worker's diff.

Accounts

/accounts

List configured Claude accounts and which slot is active.

Multi-account setup.

/account <slot|next|save <slot>>

Switch active account, rotate to the next, or save current credentials into a slot.

When you hit a rate limit on the active account.

/usage [slot]

Reports current account's email + remaining day quota.

Before starting a big plan.

Session

/save <name>

Snapshot the current chat to ~/.nyx/chats/<name>.json.

Before a risky operation or to keep a useful conversation.

/load <name>

Restore a chat snapshot.

Resuming where you left off.

/chats

List saved snapshots, most recent first.

Picking one to /load.

/clear

Wipes the visible chat. Server memory stays intact.

When the chat is too long and you want a clean view.

Control

/pause [commit|--commit]

Cascading pause: sleep on + autopilot off. Optional commit checkpoints in-flight work first.

Stepping away for a while. Use /resume to come back.

/resume

Inverse of /pause. Re-arms autopilot if it was on at pause time.

Returning to active use.

/restart

Hard restart the moderator. In-flight workers are signaled then killed after 5s.

When the moderator is wedged.

/sleep on|off

Toggle sleep mode without disarming autopilot.

Short pause where you want to keep autopilot armed.

/updates [on|off|status]

Master switch over all of Nyx's autonomous-modification daemons. OFF means none of them touch the code regardless of per-component toggles.

On your machine, this is locked OFF by the env var. /updates on will return a 409 error, that's expected.

Input / output

/voice [on|off]

Mic input + spoken replies.

Hands-free use.

/remote-control (/rc)

Open the concierge URL in your browser.

When the chat needs the browser pane.

System

/help (/?) [command]

Grouped command list, or deep help for one command.

Anytime you forget what's available.

/quit (/q)

Exit the TUI. Does not stop the moderator, it keeps running in the background.

Closing the window.

When something goes wrong

"command not found: pnpm"

Run npm install -g pnpm. If npm is also missing, install Node from nodejs.org.

"command not found: gh"

Install the GitHub CLI: brew install gh on Mac, winget install GitHub.cli on Windows.

Terminal says "permission denied" on ./nyx-tui

Run chmod +x ./nyx-tui from the same folder, then try again.

Nyx logs say "moderator listening" but the TUI says "connection refused"

The moderator is on port 3000. Another app might be using it. Quit other dev servers and retry. Or check the log: tail -50 ~/Library/Logs/nyx.log.

"/updates on" returns a 409 error

That is correct. NYX_SELF_UPDATE=off hard-pins the gate to OFF. The runtime is allowed to refuse the toggle. Leave it off.

It's been an hour and nothing happened

Type /status in the TUI. If autopilot is OFF, that's normal. Nyx waits for you to give it work. Type /plan something I want done to dispatch.

Still stuck?

Text Ethan. Include what you typed and what came back.