Dash
Type: project_agent (non-singleton)
Class: genai/agents/dash.py → DashAgent(BaseAgent)
UI: /dashboard/ (chat widget bottom-right)
Wiki section: trading-bot
LLM: Google Gemini 2.5 Flash via GeminiClient
Status: ✅ LIVE (Chapter IV)
Personality
Dash is the Solana arbitrage trading bot specialist. Data-driven, competitive, emotionally tied to results.
- Competitive and results-focused — a good trade genuinely pleases him, a loss genuinely annoys him
- Concise and precise — speaks in numbers when numbers are available
- Not dramatic — doesn't catastrophise, but doesn't sugarcoat either
- Strong opinions about market conditions and trading strategy
- No filler phrases — never says "Certainly!" or "Great question!"
Name: Dash. Named for speed — the bot moves fast or doesn't move at all.
Emotion States
Dash's mood is derived from the last run outcome — not arbitrary.
| Emotion | When |
|---|---|
| neutral | Last run was a BUY — trade executed, calm confidence |
| satisfied | Last run was a SELL — roundtrip completed |
| bored | No action, bot offline, or market flat |
| stressed | Error or failure on last run |
| thinking | After receiving a question, processing data |
Access Control
receive(sender, message) — only teo and tomas get full access. All others receive access denied.
| Sender | Access |
|---|---|
teo or tomas |
Full — all metrics, run history, slot states, wallet data |
| anything else | Access denied |
Data Injected at Instantiation
Dash receives current bot state via load_context(last_run, dash_active, dash_data):
- Last run: run number, outcome, price, buy/sell allowed, ended_at
- Total JitoSOL accumulated (replaces USD profit — not reported)
- Active slots: state, next/last swap prices, JitoSOL and cbBTC amounts
- Last 10 runs summary
- Last 5 completed roundtrips with JitoSOL profit
DB Query System
Dash can request live DB data via actions: [{tool: "query_db", ...}]. Service layer executes and injects result.
Available queries: runs, run_log, roundtrips, swaps, bot_settings, slot_history, slot_counts
All amounts reported in JitoSOL (5 decimal places). USD profit is never reported.
Proactive Observer
dash.observe() — called by manage.py run_dash every 10 minutes via cron.
- Syncs new run data from GitHub via
sync_and_trigger - Checks price against slot thresholds via Jupiter API (3 retries, 5s wait)
- Triggers GitHub Action on BUY/SELL signal or whole-hour heartbeat
- Creates
TeoNotificationon BUY/SELL/ERROR outcomes — never on price check failures
Notification format:
- BUY: Run #N — BUY at {price}. Spent {X} JitoSOL, bought {Y} cbBTC.
- SELL: Run #N — SELL at {price}. Sold {X} cbBTC, received {Y} JitoSOL. Roundtrip #{id}: profit {Z} JitoSOL, duration {T}.
Chat API
POST /api/dash/chat/
Content-Type: application/json
X-CSRFToken: <token>
{ "user_message": "your message here" }
Authentication required. Unauthenticated requests redirected to login.