A new web client for Navi — a personal modular AI agent system. The backend (FastAPI + Ollama) already exists and is fully operational at http://localhost:8000. Your job is to build the frontend that talks to it.
The current client (/home/gmikcon/Projects/navi-1/client/) is a vanilla JS placeholder. It works, but it was built as a temporary scaffold. The new client should be a proper application.
The backend lives at /home/gmikcon/Projects/navi-1/.
Running server: http://localhost:8000
WebSocket: ws://localhost:8000/ws/sessions/{session_id}
Do not modify the backend. All server docs are in docs/.
| File | What's in it |
|---|---|
docs/api.md |
Complete REST + WebSocket API reference. Start here. |
docs/architecture.md |
How the server is structured internally |
docs/profiles.md |
What profiles are, their IDs and capabilities |
docs/sessions.md |
Session model, two-buffer design, compression |
docs/current-client-spec.md |
Full spec of the existing vanilla JS client: layout, state shape, WS event handling, component breakdown, design system (colors, typography), file/image attachment flow |
docs/spec.md |
New client spec — stack, component architecture, Pinia stores, WS logic, responsive layout, animations, error handling. Start here before implementing anything. |
Navi is a tool-calling LLM agent. A session is a persistent conversation linked to a profile (e.g. "secretary", "server_admin"). The client sends messages over WebSocket and receives a stream of typed events in response:
See docs/api.md for the full event reference and typical event sequences.
Three profiles are currently active:
| ID | Name | Purpose |
|---|---|---|
secretary |
Personal Secretary | Research, writing, analysis, everyday tasks |
server_admin |
Server Administrator | Remote ops, monitoring, infrastructure |
developer |
Tool Developer | Writing/testing Navi's own tools |
Profiles are fetched live from GET /agents/profiles.
The old client is at /home/gmikcon/Projects/navi-1/client/. You can read it to understand what was built before, but you are not constrained by its design. It uses vanilla JS ES modules, marked.js + highlight.js.
Key UX patterns worth knowing about:
profile_switched event)POST /sessions/{id}/stop)POST /sessions/{id}/files)