Now your agent can find anything in your computer.
Important
Looking for the original AutoRAG (RAG AutoML / pipeline optimization tool)?
This repository now hosts AutoRAG 2.0, a complete reimagining of AutoRAG as a personal librarian agent for your office work. The original Python-based AutoRAG — the RAG AutoML tool for automatically finding an optimal RAG pipeline for your data — now lives in the legacy/ directory of this repository.
The legacy AutoRAG is NOT abandoned. It continues to be maintained (bug fixes, dependency updates, and PyPI releases via pip install AutoRAG) in maintenance mode. Existing users can keep using it exactly as before — see the legacy README for its documentation, and file issues in this repository as usual. New feature development is focused on AutoRAG Agent (2.0).
A Finder for your computer that understands what's inside your files. The AutoRAG desktop app puts this librarian behind a real file manager: browse your folders as usual, then ask a question and get an answer that cites the files, chats, and mail it came from. Everything it searches with is the engine in this repository.
|
Ask the way you'd ask a teammate. The librarian reads the files and writes back, every claim linked to the passage behind it. Drag files, folders, or links into a question to ask about just those. |
|
|
|
|
Markdown, code, PDF, video, audio, Office, and HWP/HWPX previewed instantly in Quick Look. HWP pages are drawn locally by rhwp; Hancom Office is not required. |
|
|
Tabs and split panes: drag a tab to an edge to split, and every pane keeps its own tabs, so a folder and a conversation sit side by side. Folders update live as other apps change them. |
And more: hybrid keyword + meaning search with a reranker · scheduled re-indexing that runs even while the app is closed · an Ask entry in the Finder and Explorer right-click menu · light and dark mode · Korean, English, Japanese, and Simplified Chinese.
The app connects the same datasources the librarian does, and searches them right alongside your files:
| 💬 Slack Channels and threads |
💛 KakaoTalk Chats on this computer |
🎮 Discord Servers and forums |
Telegram Chats and channels |
| 📱 Messages, read-only |
✉️ Every inbox you sign in to |
🐙 GitHub Repos, issues, PRs |
🔮 Obsidian Your vaults |
- Embedded on your machine. Semantic indexing runs on MinSync's local
Qwen3-Embedding-0.6B engine (1024 dimensions), which MinSync provisions and
runs; AutoRAG owns no embedding model. File contents are never sent to a
remote embedder unless you explicitly configure a remote
minSync.embedder. - Keys stay encrypted. Sign-in tokens and API keys live in the system's encrypted store, never in a config file.
- Bring your own model. Use the hosted Dazzi Models plan, or connect your own provider key and pay the provider directly.
Tip
The Dazzi desktop app's source lives in NomaDamas/AutoRAG-app
(Electron + React, Fair Source under FSL-1.1-MIT). It
depends on the open-source @autorag/librarian engine (Apache-2.0) from this
repository; build, run, and file app issues there.
The app is one way in. The same librarian runs everywhere else:
| Surface | Use it for | Start here |
|---|---|---|
| Desktop app (Dazzi) | Browsing and asking in one window | NomaDamas/AutoRAG-app (Fair Source, FSL-1.1-MIT) |
| Terminal UI | Interactive, steerable search sessions | autorag tui |
| Messenger | Asking the librarian from a chat app | Telegram, Discord |
| CLI | Scripts, indexing, health checks | CLI Command Reference |
| MCP server | Feeding retrieval to Claude Code, Codex, and other agents | AutoRAG Lite MCP Server |
| TypeScript API | Embedding the librarian in your own app | Programmatic usage |
| Agent skills | Letting a coding agent install and drive AutoRAG | For AI Agents |
Search tools dump file paths and matching lines — forcing you to open files, read context, and synthesize answers yourself.
AutoRAG Agent is a personal librarian agent that helps with your office work. Built on the Pi agent framework, a single configured model searches your files, mail, chats, and notes in place, opens source documents directly via bash to verify ground truth, and curates answers into clean, numbered knowledge units. Because it works for you rather than only on your index, it can also act on your files when you ask, such as organizing, renaming, moving, or editing them with a record of every change:
You ask: "What changes were made to the cloud infrastructure contract in Q3?"
AutoRAG Agent:
[1] Enterprise Compute Discount — AWS annual discount tier increased to 28% based on commitment volume. (contracts/cloud-2026.pdf:p.4)
[2] Regional Data Residency — Explicit compliance clause pinning customer data storage to the Seoul AWS region. (/slack/legal-ops/chunks/318)
[3] SLA Guarantee — Guaranteed uptime threshold adjusted to 99.95% with penalty credits starting at 15 minutes downtime. (contracts/sla-addendum.md:lines 45-62)
Three principles drive every design decision in AutoRAG Agent:
-
Never migrate your data to search it. Traditional RAG systems force you to upload, ETL, and duplicate your files into a centralized vector database. AutoRAG Agent federates your data in place, querying CLI-native stores (
lazykatok,discrawl,slacrawl,mailcrawl) where your data already lives. Results retain opaque, source-native identities (/kakao/...,/slack/...) that preserve local access control and privacy. (See our Competitive Landscape Study on why in-place federation is the durable differentiator). -
Just works — no RAG degree required. No pipeline tuning, no vector-DB maintenance, and no remote embedding keys required. AutoRAG Agent automatically manages MinSync for incremental Change Data Capture (CDC) chunking and provides a local embedding backend out of the box with zero external telemetry. A remote rerank model is an opt-in extra: it runs only when you name one in
rerank.model, and otherwise the first answer is built from each source's own top 10. -
Fast by design. Rather than coordinating slow multi-agent hierarchies, a single configured model owns the entire retrieval, direct-read, and curation loop. Local CDC chunks (SPLADE sparse, vector, and hybrid modes) deliver rapid, low-latency turnaround across multi-turn research queries.
AutoRAG Agent orchestrates five integrated subsystems:
- Retrieval Memory (
check_memory): After each answer, cited evidence Jev judges to genuinely support it is stored in~/.autorag/memory.json. Later searches receive this conversation's evidence, similar past questions, and long-term insights as advisory reference — it never reorders results or overrides current evidence. See docs/retrieval-memory.md. - Pluggable Multi-Method Retrieval:
- SPLADE Sparse Search: Learned-sparse keyword ranking via MinSync's KURE-Sparse-nano encoder over parsed markdown mirrors; it replaced BM25 in MinSync 0.6 and matches Korean inflected forms (
인증서를→인증서) with no tokenizer library. Exact identifiers among many look-alike files rank less reliably than with BM25. See docs/minsync-setup.md. - Semantic Vector Search: Dense vector retrieval over CDC chunks via the shared MinSync embedder.
- Hybrid Search: MinSync fuses sparse and vector ranking over the same chunks.
- Jikji Find-First Discovery: Local CLI-backed fast discovery answer packs.
- Everything File-Name Search (Windows): The bundled voidtools Everything indexes file and folder names under your search roots so the agent finds files by name, extension, path, size, or date instantly (
everything_search). - FSearch File-Name Search (macOS/Linux): fsearch-cli (FSearch) keeps a live, per-workspace name index of your search roots so the agent finds files by name, extension, path, size, or date instantly (
fsearch_search); without fsearch-cli installed it degrades to a slow filesystem walk. - Calculator: Exact decimal arithmetic (40 significant digits, no floating-point drift) plus calendar and clock math — days between dates, date offsets with month-end clamping, weekdays, ISO weeks, business days with holidays, the current time, and DST-aware time zone conversion — through the
calculatortool. The system prompt, including the fast-answer phase, orders the model to compute every number and date with it instead of in its head. It runs in-process, reads no files, and needs no configuration. - Datasource Skills: Federated retrieval across every configured external datasource.
- SPLADE Sparse Search: Learned-sparse keyword ranking via MinSync's KURE-Sparse-nano encoder over parsed markdown mirrors; it replaced BM25 in MinSync 0.6 and matches Korean inflected forms (
- Result Merger & Scope Narrowing: Cross-method deduplication, score normalization, and ordinary query-scope narrowing.
- Direct Evidence Reading (
bash): The agent directly opens and inspects promising files withcat,grep, orfindto verify facts against ground truth. - Curation: The final answer is the model's plain reply; the harness resolves its inline
[eN]citations into numbered, source-backed results; cited evidence that Jev judges to genuinely support the answer is remembered as reference context for later searches (docs/retrieval-memory.md).
AutoRAG uses @earendil-works/pi-coding-agent as the runtime host for model sessions. Pi owns provider credentials and OAuth storage, model-runtime dispatch, session JSONL persistence/resume, extension loading, lifecycle events, and the built-in read/bash/edit/write/grep/find/ls tools. AutoRAG registers only its domain tools and keeps orchestration outside the host: datasource orchestration, MinSync/Jikji preparation, memory hints, fast-to-verification two-phase search, structured result emission, and remote-session filtering.
The CLI TUI (autorag tui) is Pi's interactive mode hosted on the AutoRAG librarian: there is no separate AutoRAG renderer. Pi owns the terminal UI and its native in-session commands — /login//logout, /model, /resume, /new, /tree, /compact, and /settings — so provider sign-in and model selection work on first launch even when no AutoRAG model is configured. AutoRAG registers its retrieval tools and runs the two-phase search in the same Pi session, where the model's progress notes, first answer, and final answer are ordinary assistant messages, so resume and two-phase search keep working together.
A fresh session — at launch and after /new (or /reload) — opens on AutoRAG's own welcome screen: the AutoRAG logo, the version, and three rotating tips, centered and scaled down to a smaller logo or a plain wordmark on narrow terminals. Pi's own logo, key-hint list, and loaded skills/prompts/extensions listing are hidden by default (quietStartup: "header"). A quietStartup saved in Pi's global or project settings.json wins: true removes the banner, false brings Pi's resource listing back.
Typing while a search runs works like steering one of Pi's own turns. Enter steers the running search: AutoRAG treats the text as a correction of a search that is going wrong, delivers it before the search's next model request (also between phases, where no turn is streaming), cuts in-flight retrieval short so the correction lands promptly, and always runs the verification phase so the answer reflects the correction. Alt+Enter queues a new question that runs after the current search answers. Esc stops the search instead of letting it continue into its next phase. Pi's registered / commands still run during a search; any other line starting with / (a path, for example) is a steer like any other text. A query typed after a search answers is a new search in the same session, as before.
From the moment a question is submitted, a live progress widget sits above the editor: a spinner, the elapsed time, and one line per step the search is running (routing, splitting the question, each retrieval source with its hit count and time, ranking, the first answer, verification). A slow source shows its own running timer, a failing source shows its error text verbatim, and the widget disappears when the answer is final or Esc stops the search. While the model streams, Pi's own Working loader takes over and the widget keeps only the header and steps. Every tool call also carries a short model-written intent (the i argument): Pi's Working loader shows the newest one, and autorag search and the desktop app receive it as progress, so the model does not write separate progress notes before tool calls.
Update notices are AutoRAG's, not Pi's: autorag tui suppresses Pi's "run pi update" banner (Pi is a bundled host, not a separate install) and instead checks the published @autorag/librarian release, showing a one-line notice in the session when a newer version exists. Set AUTORAG_NO_UPDATE_CHECK=1 to skip the lookup; AUTORAG_UPDATE_CHECK_URL overrides the registry endpoint.
| Messenger | Status | Start here |
|---|---|---|
| Telegram | Supported | autorag tui --telegram |
| Supported (unofficial client) | autorag tui --whatsapp |
|
| Discord | Supported (no steering yet) | autorag tui --discord |
| Slack, others | Not supported yet |
Telegram runs through the @llblab/pi-telegram bridge inside a running autorag tui session: questions you send the bot get the same routing and two-phase search as the terminal. Setup, commands, and keeping it running are in docs/telegram.md.
WhatsApp runs through the pinned whatsapp-pi extension the same way; see docs/whatsapp.md.
Discord runs through the pi-discord-remote extension and creates one channel per TUI session; the fast answer and the verified final answer are posted as they land. Setup, permissions, and limits are in docs/discord.md.
AutoRAG Agent is published as @autorag/librarian (requires Node.js ≥ 24 or Bun):
# Install CLI globally
bun install -g @autorag/librarian
# or with npm:
npm install -g @autorag/librarian
# Add as a TypeScript/JavaScript library
bun add @autorag/librarian- No Java required: Document parsing (HWP/HWPX/HWPML, PDF, DOCX, XLSX/XLS) runs in-process through
kordoc. - Rust Toolchain (Optional): Automatically compiles Jikji (
jikji-cli, pinned to 0.2.1) if installed. Ajikjiolder than 0.2.0 on your PATH is skipped and replaced by the pinned build on the next refresh. - MinSync: Automatically downloaded and installed into
<workspace>/.autorag/binon first run. - Everything (Windows only, bundled): The package ships the portable Everything 1.4.1.1032 and its ES 1.1.0.38 CLI (x64 and ARM64, SHA-256 pinned). On Windows, AutoRAG extracts them into
<workspace>/.autorag/everything/and runs a private, user-level instance that indexes only your configured search roots: no administrator rights, no Everything service, no whole-drive scan, no HTTP/ETP server, and no change to any Everything you already run. Set"everything": falsein the config to turn it off. macOS and Linux are not affected. - filee-cli (file conversion, automatic):
autorag setupand the TUI download the pinned filee-cli release (~85 MB, SHA-256 verified) into<AUTORAG_HOME>/tools/filee-cli/<version>/, so the agent can convert between 255 formats offline withconvert_files. Afilee/filee-clialready onPATHis used instead. Set"filee": { "autoInstall": false }to forbid the download or"filee": { "enabled": false }to remove the tools. Filee fetches its own engines (FFmpeg, Pandoc, LibreOffice, calibre, Ghostscript; hundreds of MB, only when a conversion needs one) on first use. - FSearch (macOS/Linux only, separate install): Install
fsearch-cliyourself (e.g.brew install NomaDamas/fsearch-mac/fsearch-mac(installs thefsearch-clibinary); GPL-2.0, spawned as a separate process, never bundled or linked). On macOS and Linux, AutoRAG builds a per-workspace database at<workspace>/.autorag/fsearch/indexing only your configured search roots, and keeps afsearch-cli watchdaemon live (FSEvents/inotify) for sub-second name search. It never touches the FSearch app's own database. Without fsearch-cli, name search falls back to a slow bounded filesystem walk. Set"fsearch": falsein the config to turn it off. Windows is not affected (Everything covers it).
# Initialize configuration for your documents folder
autorag init --search-paths ~/Documents/research
# Korean + English is the default; set it explicitly for other corpora
autorag init --search-paths ~/Documents/research --languages ja,en
# Index documents (parses PDFs/Markdown, builds MinSync sparse and dense vectors)
autorag refresh
# Check indexing health
autorag statusBackground indexing (autorag watch, auto-refresh, the fs watcher) can be limited by power source and local time. An explicit autorag refresh is never gated.
power:any(default) orac(index only while plugged in; pauses on battery). An unknown power source (desktop, probe failure) counts as plugged in.windows: localHH:MM-HH:MM, start inclusive, end exclusive;22:00-07:00wraps midnight and belongs to the day it starts on.days:sun..sat. Omit for every day.autorag watch --power ac --window 22:00-07:00 --days mon,tueoverrides the config.--oncewhile closed printsskippedand exits 0; a long-running watcher defers changes and indexes once the schedule opens.
Leave generated workspaces or archives out when initializing:
autorag init --search-paths "$HOME/Documents" \
--exclude "$HOME/Documents/Build output" \
--exclude "$HOME/Documents/Archive, old"Repeat --exclude for each file or folder. Each argument is one complete path,
including spaces and commas; relative paths resolve from the current directory.
Excluding a folder also excludes its descendants. Paths are literal, not globs.
For an existing configuration, edit its excludePaths array and run
autorag refresh to update the indexes. File-name search applies exclusions to
native fsearch and Everything results as well as the filesystem walk. See the
exclusion configuration examples.
One global languages setting describes the corpus. It is resolved from
--languages, then AUTORAG_LANGUAGES, then languages in the config file,
falling back to ["ko", "en"]. Supported tags: ko, en, ja, zh-hans,
zh-hant, fr, de, es, ru, it, pt, vi, th, ar, hi.
| Extension | Parser |
|---|---|
.hwp .hwpx .hml .hwpml .pdf .docx |
kordoc (nested tables, no Java) |
.xlsx .xlsm .xlsb .xls .ods |
built-in spreadsheet reader (SheetJS) |
.csv .tsv |
built-in CSV reader (CP949/EUC-KR aware) |
.pptx |
built-in PPTX reader |
.eml |
built-in mail reader |
.txt .text .md .markdown |
plain text (CP949/EUC-KR aware) |
.png .jpg .jpeg .webp |
kordoc image OCR (only when parserOptions.ocr.enabled is true) |
.bmp and .tiff are not parsed: kordoc rejects both as unsupported.
The spreadsheet reader writes one line per row. Each line names the sheet, the cell range and the table title, and pairs every value with its column label, so a search hit always says what a number is:
[예산총괄!A4:F4 · 2026년 연구개발비 편성표 (단위: 천원)] 구분: 직접비 | 비목: 인건비 | 편성액: 742,000 | 비율(%): 32.1%
Values are what the spreadsheet shows: cached formula results with their number
formats (742,000, 32.1%, dates). A format that scales the stored number keeps
that number too (742천원 (742000)), and a formula saved without a result shows
its formula (=SUM(B2:B3)). Titles above a table become its caption, merged
group headers become 상반기 > 1월, several tables on one sheet are kept apart,
and a row longer than a search chunk is split into lines that repeat its first
value. A first row counts as the header only with clear evidence (a merged group
header, or at least three rows below it with a mostly numeric, date or formula
column); otherwise rows are kept exactly as written, so a form's label/value
cells are never relabelled. Sheets are read up to 100,000 rows each; a longer
sheet is indexed partially with a parser-warning diagnostic.
.csv and .tsv files produce the same lines, with the file name in place of
the sheet name. Bytes decode as UTF-8 (with or without BOM) or CP949/EUC-KR,
quoted fields keep separators, line breaks and doubled quotes, and values stay
exactly as written (00123 and =1+2 are not converted). .tsv is
tab-separated; a .csv follows Excel's sep=; first line when present and
otherwise picks the separator (, ; tab |) that splits its first lines
most consistently.











