---
title: "Zero to knowledge base in 10 minutes"
date: 2026-08-11
author: "Eric Disque"
description: "The honest getting-started walkthrough: clone, compose up, redeem the setup token, connect GitHub, and watch the agent answer with its work shown. Real commands, real screens, measured timings."
tags: ["launch", "guide", "getting-started"]
cover: "/blog/zero-to-knowledge-base.svg"
---

Every quick start says 10 minutes. This one shows its work: every command, what you'll see, and where the time actually goes.

We timed it. On a machine that had already pulled the base images, a fresh clone with a from-scratch build took 32 seconds from `git clone` to a console answering on localhost. On a genuinely fresh machine, the first build downloads about a gigabyte of Docker images plus packages (Postgres with pgvector is most of it). Your number is mostly your connection speed. The minute marks below assume a mediocre one. If yours is good, you'll beat them the way we did.

## Minute 0: clone and start

```sh
git clone --recurse-submodules https://github.com/MariHQ/mari && cd mari
cp .env.example .env
docker compose up --build
```

Two things worth knowing. `--recurse-submodules` is required because the console's component library is a submodule, and a plain clone leaves you with a build error instead of a UI. And every value in `.env.example` is optional. The defaults work, so the copy step is genuinely just a copy.

The first build pulls images and compiles the web app, which is where most of the 10 minutes goes: it's download-bound, not compute-bound. Subsequent starts take seconds.

## Minute 6: redeem the setup token

First run prints a one-time setup token. Fish it out of the logs:

```sh
docker compose logs api | grep -A3 "FIRST-TIME SETUP"
```

Open [http://localhost:8080](http://localhost:8080) and paste it. The Setup page checks the token before asking you to create your admin account, so a wrong token is rejected up front rather than after you've typed a password. We tested both on a cold instance: garbage gets a 403, and the real token checks out without being spent. The token is good for 24 hours. If it expires, restart the API for a new one.

![The setup page: a one-time token pasted into the field, checked before any password is asked for](/blog/setup-token.png)

After setup, the workspace is invite-only. Nobody else can register unless an admin invites them from Settings, and open sign-up stays off unless you deliberately flip it.

## Minute 7: the onboarding wizard

The wizard walks you through three things: connect a source, pick a style guide, and seed your glossary. You can skip any of them and come back later. We won't.

![The onboarding wizard: five steps, all of them real](/blog/onboarding-wizard.png)

## Minute 8: connect GitHub

Pick GitHub from the connector list, paste a token, and hit **Test connection**. If your token is wrong or missing a scope, you see GitHub's actual error, verbatim. No "something went wrong."

Then connect, and watch the sync run live. GitHub ingestion goes past files: commit messages, PR descriptions, issues, and comments all become searchable documents, because that's where half the real decisions are.

![The first sync running live against a real GitHub repo](/blog/live-sync.png)

One thing happened quietly here: Mari put the source on a sync schedule. It's not an env var or a hidden cron. It's a drop-down on the Sources page you can read and change, and it keeps the source fresh from now on.

## Minute 10: ask the agent

Open the agent dock (the launcher sits bottom right on every page) and ask something your repo knows. Then watch it work. It searches, walks you to the document it found, reads it, and answers, with every step visible in the trace. No hidden retrieval: you can see exactly which document the answer came from, because the agent shows you the read.

![The agent dock answering a question: search, navigate, and read steps visible in the trace, the answer below, and the document it opened behind it](/blog/agent-dock.png)

That screenshot is the staged run for this post, unedited: the agent searched our synced docs, navigated to the page it found, and answered from it. Search works the same way underneath: keyword matching plus semantic similarity over your actual content, ranked together. And the `/chat` API streams answers with numbered citations back to their sources. The Slack bot answers with the same citations, so the receipts follow your questions wherever you ask them.

## Optional: local models

Chat, refinement, fact-checking, and the weekly digest use a local LLM through [ollama](https://ollama.com). Pull `nomic-embed-text` plus `gemma3:4b`, and Mari picks them up. Skip this entirely and the product still works: search falls back to keyword ranking and the LLM features degrade to deterministic behavior. Nothing breaks, nothing pretends.

## What you have now

A knowledge base that stays fresh on a schedule, answers with receipts, and a workspace ready for the rest of the team. Invite them from Settings, then point Mari at the next source. The connector list is 14 deep: Slack, Notion, Confluence, Jira, Linear, Google Drive, and more.

From here, the interesting work starts: verifying facts, ratifying decisions, and watching the lineage graph grow. That's covered in [the docs](https://mari.guru/docs/canon).

Stuck on a step? [Open an issue](https://github.com/MariHQ/mari/issues). If the quick start lied to you about anything, we want to know first.

— Eric
