AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | π Star if you like it!
Crawler Summary
Production-grade Django REST Framework backend powering 8 specialized AI agents via a single intelligent orchestrator. Built with CrewAI, Google Gemini 2.0 Flash, and PostgreSQL. <div align="center"> π€ Aurelius β Multi-Agent AI Platform Backend Engineering Deep-Dive $1 $1 $1 $1 $1 $1 A production-deployed Django REST API that routes user requests to a fleet of 8 specialized CrewAI agents via a central orchestrator. Built with a focus on clean architecture, security, and real-world deployment practices. </div> --- Table of Contents - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - Capability contract not published. No trust telemetry is available yet. 1 GitHub stars reported by the source. Last updated 10/9/2026.
Freshness
Last checked 10/9/2026
Best For
-Aurelius-Multi-Agent-AI-Platform is best for crewai, multi-agent workflows where OpenClaw compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB REPOS, runtime-metrics, public facts pack
Production-grade Django REST Framework backend powering 8 specialized AI agents via a single intelligent orchestrator. Built with CrewAI, Google Gemini 2.0 Flash, and PostgreSQL. <div align="center"> π€ Aurelius β Multi-Agent AI Platform Backend Engineering Deep-Dive $1 $1 $1 $1 $1 $1 A production-deployed Django REST API that routes user requests to a fleet of 8 specialized CrewAI agents via a central orchestrator. Built with a focus on clean architecture, security, and real-world deployment practices. </div> --- Table of Contents - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 -
Public facts
5
Change events
1
Artifacts
0
Freshness
Oct 9, 2026
Capability contract not published. No trust telemetry is available yet. 1 GitHub stars reported by the source. Last updated 10/9/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Oct 9, 2026
Vendor
Abdullahanwar26
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. 1 GitHub stars reported by the source. Last updated 10/9/2026.
Setup snapshot
Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Abdullahanwar26
Protocol compatibility
OpenClaw
Adoption signal
1 GitHub stars
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
python
text
Request
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β URL Router (myapp/urls.py) β
β DRF DefaultRouter (ModelViewSets) + β
β Manual path() declarations (custom views) β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Authentication Middleware Layer β
β β
β 1. JWTAuthentication (SimpleJWT) β
β ββ Validates Bearer token β sets request.user β
β β
β 2. APIKeyAuthentication (custom backend) β
β ββ Validates sk_* token β sets request.user β
β AND attaches request.api_key for ACL checks β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β View Layer (myapp/views.py) β
β β
β APIView subclasses β custom business logic β
β ModelViewSet β standard CRUD endpoints β
β generics.* β list/retrieve shortcuts β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Gateway Service Layer β
β (myapp/services/ai_gateway.py) β
β β
β call_ai_agent(agent_type, query, file_path) β
β ββ Lazy-imports and dispatches to the right crew β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CrewAI Agent Fleet β
β (myapp/ai/agents/*)python
# myapp/urls.py router = DefaultRouter() router.register(r'users', UserViewSet) router.register(r'agents', AgentViewSet) router.register(r'conversations', ConversationViewSet) router.register(r'chat-messages', ChatMessageViewSet) router.register(r'api-keys', APIKeyViewSet, basename="api-keys") router.register(r'agent-feedbacks', AgentFeedbackViewSet) # ... more
python
class ConversationViewSet(ModelViewSet):
def get_queryset(self):
return Conversation.objects.filter(user=self.request.user)
def perform_create(self, serializer):
serializer.save(user=self.request.user)python
class AgentAPIView(APIView):
parser_classes = [MultiPartParser, FormParser, JSONParser]python
# settings.py
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(days=30),
"REFRESH_TOKEN_LIFETIME": timedelta(days=30),
"AUTH_HEADER_TYPES": ("Bearer",),
}python
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super().validate(attrs)
data.update({
'user_id': self.user.id,
'username': self.user.username,
'email': self.user.email,
})
return dataFull documentation captured from public sources, including the complete README when available.
Docs source
GITHUB REPOS
Editorial quality
ready
Production-grade Django REST Framework backend powering 8 specialized AI agents via a single intelligent orchestrator. Built with CrewAI, Google Gemini 2.0 Flash, and PostgreSQL. <div align="center"> π€ Aurelius β Multi-Agent AI Platform Backend Engineering Deep-Dive $1 $1 $1 $1 $1 $1 A production-deployed Django REST API that routes user requests to a fleet of 8 specialized CrewAI agents via a central orchestrator. Built with a focus on clean architecture, security, and real-world deployment practices. </div> --- Table of Contents - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 - $1 -
</div>A production-deployed Django REST API that routes user requests to a fleet of 8 specialized CrewAI agents via a central orchestrator. Built with a focus on clean architecture, security, and real-world deployment practices.
Aurelius is a Django REST Framework backend that exposes a clean, authenticated REST API on top of a multi-agent AI system. The core challenge this project solves is providing a single, stable API surface that can route a request to any of 8 completely different AI agent pipelines β each with its own tools, LLMs, and file-handling logic β without exposing that complexity to the client.
Core backend responsibilities this project demonstrates:
The backend is organized into clear, separated layers. Each layer has one job.
Request
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β URL Router (myapp/urls.py) β
β DRF DefaultRouter (ModelViewSets) + β
β Manual path() declarations (custom views) β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Authentication Middleware Layer β
β β
β 1. JWTAuthentication (SimpleJWT) β
β ββ Validates Bearer token β sets request.user β
β β
β 2. APIKeyAuthentication (custom backend) β
β ββ Validates sk_* token β sets request.user β
β AND attaches request.api_key for ACL checks β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β View Layer (myapp/views.py) β
β β
β APIView subclasses β custom business logic β
β ModelViewSet β standard CRUD endpoints β
β generics.* β list/retrieve shortcuts β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Gateway Service Layer β
β (myapp/services/ai_gateway.py) β
β β
β call_ai_agent(agent_type, query, file_path) β
β ββ Lazy-imports and dispatches to the right crew β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CrewAI Agent Fleet β
β (myapp/ai/agents/*) β
β β
β Root Orchestrator β routes to one or many: β
β QnA Β· Data Analysis Β· Automation Β· Stock β
β Resume Optimizer Β· Sentiment Β· Talent Β· RAG β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Response Renderer (CustomJSONRenderer) β
β Wraps ALL responses in standard envelope: β
β { "meta": {}, "message": "...", "error": bool } β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. Resource-based routing via DRF Router
All CRUD-able models are registered with DefaultRouter. This auto-generates the full suite of GET /resource/, POST /resource/, GET /resource/{id}/, PUT, PATCH, DELETE endpoints with zero boilerplate.
# myapp/urls.py
router = DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'agents', AgentViewSet)
router.register(r'conversations', ConversationViewSet)
router.register(r'chat-messages', ChatMessageViewSet)
router.register(r'api-keys', APIKeyViewSet, basename="api-keys")
router.register(r'agent-feedbacks', AgentFeedbackViewSet)
# ... more
2. Action-based endpoints for complex operations
Operations that don't map cleanly to a resource (calling an AI agent, starting a new chat, deleting a conversation) are implemented as explicit APIView subclasses with path() declarations. This keeps the router clean and the custom logic readable.
3. Scoped querysets β users only ever see their own data
Every ModelViewSet that handles user-owned data overrides get_queryset():
class ConversationViewSet(ModelViewSet):
def get_queryset(self):
return Conversation.objects.filter(user=self.request.user)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
This pattern is consistent across ChatMessageViewSet, TokenLogViewSet, SubscriptionViewSet, RootAgentMemoryViewSet, APIKeyViewSet, and AgentFeedbackViewSet. No view ever returns another user's data.
4. Parser flexibility
AI agent endpoints accept JSON, form data, and file uploads in one view class:
class AgentAPIView(APIView):
parser_classes = [MultiPartParser, FormParser, JSONParser]
This project implements two completely parallel authentication backends, both active simultaneously via DRF's DEFAULT_AUTHENTICATION_CLASSES.
Standard stateless JWT flow. Users log in to receive an access token (30-day lifetime) and a refresh token (30-day lifetime). Logout blacklists the refresh token using SimpleJWT's token blacklist app, making it truly invalidate.
# settings.py
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(days=30),
"REFRESH_TOKEN_LIFETIME": timedelta(days=30),
"AUTH_HEADER_TYPES": ("Bearer",),
}
The login view uses a custom serializer that injects extra user metadata into the JWT response without modifying the token payload itself:
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super().validate(attrs)
data.update({
'user_id': self.user.id,
'username': self.user.username,
'email': self.user.email,
})
return data
A fully custom BaseAuthentication subclass that supports scoped, per-agent API keys for external integrations. This lets third-party apps embed API access without giving out a user's full JWT.
# myapp/authentication.py
class APIKeyAuthentication(BaseAuthentication):
def authenticate(self, request):
auth_header = request.headers.get("Authorization")
if not auth_header or not auth_header.startswith("Bearer "):
return None # fall through to next auth backend
key = auth_header.split("Bearer ")[1].strip()
api_key = APIKey.objects.get(key=key, is_active=True)
# Attach the key object to request for downstream ACL checks
request.api_key = api_key
return (api_key.user, None)
Key design decisions:
None (not an exception) when no sk_* key is detected, allowing DRF to fall through to JWT auth β both backends coexist without conflictapi_key object to the request so views can check granular permissions downstream without another DB querysecrets.token_hex(16) prefixed with sk_ β never stored in plaintext in logsEach APIKey model instance has 8 boolean permission flags β one per agent:
allow_qna | allow_data | allow_talent | allow_stock |
allow_resume | allow_sentiment | allow_auto | allow_rag
A static helper method on the auth class checks these:
@staticmethod
def check_agent_permission(request, agent_name: str):
api_key = getattr(request, "api_key", None)
agent_map = {
"qna": api_key.allow_qna,
"data": api_key.allow_data,
"stock": api_key.allow_stock,
# ...
}
if not agent_map.get(agent_name):
raise AuthenticationFailed(f"API Key not authorized for {agent_name} agent.")
A separate api_key_helpers.py service module handles lookups cleanly:
AGENT_FLAG_MAP = {
"qna": "allow_qna", "data": "allow_data", ...
}
def api_key_allows_agent(api_key_obj: APIKey, agent_name: str) -> bool:
flag = AGENT_FLAG_MAP.get(agent_name.lower())
return bool(getattr(api_key_obj, flag, False))
All models live in myapp/models.py. The schema is designed around a user β conversation β message hierarchy with supporting lookup tables.
User
βββ Conversation (one user β many conversations)
β βββ ChatMessage (one conversation β many messages)
β βββ TokenLog (one message β one token log entry)
βββ Subscription (token limit / billing plan)
βββ APIKey (external access keys with per-agent flags)
βββ AgentFeedback (rating + comment per agent)
βββ RootAgentMemory (routing decisions log)
Agent
βββ Conversation (FK β which agent was used)
βββ ChatMessage (FK β which agent sent/received)
βββ AgentIntegration (API endpoint config for snippet gen)
βββ AgentFeedback (FK)
Uses AbstractUser with email as the login identifier. This is set up from the very first migration β changing USERNAME_FIELD after the fact would require a full migration rewrite.
class User(AbstractUser):
email = models.EmailField(unique=True)
phone = models.CharField(max_length=12, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
AUTH_USER_MODEL = "myapp.User" is set in settings.py before any auth-related migrations run.
Soft FK with SET_NULL β conversations survive agent deletion:
agent = models.ForeignKey(Agent, on_delete=models.SET_NULL, null=True, blank=True)
Auto-title on save β conversations without a title default cleanly:
def save(self, *args, **kwargs):
if not self.title:
self.title = "New Chat"
super().save(*args, **kwargs)
JSONField for flexible storage β routing decisions and API request bodies stored without schema lock-in:
used_agents = models.JSONField() # on RootAgentMemory
body = models.JSONField() # on AgentIntegration
Secure key generation on serializer create β keys are never accepted from client input:
class APIKeySerializer(serializers.ModelSerializer):
class Meta:
read_only_fields = ["id", "key", "user", "created_at"]
def create(self, validated_data):
validated_data["key"] = "sk_" + secrets.token_hex(16)
return super().create(validated_data)
3 migrations cover the full schema evolution:
| Migration | Change |
|---|---|
| 0001_initial | Full schema: User, Agent, Conversation, ChatMessage, TokenLog, Subscription, RootAgentMemory, APIKey, AgentFeedback |
| 0002_apikey_is_active | Adds is_active flag to APIKey |
| 0003_alter_user_name_alter_user_phone | Adjusts field constraints on User |
myapp/services/ai_gateway.py is the single integration point between the Django view layer and the CrewAI agent system. This decoupling is intentional β views never import agent code directly.
def call_ai_agent(agent_type: str, query, file_path=None, csv_file=None):
if agent_type == "qna":
from myapp.ai.agents.qna_agent.qna_user_agent import run_qna
return run_qna(query)
elif agent_type == "data":
from myapp.ai.agents.data_analysis... import run_data_analysis
return run_data_analysis(query, file_path)
elif agent_type == "root":
from myapp.ai import main
return main.manager_agent_function(query=query, file=file_path)
# ... etc
Why lazy imports (inside the function, not at top of file)?
All agent imports are deferred until the function is actually called. This means:
Why a service layer instead of calling agents directly from views?
Every single response from every endpoint is automatically wrapped in the same JSON shape via a custom DRF renderer β no decorator, no mixin, just one class registered globally:
# settings.py
REST_FRAMEWORK = {
"DEFAULT_RENDERER_CLASSES": ("myapp.utils.custom_response.CustomJSONRenderer",),
}
# myapp/utils/custom_response.py
class CustomJSONRenderer(JSONRenderer):
def render(self, data, accepted_media_type=None, renderer_context=None):
response = renderer_context.get("response")
success = response is not None and response.status_code < 400
envelope = {
"meta": data if success else {},
"message": data.pop("message", "Success") if success else str(data.get("detail", "An error occurred")),
"error": not success
}
return super().render(envelope, accepted_media_type, renderer_context)
Result: Every response, including DRF validation errors and 404s, returns:
{
"meta": { "conversation_id": 42, "ai_reply": "..." },
"message": "Success",
"error": false
}
DRF's default exception handler is replaced with one that ensures error responses match the same envelope:
# myapp/utils/custom_exception_handler.py
def custom_exception_handler(exc, context):
response = exception_handler(exc, context)
if response is not None:
response.data = {
"meta": {},
"message": str(exc),
"error": True
}
return response
Registered globally:
REST_FRAMEWORK = {
"EXCEPTION_HANDLER": "myapp.utils.custom_exception_handler.custom_exception_handler",
}
myapp/services/code_snippet_generator.py generates working integration code for any agent in 4 languages (Python, JavaScript, Java, C++) based on the AgentIntegration model config. This powers the /api/integration-snippet/{agent_name}/{language}/ endpoint β useful for a developer portal or documentation site.
The Data Analysis agent dynamically generates and executes Python code to analyze datasets. A static pattern blocklist is applied to every piece of generated code before execution:
DANGEROUS_PATTERNS = [
'import os', 'import sys', 'import subprocess', 'import socket',
'eval(', 'exec(', '__import__', 'open(', 'file(', 'input(',
'raw_input(', 'compile(', 'globals()', 'locals()', 'vars(',
'getattr(', 'setattr(', 'delattr('
]
Code containing any of these patterns is rejected before execution.
Logout genuinely invalidates tokens β the refresh token is added to SimpleJWT's blacklist table, preventing reuse even if the token hasn't expired:
class LogoutView(APIView):
def post(self, request):
token = RefreshToken(request.data["refresh"])
token.blacklist()
No view returns data belonging to another user. Every queryset is scoped to request.user. There is no is_admin bypass path in any view β admin access goes through Django's built-in /admin/ panel.
Email sender credentials (for the Automation agent) are loaded from environment variables, never hardcoded. The EmailConfig dataclass abstracts SMTP server selection by domain, supporting Gmail, Outlook, Yahoo, Zoho, and iCloud out of the box.
CORS_ALLOW_ALL_ORIGINS = True # β restrict to specific origins in production
CORS_ALLOW_CREDENTIALS = True
CSRF_TRUSTED_ORIGINS = os.getenv("CSRF_TRUSTED_ORIGINS", "").split(",")
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SECURE_PROXY_SSL_HEADER is required on Render (and most PaaS platforms) because the SSL termination happens at the load balancer, not at Gunicorn.
Configured via render.yaml for one-command deployment.
services:
- type: web
name: aurelius-backend
env: python
buildCommand: "pip install -r requirements.txt"
startCommand: "gunicorn myproject.wsgi --bind 0.0.0.0:$PORT --timeout 120"
envVars:
- key: SECRET_KEY
generateValue: true
- key: DATABASE_URL
fromDatabase:
name: neon-db
property: connectionString
--timeout 120 on Gunicorn is critical β AI agent calls can take 30β90 seconds. The default timeout of 30 seconds would kill in-flight requests.
Whitenoise serves compressed static files directly from Gunicorn β no S3, no separate CDN needed for this scale:
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware", # β must be second
...
]
STORAGES = {
"staticfiles": {
"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage"
}
}
CompressedManifestStaticFilesStorage adds content-hash fingerprints to filenames (e.g. base.a3f9c2.css) so browsers cache aggressively and bust cache on deploy.
Settings parse the DATABASE_URL env var manually to support Neon's channel_binding requirements without depending on dj-database-url:
url = urlparse(DATABASE_URL)
query = parse_qs(url.query)
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": url.path.lstrip("/"),
"USER": url.username,
"PASSWORD": url.password,
"HOST": url.hostname,
"PORT": url.port or 5432,
"CONN_MAX_AGE": 600,
"OPTIONS": {"sslmode": query.get("sslmode", ["require"])[0]},
}
}
CONN_MAX_AGE: 600 enables persistent database connections β each Gunicorn worker reuses its DB connection for up to 10 minutes instead of reconnecting on every request.
Pinned in runtime.txt:
python-3.12.7
# 1. Clone
git clone https://github.com/YOUR_USERNAME/aurelius-backend.git
cd aurelius-backend
# 2. Virtual environment
python -m venv venv && source venv/bin/activate # or venv\Scripts\activate on Windows
# 3. Install dependencies
pip install -r requirements.txt
# 4. Environment variables
cp .env.example .env
# Edit .env β at minimum set DATABASE_URL and GOOGLE_API_KEY
# 5. Database
python manage.py migrate
# 6. (Optional) Create superuser for /admin/
python manage.py createsuperuser
# 7. Run
python manage.py runserver
Minimum required .env for local development:
DEBUG=True
SECRET_KEY=any-local-secret-key
DATABASE_URL=postgres://postgres:password@localhost:5432/aurelius_dev
GOOGLE_API_KEY=your-key # required for any agent call
TAVILY_API_KEY=your-key # required for QnA agent
This section is for contributors and teammates.
main β production-ready, deployed to Render on merge
dev β integration branch, all PRs target this
feature/* β individual feature branches (e.g. feature/stock-agent-cache)
fix/* β bug fix branches
The system is designed to make adding agents straightforward without touching existing code:
Step 1 β Build the CrewAI crew under myapp/ai/agents/your_agent/:
your_agent/
βββ crew.py β @CrewBase class with @agent, @task, @crew
βββ your_agent_main.py β plain callable function for gateway
βββ your_agent_root.py β @tool version for root orchestrator
βββ config/
βββ agents.yaml
βββ tasks.yaml
Step 2 β Register in the gateway (myapp/services/ai_gateway.py):
elif agent_type == "your_agent":
from myapp.ai.agents.your_agent.your_agent_main import run_your_agent
return run_your_agent(query, file_path)
Step 3 β Add permission flag to the APIKey model (myapp/models.py):
allow_your_agent = models.BooleanField(default=False)
Step 4 β Register in api_key_helpers.py:
AGENT_FLAG_MAP = {
...
"your_agent": "allow_your_agent",
}
Step 5 β Run python manage.py makemigrations && python manage.py migrate
Step 6 β Add the root orchestrator tool import in myapp/ai/main.py
That's it. No view changes needed.
myapp/services/ or inside the agent modulesrequest.user β never return unscoped datacall_ai_agent() for all new agent integrations__str__ methods always return something meaningful (used in admin)python manage.py test myapp
Test coverage targets (for contributors):
Base URL: https://aurelius-backend.onrender.com (or http://localhost:8000 locally)
All authenticated endpoints require:
Authorization: Bearer <jwt_access_token_or_api_key>
All responses follow the envelope:
{ "meta": {}, "message": "string", "error": false }
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| POST | /api/signup/ | None | Register new user |
| POST | /api/login/ | None | Login, returns JWT pair |
| POST | /api/logout/ | JWT | Blacklists refresh token |
| POST | /api/token/refresh/ | None | Exchange refresh β new access token |
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| POST | /api/root-agent/ | JWT/Key | Auto-route query to best agent |
| POST | /api/agent/{name}/ | JWT/Key | Call specific agent directly |
Agent names: qna Β· data Β· auto Β· stock Β· resume Β· sentiment Β· talent Β· rag
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| GET | /api/conversation-history/ | JWT | List all user conversations |
| GET | /api/conversation/{id}/messages/ | JWT | All messages in a conversation |
| POST | /api/new-chat/ | JWT | Start a fresh conversation |
| DELETE | /api/conversation/{id}/delete/ | JWT | Delete conversation + messages |
| POST | /api/save-chat/ | JWT | Manually save a message |
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| GET | /api/api-keys/ | JWT | List user's API keys |
| POST | /api/api-keys/ | JWT | Generate new scoped API key |
| PATCH | /api/api-keys/{id}/ | JWT | Update key permissions |
| DELETE | /api/api-keys/{id}/ | JWT | Revoke a key |
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| GET | /api/public-agents/ | None | List featured agents |
| GET | /api/public-agents/{id}/ | None | Single agent detail |
| GET | /api/integration-snippet/{agent}/{lang}/ | JWT | Get code snippet (python/javascript/java/c++) |
| Variable | Required | Description |
|---|---|---|
| SECRET_KEY | β
| Django secret key |
| DATABASE_URL | β
| PostgreSQL connection string |
| DEBUG | β
| True for dev, False for prod |
| ALLOWED_HOSTS | β
| Comma-separated hostnames |
| CSRF_TRUSTED_ORIGINS | β
| Comma-separated trusted origins |
| GOOGLE_API_KEY | β
| Gemini LLM access (all agents) |
| TAVILY_API_KEY | β
| Web search (QnA agent) |
| GITHUB_TOKEN | β οΈ | GitHub API (Talent agent only) |
| ALPHA_VANTAGE_API_KEY | β οΈ | Stock data (Stock agent only) |
| GEMINI_API_KEY | β οΈ | Alias for GOOGLE_API_KEY in some agents |
MIT License β see LICENSE for details.
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/snapshot"
curl -s "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/contract"
curl -s "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | π Star if you like it!
AI Agents & MCPs & AI Workflow Automation β’ (~400 MCP servers for AI agents) β’ AI Automation / AI Agent with MCPs β’ AI Workflows & AI Agents β’ MCPs for AI Agents
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
The Frontend for Agents & Generative UI. React + Angular
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/snapshot",
"contractUrl": "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/contract",
"trustUrl": "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/trust"
},
"curlExamples": [
"curl -s \"https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/snapshot\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/contract\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_REPOS",
"generatedAt": "2026-10-10T01:53:06.190Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "crewai",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "multi-agent",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile capability:crewai|supported|profile capability:multi-agent|supported|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Abdullahanwar26",
"href": "https://github.com/AbdullahAnwar26/-Aurelius-Multi-Agent-AI-Platform",
"sourceUrl": "https://github.com/AbdullahAnwar26/-Aurelius-Multi-Agent-AI-Platform",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T21:09:26.402Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T21:09:26.402Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1 GitHub stars",
"href": "https://github.com/AbdullahAnwar26/-Aurelius-Multi-Agent-AI-Platform",
"sourceUrl": "https://github.com/AbdullahAnwar26/-Aurelius-Multi-Agent-AI-Platform",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T21:09:26.402Z",
"isPublic": true
},
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/crewai-abdullahanwar26-aurelius-multi-agent-ai-platform/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub Β· GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to -Aurelius-Multi-Agent-AI-Platform and adjacent AI workflows.