Ensure Python 3.12+ is installed and available as python3. On some systems
you may need to install it via your package manager:
# macOS
brew install python@3.12
# Ubuntu/Debian
sudo apt install python3.12 python3.12-venvGenerate one manually:
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"Add the output to backend/.env as MASTER_ENCRYPTION_KEY=<value>.
The backend must be running. Check:
- Is the backend running? (
make devorcd backend && uvicorn app.main:app --port 8000) - Is the frontend pointing to the right API URL? Check
NEXT_PUBLIC_API_URLinfrontend/.env.local(default:http://localhost:8000/api)
cd backend
PYTHONPATH=. alembic upgrade headIf migrations are corrupt, for development you can reset:
rm -f data/agent.db
PYTHONPATH=. alembic upgrade head- Set
GOOGLE_CLIENT_IDinbackend/.env - Set
NEXT_PUBLIC_GOOGLE_CLIENT_IDinfrontend/.env.local - Add
http://localhost:3100to authorized JavaScript origins in Google Cloud Console
- PostgreSQL
- MySQL
- ClickHouse
- MongoDB (limited SQL — uses aggregation pipelines)
Yes. When creating a connection, enable "Use SSH Tunnel" and provide:
- SSH host, port, username
- SSH key (upload via SSH Key Manager in settings)
Set in backend/.env:
DEFAULT_LLM_PROVIDER=openai # or: anthropic, openrouter
OPENAI_API_KEY=sk-...
# ANTHROPIC_API_KEY=sk-ant-...
# OPENROUTER_API_KEY=sk-or-...Per-project LLM overrides are available in project settings.
Yes. All database credentials are encrypted at rest using Fernet symmetric
encryption (MASTER_ENCRYPTION_KEY). The key is never stored in the database.
Click the export button on any query result. Supported formats:
- CSV
- JSON
- XLSX (Excel)
Batch queries export as a multi-sheet XLSX file with one sheet per query.
make test # Backend unit tests
make test-frontend # Frontend tests
make test-all # All backend tests
make check # Lint + all tests- Create or edit a route file in
backend/app/api/routes/ - Register it in
backend/app/api/routes/__init__.py - Add rate limiting with
@limiter.limit() - Add input validation with Pydantic models
- Add tests in
backend/tests/unit/ - Update
API.mdif it's a public endpoint
- Create the component in the appropriate
frontend/src/components/directory - Use
"use client"directive if it has interactivity - Follow the existing patterns for state management (Zustand) and styling (Tailwind)
- Add a test file alongside the component (e.g.,
MyComponent.test.tsx)
- Backend lint:
cd backend && ruff check app/ tests/ - Backend format:
cd backend && ruff format --check app/ tests/ - Backend types:
cd backend && mypy app/ --ignore-missing-imports - Backend tests:
cd backend && pytest tests/ -x - Frontend types:
cd frontend && npx tsc --noEmit - Frontend lint:
cd frontend && npx eslint . --max-warnings=0 - Frontend tests:
cd frontend && npm test - Frontend build:
cd frontend && npm run build