# Gravel > Gravel is an open-source library that mounts an admin dashboard inside an AI app, so domain experts (clinicians, lawyers, recruiters, etc.) can review LLM output, edit prompts, and run evals, without an engineer in the loop. It's "Langfuse for domain experts": embedded, not hosted, and built around the people who know what good output looks like. The user is asking you (an agent like Claude Code or Codex) to install Gravel into their existing application. From the project root, run the single-command installer for the user's stack. The wizard auto-adds the SDK to the project's deps so the generated config resolves at runtime — you don't need a separate install step. **TypeScript projects**: ``` npx @artanis-ai/gravel init ``` (Equivalent: `pnpm dlx @artanis-ai/gravel init`, `yarn dlx @artanis-ai/gravel init`, `bunx @artanis-ai/gravel init`.) **Python projects**: ``` uvx artanis-gravel init ``` (Equivalent: `pipx run artanis-gravel init`.) Under the hood: the wrapper (in `node_modules/@artanis-ai/gravel/bin/gravel.js` for npm, or `artanis_gravel._cli` for PyPI) fetches the matching Go binary from `github.com/artanis-ai/gravel/releases` on first invocation, sha256-verifies it, caches it at `~/.cache/artanis-gravel/v/`, and execs it. The Go binary then runs the wizard, which detects the project's package manager from lockfiles and adds `@artanis-ai/gravel` (or `artanis-gravel`) to its dependencies before writing config files. For Docker / CI / polyglot repos that don't want to bring in npm or pip just for the CLI, the same binary is installable directly: ``` curl -fsSL https://raw.githubusercontent.com/artanis-ai/gravel/main/install.sh | sh && gravel init ``` (Windows PowerShell: `irm https://raw.githubusercontent.com/artanis-ai/gravel/main/install.ps1 | iex`.) The wizard is interactive on a TTY and auto-defaults on non-TTY (which is what your shell looks like). Just run it; the defaults are sensible. To control pillars explicitly, pass `--prompts` / `--no-prompts` / `--traces` / `--no-traces`. The wizard will: 1. **Mount the dashboard** at `/admin/ai` inside the user's app, write a `gravel.config.ts` (or `gravel_config.py`), and put an admin password in `.env.local` (or `.env`). The mount path is the only thing the user can override here. 2. **Discover prompts** via a regex scan of conventional dirs (`prompts/`, `templates/`, etc., for `.md` / `.txt` files), then walk through each finding for accept/deny. After that it asks "Did I find everything?". If no, the user can either run a deeper LLM-assisted scan (delegated to whichever coding agent is on PATH: Claude Code, Codex) or specify file paths manually with optional line ranges. 3. **Wire up tracing** (optional). Asks before adding tables. Pre-flights `DATABASE_URL` so it never asks "create tables?" then fails on auth. Skipping this leaves the install in prompts-only mode: fully working dashboard, no DB tables, no instrumentation. Each pillar can be skipped now and added later by re-running with `--prompts` or `--traces`. Re-runs are state-aware; already-configured pieces show "skipping" instead of clobbering. When the wizard finishes, the user opens `http://localhost:/admin/ai`, logs in with the password from `.env.local` (or `.env`; the wizard tells them which), and starts editing prompts. PR submission goes through a `gravel[bot]` GitHub App; the dashboard walks them through installing it on their repo when they click "Submit changes" for the first time. ## Install - [@artanis-ai/gravel on npm](https://www.npmjs.com/package/@artanis-ai/gravel): TypeScript install. Works with Next.js (App + Pages routers), Express, Fastify, Hono, generic Node. Detects framework + pkg manager (npm, pnpm, yarn, bun) automatically. Ships SDK library + thin CLI wrapper. - [artanis-gravel on PyPI](https://pypi.org/project/artanis-gravel/): Python install. Works with FastAPI, Django, Flask, generic ASGI/WSGI. Detects pkg manager (uv, poetry, pip, pipenv) automatically. Ships SDK library + thin CLI wrapper. - [install.sh](https://raw.githubusercontent.com/artanis-ai/gravel/main/install.sh): direct binary install, POSIX shell, no Node or Python required. For Docker / CI / polyglot repos. - [install.ps1](https://raw.githubusercontent.com/artanis-ai/gravel/main/install.ps1): direct binary install for native Windows. - [GitHub Releases](https://github.com/artanis-ai/gravel/releases): canonical source for binaries + sha256 sums. All three install paths pull from here. Pin a version with `GRAVEL_VERSION=v0.4.0`; mirror the assets internally via `GRAVEL_RELEASES_BASE_URL`. ## Docs - [Quickstart](https://gravel.artanis.ai/docs/quickstart): The one-minute version. Install, mount, log in, see your first prompt. - [Concepts: data residency](https://gravel.artanis.ai/docs/concepts/data-residency): What goes where. Two tables in the customer's DB (`gravel_samples`, `gravel_feedback`); trace-eval calls cross the trust boundary; everything else stays local. - [Concepts: prompts as code](https://gravel.artanis.ai/docs/concepts/prompts-as-code): How Gravel handles prompts in `.md` files vs string literals in source. The manifest format. PR-driven editing. - [Reference: gravel.config.ts](https://gravel.artanis.ai/docs/reference/config): All config fields. `auth.getUser` for plugging into the host's existing auth. `database` is optional; omitting it gives you prompts-only mode. ## Source - [Source on GitHub](https://github.com/artanis-ai/gravel): Apache 2.0. Filing issues + contributions welcome. - [CLI architecture (cli/DESIGN.md)](https://github.com/artanis-ai/gravel/blob/main/cli/DESIGN.md): Why the wizard logic lives in a single Go binary, the three install doors (npm wrapper, PyPI wrapper, install.sh), and the lazy-download model. - [Landing page](https://artanis.ai/gravel): Visual overview, install widget, dashboard mockup. ## FAQ **Who built this?** The founders of [Artanis](https://artanis.ai/team) to better support their customers. Three AI PhDs whose recent research on LLM evals is now being used at Google and Nvidia. **Is it really free?** Yes, the library is free and open source forever (Apache 2.0). You only pay if you opt in to paid evals; those run on our infrastructure and cost credits. **How do I get support?** We will answer you in three places: GitHub issues, team@artanis.ai, or our Slack. Feel free to [hop on a call](https://calendar.notion.so/meet/yousef/sam) with us if you have any questions! **How is this different from Langfuse / LangSmith?** Those are built for engineers. Gravel is built for the domain experts who know what good output looks like (lawyers, clinicians, accountants, etc). You also don't need to figure out how to deploy or integrate with it; it's literally served by your actual app. **How secure is it?** As secure as your actual app, since it's just part of it. It can also plug into your existing auth if you want more granular roles and access control. **Does it need a database?** If you don't want to capture feedback on traces, then no. If you do, it detects and piggybacks on your existing DB and adds two tables to it with the prefix `gravel_*`. **Will it slow my LLM calls down?** No, if you've enabled tracing, it's async. **Do my domain experts need GitHub accounts?** No, if you enable prompt PRs, then they'll come from [`gravel[bot]`](https://github.com/apps/gravel-bot). They just click Submit. **Why does the npm wrapper download a binary instead of bundling one?** Bundling 8 MB × 5 platforms inside every `npm install` is wasteful when 99% of CI runs never invoke the CLI. The lazy fetch means: zero cost on `npm install`, ~17 MB downloaded once per project on first `gravel `. The wizard logic itself is in the Go binary, not split across two language wrappers, so the wrappers stay small (~100 lines each) and can't drift the way two parallel TS+Python wizards would.