Captures the known-good state after theme consolidation and consistency reconciliation: - NexusOS GTK/xfwm4/icon theme assets (assets/themes, management/Mint-Y-Nexus) - Tightened right-click menus, visible separators, no menu icons - assets/themes/install-theme.sh: idempotent restore of all wiring (symlinks, xfconf xsettings+xfwm4, GTK 3/4 settings.ini) - .gitignore excludes venv/ollama/models/runtime/db Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.8 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What is NexusOS
NexusOS is a local AI assistant platform. It runs a Python/FastAPI backend (Synapse) that interfaces with a locally bundled Ollama instance, a dedicated memory microservice, and a React/Vite frontend. Everything runs on localhost with no external AI API calls — the LLM is served via Ollama.
Running the Project
Full stack (recommended):
./launch_nexus.sh
This activates the Promethean venv, starts the memory service on port 8001, the Synapse backend on port 8000, and the Vite frontend (default port 5173).
Individual services via CLI:
# From nexus-core/ with Promethean venv active:
source Promethean/bin/activate
# Backend
uvicorn synapse.main:sio_app --host 0.0.0.0 --port 8000 --reload
# Memory service
uvicorn synapse.memory.service:app --host 0.0.0.0 --port 8001 --reload
# Frontend
cd interface/web && npm run dev
Management CLI (start/stop individual services with PID tracking):
./management/nexus-cli.sh start # starts backend + frontend
./management/nexus-cli.sh stop
./management/nexus-cli.sh start_backend / start_frontend
Frontend lint:
cd interface/web && npm run lint
Frontend build:
cd interface/web && npm run build
Architecture
Python venv
All Python code runs inside Promethean/ (a local venv). Always activate it before running backend commands: source Promethean/bin/activate. The AMD ROCm PyTorch stack is installed here (requirements.txt).
Synapse Backend (synapse/)
FastAPI app at synapse/main.py. Key responsibilities:
/chatand/chat/stream— chat with Ollama; streaming uses SSE. After each exchange the stream endpoint calls the Memory Service to auto-extract persistent facts./playbooks— CRUD for playbooks stored in SQLite viasynapse/playbooks/store.py./memory— CRUD for persistent facts (proxies the same SQLite store as the memory service)./models— lists, pulls, and deletes Ollama models by proxyingollama/bin/ollama's HTTP API./conversations— persists and retrieves full chat history from SQLite.
System prompt assembly (in main.py chat_stream_endpoint): the final system prompt is built by layering the active playbook instructions → reference playbook context → persistent memory facts → relevant past conversation snippets retrieved by store.search_conversations.
Memory Service (synapse/memory/)
A separate FastAPI app on port 8001. service.py exposes /memories/extract which calls extractor.py — an Ollama prompt that decides whether to persist a new fact from a conversation exchange. The main Synapse backend calls this asynchronously after each streaming response. Both services share the same SQLite database (synapse/memory/memory.db).
Playbook System (synapse/playbooks/ + synapse/playbook_manager.py)
Playbooks are ordered records (title, goal, instructions, tags) stored in SQLite. The first playbook by order is the active system prompt; all subsequent playbooks are injected as reference context. PlaybookManager is the thin class the backend uses to retrieve and render them.
Ollama (ollama/bin/ollama)
A bundled Ollama binary lives at ollama/bin/ollama. OllamaManager in synapse/ollama_manager.py manages its lifecycle (start/stop/health-check) and selects the best available model. GPU detection uses Vulkan (vulkaninfo) to prefer discrete AMD/NVIDIA GPUs. The Ollama HTTP API is at http://127.0.0.1:11434 (overridable via OLLAMA_HOST env var).
Frontend (interface/web/)
React 19 + Vite. No routing library — App.jsx manages page state in a single currentPage useState. All API calls hit http://localhost:8000 (configured in src/config.js). Pages: Chatbot, Playbook editor, Conversation History, Models, Memory, Settings.
Persistent Storage
All data lands in synapse/memory/memory.db (SQLite, WAL mode). Tables: memory facts, conversations, messages, playbooks, app settings. synapse/memory/store.py (PersistentMemoryStore) owns the schema and all queries. nexus_config.py defines all paths; it also ensures all required directories exist on import.
Logs & Runtime State
runtime/backend.log,runtime/frontend.log— service stdoutruntime/logs/ollama.log,runtime/logs/chat.logruntime/pids/backend.pid,runtime/pids/frontend.pid— used by the management CLI
Key Config
| Concern | Location |
|---|---|
| Ollama host | OLLAMA_HOST env var (default http://127.0.0.1:11434) |
| All filesystem paths | synapse/nexus_config.py Settings class |
| Frontend API base URL | interface/web/src/config.js |
| Python dependencies (AMD) | requirements.txt / amd_requirements.txt |
| Python dependencies (base) | requirements-base.txt |