A vector-powered CLI for semantic search over files.
Project description
Vexor is a vector-powered CLI for semantic file search. It supports configurable remote embedding models and ranks results by cosine similarity.
Usage
Vexor is designed to work seamlessly with both humans and AI coding assistants through the terminal, enabling semantic file search in autonomous agent workflows.
When you remember what a file does but forget its name or location, Vexor's semantic search finds it instantly—no grep patterns or directory traversal needed.
Install
Download from releases without python, or with:
pip install vexor # or use pipx, uv
The CLI entry point is vexor.
Configure
Set the Gemini API key once and reuse it everywhere:
vexor config --set-api-key "YOUR_KEY"
Optional defaults:
vexor config --set-model gemini-embedding-001
vexor config --set-batch-size 0 # 0 = single request
vexor config --set-provider gemini
vexor config --set-base-url https://proxy.example.com # optional proxy support for local LM Studio and similar tools; use --clear-base-url to reset
Provider defaults to gemini, so you only need to override it when switching to other backends (e.g., openai). Base URLs are optional and let you route requests through a custom proxy; run vexor config --clear-base-url to return to the official endpoint.
Environment/API keys can be supplied via vexor config --set-api-key, VEXOR_API_KEY, or provider-specific variables (GOOGLE_GENAI_API_KEY, OPENAI_API_KEY). Example OpenAI setup:
vexor config --set-provider openai
vexor config --set-model text-embedding-3-small
export OPENAI_API_KEY="sk-..." # or use vexor config --set-api-key
Configuration is stored in ~/.vexor/config.json.
Inspect or reset every cached index:
vexor config --show-index-all
vexor config --clear-index-all
Workflow
- Index the project root (includes every subdirectory):
vexor index --path ~/projects/demo --mode name --include-hidden
- Search from anywhere, pointing to the same path:
vexor search "api client config" --path ~/projects/demo --mode name --top 5
Output example:Vexor semantic file search results ────────────────────────────────── # Similarity File path Preview 1 0.923 ./src/config_loader.py config loader entrypoint 2 0.871 ./src/utils/config_parse.py parse config helpers 3 0.809 ./tests/test_config_loader.py tests for config loader
Tips:
- Keep one index per project root; subdirectories need separate indexes only if you explicitly run
vexor indexon them. - Toggle
--no-recursive(or-n) on bothindexandsearchwhen you only care about the current directory; recursive and non-recursive caches are stored separately. - Hidden files are included only if both
indexandsearchuse--include-hidden. - Re-running
vexor indexonly re-embeds files whose names changed (or were added/removed); if more than half the files differ, it automatically falls back to a full rebuild for consistency. - Specify the indexing mode with
--mode:name: embed only the file name (fastest, zero content reads).head: grab the first snippet of supported text/code/PDF/DOCX/PPTX files for lightweight semantic context.brief: summarize PRDs/high-frequency keywords (English/Chinese) in requirements documents enable quick location of key requirements.full: chunk the entire contents of supported text/code/PDF/DOCX/PPTX files into windows so long documents stay searchable end-to-end.
- Switch embedding providers (Gemini by default, OpenAI format supported) via
vexor config --set-provider PROVIDERand pick a matching embedding model.
Commands
| Command | Description |
|---|---|
vexor index --path PATH --mode MODE [--include-hidden] [--no-recursive] [--clear/--show] |
Scans PATH (recursively by default), embeds content according to MODE (name, head, or full), and writes a cache under ~/.vexor. |
vexor search QUERY --path PATH --mode MODE [--top K] [--include-hidden] [--no-recursive] |
Loads the cached embeddings for PATH (matching the chosen mode/recursion/hidden settings), shows matches for QUERY. |
vexor doctor |
Checks whether the vexor command is available on the current PATH. |
vexor update |
Fetches the latest release version and shows links to update via GitHub or PyPI. |
vexor config --set-api-key/--clear-api-key |
Manage the stored API key (Gemini by default). |
vexor config --set-model/--set-batch-size/--show |
Manage default model, batch size, and inspect current settings. |
vexor config --set-provider/--set-base-url/--clear-base-url |
Switch embedding providers and optionally override the remote base URL. |
vexor config --show-index-all/--clear-index-all |
Inspect or delete every cached index regardless of path/mode. |
Documentation
See the docs for more details.
Contributions, issues, and PRs are all welcome!
Star this repo if you find it helpful!
License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vexor-0.6.0.tar.gz.
File metadata
- Download URL: vexor-0.6.0.tar.gz
- Upload date:
- Size: 26.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4b92b33560dd3376243b34ef044e9c871eadca78ac36ceb1076312549b419a9
|
|
| MD5 |
afe611bec8bf475b9e323c7a0f1c1a1f
|
|
| BLAKE2b-256 |
7b1497caee0357191739a3d10717ed20f81f52df9307d881551d39b075992748
|
Provenance
The following attestation bundles were made for vexor-0.6.0.tar.gz:
Publisher:
publish.yml on scarletkc/vexor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vexor-0.6.0.tar.gz -
Subject digest:
c4b92b33560dd3376243b34ef044e9c871eadca78ac36ceb1076312549b419a9 - Sigstore transparency entry: 692352323
- Sigstore integration time:
-
Permalink:
scarletkc/vexor@cab2b829c7e7d294df18fc463907ad75b7c57f7c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/scarletkc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cab2b829c7e7d294df18fc463907ad75b7c57f7c -
Trigger Event:
push
-
Statement type:
File details
Details for the file vexor-0.6.0-py3-none-any.whl.
File metadata
- Download URL: vexor-0.6.0-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42001a2b5db0eb1ffb294cd9a7f4c636582d8d7c6938537d745f94d2729c8416
|
|
| MD5 |
c551bbf07f4cd872e22d1bd8587945f9
|
|
| BLAKE2b-256 |
8cb9d12bbd89d1d30b956e7225563be8dca42abd9f4fdfe938e560f388e181fb
|
Provenance
The following attestation bundles were made for vexor-0.6.0-py3-none-any.whl:
Publisher:
publish.yml on scarletkc/vexor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vexor-0.6.0-py3-none-any.whl -
Subject digest:
42001a2b5db0eb1ffb294cd9a7f4c636582d8d7c6938537d745f94d2729c8416 - Sigstore transparency entry: 692352325
- Sigstore integration time:
-
Permalink:
scarletkc/vexor@cab2b829c7e7d294df18fc463907ad75b7c57f7c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/scarletkc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cab2b829c7e7d294df18fc463907ad75b7c57f7c -
Trigger Event:
push
-
Statement type: