5.4 KiB
5.4 KiB
Repository Guidelines
This document summarizes how to work with the cognee repository: how it’s organized, how to build, test, lint, and contribute. It mirrors our actual tooling and CI while providing quick commands for local development.
Project Structure & Module Organization
cognee/: Core Python library and API.api/: FastAPI application and versioned routers (add, cognify, memify, search, delete, users, datasets, responses, visualize, settings, sync, update, checks).cli/: CLI entry points and subcommands invoked viacognee/cognee-cli.infrastructure/: Databases, LLM providers, embeddings, loaders, and storage adapters.modules/: Domain logic (graph, retrieval, ontology, users, processing, observability, etc.).tasks/: Reusable tasks (e.g., code graph, web scraping, storage). Extend with new tasks here.eval_framework/: Evaluation utilities and adapters.shared/: Cross-cutting helpers (logging, settings, utils).tests/: Unit, integration, CLI, and end-to-end tests organized by feature.__main__.py: Entrypoint to route to CLI.
cognee-mcp/: Model Context Protocol server exposing cognee as MCP tools (SSE/HTTP/stdio). Contains its own README and Dockerfile.cognee-frontend/: Next.js UI for local development and demos.distributed/: Utilities for distributed execution (Modal, workers, queues).examples/: Example scripts demonstrating the public APIs and features (graph, code graph, multimodal, permissions, etc.).notebooks/: Jupyter notebooks for demos and tutorials.alembic/: Database migrations for relational backends.
Notes:
- Co-locate feature-specific helpers under their respective package (
modules/,infrastructure/, ortasks/). - Extend the system by adding new tasks, loaders, or retrievers rather than modifying core pipeline mechanisms.
Build, Test, and Development Commands
Python (root) – requires Python >= 3.10 and < 3.14. We recommend uv for speed and reproducibility.
- Create/refresh env and install dev deps:
uv sync --dev --all-extras --reinstall
- Run the CLI (examples):
uv run cognee-cli add "Cognee turns documents into AI memory."
uv run cognee-cli cognify
uv run cognee-cli search "What does cognee do?"
uv run cognee-cli -ui # Launches UI, backend API, and MCP server together
- Start the FastAPI server directly:
uv run python -m cognee.api.client
- Run tests (CI mirrors these commands):
uv run pytest cognee/tests/unit/ -v
uv run pytest cognee/tests/integration/ -v
- Lint and format (ruff):
uv run ruff check .
uv run ruff format .
- Optional static type checks (mypy):
uv run mypy cognee/
MCP Server (cognee-mcp/):
- Install and run locally:
cd cognee-mcp
uv sync --dev --all-extras --reinstall
uv run python src/server.py # stdio (default)
uv run python src/server.py --transport sse
uv run python src/server.py --transport http --host 127.0.0.1 --port 8000 --path /mcp
- API Mode (connect to a running Cognee API):
uv run python src/server.py --transport sse --api-url http://localhost:8000 --api-token YOUR_TOKEN
- Docker quickstart (examples): see
cognee-mcp/README.mdfor full details
docker run -e TRANSPORT_MODE=http --env-file ./.env -p 8000:8000 --rm -it cognee/cognee-mcp:main
Frontend (cognee-frontend/):
cd cognee-frontend
npm install
npm run dev # Next.js dev server
npm run lint # ESLint
npm run build && npm start
Coding Style & Naming Conventions
Python:
- 4-space indentation, modules and functions in
snake_case, classes inPascalCase. - Public APIs should be type-annotated where practical.
- Use
ruff formatbefore committing;ruff checkenforces import hygiene and style (line-length 100 configured inpyproject.toml). - Prefer explicit, structured error handling. Use shared logging utilities in
cognee.shared.logging_utils.
MCP server and Frontend:
- Follow the local
README.mdand ESLint/TypeScript configuration incognee-frontend/.
Testing Guidelines
- Place Python tests under
cognee/tests/.- Unit tests:
cognee/tests/unit/ - Integration tests:
cognee/tests/integration/ - CLI tests:
cognee/tests/cli_tests/
- Unit tests:
- Name test files
test_*.py. Usepytest.mark.asynciofor async tests. - Avoid external state; rely on test fixtures and the CI-provided env vars when LLM/embedding providers are required. See CI workflows under
.github/workflows/for expected environment variables. - When adding public APIs, provide/update targeted examples under
examples/python/.
Commit & Pull Request Guidelines
- Use clear, imperative subjects (≤ 72 chars) and conventional commit styling in PR titles. Our CI validates semantic PR titles (see
.github/workflows/pr_lint). Examples:feat(graph): add temporal edge weightingfix(api): handle missing auth cookiedocs: update installation instructions
- Reference related issues/discussions in the PR body and provide brief context.
- PRs should describe scope, list local test commands run, and mention any impacts on MCP server or UI if applicable.
- Sign commits and affirm the DCO (see
CONTRIBUTING.md).
CI Mirrors Local Commands
Our GitHub Actions run the same ruff checks and pytest suites shown above (.github/workflows/basic_tests.yml and related workflows). Use the commands in this document locally to minimize CI surprises.