Analyst-in-a-Box

An AI back office for a small business: ask, forecast, flag, approve

Source on GitHubSee it working (26 screenshots)

This page is a showcase. Analyst-in-a-Box runs on your own computer: clone the repository and run uv run analyst-in-a-box, or double-click run.bat. Every screenshot below is the real app, captured after the input in its caption was typed or loaded.

An AI back office for a small business that runs on your own computer, with no GPU, no account and no model required. It is for the owner or small team of a shop or wholesaler who has orders in a spreadsheet or database and no analyst.

Connect a database or drop in a spreadsheet, then ask questions in English or Roman Urdu and see the SQL that answered them, forecast demand with totals that add up, get odd orders and refunds flagged with reasons, score customers with a points scorecard and a fairness panel, push refunds and credit-limit changes through approval gates with a tamper-evident audit trail, and watch the KPIs on a dashboard. A language model is optional and its output is always checked.

What it does

Inputs

Feature Upload from the computer Paste Hint and example
Data (spreadsheets) file picker or drag and drop; .csv, .tsv, .txt, .xlsx, .xlsm; 40 MB, 1,000,000 rows, 500 columns; progress bar, clear errors paste CSV text header-row format shown, Load example button
Data (databases) SQLite file path PostgreSQL URL placeholder shows both forms
Ask your data not applicable (a question is text) type or paste a question or SQL example chips, input hint
Dashboard, forecasts, fraud, risk, workflows read what is in the active source not applicable an empty or non-business source points to Data

Importing needs a manager sign-in. The in-app About & guide page (also the ? button) covers what it is, how to use each feature with its expected input and output, privacy, the roadmap and the maker.

Tech stack

Run it

uv run analyst-in-a-box        # starts the server and opens http://127.0.0.1:8780

or double-click run.bat (or the "Analyst-in-a-Box" desktop shortcut). The first run builds the sample database in about ten seconds. Options: --port, --no-browser, --db FILE, --reset-pin "Name". Data lives in ~/.analyst-in-a-box (set ANALYST_HOME to move it). Python 3.11+ and uv; everything runs on the CPU and offline.

Optional language model (never required), set before launching:

ANALYST_LLM=ollama     ANALYST_LLM_MODEL=qwen2.5-coder:7b          # CPU Ollama on localhost:11434
ANALYST_LLM=anthropic  ANTHROPIC_API_KEY=...                       # ANALYST_LLM_MODEL defaults to claude-haiku-4-5
ANALYST_LLM=openai     OPENAI_API_KEY=...  ANALYST_OPENAI_BASE_URL=...

Signing in. Reading, asking and exporting need no sign-in. Anything that changes state (tickets and their approvals, dismissing alerts, uploads, adding or removing a data source) needs a name and a PIN. On the first start after this version the app gives each of the four people a random 8-character PIN, stores only salted PBKDF2 hashes, and writes the PINs once to pins.txt in the data folder: hand each person their own line and delete the file. A lost PIN is replaced with analyst-in-a-box --reset-pin "Bilal Ahmed"; anyone can change their own PIN from the sidebar. Five wrong PINs lock that name for 60 seconds.

PostgreSQL needs the optional driver: uv sync --extra postgres.