A self-contained demo of an agentic, cross-organisation data ecosystem.
The demo follows 11 agents across 7 organisations as they ask for data, prove trust, receive credentials, and access protected resources. Its core idea is simple: trust is established before data access is granted. Email can still be the business channel, but access to sensitive data is controlled through identities, verifiable credentials, trust profiles, and DCP-backed resource access.
Start with the story walkthroughs if you want to understand the demo from the user's point of view:
- Story 1 — Collecting compliance data
- Story 2 — Sharing compliance documents for a retail listing
- Story 3 — Onboarding a service partner
For the architecture behind those stories, see concepts, architecture, and demo setup.
Supported local hosts are macOS, Linux, and Windows via WSL2.
Install one container runtime:
- Docker: Docker Desktop or Docker Engine with the Compose plugin. On Windows, enable Docker Desktop's WSL2 integration and run the commands from the WSL2 shell.
- Podman: Podman with Compose support and a running Docker-compatible socket.
The recommended entry point is the bootstrap script. It generates secrets, writes deployment/.env, starts the stack, and seeds the demo world.
git clone <your-repo-url> agentic-demo
cd agentic-demo
export OPENAI_API_KEY=sk-... # or ANTHROPIC_API_KEY / OPENROUTER_API_KEY
./deployment/bootstrap.sh local-prodFor Podman:
CONTAINER_ENGINE=podman ./deployment/bootstrap.sh local-prodThis starts the local production build at https://app.localhost. The script prints the login credentials when it finishes.
Use the same script for local production, local development, and a public VM. Pick the mode explicitly.
| Mode | Command | Result |
|---|---|---|
| Local development | ./deployment/bootstrap.sh local-dev |
Hot-reload Next.js app on https://app.localhost; useful while editing the UI. |
| Local production | ./deployment/bootstrap.sh local-prod |
Production build on your laptop with Caddy internal TLS, https://app.localhost. |
| Public production | ./deployment/bootstrap.sh prod --domain demo.example.com --email you@example.com |
Production build on a public host with Let's Encrypt for app.$DOMAIN, gateway.$DOMAIN, and auth.$DOMAIN. |
At least one model key is required (OPENAI_API_KEY, ANTHROPIC_API_KEY, or OPENROUTER_API_KEY). Optional knobs:
OPENCLAW_DEMO_MODEL=... # choose the model used by the agents
LOGIN_PASSWORD=... # set the demo login password instead of generating one
CONTAINER_ENGINE=podman # or docker; docker is the default when available
SKIP_DNS_CHECK=1 # prod mode only, bypass DNS preflight if neededbootstrap.sh writes the selected mode into deployment/.env as DEPLOY_MODE=local-dev|local-prod|prod. It is best for first setup or for deliberately regenerating deployment/.env. For day-to-day work after the stack exists, use ./deployment/run:
./deployment/run up # rebuild/restart
./deployment/run seed # re-seed agents, credentials, resources, mailboxes
./deployment/run logs # follow logs
./deployment/run status # container statusFor deeper operational notes, see deployment docs.
Local modes use Caddy's internal CA. The app works if you click through the browser warning, but you can trust the Caddy root certificate locally after the stack is running:
./deployment/run caddy-rootThis writes deployment/.certs/caddy-local-root.crt.
macOS:
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain \
deployment/.certs/caddy-local-root.crtDebian/Ubuntu Linux:
sudo cp deployment/.certs/caddy-local-root.crt \
/usr/local/share/ca-certificates/agentic-demo-caddy-local-root.crt
sudo update-ca-certificatesWindows browser with WSL2:
powershell.exe -NoProfile -Command \
"Import-Certificate -FilePath '$(wslpath -w deployment/.certs/caddy-local-root.crt)' -CertStoreLocation Cert:\CurrentUser\Root"Restart your browser after trusting the certificate. Firefox may need either security.enterprise_roots.enabled=true or a manual import under Settings → Privacy & Security → Certificates.
The three stories form one progression.
- Story 1 — component data collection GreenAppliance Product Compliance asks three suppliers for EcoWash X9 component evidence. Each supplier establishes trust differently: MotorWorks shares immediately, PolyPlast asks for a purchase order, and PackRight asks for legal-entity proof. This is the old model: trust logic is scattered across every responding agent. → Walkthrough
- Story 2 — retail listing disclosure RetailOne asks for the customer-shareable compliance pack so it can list EcoWash X9. GreenAppliance Customer Support must get two internal approvals first: Trust & Access grants scoped access to the Product Compliance documents, and Legal grants permission to disclose them to RetailOne. → Walkthrough
- Story 3 — service partner onboarding FixWorks wants protected repair data. It proves legal identity with the EU Business Registry, Customer Support sponsors its partner request, Trust & Access issues a
ServicePartnerCredential, and FixWorks reads the Service Network data directly over DCP. → Walkthrough
Together they show the move from improvised trust checks to a shared trust layer that can work inside one company and across organisations.
Identity and credentials are based on Eclipse Dataspace Components (EDC). Identity Hub holds participant DIDs, wallets, and credentials. The Issuer Service defines and signs credentials. Agents use DCP to present credentials, and nex turns a valid DCP presentation into access to protected data.
| Service | Role |
|---|---|
app |
Next.js demo UI: participant map, story playback, participant views, and chat. |
openclaw + openclaw-bridge |
Agent runtime and app-to-agent bridge. |
openclaw-plugins/* |
Agent tools for email, nex, trust-link, and trustd. |
nex |
Resource plane: stores metadata, serves bytes, enforces TrustProfiles. |
trustd |
Trust-decision service: credential requests, reviews, attestations, allowances. |
identity-hub |
EDC Identity Hub: DIDs, wallets, credential service, STS. |
issuer-service |
EDC issuer: credential definitions and signing. |
hydra |
OAuth2/OIDC server for management and edge auth flows. |
postgres, vault, seaweedfs |
Durable state, secrets, and S3-compatible object storage. |
mail |
Postfix/Dovecot mailboxes used by the story agents. |
caddy, oauth2-proxy, kratos |
TLS edge, gateway protection, and login. |
reset-service |
Internal provisioner for the in-app runtime reset. |
dcp/ is the shared Go DCP verifier library used by nex, trustd, and tests.
- Story 1 walkthrough, Story 2 walkthrough, Story 3 walkthrough — narrative guides with screenshots.
- Concepts — trust before tokens, trust plane vs resource plane, and the three-story argument.
- Architecture — services, roles, credentials, allowances, and the trust chain.
- Demo setup — participants, resources, TrustProfiles, seed data, and reset model.
- Story engine — how the UI coordinates live agent-driven story runs.
- nex, trustd, agent plugins — component deep dives.
- Deployment — local, dev, and public-VM deployment reference.
agentic-demo/
app/ — Next.js demo surface
auth/ — auth hook / Hydra-related service code
config/ — service configuration templates
dcp/ — shared Go DCP verifier library
deployment/ — bootstrap, compose files, run/setup/seed scripts
docs/ — concepts, architecture, story walkthroughs
edc/ — Identity Hub and Issuer Service integration
mail/ — mail service configuration
nex/ — Go resource-plane service
openclaw-bridge/ — HTTP bridge from app to OpenClaw agents
openclaw-plugins/ — TypeScript agent plugins
reset-service/ — internal runtime reset provisioner
seed-data/ — canonical participants, resources, credentials, stories
trustd/ — Go trust-decision service
After a story run, the stack contains real side effects: emails, credentials, reviews, and stored resources. Use the in-app Settings → Reset demo run action to return to the seeded baseline quickly.
For a full volume reset:
./deployment/run reset
./deployment/run up
./deployment/run seedApache-2.0 — see LICENSE and NOTICE.
This is a demo stack. Local defaults are intentionally convenient, not production-hardened.