Project Structure
This map describes ownership boundaries, not line counts.
text
N.E.K.O/
├── app/
│ ├── main_server/ # Main Web/API entrypoint
│ ├── memory_server/ # Memory API/runtime
│ └── agent_server/ # Agent/tool API and channels
├── launcher.py # Thin public launcher entrypoint
├── launcher_core/ # Bootstrap, ports, process lifecycle
├── brain/ # Agent routing/execution adapters
├── config/ # Defaults, prompts, provider/network data
├── main_logic/ # Conversation, clients, TTS, buses
├── main_routers/ # Main FastAPI route packages/modules
├── memory/ # Facts, recall, persona, reflection, event/outbox
├── plugin/ # SDK, host/server, built-ins, tooling
├── utils/
│ └── config_manager/ # Writable config/storage package
├── frontend/
│ ├── react-neko-chat/ # Shared React chat implementation
│ └── plugin-manager/ # Vue plugin-manager UI
├── static/ # Runtime assets and eight JSON locales
├── templates/ # Main/chat/subtitle/settings/feature pages
├── docker/ # Dockerfiles, Compose, entrypoint
├── scripts/ # CI, validation, packaging, assets
├── specs/ # PyInstaller specifications
├── tests/ # Unit/integration/frontend/e2e/contracts
├── docs/ # VitePress site
├── pyproject.toml # Python metadata/dependency groups
└── uv.lock # Reproducible dependency lockImportant boundaries
launcher.pydelegates tolauncher_core/.utils/config_manager/owns writable config/storage;config/owns bundled defaults.frontend/react-neko-chat/is the only real chat UI.index.htmlandchat.htmlmount it; legacy#chat-containeris deprecated.main_logic/core/is a package/facade protected by structural CI checks.main_logic/voice_turn/owns provider-neutral voice contracts; local Silero/Smart Turn code and model assets live undermain_logic/asr_client/endpointing/.- Docker files are under
docker/, not the repository root. pyproject.tomlanduv.lockare the dependency contract;requirements.txtis not the recommended installation entrypoint.
Use rg, imports, and routes to find the current owner before editing. A file named in an old issue may now be a package.
