This guide shows how to run Yaan on your own computer or server, connect your team’s tools, and use Yaan from the AI client you already have. You need about 15 minutes.
5 stepsto a running Yaan
4 toolsSlack, GitHub, Jira, Notion
3 AI clientsClaude Code, Codex, Cursor
Note: Yaan was called Lore while it was built. Old LORE_… settings still work, and a few stored names keep it: the demo graphs lore_herb and lore_demo, and the demo snapshot file.
Before you start
Docker, with Docker ComposeOn Windows and macOS, install Docker Desktop. On Linux, install Docker Engine and the Compose plugin.
GitTo get the code.
An Anthropic API key (optional)Without a key, you can browse the graph and use all graph tools. To ask new questions, you need a key.
1
Get the code
Open a terminal. Run these commands:
git clone https://github.com/t-maypat/yaan yaan
cd yaan
Set a different, strong password for each database user. Use only letters, digits and dashes.
ANTHROPIC_API_KEY
Paste your key here. This is optional.
YAAN_DAILY_SPEND_CAP_USD
The maximum AI spend for one day, in US dollars. Yaan stops calls that could go above it.
Caution: Do not put .env into Git. It contains your passwords and keys.
3
Start Yaan
This command builds Yaan and starts it with its FalkorDB database:
docker compose --profile app up -d --build
The first build takes some minutes. Later starts are fast.
4
Load the demo graph optional
Load a ready-made graph of a synthetic company from Salesforce AI Research’s HERB benchmark. It is the data Yaan is tested and evaluated on, so it is the fastest way to see Yaan answer before you connect your own tools. This step needs no API key. You can skip it.
The yaan command:./yaan (.\yaan in PowerShell) runs Yaan’s command line inside its container, from any folder. It joins the running container, or starts a throwaway one when Yaan is stopped. ./yaan --help lists the commands.
About the data: HERB is public and fully synthetic, licensed CC BY-NC 4.0. The graph holds no real company’s or person’s data.
5
Open Yaan
Go to http://127.0.0.1:8000 in your browser. Ask a question, open the Inbox, or move the timeline.
Tip: Yaan listens only on your own computer (127.0.0.1). To give your team access, see Keep it secure.
Connect your tools
Each connector reads events into Yaan. Approved actions go back out as comments and messages. Connect one tool or all four. Put each value into .env.
Slack
10 min
Make a Slack app from the manifest in backend/app/connectors/README.md.
Make an app-level token with the scope connections:write. Put it in SLACK_APP_TOKEN.
Install the app. Put the bot token in SLACK_BOT_TOKEN.
Invite the app to your channels.
In: messages, thread replies, edits and deletions, and questions that mention the app. Out: answers, alerts, Approve.
GitHub
5 min
Make a fine-grained token for your repository.
Give it read and write access to Contents, Pull requests and Issues.
Put the token in GITHUB_TOKEN. Put owner/name in GITHUB_REPO.
In: pull requests and reviews. Out: comments on the PR.
Jira
10 min
Put your site address in JIRA_BASE_URL.
Put the project key in JIRA_PROJECT. The key is the prefix of ticket IDs, for example KAN.
Make an API token. Put it in JIRA_API_TOKEN, and your login email in JIRA_EMAIL.
In: tickets and status changes. Out: comments.
Notion
5 min
Make an internal integration that can read and insert content and comments.
Put its secret in NOTION_TOKEN.
Connect the integration to your page. Put the page ID in NOTION_PAGE_ID.
In: child pages of the pages you name, and their comments. Out: comments.
Start the connectors
Switch Yaan from the demo to your own data. In .env, set YAAN_DATA_MODE=org. Your data then goes into its own graph, yaan_org. Nothing from the demo graph is mixed in.
Copy the example map, then edit it. Name your product and the channels Yaan reads. Each channel name starts with bug-, develop- or planning-. The prefix tells Yaan what to read from it.
Say who may read each source other than Slack: visibility: everyone, or visibility: members with a members list. Slack tells Yaan which channels are private and who is in them. Until a source says, Yaan shows nothing from it.
cp connectors.org.example.yaml connectors.yaml
Optional: list your people in people.yaml, with their role and their account in each tool. A role decides who may close or reopen an issue. Yaan adds everyone else the first time they appear.
Apply your settings, create your graph, and check the connectors:
docker compose --profile app up -d --force-recreate api
./yaan init
./yaan connectors status
Start the connectors. They run in their own container, which Docker restarts after a crash or a reboot:
docker compose --profile app --profile connectors up -d
docker compose exec worker yaan connectors health
An item a connector can’t ingest is kept, not dropped: yaan connectors dead lists them and yaan connectors retry replays them once you have fixed the cause.
Tip: Slack uses Socket Mode. You do not need a public URL. GitHub, Jira and Notion are checked every 30 seconds.
The first sync reads the last 30 days. To go further back, see what it would cost first: yaan connectors backfill --days 365 is a dry run; add --yes to ingest it.
Connect your AI client
Yaan gives its graph tools to any MCP client. Your client’s model does the reasoning. Yaan’s graph lookups cost no AI tokens. Yaan must be running.
Claude Code
Run this command once:
claude mcp add --transport http yaan http://127.0.0.1:8000/mcp
Then ask, for example: “Which customers are waiting on a fix?” or “Anything break overnight?”
Keep it secure
Yaan is safe on your own computer with the default settings. Before other people can reach it, do these steps:
Change the three database passwords. The example values are for local use only.
Keep the ports on 127.0.0.1. Put an HTTPS proxy, for example Caddy or nginx, in front of Yaan.
Tell Yaan the address of your proxy. Set FORWARDED_ALLOW_IPS. Then each visitor gets their own request limit.
Set a daily AI spend cap. Use YAAN_DAILY_SPEND_CAP_USD.
For a public demo, replay answers only. Set YAAN_LLM_CACHE_ONLY=1. Yaan then never calls the AI model for a new question. Also set YAAN_MCP_ASK=0.
Keep the request limits on. The defaults limit questions per address, per day and in total, and limit how many answers run at the same time.
Give each device its own token. Tokens expire after 90 days. yaan token list shows them with when each was last used; yaan token revoke "Name" --id <id> ends one, and every browser session signed in with it.
Safety is built in
AI tools in Yaan can read but cannot write. Questions the AI writes in Cypher run as a read-only database user, with a time limit. A person approves every action before Yaan posts it. Every sentence in an answer must quote its source word for word, or Yaan removes the sentence.
Architecture
Yaan is one service and one database. Both run on your server. Events come in from your tools, go through one pipeline, and become a graph in FalkorDB. Two parts read that graph: the answer agent, which answers questions, and the Change Sentinel, which watches for changes. Your team uses Yaan from the web app, from Slack, or from their AI client.
Everything inside the large box runs on your server. Only the LLM gateway calls out, to the AI model you choose, with your key.
Connectors
Read new events from Slack, GitHub, Jira and Notion. Post approved actions back.
Ingestion pipeline
Turns each event into nodes and links. The AI extracts events; code checks every quote against its message before it enters the graph.
FalkorDB graph
Holds people, work and decisions, with a start and end date on each decision. Also holds the vector and full-text indexes.
Answer agent
Answers with 17 read-only graph tools. A validator removes any sentence without a word-for-word quote.
Change Sentinel
Watches decisions. When new talk contradicts one, it finds who and what the change touches and drafts a follow-up.
LLM gateway
The only part that calls the AI model. It caches calls, enforces the daily cap and records the cost of each call.