
# Elydora
**The Responsibility Layer for AI Agents**
Tamper-evident audit trails with cryptographic proof for every AI agent action.
[](LICENSE)
[](sdks/node/)
[](sdks/python/)
[](sdks/go/)
[](https://elydora.com)
[Website](https://elydora.com) · [Quick Start](#quick-start) · [Documentation](#documentation) · [API Reference](#api-reference) · [SDKs](#sdks) · [Contributing](#contributing)
---
## What is Elydora?
Elydora is an open-source **responsibility protocol for AI agents**. When an AI agent takes an action — reading a file, calling an API, modifying a database, sending a message — Elydora captures a cryptographically signed, tamper-evident record of that action. These records are chain-hashed together to form an unforgeable audit trail, then rolled up into Merkle tree epochs anchored to public timestamp authorities.
The result is a complete, verifiable history of everything your AI agents have ever done, that no one — not even the platform operator — can silently alter.
**Core protocol features:**
- **Ed25519 signed operation records (EOR)** — every agent action is signed with the agent's private key before leaving the agent's process
- **Chain-hashed audit trails** — each record cryptographically commits to the previous record, making silent insertion, deletion, or reordering detectable
- **Merkle tree epoch rollups with TSA anchoring** — periodic epochs hash all records into a Merkle tree whose root is anchored via RFC 3161 Trusted Timestamping
- **Multi-tenant with RBAC** — fine-grained role-based access control with five distinct roles from read-only investigator to organization owner
- **Compliance exports (JSON / PDF)** — one-click export of the complete audit trail for any time range, agent, or operation type
---
## Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ AI Agent Process │
│ │
│ ┌──────────────┐ createOperation() ┌──────────────────┐ │
│ │ Agent Logic │ ─────────────────────▶│ Elydora SDK │ │
│ │ │◀───────────────────── │ (Node/Python/Go)│ │
│ └──────────────┘ submitOperation() └────────┬─────────┘ │
│ │ Signs EOR │
│ │ (Ed25519) │
└───────────────────────────────────────────────────┼─────────────┘
│ HTTPS
▼
┌──────────────────────────────────────────────────────────────────┐
│ Elydora API Server │
│ │
│ ┌───────────────┐ ┌───────────────┐ ┌──────────────────┐ │
│ │ Auth / RBAC │ │ Verify EOR │ │ Epoch Rollups │ │
│ │ Middleware │ │ (signature + │ │ (Merkle trees + │ │
│ │ │ │ chain hash) │ │ TSA anchoring) │ │
│ └───────────────┘ └───────────────┘ └──────────────────┘ │
│ │ │ │ │
└───────────┼──────────────────┼─────────────────────┼────────────┘
│ │ │
┌──────▼──────┐ ┌───────▼────────┐ ┌───────▼──────────┐
│ PostgreSQL │ │ Object Store │ │ Redis │
│ (metadata + │ │ (payloads + │ │ (nonce cache + │
│ chain) │ │ receipts + │ │ rate limits) │
│ │ │ exports) │ │ │
└──────────────┘ └────────────────┘ └──────────────────┘
```
---
## Quick Start
### Prerequisites
- Docker 24+
- Docker Compose v2.20+
### One-Command Deploy
```bash
git clone https://github.com/Elydora-Infrastructure/Elydora-Open-Source.git
cd Elydora-Open-Source
# Copy and edit environment configuration
cp .env.example .env
# Generate Ed25519 signing keys for the server and initial admin
./scripts/generate-keys.sh
# Start all services (API, PostgreSQL, MinIO, Redis)
docker compose up -d
# Verify the server is healthy
curl http://localhost:8787/v1/health
```
### Kubernetes Deploy
```bash
helm install elydora ./helm/elydora \
--namespace elydora \
--create-namespace \
-f values.yaml
```
---
## Project Structure
```
Elydora-Open-Source/
├── packages/
│ ├── server/ # Elydora API server
│ └── console/ # Next.js web management console
├── sdks/
│ ├── node/ # @elydora/sdk — Node.js / TypeScript SDK
│ ├── python/ # elydora — Python SDK (sync + async)
│ └── go/ # github.com/Elydora-Infrastructure/Elydora-Go-SDK
├── helm/
│ └── elydora/ # Kubernetes Helm chart
├── scripts/ # Key generation, migration, and utility scripts
├── CONTRIBUTING.md
├── LICENSE
└── README.md
```
| Package | Description |
|---------|-------------|
| `packages/server` | The core API server. Handles EOR ingestion, signature verification, chain validation, RBAC, epoch rollups, and compliance exports. |
| `packages/console` | A web-based management console for viewing agents, browsing the audit trail, managing exports, and administering users. |
| `sdks/node` | TypeScript SDK with full type coverage. Ships a CLI (`elydora`) and a programmatic client. Supports plugin hooks for popular AI coding agents. |
| `sdks/python` | Python SDK with both synchronous (`ElydoraClient`) and asynchronous (`AsyncElydoraClient`) clients. Requires Python 3.9+. |
| `sdks/go` | Go SDK with idiomatic error handling. Ships a CLI binary and embeds zero external runtime dependencies. |
| `helm/elydora` | Production-ready Helm chart for Kubernetes deployments with configurable replicas, resource limits, and secret management. |
---
## Documentation
### Registration and Authentication Flow
```
1. Register organization and first user
POST /v1/auth/register → { user, organization, token }
2. Log in to retrieve a JWT
POST /v1/auth/login → { user, token }
3. Issue a long-lived API token (optional)
POST /v1/auth/token → { token, expires_at }
4. Register an agent (as integration_engineer)
POST /v1/agents/register → { agent, keys }
5. Agent submits operations using its SDK client
POST /v1/operations → { receipt (EAR) }
```
### Operation Lifecycle
```
Agent SDK Server
│ │ │
│ createOperation(params) │ │
│ ─────────────────────────▶ │ │
│ │ 1. Generate UUIDv7 op ID │
│ │ 2. Generate 16-byte nonce │
│ │ 3. Compute payload_hash │
│ │ SHA-256(JCS(payload)) │
│ │ 4. Compute chain_hash │
│ │ SHA-256(prev|ph|id|ts) │
│ │ 5. Sign JCS(EOR) w/ Ed25519 │
│ │ 6. Update internal state │
│ EOR (signed) │ │
│ ◀───────────────────────── │ │
│ │ │
│ submitOperation(eor) │ │
│ ─────────────────────────▶ │ POST /v1/operations │
│ │ ────────────────────────────▶│
│ │ │ Verify signature
│ │ │ Verify chain hash
│ │ │ Check TTL / replay
│ │ { receipt: EAR } │
│ │ ◀────────────────────────────│
│ SubmitOperationResponse │ │
│ ◀───────────────────────── │ │
```
---
## API Reference
All endpoints are prefixed with the configured base URL (default: `https://api.elydora.com`). All authenticated endpoints require a `Bearer` token in the `Authorization` header.
Errors are returned as:
```json
{
"error": {
"code": "INVALID_SIGNATURE",
"message": "Ed25519 signature verification failed",
"request_id": "01J..."
}
}
```
### Authentication
#### `POST /v1/auth/register`
Register a new user and create an organization. Returns a JWT for immediate use.
**Request body:**
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | yes | User email address |
| `password` | string | yes | User password |
| `display_name` | string | no | Human-readable name for the user |
| `org_name` | string | no | Name for the new organization |
**Response:**
```json
{
"user": { "user_id": "...", "email": "...", "role": "org_owner", ... },
"organization": { "org_id": "...", "name": "..." },
"token": "