A collaborative multi-agent AI framework for autonomous AI agents working together
Project description
GatheRing ䷬
A collaborative multi-agent AI framework built with Python, FastAPI, and React.
Overview
GatheRing is a highly customizable and modular framework for creating and managing AI agents with complex personalities, diverse competencies, and professional expertise. Agents can collaborate in "Circles", use external tools, and be managed through a web dashboard.
Key Features
- Multi-Model Support: Anthropic (Claude), OpenAI, DeepSeek, and local models via Ollama
- Gathering Circles: Team orchestration with task routing, reviews, and conflict detection
- Agent Persistence: Personas, memory, sessions with automatic context injection
- Agent Conversations: Direct inter-agent collaboration with turn strategies
- REST API: Full FastAPI backend with WebSocket support
- React Dashboard: Modern Web3 dark theme UI for agents, circles, tasks, and conversations
- RAG Support: PostgreSQL + pgvector for semantic memory search
- Knowledge Base: Semantic search across documentation and best practices
- Skills System: 18+ skills (filesystem, git, code, shell, database, http, etc.) with per-agent configuration
- Agent Autonomy: Background tasks, scheduled actions, goal management
- Settings UI: Configure API keys and application parameters via dashboard
- Authentication: JWT-based auth with token revocation and OWASP security headers
- Fully Tested: 1071 tests with TDD approach
Quick Start
# Clone the repository
git clone https://github.com/alkimya/gathering.git
cd gathering
# Create virtual environment
python -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your API keys and database credentials
# Setup database (PostgreSQL + pgvector)
python -m gathering.db.setup
# Run tests
pytest tests/ -v
# Start the API server
uvicorn gathering.api:app --reload
# Start the dashboard (in another terminal)
cd dashboard
npm install
npm run dev
Architecture
gathering/
├── core/ # Core abstractions and config
├── agents/ # Agent persistence (persona, memory, session)
├── orchestration/ # Circles, Facilitator, Events
├── llm/ # LLM providers (Anthropic, OpenAI, DeepSeek, Ollama)
├── skills/ # Tools (Git, Test, etc.)
├── api/ # FastAPI REST API + WebSocket
├── rag/ # RAG services (embeddings, vector store, memory)
└── db/ # Database models (PostgreSQL + pgvector)
dashboard/ # React + TypeScript + Tailwind (Web3 Dark Theme)
├── src/
│ ├── pages/ # Dashboard, Agents, Circles, Tasks, Schedules, Goals, Settings
│ ├── services/ # API client
│ └── hooks/ # WebSocket hook
Documentation
- User Guide - Getting started guide
- Dashboard Guide - Web dashboard documentation
- Architecture - Technical documentation
- API Reference - REST API documentation
- Contributing - Developer guide
Stack
| Component | Technology |
|---|---|
| Backend | Python 3.11+, FastAPI, Pydantic |
| Frontend | React 19, TypeScript, Tailwind CSS, Vite |
| Database | PostgreSQL 16 + pgvector |
| DB Layer | pycopg - High-level PostgreSQL API (asyncpg + psycopg) |
| LLM | Anthropic, OpenAI, DeepSeek, Mistral, Google, Ollama |
| Embeddings | OpenAI text-embedding-3-small (1536 dims) |
Environment Variables
# Required
DATABASE_URL=postgresql://user:pass@localhost:5432/gathering
OPENAI_API_KEY=sk-... # For embeddings + OpenAI models
# Optional LLM providers
ANTHROPIC_API_KEY=sk-ant-... # For Claude models
DEEPSEEK_API_KEY=sk-... # For DeepSeek models
OLLAMA_HOST=http://localhost:11434 # For local models
# Dashboard
VITE_API_URL=http://localhost:8000 # API URL for frontend
# Authentication (production)
SECRET_KEY=your-secret-key-min-32-chars # JWT signing key
ADMIN_EMAIL=admin@example.com # Admin email
ADMIN_PASSWORD_HASH=$2b$12$... # Bcrypt hash of admin password
API Overview
GET /health # Health check
GET /agents # List agents
POST /agents # Create agent
POST /agents/{id}/chat # Chat with agent
GET /circles # List circles
POST /circles/{name}/tasks # Create task
POST /conversations # Start conversation
POST /memories/agents/{id}/recall # Semantic memory search
POST /memories/knowledge/search # Knowledge base search
GET /background-tasks # List background tasks
POST /background-tasks # Create background task
GET /scheduled-actions # List scheduled actions
POST /scheduled-actions # Create scheduled action
GET /goals # List agent goals
POST /goals # Create goal
GET /settings # Get configuration
PATCH /settings/providers/{name} # Update provider settings
POST /auth/login # Authenticate user
POST /auth/logout # Revoke token
WS /ws?token=<jwt> # Real-time updates (authenticated)
Full API docs at /docs (Swagger) or /redoc when server is running.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contact
- GitHub: alkimya/gathering
- Email: loc.cosnier@pm.me
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gathering-0.5.0.tar.gz.
File metadata
- Download URL: gathering-0.5.0.tar.gz
- Upload date:
- Size: 517.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2180a9f02c1c220446d1b9eda1d095c4e043b81f19ca819b3942b5708437bb7
|
|
| MD5 |
3869d8af21a1c5b22015c13b97f9c5b8
|
|
| BLAKE2b-256 |
b925bd921a34548b9b68e1739103b185c2aa4a902002d03116f4ba1ae567326b
|
Provenance
The following attestation bundles were made for gathering-0.5.0.tar.gz:
Publisher:
publish.yml on alkimya/gathering
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gathering-0.5.0.tar.gz -
Subject digest:
b2180a9f02c1c220446d1b9eda1d095c4e043b81f19ca819b3942b5708437bb7 - Sigstore transparency entry: 789684043
- Sigstore integration time:
-
Permalink:
alkimya/gathering@7bd8d85e42126e3cc2f25e1e4eb5ce2eb39ade47 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/alkimya
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7bd8d85e42126e3cc2f25e1e4eb5ce2eb39ade47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file gathering-0.5.0-py3-none-any.whl.
File metadata
- Download URL: gathering-0.5.0-py3-none-any.whl
- Upload date:
- Size: 614.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdae316e599ec3733dbac3bdc0430b043309212785a780076ea9a8ce7ddf8847
|
|
| MD5 |
0a1d455130968453e09d71a9c931a45d
|
|
| BLAKE2b-256 |
0c2e880f2cc4044ee5aea89be4727b5addd08793154d82fdce10298264ffd1aa
|
Provenance
The following attestation bundles were made for gathering-0.5.0-py3-none-any.whl:
Publisher:
publish.yml on alkimya/gathering
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gathering-0.5.0-py3-none-any.whl -
Subject digest:
bdae316e599ec3733dbac3bdc0430b043309212785a780076ea9a8ce7ddf8847 - Sigstore transparency entry: 789684044
- Sigstore integration time:
-
Permalink:
alkimya/gathering@7bd8d85e42126e3cc2f25e1e4eb5ce2eb39ade47 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/alkimya
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7bd8d85e42126e3cc2f25e1e4eb5ce2eb39ade47 -
Trigger Event:
push
-
Statement type: