6.0 KiB
Archon Architecture
Overview
Archon is a knowledge management system with AI capabilities, built as a monolithic application with vertical slice organization. The frontend uses React with TanStack Query, while the backend runs FastAPI with multiple service components.
Tech Stack
Frontend: React 18, TypeScript 5, TanStack Query v5, Tailwind CSS, Vite Backend: Python 3.12, FastAPI, Supabase, PydanticAI Infrastructure: Docker, PostgreSQL + pgvector
Directory Structure
Backend (python/src/)
server/ # Main FastAPI application
├── api_routes/ # HTTP endpoints
├── services/ # Business logic
├── models/ # Data models
├── config/ # Configuration
├── middleware/ # Request processing
└── utils/ # Shared utilities
mcp_server/ # MCP server for IDE integration
└── features/ # MCP tool implementations
agents/ # AI agents (PydanticAI)
└── features/ # Agent capabilities
Frontend (archon-ui-main/src/)
features/ # Vertical slice architecture
├── knowledge/ # Knowledge base feature
├── projects/ # Project management
│ ├── tasks/ # Task sub-feature
│ └── documents/ # Document sub-feature
├── progress/ # Operation tracking
├── mcp/ # MCP integration
├── shared/ # Cross-feature utilities
└── ui/ # UI components & hooks
pages/ # Route components
components/ # Legacy components (migrating)
Core Modules
Knowledge Management
Backend: python/src/server/services/knowledge_service.py
Frontend: archon-ui-main/src/features/knowledge/
Features: Web crawling, document upload, embeddings, RAG search
Project Management
Backend: python/src/server/services/project_*_service.py
Frontend: archon-ui-main/src/features/projects/
Features: Projects, tasks, documents, version history
MCP Server
Location: python/src/mcp_server/
Purpose: Exposes tools to AI IDEs (Cursor, Windsurf)
Port: 8051
AI Agents
Location: python/src/agents/
Purpose: Document processing, code analysis, project generation
Port: 8052
Agent Work Orders (Optional)
Location: python/src/agent_work_orders/
Purpose: Workflow execution engine using Claude Code CLI
Port: 8053
API Structure
RESTful Endpoints
Pattern: {METHOD} /api/{resource}/{id?}/{sub-resource?}
Examples from python/src/server/api_routes/:
/api/projects- CRUD operations/api/projects/{id}/tasks- Nested resources/api/knowledge/search- RAG search/api/progress/{id}- Operation status
Service Layer
Pattern: python/src/server/services/{feature}_service.py
- Handles business logic
- Database operations via Supabase client
- Returns typed responses
Frontend Architecture
Data Fetching
Core: TanStack Query v5
Configuration: archon-ui-main/src/features/shared/config/queryClient.ts
Patterns: archon-ui-main/src/features/shared/config/queryPatterns.ts
State Management
- Server State: TanStack Query
- UI State: React hooks & context
- No Redux/Zustand: Query cache handles all data
Feature Organization
Each feature follows vertical slice pattern:
features/{feature}/
├── components/ # UI components
├── hooks/ # Query hooks & keys
├── services/ # API calls
└── types/ # TypeScript types
Smart Polling
Implementation: archon-ui-main/src/features/ui/hooks/useSmartPolling.ts
- Visibility-aware (pauses when tab hidden)
- Variable intervals based on focus state
Database
Provider: Supabase (PostgreSQL + pgvector)
Client: python/src/server/config/database.py
Main Tables
sources- Knowledge sourcesdocuments- Document chunks with embeddingscode_examples- Extracted codearchon_projects- Projectsarchon_tasks- Tasksarchon_document_versions- Version history
Key Architectural Decisions
Vertical Slices
Features own their entire stack (UI → API → DB). See any features/{feature}/ directory.
No WebSockets
HTTP polling with smart intervals. ETag caching reduces bandwidth by ~70%.
Query-First State
TanStack Query is the single source of truth. No separate state management needed.
Direct Database Values
No translation layers. Database values (e.g., "todo", "doing") used directly in UI.
Browser-Native Caching
ETags handled by browser, not JavaScript. See archon-ui-main/src/features/shared/api/apiClient.ts.
Deployment
Development
# Backend
docker compose up -d
# or
cd python && uv run python -m src.server.main
# Frontend
cd archon-ui-main && npm run dev
Production
Single Docker Compose deployment with all services.
Configuration
Environment Variables
Required: SUPABASE_URL, SUPABASE_SERVICE_KEY
Optional: See .env.example
Feature Flags
Controlled via Settings UI. Projects feature can be disabled.
Recent Refactors (Phases 1-5)
- Removed ETag cache layer - Browser handles HTTP caching
- Standardized query keys - Each feature owns its keys
- Fixed optimistic updates - UUID-based with nanoid
- Configured deduplication - Centralized QueryClient
- Removed manual invalidations - Trust backend consistency
Performance Optimizations
- Request Deduplication: Same query key = one request
- Smart Polling: Adapts to tab visibility
- ETag Caching: 70% bandwidth reduction
- Optimistic Updates: Instant UI feedback
Testing
Frontend Tests: archon-ui-main/src/features/*/tests/
Backend Tests: python/tests/
Patterns: Mock services and query patterns, not implementation
Future Considerations
- Server-Sent Events for real-time updates
- GraphQL for selective field queries
- Separate databases per bounded context
- Multi-tenant support