RAGit is a zvec + git bound RAG CLI that runs inside your project repository.
It collects, analyzes, and retrieves documents produced during AI agent workflows, then version-controls snapshots bound to commit SHAs.
RAGit is a local-first RAG CLI that turns AI agent project documents and context into commit-bound, reusable knowledge inside the repository.
Git version-controls source code states. RAGit version-controls AI-working knowledge states bound to the same commit history.
sequenceDiagram
participant Developer
participant Git
participant Repository
participant RAGit
participant Store as ".ragit Store"
participant Agent
Developer->>Git: stage and commit code/docs
Git->>Repository: write commit snapshot
Note over Git,Repository: Git manages code and file history
Git-->>RAGit: trigger post-commit / post-merge hook
RAGit->>Repository: detect changed documents since SHA
RAGit->>Store: chunk, index, and write manifest bound to commit SHA
Note over RAGit,Store: RAGit manages document knowledge and agent context history
Agent->>RAGit: query or context pack at HEAD / specific SHA
RAGit->>Store: load snapshot + retrieval data
RAGit-->>Agent: return commit-bound knowledge/context
- Git answers: "What did the repository look like at this commit?"
- RAGit answers: "What knowledge and context should an agent use at this commit?"
- Together they make code state and AI context state reproducible.
- Preserve project context across AI agent work
- Reproduce knowledge at a specific commit state
- Turn structured docs into agent-ready inputs
- Automate indexing without adding workflow friction
Architecture Decision (ADR): durable decision record with rationale and consequencesProduct Requirement (PRD): product problem, users, goals, and success criteriaSoftware Requirements (SRS): system-level functional and non-functional requirementsImplementation Specification (SPEC): implementation-level functional requirements and interface contractsPlan: execution sequencing, milestones, and work breakdownDomain-Driven Design (DDD): bounded contexts, aggregates, and domain structureGlossary: shared vocabulary for stable project termsPhase and Binding Documents (PBD): phase and binding topology for understanding implementation structure and coupling
Requirements:
- Node.js
20.19.0or newer - pnpm
10.13.1or newer
For repository-local development:
pnpm install
pnpm ragit --helpInside this repository checkout, run CLI commands with pnpm ragit <command>.
For the published CLI:
npm install -g ragit
pnpm add -g ragit
bun add -g ragit
npx ragit --helpWhen the package is installed globally, use ragit <command>.
pnpm build is optional for repository-local usage.
Run it only when you need to generate dist/ artifacts or verify the packaged CLI entrypoint.
pnpm build- Primary URL (English):
https://rhiokim.github.io/ragit/en/ - Korean URL:
https://rhiokim.github.io/ragit/ko/ - English is the source of truth, and Korean is provided in the same structure.
Run locally:
pnpm docs:devBuild static output and preview:
pnpm docs:check:i18n
pnpm docs:build
pnpm docs:serveDeployment:
- GitHub Actions deploys automatically to
gh-pageswhenmainis pushed. - For manual redeploy, run
docs-gh-pagesviaworkflow_dispatch. - In Repository Settings > Pages, set Source to
gh-pages/ root(/).
publish.ymlvalidates tags againstpackage.json.versionand publishes only onvX.Y.Ztag pushes.workflow_dispatchruns the same release checks without publishing, so you can rehearse the pipeline before the first release.- Before enabling automatic publish, configure npm Trusted Publishing for
rhiokim/ragitand the GitHub Actions workflow.
Release validation flow:
pnpm release:check
VERSION=$(node -p 'require("./package.json").version')
git tag "v${VERSION}"
git push origin --tagspnpm ragit describe query --format json
pnpm ragit init
pnpm ragit init --yes --output json
pnpm ragit init --yes --git-init
pnpm ragit config set retrieval.top_k 8
pnpm ragit hooks install --dry-run --format json
pnpm ragit ingest --all --dry-run --format json
pnpm ragit query "DDD bounded context principles" --view minimal --format both
pnpm ragit context pack "Implementation plan for this sprint" --budget 1200 --view minimal --format both
pnpm ragit memory wrap --input session-wrap.json --dry-run --format json
pnpm ragit memory recall "resume auth flow" --view minimal --format both
pnpm ragit memory promote --input promotion-batch.json --dry-run --format json
pnpm ragit migrate from-json-store --dry-run
pnpm ragit migrate from-sqlitevss --dry-run
pnpm ragit status --format json
pnpm ragit doctor --format json.ragit/
config.toml
guide/guide-index.json
guide/templates/
manifest/<commit-sha>.json
memory/sessions/
memory/working/
store/meta.json
store/documents/
store/chunks/
cache/
hooks/
docs/
memory/
decisions/
glossary/
plans/
- Recommended for Git tracking:
.ragit/config.toml,.ragit/manifest/**,.ragit/memory/**,docs/memory/** - Local-only (default
.gitignore):.ragit/store/**,.ragit/cache/**
memory wrap: save a session summary into.ragit/memory/sessions/and refresh working state in.ragit/memory/working/memory recall: combine working state and snapshot-scoped retrieval into an agent-ready recall packetmemory promote: crystallize promotion candidates into searchable long-term docs underdocs/memory/**and ingest them immediately whenHEADexists
This split is intentional:
.ragit/memory/**is the tracked control plane for working state and session historydocs/memory/**is the searchable long-term memory corpus that participates in normal ingest/query flows
- Prefer
--format jsonfor machine consumers. - Use
ragit describe <command> --format jsonbefore integrating a command for the first time. - Prefer
--view minimalforquery,context pack, andmemory recall. - Prefer
--input <path|->for structured agent payloads. - Run mutating commands with
--dry-runfirst:ingest,hooks install,hooks uninstall,memory wrap,memory promote.
pnpm ragit init is now a discover-first bootstrap command.
It still prepares .ragit/**, AGENTS.md, guide assets, and the local zvec store, but it does that only after it inspects the repository and decides what knowledge already exists.
Default flow:
- Check Git environment (and optionally run
git init) - Scan repository code/docs/build files
- Select
empty,existing,docs-heavy, ormonorepo - Compute documentation coverage, maturity, and knowledge-slot mapping
- Reuse existing repository docs first and plan missing foundational docs
- Write stage-1 draft docs plus
.ragit/** - Bootstrap the zvec canonical store
- Print the final summary and next actions
What init prepares:
- Git-aware repository normalization
- Existing-doc discovery and coverage evaluation
- Stage-1 foundational drafts when missing:
RAGIT.mddocs/workspace-map.mddocs/ragit/ingestion-policy.mddocs/known-gaps.mddocs/adr/README.md
.ragit/config.toml,.ragit/guide/templates/*, and.ragit/guide/guide-index.json- Empty zvec collections under
.ragit/store/ - Next-action guidance for
hooks installandingest
What init does not prepare:
- No searchable corpus, chunk records, or manifests
- No zvec document/chunk upsert
- No query-ready knowledge state during
init
In other words, init makes the repository diagnosed, foundation-ready, and zvec-store-ready, not search-ready.
storage.backend = "zvec" still means the canonical backend, and searchable knowledge still begins only after pnpm ragit ingest ... runs.
Supported options:
pnpm ragit init --mode auto --strategy balanced --merge-existing
pnpm ragit init --yes # non-interactive with defaults
pnpm ragit init --non-interactive # alias of --yes
pnpm ragit init --git-init # allow git init in non-interactive mode
pnpm ragit init --dry-run --output json
pnpm ragit init --output json # JSON summary output--cwdmay point to the repository root or any nested path inside the worktree;initnormalizes to the Git root before writing.ragitorAGENTS.md.--modeoverrides repository-mode detection.--strategycontrols how aggressively stage-1 draft docs are generated.--dry-runcomputes the full analysis report without writing files or bootstrapping storage.- zvec bootstrap currently supports
darwin/arm64,linux/arm64, andlinux/x64.
Recommended flow after init:
pnpm ragit migrate from-json-store # only if summary says migrationRequired=true
pnpm ragit hooks install
pnpm ragit ingest --allpost-commit: automatically indexes changes fromHEAD~1..HEADpost-merge: automatically indexes changes from${ORIG_HEAD:-HEAD~1}..HEAD- Failures are warning-only and do not block commit/merge flows.
- 1st pass: zvec vector search scoped to the snapshot manifest
- 2nd pass: keyword score
- Final score:
alpha * vector + (1-alpha) * keyword(defaultalpha=0.7)
- Secret masking is enabled by default during ingestion (
security.secret_masking=true) - OpenAI/GitHub/AWS keys and
api_key/token/secretpatterns are masked.
RAGit is licensed under Apache-2.0. The root LICENSE file is the single source of truth for license terms across this repository.
pnpm test