# pi-knowledge-search
**Repository Path**: ai-fork/pi-knowledge-search
## Basic Information
- **Project Name**: pi-knowledge-search
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-24
- **Last Updated**: 2026-04-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# pi-knowledge-search
Semantic search over local files for [pi](https://github.com/badlogic/pi). Indexes directories of text/markdown files using vector embeddings, watches for changes in real-time, and exposes a `knowledge_search` tool the LLM can call.
## Install
**Recommended:** Install [pi-total-recall](https://github.com/samfoy/pi-total-recall) to get the complete context stack — persistent memory, session history search, and local knowledge search in one package:
```bash
pi install pi-total-recall
```
Or install pi-knowledge-search standalone:
```bash
pi install git:github.com/samfoy/pi-knowledge-search
```
Or try without installing:
```bash
pi -e git:github.com/samfoy/pi-knowledge-search
```
## Setup
Run the interactive setup command inside pi:
```
/knowledge-search-setup
```
This walks you through:
1. **Directories** to index (comma-separated paths)
2. **File extensions** to include (default: `.md, .txt`)
3. **Directories to exclude** (default: `node_modules, .git, .obsidian, .trash`)
4. **Embedding provider** — OpenAI, AWS Bedrock, or local Ollama
Config is saved to `~/.pi/knowledge-search.json`. Run `/reload` to activate.
### Config file
You can also edit the config file directly:
```json
{
"dirs": ["~/notes", "~/docs"],
"fileExtensions": [".md", ".txt"],
"excludeDirs": ["node_modules", ".git", ".obsidian", ".trash"],
"provider": {
"type": "openai",
"model": "text-embedding-3-small"
}
}
```
The API key for OpenAI can be set in the config file (`"apiKey": "sk-..."`) or via the `OPENAI_API_KEY` environment variable.
Bedrock config
```json
{
"dirs": ["~/vault"],
"provider": {
"type": "bedrock",
"profile": "my-aws-profile",
"region": "us-west-2",
"model": "amazon.titan-embed-text-v2:0"
}
}
```
Requires the AWS SDK and valid credentials for the specified profile.
Ollama config (free, local)
```json
{
"dirs": ["~/notes"],
"provider": {
"type": "ollama",
"url": "http://localhost:11434",
"model": "nomic-embed-text"
}
}
```
Requires [Ollama](https://ollama.ai) running locally:
```bash
ollama serve
ollama pull nomic-embed-text
```
### Bedrock Knowledge Bases
You can add [Amazon Bedrock Knowledge Bases](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) as additional search sources. These are managed RAG services — Amazon handles chunking, embedding, and vector storage. pi-knowledge-search queries them at search time and merges results with local file results.
Add via command:
```
/knowledge-add-kb
```
Or add directly to the config file:
```json
{
"dirs": ["~/notes"],
"provider": { "type": "openai" },
"knowledgeBases": [
{
"id": "XXXXXXXXXX",
"region": "us-east-1",
"profile": "default",
"label": "Team docs"
}
]
}
```
You can use Knowledge Bases alongside local file indexing, or on their own (omit `dirs` and `provider` for KB-only mode).
KB-only config:
```json
{
"knowledgeBases": [
{
"id": "XXXXXXXXXX",
"region": "us-east-1",
"profile": "my-work-profile",
"label": "Engineering wiki"
}
]
}
```
Requires the AWS SDK and valid credentials with `bedrock:Retrieve` permissions.
### Environment variable overrides
Every config field can be overridden via environment variables. This is useful for CI or when you want different settings per shell session. See [env-vars.md](docs/env-vars.md) for the full list.
## How it works
1. On session start, loads the index from disk and incrementally syncs — only re-embeds new or modified files
2. Starts a file watcher for real-time updates (debounced, 2s)
3. Registers a `knowledge_search` tool the LLM calls with natural language queries
4. Returns ranked results with file paths, relevance scores, and content excerpts
The index is stored at `~/.pi/knowledge-search/index.json`.
## Commands
| Command | Description |
|---------|-------------|
| `/knowledge-search-setup` | Interactive setup wizard |
| `/knowledge-add-kb` | Add a Bedrock Knowledge Base as a search source |
| `/knowledge-reindex` | Force a full re-index |
## Performance
Typical numbers for ~500 markdown files (~20MB):
| Operation | Time |
|-----------|------|
| Full index build | ~7s |
| Incremental sync (no changes) | ~12ms |
| File re-embed (watcher) | ~200ms |
| Search query | ~250ms |
| Index file size | ~5MB |
## License
MIT