A multi-project, multi-agent development cockpit designed for structured human–AI collaboration.
Nexus organizes work into Projects → Roadmap Lists → Chats and provides an integrated Chat, Terminal, and Code workspace.
This README is intentionally concise. For technical details, see ARCHITECTURE.md.
Project Nexus is a browser-based orchestration layer for AI-assisted software development.
It does not attempt to replace a full IDE.
Instead, it becomes the command center where:
- multiple projects are managed simultaneously
- each project has several roadmap lists (task clusters)
- each roadmap list contains multiple chats
- each chat has a clear goal, template, and JSON-driven status
- a dedicated meta-chat per roadmap list computes progress
The user interacts with three primary tools:
- Chat – where AI and user collaborate
- Terminal – a persistent server-side shell
- Code – read-only/diff viewer for workspace files
Everything is stored in a Git-backed project structure with metadata tracked via a database.
The highest-level container. Projects define:
- theme override
- categories/tags
- activity indicators
- roadmap lists
A Project contains one or more roadmap lists.
Each roadmap list:
- groups related tasks and chats
- has its own status, progress %, and tags
- contains a meta-chat, which:
- interprets JSON statuses from child chats
- executes template JS logic
- produces the roadmap’s aggregated progress
Each chat thread:
- has a specific goal
- may be created from a template
- communicates with the Codex agent
- produces JSON status (if required)
- contributes progress back to its roadmap list
Templates define structured workflows:
- title, goal
- systemPrompt
- starterMessages
- javascriptPrompt (optional)
- javascript logic for interpreting JSON
- metadata
Two primary agents:
- Codex Agent: writes code, explains changes, generates diffs, updates JSON status
- Meta-Agent: interprets status from all chats in a roadmap list
Agents communicate strictly through:
- model adapters
- template-defined prompts
- JSON protocols
For full agent behavior specification, see AGENTS.md.
The UI uses a four-column layout:
[ Projects ] | [ Roadmap Lists ] | [ Chats ] | [ Main Panel ]
The Main Panel contains tabbed views:
- Chat – full messaging UI with filters and slash-commands
- Terminal – persistent PTY session via WebSocket
- Code – file tree, read-only Monaco viewer, diff renderer
For details, see UX.md.
Every project is stored on disk under a Git repository:
/projects/PROJECT_ID/
meta.json
roadmapLists/
ROADMAP_ID/
meta.json
chats/
CHAT_ID/messages.jsonl
workspace/
Snapshots correspond to Git commits.
DB synchronizes with Git to provide the unified view.
Backend exposes:
- REST for metadata (projects, roadmaps, chats, templates)
- WebSocket for terminal
- File system API for safe read/write/list/diff
- Authentication endpoints
For endpoint-level details, see ARCHITECTURE.md.
- Node.js 20+ (we develop on 22/24) and
pnpm9 (repo setspackageManagertopnpm@9.12.0) - Git and a writable workspace for project data
- Postgres for metadata (see
ARCHITECTURE.md/USAGE.mdfor schema setup) - Optional: managed Gemini CLI / Qwen auth configured via
.envwhen using live AI
All workspace packages are installed from the repo root:
pnpm installThis populates the monorepo node_modules (and each package’s nested node_modules) according to the lockfile. Do not hand-install packages directly into node_modules; always update dependencies through pnpm (or npm install at the root if you must, but pnpm is the supported path). After dependency changes, commit only the lockfile updates—never commit node_modules.
# 0. Clone with submodules (includes bundled qwen-code)
git clone --recurse-submodules https://github.com/<your-org>/AgentManager.git
cd AgentManager
# 1. Install dependencies
pnpm install
# 2. Initialize system (creates admin user, storage)
./nexus-cli setup --admin-password admin123
# 3. Start backend
pnpm --filter nexus-backend dev &
# 4. Start frontend
pnpm --filter nexus-frontend dev
# 5. Open http://localhost:3000
# Login: admin / admin123
# 6. Create your first project via UI
# Click "+ New Project" → Name: "Hello World" → Create
# 7. Create a roadmap → Create a chat → Start chatting!For detailed usage instructions, see USAGE.md.
pnpm install
pnpm dev:backend # http://localhost:3001
pnpm dev:frontend
# or use the helper (adds pnpm from ~/.local/node_modules/.bin to PATH):
./run.sh # starts backend + frontend
./run.sh backend # backend only
./run.sh frontend # frontend onlyHeads-up:
pnpmis installed locally at~/.local/node_modules/.bin/pnpm. If your shell cannot find it, run
export PATH="$HOME/.local/node_modules/.bin:$PATH".
You will need:
- an LLM key (OpenAI/Anthropic/Qwen)
- configured project directories
- database setup (Drizzle/Postgres)
AI Integration (Optional):
For AI-powered meta-chat clarifications, install the managed-gemini-cli fork:
# Clone the OuluBSD fork (includes TCP server mode)
git clone git@github.com:OuluBSD/managed-gemini-cli.git ~/managed-gemini-cli
cd ~/managed-gemini-cli
npm install
npm run bundle
npm install -g .
# Authenticate with Google
geminiThen enable in .env:
ENABLE_AI=true
GEMINI_CLI_PATH=geminiNote: The standard @google/gemini-cli from npm does NOT work. You must use the OuluBSD fork.
See docs/AI_INTEGRATION.md for full details.
Tests:
pnpm --filter @nexus/shared testTypeScript/TS server:
- Project-local compiler:
pnpm --filter nexus-backend exec tsc -p tsconfig.json - Generic one-shot:
pnpm --package=typescript dlx tsc -p apps/backend/tsconfig.json - Calling
tscdirectly will fail unless you add it to PATH; rely on the commands above. - Successful runs are intentionally silent (exit code 0, no stdout).
Database:
- Set
DATABASE_URLin.envto a Postgres instance. - Backend will auto-connect if
DATABASE_URLis present; otherwise it falls back to the in-memory mock store. - Generate migrations from the shared schema:
pnpm exec drizzle-kit generate(writes topackages/shared/db/migrations). - Apply migrations with your preferred tool (e.g.,
drizzle-kit pushorpsql).
Terminal idle timeout:
- WebSocket terminal streams close after 10 minutes idle by default. Set
TERMINAL_IDLE_MS(ms) in your shell or.envto change it;0disables the idle shutdown.run.shechoes the value it will use.
Auth:
- When the database is enabled,
/auth/loginwill create a user on first login; the first provided password becomes the stored hash. - If a user already has a password set, a password is required for login; otherwise the route rejects with 401.
- Sessions persist in the database; without
DATABASE_URLthe backend falls back to in-memory sessions (cleared on restart). - Passwords are hashed with salted PBKDF2 (legacy SHA256 hashes still verify); optional
keyfileTokenlogin is also hashed and stored. - Sessions expire after 7 days and expired DB tokens are cleaned up automatically during validation.
Frontend ↔ Backend:
- The mock UI will attempt to
POST /api/auth/loginthenGET /api/projectsusingNEXT_PUBLIC_BACKEND_HTTP_BASE(defaults tohttp://localhost:3001). If unreachable, it falls back to mock data and shows a notice.
- USAGE.md – comprehensive usage guide with examples
- CLI.md – CLI tool reference and administration
- ARCHITECTURE.md – deep technical specification
- UX.md – user interface and interaction patterns
- AGENTS.md – agent behavior and JSON protocols
- ROADMAP.md – strategic goals and future direction
- TASKS.md – actionable task breakdown
- IMPLEMENTATION.md – concrete setup and delivery plan
MIT License
For issues, ideas, or contributions, open a ticket or start a discussion.