Polyglot multi-agent AI trading harness: ERC-8004 identity and evidence, Kraken CLI, risk engine
6
stars
1
commits
HTML
primary language
Apr 12, 2026
updated
Polyglot multi-agent trading platform with policy-enforced risk management and on-chain evidence via ERC-8004. Submission for the Surge Hackathon (March 30 - April 12, 2026).
Landing page: ai-trading.swiftward.dev - features, demo video, screenshots, team.
Hackathon: AI Trading Agents on lablab.ai
For specific agents:
claude login)OPENAI_API_KEY in .env (or compatible endpoint)No API keys needed for the simplest demo - the random agent works with zero external dependencies.
git clone https://github.com/disciplinedware/swiftward-ai-trading-agents.git
cd swiftward-ai-trading-agents
cp .env.example .env
make up PROFILES=random # core stack + random trader agent
The random agent starts trading immediately with simulated Kraken paper prices. Open the Dashboard at http://localhost:8091 to see live trades, positions, and P&L.
make up without PROFILES starts only infrastructure (no agents). Add agents via comma-separated profiles:
make up PROFILES=random,alpha # random + Claude Alpha (needs Claude Code on host)
make up PROFILES=random,delta # random + Delta Go LLM (needs OPENAI_API_KEY)
make down # stop stack
URLs (after make up):
| Service | URL |
|---|---|
| Dashboard (trades, positions, P&L) | http://localhost:8091 |
| Control UI (Swiftward policy management) | http://localhost:5174 |
Ruby Agent UI (when ruby profile active) | http://localhost:7175 |
| SigNoz (logs, traces, metrics) | http://localhost:3301 |
Run make help for all available targets.
Every agent is profile-gated - no agents start without PROFILES. Combine with commas: make up PROFILES=random,alpha. All env vars have working defaults in .env.example unless marked required below.
randomBaseline deterministic agent. Trades random orders on a 60s interval across ETH, BTC, SOL, LINK, SUI. No API keys needed - works immediately after cp .env.example .env.
make up PROFILES=random
alphaAutonomous Claude Code agent with Swiftward policy enforcement. Runs on 15-min intervals, up to 96 sessions/day.
Required:
claude login)The Makefile auto-extracts Claude credentials from the host (macOS Keychain or ~/.claude/.credentials.json on Linux). No API key in .env needed - credentials are mounted into the container. Optional: set TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID, TELEGRAM_ALPHA_CLAUDE_TOPIC_ID in .env for Telegram alerts.
make up PROFILES=alpha
gammaMulti-subagent Claude trader. Same prerequisites as Alpha (Claude Code CLI + credentials). Runs on 30-min intervals, up to 60 sessions/day.
make up PROFILES=gamma
rubyBacktesting arena where multiple trading strategies compete on historical data, and the best-performing agent is selected for live trading. Web UI at http://localhost:7175.
make up PROFILES=ruby
Rails keys (RAILS_MASTER_KEY, RAILS_SECRET_KEY_BASE) are pre-filled in .env.example. No external API keys needed. For code execution in sandboxes, also run make sandbox-build once to build the sandbox image.
midas (LIVE TRADING - real money)Claude agent trading real funds on Kraken. Cannot be started with make up - requires dedicated command:
# Required in .env:
# KRAKEN_API_KEY=...
# KRAKEN_API_SECRET=...
make live-up # sets TRADING__EXCHANGE__MODE=kraken_real automatically
Same Claude Code prerequisites as Alpha. Initial balance intentionally capped at $100 for safety.
deltaGo-based LLM agent using OpenAI-compatible API. Runs on 5-min intervals, max 10 iterations per session.
Required in .env: OPENAI_API_KEY. Model configured via AGENT_DELTA_GO_MODEL (default: gpt-5.4-mini).
make up PROFILES=delta
epsilonRust-based LLM agent using OpenAI-compatible API. Runs on 5-min intervals, max 50 iterations per session.
Required in .env: OPENAI_API_KEY. Model configured via AGENT_EPSILON_RUST_MODEL (default: gpt-5.4-mini).
make up PROFILES=epsilon
javaSpring Boot agent using Fear & Greed index for contrarian trades. 15-min tick interval. No API keys needed. Override tick interval with AGENT_GAMMA_JAVA_TICK_INTERVAL_MS in .env.
make up PROFILES=java
pythonOrchestrated Python agent with dedicated MCP servers (price feed, news, on-chain data, fear & greed).
make up PROFILES=python
Agent env vars (AGENT_PYTHON_DETERMINISTIC_LLM_*) are pre-filled in .env.example.
These apply across all agents (none are required for the basic demo):
| Variable | Purpose |
|---|---|
TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID | Telegram alerts (shared bot) |
OPENAI_API_KEY | LLM Gateway + moderation + Delta/Epsilon agents |
CLASSIFIER_HF_TOKEN | Prompt injection detection (HuggingFace gated model) |
PRISM_API_KEY | Market intelligence enrichment (sign up at prismapi.ai, code LABLAB) |
CRYPTOPANIC_TOKEN | News feed via CryptoPanic API |
Blockchain vars (CHAIN_*) | ERC-8004 on-chain attestations (see .env.example) |
Every agent has its own identity on the ERC-8004 AgentRegistry (Base Sepolia). Each decision is EIP-712 signed by the agent's operator wallet and posted to the ValidationRegistry before execution.
| Agent ID | Agent Name | Operator Wallet |
|---|---|---|
| 32 | Swiftward Alpha | 0x6Cd7DdABD496b545bAE05a04044F2828C1395d13 |
| 37 | Random Trader | 0x7a2F2E58B93Ac448fF7D0e81C2756A3EfC7a15e0 |
| 43 | Swiftward Gamma | 0xC5e0362badA7D1968325e134783dA2B7c48FbF62 |
| 49 | Haia Trading Agent | 0xFa7b27f6D316CC96d93F6b126D1acd8066E340B7 |
Polyglot monorepo. Each subsystem has its own README with key files and implementation notes.
golang/ - trading server, MCP servers, Go LLM agent, shared Go librariespython/ - orchestrated Python agent and Python MCP servers (price feed, news, on-chain data, fear & greed)ruby/ - Agents Arena: backtesting framework with strategy selection for live tradingrust/ - Rust Epsilon LLM agentjava/ - Java Gamma agenttypescript/ - Trading Dashboard (React 19 + Vite + Tailwind)swiftward/ - Policy engineSee LICENSE.
1 commits
HTML
87.0%
Go
7.6%
Python
2.1%
Ruby
1.3%
TypeScript
1.2%
Polyglot multi-agent AI trading harness: ERC-8004 identity and evidence, Kraken CLI, risk engine
6
stars
1
commits
HTML
primary language
Apr 12, 2026
updated
Polyglot multi-agent trading platform with policy-enforced risk management and on-chain evidence via ERC-8004. Submission for the Surge Hackathon (March 30 - April 12, 2026).
Landing page: ai-trading.swiftward.dev - features, demo video, screenshots, team.
Hackathon: AI Trading Agents on lablab.ai
For specific agents:
claude login)OPENAI_API_KEY in .env (or compatible endpoint)No API keys needed for the simplest demo - the random agent works with zero external dependencies.
git clone https://github.com/disciplinedware/swiftward-ai-trading-agents.git
cd swiftward-ai-trading-agents
cp .env.example .env
make up PROFILES=random # core stack + random trader agent
The random agent starts trading immediately with simulated Kraken paper prices. Open the Dashboard at http://localhost:8091 to see live trades, positions, and P&L.
make up without PROFILES starts only infrastructure (no agents). Add agents via comma-separated profiles:
make up PROFILES=random,alpha # random + Claude Alpha (needs Claude Code on host)
make up PROFILES=random,delta # random + Delta Go LLM (needs OPENAI_API_KEY)
make down # stop stack
URLs (after make up):
| Service | URL |
|---|---|
| Dashboard (trades, positions, P&L) | http://localhost:8091 |
| Control UI (Swiftward policy management) | http://localhost:5174 |
Ruby Agent UI (when ruby profile active) | http://localhost:7175 |
| SigNoz (logs, traces, metrics) | http://localhost:3301 |
Run make help for all available targets.
Every agent is profile-gated - no agents start without PROFILES. Combine with commas: make up PROFILES=random,alpha. All env vars have working defaults in .env.example unless marked required below.
randomBaseline deterministic agent. Trades random orders on a 60s interval across ETH, BTC, SOL, LINK, SUI. No API keys needed - works immediately after cp .env.example .env.
make up PROFILES=random
alphaAutonomous Claude Code agent with Swiftward policy enforcement. Runs on 15-min intervals, up to 96 sessions/day.
Required:
claude login)The Makefile auto-extracts Claude credentials from the host (macOS Keychain or ~/.claude/.credentials.json on Linux). No API key in .env needed - credentials are mounted into the container. Optional: set TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID, TELEGRAM_ALPHA_CLAUDE_TOPIC_ID in .env for Telegram alerts.
make up PROFILES=alpha
gammaMulti-subagent Claude trader. Same prerequisites as Alpha (Claude Code CLI + credentials). Runs on 30-min intervals, up to 60 sessions/day.
make up PROFILES=gamma
rubyBacktesting arena where multiple trading strategies compete on historical data, and the best-performing agent is selected for live trading. Web UI at http://localhost:7175.
make up PROFILES=ruby
Rails keys (RAILS_MASTER_KEY, RAILS_SECRET_KEY_BASE) are pre-filled in .env.example. No external API keys needed. For code execution in sandboxes, also run make sandbox-build once to build the sandbox image.
midas (LIVE TRADING - real money)Claude agent trading real funds on Kraken. Cannot be started with make up - requires dedicated command:
# Required in .env:
# KRAKEN_API_KEY=...
# KRAKEN_API_SECRET=...
make live-up # sets TRADING__EXCHANGE__MODE=kraken_real automatically
Same Claude Code prerequisites as Alpha. Initial balance intentionally capped at $100 for safety.
deltaGo-based LLM agent using OpenAI-compatible API. Runs on 5-min intervals, max 10 iterations per session.
Required in .env: OPENAI_API_KEY. Model configured via AGENT_DELTA_GO_MODEL (default: gpt-5.4-mini).
make up PROFILES=delta
epsilonRust-based LLM agent using OpenAI-compatible API. Runs on 5-min intervals, max 50 iterations per session.
Required in .env: OPENAI_API_KEY. Model configured via AGENT_EPSILON_RUST_MODEL (default: gpt-5.4-mini).
make up PROFILES=epsilon
javaSpring Boot agent using Fear & Greed index for contrarian trades. 15-min tick interval. No API keys needed. Override tick interval with AGENT_GAMMA_JAVA_TICK_INTERVAL_MS in .env.
make up PROFILES=java
pythonOrchestrated Python agent with dedicated MCP servers (price feed, news, on-chain data, fear & greed).
make up PROFILES=python
Agent env vars (AGENT_PYTHON_DETERMINISTIC_LLM_*) are pre-filled in .env.example.
These apply across all agents (none are required for the basic demo):
| Variable | Purpose |
|---|---|
TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID | Telegram alerts (shared bot) |
OPENAI_API_KEY | LLM Gateway + moderation + Delta/Epsilon agents |
CLASSIFIER_HF_TOKEN | Prompt injection detection (HuggingFace gated model) |
PRISM_API_KEY | Market intelligence enrichment (sign up at prismapi.ai, code LABLAB) |
CRYPTOPANIC_TOKEN | News feed via CryptoPanic API |
Blockchain vars (CHAIN_*) | ERC-8004 on-chain attestations (see .env.example) |
Every agent has its own identity on the ERC-8004 AgentRegistry (Base Sepolia). Each decision is EIP-712 signed by the agent's operator wallet and posted to the ValidationRegistry before execution.
| Agent ID | Agent Name | Operator Wallet |
|---|---|---|
| 32 | Swiftward Alpha | 0x6Cd7DdABD496b545bAE05a04044F2828C1395d13 |
| 37 | Random Trader | 0x7a2F2E58B93Ac448fF7D0e81C2756A3EfC7a15e0 |
| 43 | Swiftward Gamma | 0xC5e0362badA7D1968325e134783dA2B7c48FbF62 |
| 49 | Haia Trading Agent | 0xFa7b27f6D316CC96d93F6b126D1acd8066E340B7 |
Polyglot monorepo. Each subsystem has its own README with key files and implementation notes.
golang/ - trading server, MCP servers, Go LLM agent, shared Go librariespython/ - orchestrated Python agent and Python MCP servers (price feed, news, on-chain data, fear & greed)ruby/ - Agents Arena: backtesting framework with strategy selection for live tradingrust/ - Rust Epsilon LLM agentjava/ - Java Gamma agenttypescript/ - Trading Dashboard (React 19 + Vite + Tailwind)swiftward/ - Policy engineSee LICENSE.
1 commits
HTML
87.0%
Go
7.6%
Python
2.1%
Ruby
1.3%
TypeScript
1.2%