Skip to content

NeXuS Compass — nexus-darknet-go + MNEMOSYNE DECK (2026-07-07)

Two Go TUI projects: nexus-darknet-go (darknet control plane) and MNEMOSYNE DECK (AI character + network cockpit). Read this to resume.


1. nexus-darknet-go

Location: ~/nexus-darknet-go/ Build: cd ~/nexus-darknet-go && go build -o nexus-darknet . Run: ./nexus-darknet tui | ./nexus-darknet serve (port 8800) | ./nexus-darknet status Binary also at: ~/scripts/nexus-darknet (symlink, on PATH) No git repo yet — needs git init + .gitignore + dev branch (protocol).

Architecture

  • Single Go binary: Bubble Tea TUI (8 tabs) + embedded web dashboard (:8800) + Cobra CLI
  • Services defined in services.yaml — 16 services, dependency graph, bootstrap order
  • Shell contract pattern: each service has a scripts/nexus-<name>.sh start|stop|status
  • services/manager.go → network/runner.go → shell scripts

Tabs

^W Networks · ^E Services · ^H Hosting · ^U Jurisdiction · ^L Log · ^T Doctor · ^G Ghost Gate · ^O OpenSnitch

Bugs Fixed This Session

  1. Service status all showing ON — network/runner.go line 92: err == nil || output == "RUNNING" was wrong (OR not AND). Fixed to check output string only, not exit code.
  2. nexus-opensnitch.sh — was calling opensnitchd directly; fixed to rc-service opensnitch start|stop|status. Binary at /usr/local/bin/opensnitchd, service name = opensnitch.
  3. Ghost Gate ACTIVE with no internet — gate_state.json had "status": "active" with 0 permits, blocking all traffic. Set to inactive. The issue/revoke commands in the TUI are simulation only — they print success but never write to gate_state.json or call any script. Not yet fixed.

Ghost Gate — How It Works

  • State file: ~/.nexus/gate_state.json — written by Python orchestrator at ~/Projects/nexus-orchestrator/nexus/nexus_ghost_gate.py
  • ghostgate/status.go reads: gate_state.json → nft tables → /tmp/nexus_ghost.lock (fallback)
  • TUI execGhostCmd() in tui/app.go is all simulation — issue/revoke/list are placeholders
  • Pending fix: wire issue/revoke to actually write permits to gate_state.json

OpenSnitch

  • Daemon: /usr/local/bin/opensnitchd (built from ~/git/opensnitch/)
  • Service: rc-service opensnitch start|stop|status
  • Rules dir: ~/.config/opensnitch/rules/ — must exist (mkdir -p)
  • Init script /etc/init.d/opensnitch — added command_args="-rules-path /home/user/.config/opensnitch/rules" so daemon + TUI point at same dir (daemon runs as root, HOME=/root without this fix)
  • Rules are JSON files; TUI writes them on Ctrl+A/Ctrl+D from live event feed

Services Status (as of 2026-07-06)

  • rc-service opensnitch works ✅
  • IPFS installed (v0.41.0) but not initialized — ipfs init needed before it can run
  • Ghost Gate: gate_state.json set to inactive ✅
  • Tor Hydra: STOPPED | I2P: shows ON (i2pd rc-service) | DNS/Yggdrasil/Privoxy/Medusa: status uncertain

Pending

  • Wire Ghost Gate issue/revoke to write real permits
  • ipfs init + lock down config (swarm bind to localhost only)
  • Git init the project
  • Doctor tab still uses hardcoded health checks (from PLAN_OF_ATTACK.md Phase 1.1)
  • Jurisdiction tab stubs (applier.go — Phase 1.2)
  • Log viewport scroll not wired (Phase 1.3)

2. MNEMOSYNE DECK

Location: ~/Projects/nexus-network-stack/deck/ Build: cd ~/Projects/nexus-network-stack/deck && go build -o nexus-deck . Run: ./nexus-deck Module: char-gen-cli (same module as char-gen-cli-go — same package) Status: Builds and runs. All 5 tabs functional at basic level.

Tabs

1 Pulse (service audit) · 2 Sanctum (AI chat) · 3 Studio (character registry) · 4 Vault · 5 Gate (Ghost Gate HUD)

Alert: API offline (check localhost:8801)

  • The Pulse tab polls localhost:8801 for nexus-hydra/orchestrator
  • Fix: start nexus-darknet serve (./nexus-darknet serve) which runs on :8800, OR start nexus-hydra

Studio shows "No items"

  • Deck reads from its own encrypted store (~/.local/share/char-gen-cli/storage/.../data/characters/)
  • NOT the PNG files in ~/01/ai-characters/
  • To populate: create characters via the Studio's Character Generator, or import from adv-go-char-gen
  • The two apps share the same data dir ~/.local/share/char-gen-cli/ — characters created in adv-go-char-gen appear here after being saved to the encrypted store

3. adv-go-char-gen (char card editor/chat)

Location: ~/Projects/adv-go-char-gen/ Build: cd ~/Projects/adv-go-char-gen && go build -o adv-go-char-gen . Run: CARDS_DIR=~/01/ai-characters ./adv-go-char-gen (best in foot outside tmux for sixel) Repo: github.com/hackenstacks/adv-go-char-gen (PUBLIC, AGPLv3) Status: dev branch, commit eb58247 (model field), up to date with remote.

Bugs Fixed This Session

  1. API Settings list not rendering — list initialized at 0,0. Fixed: list.New(providers, delegate, 70, 20).
  2. List navigation broken — m.providerList.Update(msg) never called. Fixed: added if providerListView branch in Update.
  3. Custom LLM missing model field — added customModelInput textinput to custom provider form. Tab order: Name → Type → Model → API Key → URL. Saves to DefaultLLMModel. Pre-fills on re-entry. Commit eb58247.
  4. /memory command error — RetrieveMemories() called with empty string query, but func validates query != "". Fixed: pass cardName as query. Build clean.

Custom LLM Setup (aichat)

  • Provider: Custom LLM API 🔧
  • Name: aichat (or any name)
  • Type: llm
  • Model: your model name (e.g. qwen2.5-coder, llama3)
  • API Key: empty (aichat handles auth)
  • URL: http://127.0.0.1:8080 (aichat --serve default)
  • Code auto-appends /v1 if missing, then hits /v1/chat/completions

Mock Provider

ProviderMock = offline fake provider for testing. Returns "Mock response for: '...' (model: mock-llm-fast)". Disables auto-image generation in chat. If chat responses look canned, you're on Mock — go to API Settings and set a real provider as default with Ctrl+S.


4. Thunar + GTK

  • Official NeXuS GUI FM: PCManFM decision updated — Thunar confirmed (thunar-volman, thunar-archive-plugin available).
  • Custom actions: ~/.config/Thunar/uca.xml — age encrypt/decrypt + Open Terminal Here (fixed to foot)
  • GTK theme: ~/.config/gtk-3.0/settings.ini — was broken (gtk-theme-name = KDE error string). Fixed to adw-gtk3.
  • gvfs: installed but Thunar not auto-seeing external drives. Likely gvfsd not running or DBUS_SESSION_BUS_ADDRESS not set. Pending: add /usr/lib/gvfs/gvfsd & + thunar --daemon & to labwc autostart.

5. Open Tasks (priority order)

# Task Where
1 Wire Ghost Gate issue/revoke to gate_state.json nexus-darknet-go/tui/app.go execGhostCmd()
2 ipfs init + bind to localhost run once, edit ~/.ipfs/config
3 Git init nexus-darknet-go .gitignore → git init → checkout -b dev
4 Fix gvfs/Thunar auto-mount add gvfsd + thunar --daemon to labwc autostart
5 Commit /memory fix in adv-go-char-gen git add rawchat.go && git commit
6 Doctor tab real health checks nexus-darknet-go/tui/tab_doctor.go
7 Jurisdiction tab stubs nexus-darknet-go/jurisdiction/applier.go
8 Mount sdb1 (WD Passport) doas blkid /dev/sdb1 → mount

NeXuS: Sane • Simple • Secure • Stealthy • Beautiful Author: hackenstacks — hackenstacks@gmail.com