REST API on port 8000
Plain or streaming chat, plus routes for memory, decisions, identity, the heartbeat and DAGs.
POST /chatchatPOST /chat/streamSSEGET /statusGET /decisionsGET /facts?q=queryGET /calibrationClone the repository, put an Anthropic API key in .env and run docker compose up -d. Needs Docker Compose v2.
Docker and one Anthropic key. The other keys switch on extra tools.
web_searchANTHROPIC_API_KEY=sk-ant-...requiredOPENAI_API_KEY=sk-...recommendedBRAVE_SEARCH_API_KEY=BSA...recommendedTELEGRAM_BOT_TOKEN=123456:ABC-...optionalNOUS_ALLOWED_USERS=12345,67890optional# DB_HOST=localhostDatabase defaults work for DockerClone the repository and create .env in the project root with your ANTHROPIC_API_KEY.
$ git clone https://github.com/tfatykhov/nous.git $ cd nous $ cp .env.example .env # set ANTHROPIC_API_KEY=sk-ant-... # OPENAI_API_KEY enables embeddings
One command starts PostgreSQL with pgvector, the agent and the Telegram bot. Migrations run on startup.
$ docker compose up -d ✔ Container nous-postgres Started ✔ Container nous-agent Started ✔ Container nous-scorer Started ✔ Container nous-telegram Started
Ask for its health, then send a first message. The dashboard runs at localhost:8000/dashboard.
$ curl http://localhost:8000/health {"status":"healthy"} $ curl -X POST http://localhost:8000/chat \ -H "Content-Type: application/json" \ -d '{"message": "Hello, who are you?"}'
The quickstart lists three. The compose file in 1.2.0 also starts nous-scorer, the job that scores background work.
pgvector/pgvector:pg17, port 5432To skip the bot: docker compose up -d nous postgres
$ curl http://localhost:8000/status # agent status, memory stats, calibration $ docker logs nous-agent # the agent's log $ docker compose down # stop; memory stays in the volume $ docker compose down -v # stop and remove data: a fresh start $ uv sync && uv run python -m nous.main # local development: Python 3.12+ and uv $ uv run pytest tests/ -v # tests need Postgres running
Plain or streaming chat, plus routes for memory, decisions, identity, the heartbeat and DAGs.
POST /chatchatPOST /chat/streamSSEGET /statusGET /decisionsGET /facts?q=queryGET /calibrationOther agents and tools reach Nous over the Model Context Protocol. It is on by default.
nous_chatnous_recallnous_statusnous_teachnous_decideSet TELEGRAM_BOT_TOKEN, and NOUS_ALLOWED_USERS to limit who can talk to it.
The repository's docs go deeper than this page.
README.mdWhy Nous, features, how it thinksdocs/quickstart.mdDeploy, local development, every variabledocs/features/INDEX.mdEvery feature and its statusLICENSEApache 2.0Yes, for development: start Postgres alone, then uv sync and uv run python -m nous.main.
Those marked opt-in in the README, such as approvals and coding jobs. Each sits behind a documented flag.
Yes. Every row is scoped by agent_id; set NOUS_AGENT_ID per agent.
The database password, at least. The quickstart lists a minimal production .env.