Index your repository, open the dashboard, and have your coding agent answer from that index. The default run needs no API key, makes no model calls and sends nothing off your machine.
Looking for one command's flags? See the CLI Reference. For everyday workflows, see the User Guide.
| You are | Go to |
|---|---|
| A person at a terminal | Human path |
| A coding agent setting repowise up, or a person who wants one to | Agent path |
Both paths end on the same index. Modes and upgrades covers what to add later.
Python 3.11+ and Git are required. Use the first one you have:
uv tool install repowise # uv brings its own Python
pipx install repowise
python3 -m pip install repowise # Windows: python -m pip install repowiseCheck it with repowise --version. If the shell says command not found, run
uv tool update-shell or pipx ensurepath and open a new shell.
From the repository root:
repowise initinit opens on one plan screen: what it found, what it will build, an ETA,
and an opt-in model line with what a model adds and costs. Enter starts the
free run, which builds the documentation from code: no key, no model calls.
m picks a model, e edits the plan (advanced options, agents, the
post-commit hook), s connects only this repo, and q quits. A detected API
key or logged-in agent CLI is named on the model line and used only after m.
repowise init --yes --no-prose does the free run with no questions. Without
--no-prose, --yes uses a model when an API key is configured, with the
cost pre-approved. A logged-in Claude Code, Codex or OpenCode is used only
with --provider.
repowise serveThis is the first thing to run after init. The API starts on port 7337 and
the dashboard on port 3000, or the next free port. The dashboard needs
Node.js 20+, and its first run downloads the UI (about 50 MB, cached in
~/.repowise/web/). The dashboard opens in your browser once it is up;
--no-open skips that. --no-ui starts the API alone, and the
Docker image avoids installing Node. View by view:
Dashboard.
After a first index, the dashboard opens on a three-step welcome: what stood
out in your repo, connecting your agent, and what to add next. Setup
(Settings > Setup) keeps the same list for later: agents, sync, coverage and a
model, each with a prompt you can copy to your agent. The free index stays the
default; add a model whenever you like from the dashboard or with
repowise generate.
init wires your editors unless you pass --no-editor-setup (or set
REPOWISE_SKIP_EDITOR_SETUP=1). What it writes:
| What | Where | When |
|---|---|---|
| MCP server entry | .mcp.json, .vscode/mcp.json (plus .vscode/extensions.json) |
by default |
| Agent context files | .claude/CLAUDE.md, AGENTS.md, Copilot instructions under .github/ |
by default |
| Global repowise MCP entry for Claude Code and Claude Desktop | ~/.claude.json and the Claude Desktop config |
by default; when it points at another repo the plan screen shows the move and s keeps it; --yes points it here and prints the old and new repo |
| Claude Code hooks (session briefing, post-edit context) | ~/.claude/settings.json |
with the global entry |
Post-commit hook that runs repowise update |
the repo's git post-commit hook |
by default; e turns it off, --no-hook skips it |
The global entry points at one repo at a time. Pressing s keeps it where it
is, and agents opened in this repo still connect through .mcp.json. Point it
here later with repowise agents add --target=claude-code --scope=user.
When machine-specific files such as .claude/CLAUDE.md would show up in
git status, e offers to add them to .git/info/exclude (off by default).
Other hosts need one more command, run after init:
| Host | Command |
|---|---|
| Claude Code, VS Code (Copilot) | nothing more; the VS Code extension adds editor features |
| Codex | repowise agents add --target=codex --yes, or --codex on init |
| Cursor | repowise agents add --target=cursor --yes |
| OpenCode | repowise agents add --target=opencode --yes |
| Hermes | repowise agents add --target=hermes --yes |
| GitHub Copilot CLI | repowise agents add --target=copilot --yes |
| Kiro | repowise agents add --target=kiro --yes |
| Any other MCP client | repowise agents print-config claude-code, then paste the entry into its MCP config |
repowise agents lists every supported host and whether it is wired.
Per-host details: Agent integrations. On Claude
Code, the plugin adds slash commands and skills:
/plugin marketplace add repowise-dev/repowise
/plugin install repowise@repowise
Then restart the host, or run /mcp in Claude Code. Most agents read MCP
config only at startup.
Ask in plain language. The agent picks the tool.
| Ask | Tool it reaches for |
|---|---|
| "Give me a tour of this codebase." | get_overview |
"What breaks if I change src/auth.py?" |
get_context with callers, get_risk |
| "What code is dead here?" | get_dead_code |
| "What should we fix first?" | get_health |
"Which tests should I run for my branch against main?" |
get_change_risk, get_risk |
Every one of these works without an API key. What each tool returns: MCP Tools. The same answers on the command line:
repowise health # lowest-scoring files, and why
repowise dead-code # what nothing references
repowise risk main..HEAD # size and bug-fix record for your branchA person can hand setup to their agent by pasting this line into Claude Code, Codex, Cursor, VS Code Copilot, OpenCode, Hermes or any MCP client:
Read https://docs.repowise.dev/setup.md and set up Repowise in this repository.
That runbook follows the steps below. An agent can also follow them directly.
-
Install with the first installer that exists:
uv tool install repowise, thenpipx install repowise, thenpython -m pip install repowise. -
Index without spending. This command never prompts and never calls a model, whatever keys are set:
repowise init --yes --no-prose
It adds the global repowise MCP entry when there is none and never moves one that serves another repo. Add
--no-editor-setupin CI, in a sandbox, or on a repo the person only wants to try: then only.repowise/is written. -
Run it in the background. A small repo takes under a minute; a few thousand files can take several minutes, longer than many tool timeouts. Wait for the process to exit instead of relying on a fixed timeout. While a first run is still going,
repowise statusreports the index as incomplete, so read it after the process exits. -
Read the exit code.
Code Meaning Next 0Ready continue 2Finished with gaps; everything is saved the last line names what is missing and the command that adds it 130Interrupted repowise init --resumeother Failed repowise doctorrepowise status --format jsonthen gives the mode, the counts and the next command. With--progress json, init writes one JSON event per line to stdout and ends on a summary line with the status, mode, spend and next commands. -
Reconnect. MCP tools appear only after the host restarts, or after
/mcpin Claude Code. Do not assume they are active in the current session. -
First tools. Call
get_overview. An architecture summary back means the setup works. Thenget_context,search_codebaseandget_answer. -
Offer a model, never spend unasked. If the person wants written documentation, show the estimate with
repowise generate --dry-run, and runrepowise generateonly after they approve it. The person puts the key in.repowise/.env(gitignored). Never ask for a key in the chat.
repowise status shows which mode an index is in.
| Mode | Reached by | You get | Not yet | Add it with |
|---|---|---|---|---|
| Index only | init --mode fast |
graph, essential git history, health, dead code | documentation, full git history (blame, co-change) | repowise update --full (no key needed) |
| Built from code | init --no-prose, or no key |
graph, full git history, health, dead code, documentation built from code, decisions from markers and ADRs, full-text search | written documentation, decisions from PRs, history and comments | repowise generate (needs a model) |
| Written by <model> | a model run, or an upgrade above | all of the above, written documentation, decisions from PRs, history and comments | nothing | |
| Semantic search, on top of either documentation mode | an embedder (see the matrix) | search by meaning as well as by text | repowise reindex --embedder <name> |
repowise update --full with a model configured goes straight from Index only
to Written by <model>. Every upgrade reuses the index you already have and
shows a cost estimate before any model call.
- Written documentation: subsystem and architecture pages that explain how the code fits together, in place of pages built from code.
- Decisions read from pull requests, git history and code comments.
repowise generatereads the ones a keyless run skipped. - Synthesized answers from
get_answerand the dashboard chat.
Semantic search needs an embedder, which is separate from the model. Without one, search is full-text, and every run names the command that turns it on.
| Provider | Credential | Embedder of its own |
|---|---|---|
gemini |
GEMINI_API_KEY (or GOOGLE_API_KEY) |
yes |
openai |
OPENAI_API_KEY |
yes |
openrouter |
OPENROUTER_API_KEY |
yes |
edenai |
EDENAI_API_KEY |
yes |
ollama |
none (local) | yes, with OLLAMA_EMBEDDING_MODEL |
anthropic, deepseek, kimi, litellm |
ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, KIMI_API_KEY, LITELLM_API_KEY |
no |
claude_cli, codex_cli, opencode |
your logged-in subscription | no |
When nothing names an embedder, repowise takes the first one with a key set,
in the order gemini, openai, openrouter, ollama, edenai, and every model run
prints which embedder it uses and why. init reads each logged-in Claude Code,
Codex or OpenCode's auth status and offers it with its call count, time and
billing (plan quota, or per token for an API key), Claude Code first. A Codex
signed in through ChatGPT stays in the picker but is not offered. An agent
CLI is used only when you pick it or pass --provider. Keys, models and base URLs:
Config.
The post-commit hook, when installed, runs repowise update after every commit.
Other options:
repowise update # incremental catch-up, by hand
repowise watch # update continuously while you edit
repowise status # mode, counts, and how far behind HEADrepowise hook uninstall removes the post-commit hook. Webhooks and polling:
Auto-Sync. Several repositories as one:
Workspaces; init in a folder of repos opens the
same plan screen, where r chooses the repos, and --repos a,b picks them in
a script. A new git worktree seeds its index from
the main checkout: Worktrees.
| Goal | Read |
|---|---|
| Everyday workflows: before a PR, in CI, changing provider | User Guide |
| What each MCP tool answers | MCP Tools |
| Context that arrives without the agent asking | Hooks |
| Fewer tokens on test and build output | Distill |
| What the health score measures | Code Health |
| Gates and annotations on pull requests | CI |
| Every setting and environment variable | Config |
Start with repowise doctor. It checks the install, API keys, index drift,
store health and each wired agent's MCP entry.
repowise: command not found. Runuv tool update-shellorpipx ensurepath, open a new shell, and restart the agent host.- The agent does not see the tools. Restart the host or run
/mcp. Thenrepowise doctor --repair, orrepowise agents add --target=<id> --yes. - The dashboard does not open. Check that
node --versionis 20 or newer, then runrepowise serve --refresh-ui. - The agent answers from old code.
repowise statusshows drift andrepowise updatecatches up. - A run stopped part way.
repowise init --resumecontinues it.
More: Troubleshooting.