A self-learning data agent that delivers insights, not just SQL results
$git clone https://github.com/agno-agi/dashInstalls into the current project.
Install dash by running `git clone https://github.com/agno-agi/dash`, then use it for the current task and follow its documentation at https://github.com/agno-agi/dash.
| 1 | # Dash |
| 2 | |
| 3 | A **self-learning data agent** built with systems engineering principles. It grounds answers in 6 layers of context and improves with every query. |
| 4 | |
| 5 | Chat with Dash via Slack, the terminal, or the [AgentOS](https://os.agno.com?utm_source=github&utm_medium=example-repo&utm_campaign=agent-example&utm_content=dash&utm_term=agentos) web UI. |
| 6 | |
| 7 | ## Quick Start |
| 8 | |
| 9 | ```sh |
| 10 | # Clone the repo |
| 11 | git clone https://github.com/agno-agi/dash.git && cd dash |
| 12 | |
| 13 | cp example.env .env |
| 14 | # Edit .env and add your OPENAI_API_KEY |
| 15 | |
| 16 | # Start the system |
| 17 | docker compose up -d --build |
| 18 | |
| 19 | # Generate sample data and load knowledge |
| 20 | docker exec -it dash-api python scripts/generate_data.py |
| 21 | docker exec -it dash-api python scripts/load_knowledge.py |
| 22 | ``` |
| 23 | |
| 24 | Confirm Dash is running at [http://localhost:8000/docs](http://localhost:8000/docs). |
| 25 | |
| 26 | ### Connect to the Web UI |
| 27 | |
| 28 | 1. Open [os.agno.com](https://os.agno.com?utm_source=github&utm_medium=example-repo&utm_campaign=agent-example&utm_content=dash&utm_term=agentos) and login |
| 29 | 2. Add OS → Local → `http://localhost:8000` |
| 30 | 3. Click "Connect" |
| 31 | |
| 32 | **Try it** (SaaS metrics dataset): |
| 33 | |
| 34 | - What's our current MRR? |
| 35 | - Which plan has the highest churn rate? |
| 36 | - Show me revenue trends by plan over the last 6 months |
| 37 | - Which customers are at risk of churning? |
| 38 | |
| 39 | ## Deploy to Railway |
| 40 | |
| 41 | Railway deployment uses `.env.production` to keep production credentials separate from local dev. |
| 42 | |
| 43 | ```sh |
| 44 | cp example.env .env.production |
| 45 | # Edit .env.production — set OPENAI_API_KEY |
| 46 | ``` |
| 47 | |
| 48 | ### Step 1: Deploy infrastructure |
| 49 | |
| 50 | This creates the Railway project, database, and app service. The app will crash-loop until the JWT key is added in the next step — that's expected. |
| 51 | |
| 52 | ```sh |
| 53 | railway login |
| 54 | ./scripts/railway_up.sh |
| 55 | ``` |
| 56 | |
| 57 | ### Step 2: Get your JWT key |
| 58 | |
| 59 | Production requires a `JWT_VERIFICATION_KEY` from [AgentOS](https://os.agno.com?utm_source=github&utm_medium=example-repo&utm_campaign=agent-example&utm_content=dash&utm_term=agentos). You need the Railway domain from step 1 to set this up. |
| 60 | |
| 61 | 1. Copy your Railway domain from the output of step 1 (e.g. `dash-production-xxxx.up.railway.app`) |
| 62 | 2. Open [os.agno.com](https://os.agno.com?utm_source=github&utm_medium=example-repo&utm_campaign=agent-example&utm_content=dash&utm_term=agentos) and login |
| 63 | 3. Add OS → Live → paste your Railway URL |
| 64 | 4. Go to **Settings** and generate a key pair |
| 65 | 5. Add the public key to `.env.production` (wrap in single quotes): |
| 66 | |
| 67 | ```bash |
| 68 | JWT_VERIFICATION_KEY='-----BEGIN PUBLIC KEY----- |
| 69 | MIIBIjANBgkq... |
| 70 | -----END PUBLIC KEY-----' |
| 71 | ``` |
| 72 | |
| 73 | ### Step 3: Push environment and redeploy |
| 74 | |
| 75 | ```sh |
| 76 | ./scripts/railway_env.sh |
| 77 | ./scripts/railway_redeploy.sh |
| 78 | ``` |
| 79 | |
| 80 | `railway_env.sh` reads `.env.production` and sets each variable on the Railway service. Safe to run repeatedly. Handles multiline values (PEM keys) correctly. |
| 81 | |
| 82 | ### Production operations |
| 83 | |
| 84 | Database scripts must run inside Railway's network (the internal hostname `pgvector.railway.internal` isn't reachable from your local machine). Use SSH to connect to the running container: |
| 85 | |
| 86 | ```sh |
| 87 | railway ssh --service dash |
| 88 | # Inside the container: |
| 89 | python scripts/generate_data.py |
| 90 | python scripts/load_knowledge.py |
| 91 | ``` |
| 92 | |
| 93 | Other operations run locally: |
| 94 | |
| 95 | ```sh |
| 96 | railway logs --service dash |
| 97 | railway open |
| 98 | ``` |
| 99 | |
| 100 | ## Why Dash Exists |
| 101 | |
| 102 | Ask a question in English, get a correct, meaningful answer. That's the goal. But raw LLMs writing SQL hit a wall fast: schemas lack meaning, types are misleading, tribal knowledge is missing, there's no way to learn from mistakes, and results lack interpretation. |
| 103 | |
| 104 | The root cause is missing context and missing memory. Dash solves this with **six layers of grounded context**, a **self-learning loop** that improves with every query, and a focus on delivering insights you can act on. |
| 105 | |
| 106 | ## Architecture: Five Layers, One System |
| 107 | |
| 108 | Agentic software is just software with the business logic replaced by agents. Everything else is systems engineering. Dash is built across five layers that reinforce each other. |
| 109 | |
| 110 | ``` |
| 111 | Agent Engineering → dash/team.py + dash/agents/ |
| 112 | Data Engineering → knowledge/ + A |