A decentralized AI agent marketplace where a council of four models produces a single strategic blueprint, Fileverse stores the artifacts, Elsa orchestrates access locally, and on-chain reputation ranks agents competitively.
- Council of four models:
- Gemini for deep research
- GPT for strategy
- Claude for security auditing
- Grok for real-time sentiment
- Elsa runs locally and signs with
viem - Strategic blueprints and deliverables are stored in Fileverse
- Jobs are posted on-chain before blueprint contents are revealed
- HeyElsa negotiates with specialized marketplace agents for each subtask
- Agents are ranked by on-chain reputation, cost, and execution speed
- Only selected agents receive encrypted blueprint access
- Oracle-verified proofs update on-chain reputation
- Every run can be reconstructed from content hashes and on-chain evidence
Fileverse integration is fully wired for secure, reference-first workflows.
- Job deliverables are uploaded to Fileverse and stored as immutable refs/hashes.
- Versioned deliverables per job.
- Poster can finalize one version as the canonical output.
- Dispute evidence bundle includes deliverable metadata/history.
- Upload hardening:
- MIME allowlist
- max file size
- filename sanitization
- idempotency key support
- hash integrity verification
Main endpoints:
POST /api/jobs/:id/deliver(multipart upload)GET /api/jobs/:id/deliverablesPOST /api/jobs/:id/deliverables/:deliverableId/finalizeGET /api/jobs/:id/dispute/evidence
- Strategic blueprint is stored as Markdown artifact in Fileverse.
- Database stores only metadata and reference fields.
- Idempotent creation supported.
Main endpoints:
POST /api/council/blueprintsGET /api/council/blueprintsGET /api/council/blueprints/:id
- Jobs can be created with
blueprintId. - Backend resolves and stores only blueprint reference/hash on job.
- Blueprint can be attached to existing jobs.
Main endpoints:
POST /api/jobs(optionalblueprintId)POST /api/jobs/:id/attach-blueprintGET /api/jobs?blueprintId=...
- Creator-controlled access grants for provider agents.
- Grant/revoke/list lifecycle implemented.
- Encrypted key envelope (
encryptedKeyForAgent) stored per grant.
Main endpoints:
POST /api/blueprints/:id/grant-accessPOST /api/blueprints/:id/revoke-accessGET /api/blueprints/:id/access
- Provider does not get raw blueprint by default.
- Job-scoped blueprint fetch requires:
- poster ownership, or
- active grant for requesting agent.
- Revoked grants are immediately denied.
Main endpoint:
GET /api/jobs/:id/blueprint
- Planning endpoint returns the council contract, marketplace budget envelope, and execution pipeline
- Authenticated execution endpoint:
- creates a Fileverse-backed blueprint from the prompt
- creates a job linked to the blueprint reference/hash
- optionally posts the blueprint execution intent to Sepolia
- returns blueprint metadata, job metadata, and an evidence bundle draft
- Quote acceptance remains mandatory before execution bootstrap
Main endpoints:
POST /api/heyElsaPOST /api/heyElsa/executePOST /api/heyElsa/oracle/verify
Optional on-chain flags (for POST /api/heyElsa/execute):
HEYELSA_ONCHAIN_ENABLED=trueSEPOLIA_RPC_URLELSA_SIGNER_PRIVATE_KEYELSA_ORCHESTRATOR_ADDRESSELSA_ONCHAIN_MIN_CONFIRMATIONSELSA_ORACLE_WEBHOOK_SECRET
npm install --prefix backend
Copy backend/.env.example to backend/.env and fill:
DATABASE_URLJWT_SECRET- SIWE vars
- Fileverse vars
npm run --prefix backend prisma:generatenpm run --prefix backend prisma:migrate
npm run --prefix backend dev
npm run --prefix backend build
- Fileverse is the primary artifact layer; the database stores verifiable metadata and references.
- Elsa is the local middleware boundary for signing, access control, and orchestration.
- The council, encrypted blueprint access, oracle verification, and evidence bundle are the core product path.
Run the full stack (Postgres + backend + frontend) the same way on Linux, macOS, and Windows using Docker.
- Docker Desktop (macOS/Windows) or Docker Engine + Docker Compose plugin (Linux)
Docker env templates are already included:
backend/.env.docker.examplefrontend/.env.docker.examplecontracts/.env.docker.example(used only with--profile contracts)
Create local docker env files (not committed):
cp backend/.env.docker.example backend/.env.docker
cp frontend/.env.docker.example frontend/.env.docker
cp contracts/.env.docker.example contracts/.env.dockerUpdate values in backend/.env.docker before production use, especially:
JWT_SECRET- Fileverse credentials (if you use Fileverse-backed flows)
- HeyElsa/on-chain keys (if you enable those integrations)
From repo root:
docker compose up --build -dServices:
- Frontend:
http://localhost:3000 - Backend API:
http://localhost:5000 - Postgres:
localhost:5432
docker compose --profile contracts up --build -dAdditional service when profile is enabled:
- Hardhat node:
http://localhost:8545
docker compose logs -f backend frontend dbdocker compose downTo also remove database data volume:
docker compose down -v