Skip to main content
Dash is a self-learning data agent built with systems engineering principles. It grounds answers in six layers of context and improves with every query. Ask a question in English and 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. The root cause is missing context and missing memory. Dash solves this with six layers of grounded context, a self-learning loop that captures every fix, and a focus on delivering insights you can act on. Chat with Dash in Slack, the terminal, or the AgentOS UI. The code is public at agno-agi/dash.

How it works

Dash runs as an Agno team in coordinate mode, with a leader that routes each request to two specialists: Schema boundaries: Company data lives in the public schema; agent-created views and summary tables live in the dash schema. The Analyst connects with default_transaction_read_only=on, so PostgreSQL rejects any write it attempts. A SQLAlchemy event listener blocks Engineer writes that target public. These guardrails live in the infrastructure, so they hold regardless of what the model generates.

Six layers of context

Self-learning

Every query retrieves knowledge and learnings before generating SQL. When a query fails, Dash diagnoses the error, fixes it, and saves the fix as a learning. Two complementary systems make this work: When a churn query returns wrong numbers because it filtered on the status column instead of ended_at IS NULL, Dash saves the fix and doesn’t make that mistake again. When your team defines MRR as the sum of active subscriptions excluding trials, that rule lives in knowledge/business/ and every future query respects it.

Insights you can act on

Dash reasons about what makes an answer useful. Ask “Which plan has the highest churn rate?” and you get the number, the comparison across plans, the trend behind it, and any caveats from your business rules.

Run locally

Confirm Dash is running at http://localhost:8000/docs. The Dash README walks through this step by step.

Connect to the AgentOS UI

  1. Open os.agno.com and log in.
  2. Click Connect OS, choose Local, and enter http://localhost:8000.
  3. Click Connect.
Dash is running locally.

Deploy to Railway

Railway deployment uses .env.production to keep production credentials separate from local dev.
1

Deploy infrastructure

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.
2

Get your JWT key

Production requires a JWT_VERIFICATION_KEY from AgentOS. You need the Railway domain from step 1 to set this up.
  1. Copy your Railway domain from the output of step 1 (e.g. dash-production-xxxx.up.railway.app).
  2. Open os.agno.com and log in.
  3. Click Connect OS, choose Live, and paste your Railway URL.
  4. Go to SettingsOS & Security and turn on Token-Based Authorization (JWT). The UI generates a key pair and shows you the public key.
  5. Add the public key to .env.production, wrapped in single quotes:
3

Push environment and redeploy

railway_env.sh reads .env.production and sets each variable on the Railway service. It handles multiline values like PEM keys and is safe to run repeatedly.
Dash is live on Railway.
The Dash README covers this flow in more detail.

Production operations

Database scripts must run inside Railway’s network. The internal hostname pgvector.railway.internal is unreachable from your local machine, so SSH into the running container:
Other operations run locally:

Connect to Slack

Dash can receive DMs, @mentions, and thread replies, and can post to channels proactively. Each Slack thread maps to one Dash session.
  1. Run Dash with a public URL (ngrok locally, or your Railway domain).
  2. Create and install the Slack app from the manifest in docs/SLACK_CONNECT.md.
  3. Set SLACK_TOKEN and SLACK_SIGNING_SECRET, then restart Dash.
  4. In Slack, confirm Event Subscriptions shows verified, then send a DM or @mention to test.
See the Slack setup guide for the manifest, ngrok commands, permissions, and troubleshooting.

Example prompts

Try these on the sample SaaS metrics dataset:
  • What’s our current MRR?
  • Which plan has the highest churn rate?
  • Show me revenue trends by plan over the last 6 months
  • Which customers are at risk of churning?

Add your own data

Dash works best when it understands how your organization talks about data: Load or update knowledge at any time:
The Dash README covers loading your own data and scheduled proactive tasks.

Run evals

Five eval categories using Agno’s eval framework:

Source

Dash is public at agno-agi/dash. The README covers the full architecture, the data model, and the security setup.