Stop Wrestling with BI Tools! Deploy bagofwords in 2 Minutes
Your data team is drowning. They've built seventeen versions of the same dashboard. The CEO wants "insights" by Friday. Your analysts are copy-pasting SQL into ChatGPT, praying the AI doesn't hallucinate table names. Meanwhile, your "self-serve BI" tool requires a certification course just to change a date filter.
Sound familiar? Here's the dirty secret nobody talks about: traditional analytics tools weren't built for the AI era. They're static. Rigid. They don't learn, don't remember, and definitely don't think. Every query is ground zero. Every new analyst repeats the same onboarding misery. Every "quick question" becomes a three-day ticket.
But what if your data platform actually remembered? What if it learned your business context, enforced guardrails automatically, and let you chat with your warehouse like you chat with a colleague? What if deployment took 120 seconds, not 120 hours?
Enter bagofwords — the open-source agentic analytics platform that's making data teams furious they didn't find it sooner. Memory, rules management, and full observability baked in from day one. Any LLM. Any warehouse. Two-minute deploy. This isn't another BI tool. This is what comes after BI.
What is bagofwords?
bagofwords is an open-source, context-aware analytics layer that transforms how teams interact with data. Created by the team at bagofwords.com, it sits between your data sources and your team, adding an intelligent agentic loop with memory, reasoning, and reflection capabilities.
The name is clever — and intentional. In NLP, a "bag of words" represents text as a collection of its parts. In analytics, bagofwords treats your entire data ecosystem as a living, queryable corpus that an AI agent navigates with context and purpose.
Why is it trending now? Three forces collided:
- LLM maturity — Models like GPT-4, Claude, and Gemini finally handle complex reasoning reliably enough for production analytics.
- The governance gap — Teams rushed to AI-powered data tools, then panicked when they couldn't audit, control, or improve them.
- The deployment crisis — Every "AI analytics" startup wants your data in their cloud. bagofwords says: deploy anywhere, keep your data.
The repository's tagline says it all: "Chat with your data — with memory, rules, and observability built in. Deploy in 2 minutes." But the real magic is the architecture. Unlike bolt-on AI features in legacy BI tools, bagofwords was designed agent-first. The memory system learns your semantic layer. The rules engine enforces business logic with git-versioned approval workflows. The observability stack exposes every trace, plan, and guardrail decision for debugging and continuous improvement.
And it's not vaporware. The project ships with end-to-end tests, Docker images on Docker Hub, and comprehensive documentation. This is production-grade infrastructure disguised as a quick-start demo.
Key Features That Change Everything
Let's dissect what makes bagofwords genuinely different from the AI-washed BI crowd.
Memory: The Semantic Layer That Learns
Most AI data tools are goldfish — every conversation starts from scratch. bagofwords stores context, preferences, and usage patterns down to the table and column level. The AI learns over time, surfaces semantic-layer updates, and gates them through review. This means:
- Your "customer_id" vs "user_id" preference? Remembered forever.
- That custom revenue calculation? Indexed and suggested automatically.
- New tables? The AI proposes semantic definitions for your approval.
This isn't prompt engineering. It's persistent organizational intelligence.
Rules: Governance as Code
Define instructions, terms, and guardrails with full versioning and approval workflows. Sync with git to auto-index:
- dbt models — Your transformations become queryable context
- Tableau workbooks — BI logic feeds the AI's reasoning
- AGENTS.md files — Custom instructions for specific data domains
- Code repositories — Business logic in Python, SQL, whatever you use
Version control for AI behavior. This is how you prevent "the AI said something weird about Q3 revenue" disasters.
Observability: Debug the Black Box
Full visibility into:
- Agent traces — See the reasoning chain step-by-step
- Plans — How the AI decided to answer your question
- Guardrails — Which rules fired and why
- LLM judges — Automated quality evaluation
- Evals and feedback — Human-in-the-loop improvement
This closes the loop. You don't just get answers — you get improving answers.
Universal Compatibility
| Dimension | Options |
|---|---|
| LLMs | OpenAI, Anthropic, Gemini, Azure OpenAI, Ollama, vLLM, LM Studio, any OpenAI-compatible endpoint |
| Warehouses | Snowflake, BigQuery, Postgres, Redshift, Databricks, DuckDB, ClickHouse, 25+ total |
| Interfaces | Web chat, MCP for Cursor/Claude Desktop, API |
Swap providers without rewriting queries. Mix models for cost optimization. Your choice, your control.
Dashboards & Sharing
Build and share dashboards instantly. Share conversations, saved queries, and analysis with your team. The catalog stores reusable queries and datasets, improving discoverability for both humans and the AI.
Use Cases Where bagofwords Dominates
1. The Self-Serve Analytics Dream (Finally Real)
Marketing asks: "What's our CAC by channel for enterprise trials in Q2?" With traditional BI, this is a Jira ticket. With bagofwords, they ask in natural language. The AI knows:
- "CAC" = your specific calculation from the rules registry
- "enterprise trials" = segment defined in your dbt model
- "Q2" = fiscal Q2, not calendar Q2, because you configured that preference
Result: Answer in 30 seconds, not 3 days. Zero SQL knowledge required.
2. The Data Team Force Multiplier
Your three analysts support forty stakeholders. They're overwhelmed with "quick questions." Deploy bagofwords with strict rules:
- Revenue metrics? Only these three certified definitions
- PII? Guardrails block, route to privacy team
- Experimental tables? Flagged with confidence intervals
Analysts graduate to rule-curators and complex investigations. Stakeholders get instant answers. Team capacity 3x'd without hiring.
3. The AI-Native Startup
You're building on modern data stack: Fivetran → dbt → Snowflake. Your team lives in Cursor and Claude Desktop. With MCP support, bagofwords integrates directly:
You in Cursor: "@bagofwords what's the signup funnel drop-off this week?"
AI responds with data, then you continue coding with that insight.
No context switching. No "open another tab." Data becomes ambient intelligence.
4. The Compliance-Conscious Enterprise
Financial services. Healthcare. Anywhere regulators ask uncomfortable questions. You need:
- Self-hosted deployment? ✅
- SSO with Google Workspace or OIDC? ✅
- RBAC with fine-grained permissions? ✅
- Full audit trails of every AI decision? ✅
bagofwords doesn't make you choose between AI power and governance. It delivers both.
Step-by-Step Installation & Setup Guide
Ready for that 2-minute deploy? Here's every path, from laptop experiment to production cluster.
Option 1: Docker Quick Start (SQLite)
The fastest way to kick tires. Zero external dependencies.
# Pull and run with SQLite (default)
docker run -p 3000:3000 bagofwords/bagofwords
Navigate to http://localhost:3000. Done. Seriously.
Option 2: Docker with PostgreSQL
For persistence and team use. Any PostgreSQL instance works — local, managed, or cloud.
# Run with your PostgreSQL connection
docker run -p 3000:3000 \
-e BOW_DATABASE_URL=postgresql://user:password@localhost:5432/dbname \
bagofwords/bagofwords
Critical: Use a dedicated database. bagofwords will manage its own schema. Don't point at your production analytics database.
Option 3: Docker Compose (Recommended for Teams)
For multi-service deployments with proper networking, volumes, and environment management. See the official install docs for the complete docker-compose.yml — it includes PostgreSQL, Redis for caching, and optional volume mounts for configuration.
Option 4: Kubernetes
For production scale. The docs provide Helm charts and raw manifests with:
- ConfigMap for
bow-config.yaml - Secrets for database credentials and API keys
- Horizontal pod autoscaling based on query load
- Ingress configuration for TLS termination
Post-Deploy Configuration
Create bow-config.yaml for fine-grained control:
# Disable telemetry if desired
telemetry:
enabled: false
# Disable Intercom support chat
intercom:
enabled: false
# LLM provider configuration
llm:
default_provider: openai
providers:
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
# Data source connections
sources:
warehouse:
type: snowflake
account: ${SNOWFLAKE_ACCOUNT}
warehouse: COMPUTE_WH
database: ANALYTICS
schema: PROD
Mount this as a volume or inject via environment. Restart to apply.
REAL Code Examples from the Repository
Let's examine actual patterns from the bagofwords codebase and documentation.
Example 1: The Core Docker Deployment
The README's quick-start is deceptively simple. Here's what's actually happening:
# runs with SQLite (default)
docker run -p 3000:3000 bagofwords/bagofwords
What's under the hood:
- The image bundles the full application stack: Next.js frontend, Python agent runtime, SQLite for metadata
- Port
3000exposes the web interface and API - SQLite stores conversation history, memory embeddings, rules registry, and observability traces
- On first boot, the container initializes schema migrations and seeds default configurations
When to use this: Solo exploration, demos, CI testing. Not for production — SQLite doesn't survive container restarts without volumes, and concurrent writes will corrupt.
Example 2: Production PostgreSQL Connection
# Run with a ready PostgreSQL instance
docker run -p 3000:3000 \
-e BOW_DATABASE_URL=postgresql://user:password@localhost:5432/dbname \
bagofwords/bagofwords
Critical implementation details:
BOW_DATABASE_URLuses standard PostgreSQL connection URI format- The application detects PostgreSQL and switches from SQLite mode automatically
- Connection pooling is configured for concurrent agent operations
- Schema migrations run on startup — ensure the database user has
CREATEprivileges initially
Production hardening:
# With SSL and connection limits
docker run -p 3000:3000 \
-e BOW_DATABASE_URL="postgresql://user:password@host:5432/dbname?sslmode=require&pool_size=20" \
-e BOW_WORKERS=4 \
-e BOW_LOG_LEVEL=info \
bagofwords/bagofwords
Example 3: Telemetry and Privacy Configuration
The README provides explicit privacy controls:
# Disable usage telemetry
telemetry:
enabled: false
# Disable Intercom support chat
intercom:
enabled: false
Why this matters:
- By default, bagofwords sends basic usage stats to centralized servers — helps the team improve the product
- In regulated environments (healthcare, finance, government), this may violate data residency requirements
- The
telemetryblock is top-level inbow-config.yaml, parsed at startup intercomcontrols the in-app support widget, which loads external JavaScript
Complete privacy-hardened config:
# bow-config.yaml — maximum privacy mode
telemetry:
enabled: false
intercom:
enabled: false
# Optional: self-hosted LLM to prevent data leaving your network
llm:
default_provider: custom
providers:
custom:
base_url: http://your-vllm-instance:8000/v1
api_key: dummy-key
model: your-deployed-model
This pattern — explicit privacy controls with sensible defaults — is rare in modern AI tools. Most startups default to maximum data collection. bagofwords gives you the off switch.
Example 4: Rules Registry Git Sync
While not shown as a raw code block, the README describes this workflow:
# Your repository structure
analytics-rules/
├── dbt/
│ └── models/
│ └── core/
│ └── fct_orders.sql # Auto-indexed: schema, descriptions
├── tableau/
│ └── workbook.twb # Auto-indexed: calculated fields
├── AGENTS.md # Custom instructions for revenue domain
└── terms.yaml # Business glossary with versioning
The sync mechanism:
- Connect bagofwords to your Git repository
- On commit or webhook trigger, the system auto-indexes:
- dbt: column descriptions, tests, lineage
- Tableau: data sources, calculated fields, parameters
- AGENTS.md: free-form instructions for specific domains
- Code: Python transformations, SQL snippets
- Changes create new rule versions with approval workflows
- Rejected changes don't affect production queries
This is governance as code — version control, pull requests, and CI/CD for AI behavior.
Advanced Usage & Best Practices
The Memory Warm-Up Protocol
Don't expect magic on day one. Feed the memory system intentionally:
- Seed with your semantic layer — Import dbt docs, Tableau workbooks, existing data dictionaries
- Run canonical queries — Ask the AI your team's most common questions; correct and approve its interpretations
- Review proposed updates — The AI will suggest new semantic definitions; approve good ones, reject bad ones
- Iterate weekly — Memory quality compounds. First week: 60% accuracy. Month three: 90%+.
Rules Hierarchy for Complex Organizations
# Global guardrails (apply to all queries)
rules:
global:
- block: "SELECT * FROM raw_*"
reason: "Never query raw tables directly"
- require: "date_filter"
when: "table contains 'events'"
# Domain-specific rules
finance:
- define: "revenue"
sql: "SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END)"
approved_by: "cfo@company.com"
marketing:
- define: "lead"
sql: "contacts WHERE source != 'purchased_list'"
Multi-Model Cost Optimization
Configure GPT-4o for complex analysis, Claude Haiku for simple lookups:
llm:
routing:
- pattern: "^quick count|simple sum"
provider: anthropic
model: claude-3-haiku-20240307
- pattern: ".*forecast.*|.*predict.*"
provider: openai
model: gpt-4o
Observability-Driven Improvement
Weekly ritual: review the traces dashboard. Look for:
- High latency patterns — Optimize with better indexing or query caching
- Guardrail triggers — Are rules too aggressive? Tune thresholds
- Feedback scores — Low ratings indicate semantic gaps; add rules or memory
Comparison with Alternatives
| Capability | bagofwords | Hex | Mode | Tableau AI | Custom LLM + DB |
|---|---|---|---|---|---|
| Open Source | ✅ Full | ❌ No | ❌ No | ❌ No | ✅ Yes |
| Self-Hosted | ✅ Anywhere | ❌ Cloud only | ❌ Cloud only | ❌ Cloud only | ✅ Your infra |
| Agentic Memory | ✅ Built-in | ⚠️ Limited | ⚠️ Limited | ❌ No | ❌ Build yourself |
| Rules as Code | ✅ Git sync | ❌ No | ❌ No | ❌ No | ❌ Build yourself |
| Full Observability | ✅ Traces, evals, judges | ⚠️ Basic logs | ⚠️ Basic logs | ❌ No | ❌ Build yourself |
| Any LLM | ✅ 8+ providers | ⚠️ OpenAI only | ⚠️ OpenAI only | ⚠️ Einstein only | ✅ Your choice |
| Any Warehouse | ✅ 25+ sources | ⚠️ Common only | ⚠️ Common only | ⚠️ Limited | ✅ Your choice |
| MCP Support | ✅ Cursor, Claude Desktop | ❌ No | ❌ No | ❌ No | ❌ Build yourself |
| Deploy Time | 2 minutes | Hours-days | Hours-days | Days-weeks | Weeks-months |
The verdict: If you want AI-powered analytics today, with full control, and without rebuilding infrastructure — bagofwords is the only option that checks every box.
FAQ
Is bagofwords really free?
Yes. The core platform is open-source under a permissive license. Self-host with zero licensing costs. Enterprise features like advanced SSO may have commercial offerings — check bagofwords.com for details.
How does it compare to just using ChatGPT with my database?
ChatGPT has no memory of your business context, no rules enforcement, no observability, and requires you to paste schema manually every session. bagofwords persists organizational knowledge, prevents bad queries, and improves over time. It's the difference between a calculator and a spreadsheet.
Can I use my own fine-tuned model?
Absolutely. Any OpenAI-compatible endpoint works — vLLM, LM Studio, Ollama, or your own deployment. Configure the base URL and API key in bow-config.yaml.
What about data security?
Self-hosting means your data never leaves your infrastructure. For cloud-averse organizations, run entirely air-gapped with local LLMs. The telemetry and Intercom toggles default to your control.
How steep is the learning curve?
If you can run Docker, you can run bagofwords. The complexity scales with your governance needs — start with defaults, add rules and memory as you grow.
Does it replace dbt or my existing stack?
No — it enhances it. dbt models become queryable context. Your warehouse stays your warehouse. bagofwords is the intelligent layer on top, not a replacement.
What happens when the AI is wrong?
Observability traces show exactly what the AI planned, what rules fired, and what data it touched. Correct the memory or add a rule. The system learns. This is the improvement loop that chat-based tools lack.
Conclusion
The analytics landscape is splitting in two. On one side: legacy BI tools bolting AI features onto decade-old architectures, locking you into their clouds, hoping you won't notice the governance gaps. On the other: bagofwords, built agent-first, open-source, deploy-anywhere, with the memory, rules, and observability that production AI actually requires.
I spent years watching data teams trade self-service dreams for ticket-queue realities. bagofwords is the first tool I've seen that genuinely closes that gap — without asking you to surrender your data, your model choice, or your infrastructure control.
The 2-minute deploy isn't a gimmick. It's a statement of intent: sophisticated AI infrastructure should be accessible. The complexity should be in the intelligence, not the installation.
Your move. Spin it up. Feed it your semantic layer. Watch it learn. In a week, you'll wonder how you analyzed data any other way.
👉 Star bagofwords on GitHub — and join the teams already shipping insights, not tickets.
Found this guide useful? Share it with your data team. They'll thank you — or at least stop asking you to write SQL for them.