Co-authored-by: Neuron <will.anderson@neurontechnologies.ai> Co-committed-by: Neuron <will.anderson@neurontechnologies.ai>
8.8 KiB
neuron-dev-setup — one-command Neuron CORE dev stack
Stand up an identical Neuron brain + agent on a fresh Mac so any developer
gets the same local runtime to build against. This is the CORE dev stack
only — the four native launchd services that make Neuron think, remember, and
speak MCP to Claude Code. Will's personal automations (catalyst, telegram,
vessels, studio, self-review, world-integrator, council, compressor, snapshots,
act-runner, …) are deliberately excluded.
┌─────────────┐ ┌──────────────┐
│ soul :7770 │ ─────► │ engram :8742 │ the mind ──► its memory substrate
└─────────────┘ └──────────────┘
▲
│
┌───────────────────┐
│ mcp-wrapper :17779│ ─── MCP surface over the soul HTTP API (internal)
└───────────────────┘
▲
│
┌────────────────┐
│ mcp-proxy :7779│ ◄─── Claude Code connects here (stable front door)
└────────────────┘
Claude Code's neuron MCP server points at http://127.0.0.1:7779/ — the proxy.
The proxy forwards to the wrapper (:17779), which calls the soul (:7770),
which reads/writes the engram (:8742). The engram is the persistent brain.
Quick start
git clone <this-repo> && cd neuron-dev-setup
cp config.env.example config.env # optional — edit ports/paths if you like
./install.sh # prompts for your Anthropic API key
Then verify:
curl http://localhost:8742/health # engram
curl http://localhost:7770/health # soul
curl http://localhost:7779/health # mcp-proxy (what Claude Code uses)
launchctl list | grep ai.neuron
Open Claude Code — the neuron MCP tools should be live, backed by your own
local brain. ./install.sh --dry-run shows every action without touching anything.
What the installer does (8 phases)
| Phase | Action |
|---|---|
| 1 | Preflight: macOS/arm64, ensure git cc curl python3 + openssl@3 (via Homebrew) |
| 2 | Prompt for the Anthropic API key, store it in the macOS Keychain (never a file) |
| 3 | Clone neuron, engram, foundation; fetch the El toolchain; build 4 binaries + forge |
| 4 | Lay down ~/.neuron/{bin,logs,engram} and the templated soul-wrapper.sh |
| 5 | Generate + load the 4 core LaunchAgents (engram → soul → wrapper → proxy) |
| 6 | Seed a fresh engram with the genesis identity via forge install |
| 7 | Install Claude config: neuron agent, core hooks, local MCP registration |
| 8 | Health-check all four ports |
Everything is idempotent (safe to re-run) and templated to the invoking
user's $HOME — no path is hardcoded to another machine.
Prerequisites
- macOS on Apple Silicon (uses
launchd; soul build flags assume arm64). - Xcode Command Line Tools (
xcode-select --install) — providescc,git. - Homebrew — for
openssl@3,curl. - An Anthropic API key — the soul's inference provider. Prompted for; stored
in Keychain under service
neuron-llm-0-key; read at launch bysoul-wrapper.sh. - Git access to Gitea (
git.neuralplatform.ai) for the source repos. - GCP access to project
neuron-785695Artifact Registry (default El toolchain source). Ask Will to grant it, or setEL_TOOLCHAIN_SOURCE=local.
Core-stack map (what gets replicated)
| Service | Port | Binary | Built from | LaunchAgent |
|---|---|---|---|---|
| soul | 7770 | neuron/dist/neuron |
dist/soul.c + El runtime, cc (CI recipe) |
ai.neuron.soul |
| engram | 8742 | engram/dist/engram |
engram repo src/server.el via elc→cc |
ai.neuron.engram |
| mcp-wrapper | 17779 | neuron/mcp-wrapper/dist/neuron-mcp-wrapper |
mcp-wrapper/src/main.el |
ai.neuron.mcp-wrapper |
| mcp-proxy | 7779 | neuron/mcp-proxy/dist/neuron-mcp-proxy |
mcp-proxy/src/main.el |
ai.neuron.mcp-proxy |
~/.neuron layout the installer creates
~/.neuron/
bin/soul-wrapper.sh # reads Anthropic key from Keychain, execs the soul binary
logs/ # soul.*.log, engram.log, mcp-*.log
engram/ # ENGRAM_DATA_DIR — the persistent brain (snapshot.json + db)
Identity seed. foundation/forge/seeds/neuron-genesis-seed.json carries
identity_nodes[] + edges[] with fixed knowledge-node IDs (e.g.
kn-efeb4a5b-5aff-4759-8a97-7233099be6ee, the "self" traversal root). Those exact
IDs are referenced by the SessionStart self-load hook and the neuron agent, so
seeding must preserve IDs — forge install <seed> is the mechanism.
Claude config installed (~/.claude/)
agents/neuron.md— the Neuron agent (identity, session protocol, five primitives).mcp.json— registersneuron→http://127.0.0.1:7779/.settings.jsonhooks (CORE subset only):SessionStart→neuron-self-load.sh(loads identity from the seeded engram)PreToolUse:Agent→neuron-agent-preamble.sh(subagents load substrate first)PreCompact→pre-compact.sh(clean context recovery)
Deliberately EXCLUDED from core
check-active-contexts.shandrequire-execution-context.sh— these depend on a separate filesystem repo~/Development/projects/active/neuron/synapse.require-execution-context.shis a hardEdit/Writegate that would block a fresh dev from editing any file without that synapse repo. Not core; excluded.engram-mirror.py(PostToolUse) — optional; mirrors MCP writes to engram.- All Will-personal LaunchAgents:
catalyst-*,telegram-gateway,vessel.*,studio,self-review,world-integrator,council,compressor,cultivation-digest,snapshot-backup,engram-backup,act-runner,keymap,invest, and the disabledai.neuron.api(:7771is a personal Python perception helper — confirmed not core).
Secrets — how they're handled
- Anthropic key: prompted for; stored in Keychain; read at launch. Never in a plist, this repo, or a log.
- Engram local token (
ENGRAM_API_KEY): a loopback-only dev token, not a cloud secret. Defaults to a generatedntn-dev-*value; override inconfig.env. - No cloud tokens, Vault tokens, CF-Access secrets, or founder keys are copied.
(Will's live
start-daemon.sh/neuron-api-launch.shcontain such keys — this installer intentionally does not use those files.)
Uninstall
./uninstall.sh # stop + remove the 4 LaunchAgents and added Claude hooks
./uninstall.sh --purge-data # ALSO delete ~/.neuron/engram (destroys the brain)
OPEN QUESTIONS (need Will to confirm)
- El toolchain acquisition. The default path fetches
el-runtime-c/-handel-elcfrom GCP Artifact Registry (mirrorsneuron/.gitea/workflows/ci.yaml). A new dev needs GCP access toneuron-785695. Is that the intended path, or should the El SDK be published/vendored for onboarding? elcinvocation for engram/wrapper/proxy. The soul build (`cc dist/soul.c- el_runtime.c
) is verified from CI. The.el → .ctranspile step for engram, mcp-wrapper, and mcp-proxy is inferred (elc -o <out.c>). Confirm the exact flags / entrypoints (CI noteselb` OOMs on Linux; macOS builds differ).
- el_runtime.c
forge installID preservation. Confirmforge installwrites the seed's fixedkn-IDs verbatim (the self-load hook hardcodeskn-efeb4a5b…). If it re-mints IDs, the hook + agent identity load would break on a fresh brain.- engram repo layout. The live engram binary is built from
src/server.el(Gitea reponeuron-technologies/engram, cloned in CI). Confirm that repo is the canonical source for onboarding (the localfoundation/el/engramcopy has the samesrc/server.el). - Home for this bundle — see below.
Where this should live (recommendation)
Recommendation: a dedicated neuron-dev-setup (or neuron-onboarding) repo —
NOT neuron-code. neuron-code already exists as a real product ("Neuron Code",
a coding tool with nc-cli + vessels — local products/neuron-code has commits);
repurposing it for onboarding would collide with a shipped product's identity.
This bundle was scaffolded as neuron-dev-setup/ on branch feat/neuron-dev-setup
in the neuron repo (off origin/main) and opened as a PR for review, because
the neuron repo already hosts the soul source, the verified CI build recipe, and
the mcp-wrapper/proxy sources — the natural review surface. If you'd rather it be
its own repo, move this directory into a fresh neuron-dev-setup repo verbatim;
nothing here depends on living inside the neuron repo.