The usual failure mode in local AI bring-up is not that the model is too weak. It is that the stack shape gets fuzzy. One command starts a server with unclear defaults, another tool talks to a different port, a health probe forgets auth, and a host-ops bridge looks broken when it is simply pre-onboarding. The repair is to keep the stack narrow and make each layer prove itself before you trust the next one.
In Chopshopr, one MCP registration should represent one default model endpoint.
Use local_generate_default for normal work, use local_health
before blaming the model, and treat No sandboxes registered as a normal
NemoClaw pre-onboarding state instead of a mysterious failure.
The stack contract
The public contract is intentionally small. src/index.js exposes the local
LLM tools. src/nemoclaw-mcp.js exposes bounded host-side NemoClaw and
OpenShell operations. The build and push path stays worktree-first, so the final proof
is not just that the server booted. The final proof is that the branch verified and shipped.
Keep one default model per registration
Do not make callers remember hidden model overrides. Register the baseline and the
higher-reasoning profile separately, then stay on local_generate_default
most of the time.
Trust health checks before vibes
Reach for local_health, bun run wait:local-llm, and the
auth-aware /v1/models probe before concluding that vLLM
or Codex registration is broken.
Read NemoClaw state literally
No sandboxes registered means the bridge is alive but onboarding has
not happened yet. That is a normal pre-onboarding state, not a reason to reinstall
the whole host stack.
Finish on the ship gate
The route is not trustworthy until the worktree passes bun run build
and the branch closes through bun run ship:mainline.
Read doctor output as states, not vibes
The fastest way to waste an afternoon is to treat every non-green line as the same kind of failure. Chopshopr's doctor output is narrower than that. The point is to tell you which layer is actually ready, which layer is merely pre-onboarding, and which missing dependency is the only thing worth fixing next.
NemoClaw is alive, just not onboarded
No sandboxes registered maps to pre_onboarding. That means
the bridge answered correctly and you should run nemoclaw onboard only
when you actually want to create or refresh sandboxes.
OpenShell is installed but not wired
No gateway configured maps to gateway_missing. The binary is
there, but sandbox operations will not work until you start or add the local gateway.
Host prerequisites are visible
When Docker, Node, and npm report installed, stop reinstalling the host
toolchain and move up one layer to the actual MCP or gateway state.
Fix the named binary only
A missing state is intentionally specific. Install the missing binary
that the doctor named instead of flattening the whole local stack and starting over.
Register the surfaces you will actually use
Chopshopr keeps two active Nemotron 3 profiles: baseline for normal work and Super for the higher-reasoning path. The fallback Nano 12B health target still exists, but it is not the default operating surface. Register the bounded NemoClaw bridge separately so host operations do not get mixed into inference setup.
Nemotron 3 Nano A3B via vLLM
Use this as the default Codex MCP registration for normal local inference work.
codex mcp add local-llm-nemotron-baseline -- \
env LOCAL_LLM_BACKEND=vllm \
VLLM_BIN=/home/chopshopr/venvs/nemotron-super-vllm/bin/vllm \
LOCAL_LLM_MODEL=nvidia/nemotron-3-nano-30b-a3b \
LOCAL_LLM_MODEL_PATH=/home/chopshopr/models/offline/transformers/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 \
LOCAL_LLM_SERVED_MODEL_NAME=nvidia/nemotron-3-nano-30b-a3b \
LOCAL_LLM_BASE_URL=http://127.0.0.1:8007/v1 \
LOCAL_LLM_API_KEY=local-dev-token \
VLLM_MAX_MODEL_LEN=8192 \
node /home/chopshopr/code/chopshopr/src/index.js
Nemotron 3 Super via vLLM
Keep this separate so the heavier path never masquerades as the everyday default.
codex mcp add local-llm-nemotron-super -- \
env LOCAL_LLM_BACKEND=vllm \
VLLM_BIN=/home/chopshopr/venvs/nemotron-super-vllm/bin/vllm \
LOCAL_LLM_MODEL=nvidia/nemotron-3-super \
LOCAL_LLM_MODEL_PATH=/home/chopshopr/models/offline/transformers/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 \
LOCAL_LLM_SERVED_MODEL_NAME=nvidia/nemotron-3-super \
LOCAL_LLM_BASE_URL=http://127.0.0.1:8000/v1 \
LOCAL_LLM_API_KEY=local-dev-token \
node /home/chopshopr/code/chopshopr/src/index.js
NemoClaw + OpenShell bridge
Use a separate MCP server for doctor, status, logs, and other bounded host operations.
codex mcp add nemoclaw -- \
node /home/chopshopr/code/chopshopr/src/nemoclaw-mcp.js
Run the truth checks in order
The best setup loop is boring. Bring up the endpoint, verify the endpoint, then ask Codex to use it. Bring up NemoClaw, verify the bridge, then decide whether sandbox onboarding is the next step. This order keeps you from misreading an auth issue as a model issue or a pre-onboarding state as a gateway failure.
bun run wait:local-llm
curl -i http://127.0.0.1:8007/v1/models
curl -s -H "Authorization: Bearer local-dev-token" http://127.0.0.1:8007/v1/models
Use the port that matches the profile you registered. A protected /v1/models
returning 401 means the server is up and the probe forgot credentials.
bun run setup:nemoclaw:spark -- --onboard
nemoclaw_doctor
nemoclaw_run status
If the doctor output says No sandboxes registered, the bridge is alive
and you still need onboarding. Do not treat that message as a crash.
local_healthis the first MCP-side diagnostic before any prompt call.local_list_modelsis only needed when you intentionally want a non-default model.local_waitexists so the same MCP run can survive warmup instead of faking a new human turn.local_start_serverandlocal_stop_serverare operator controls, not the normal inference path.
Close on the verified worktree path
The stack is only half-configured if it can talk locally but never closes into a verified ship path. Chopshopr uses a worktree-first contract so the same child branch that ran the build is the branch that rebases and pushes.
bun run worktree:check
bun run build
bun run ship:mainline
That sequence checks the worktree guard, runs the repo build gate, rebases with autostash, reruns verification, and pushes directly to the default branch without force.
Read next only if you need the deeper why
If the emotional logic behind local-first tooling matters more than the command path, read The killer app for on-device inference is dignity, not latency. If the failure map matters more than the bring-up steps, read What breaks first in local agents is not the model. If you want the raw repo contract, inspect the entrypoints, operator playbooks, MCP tools, and worktree-first autoship sections in the repo.