A desktop file indexer and organizer with AI-powered semantic search and Git integration
Built with Tauri 2.0 + React + Rust | by NautiDog
- Recursively scan directories to build a searchable file index
- Filter by file types (Markdown, Python, JavaScript, Documents, etc.)
- Fast Rust-powered indexing with progress tracking
- Persistent index storage for quick reload
- Generate semantic embeddings for all your files using Azure OpenAI
- Smart caching - only re-embeds files that have changed
- Uses
text-embedding-3-smallmodel (5x cheaper than ada-002) - Batch processing with progress indicators
- Automatically organize files into semantic clusters
- Pure Rust k-means implementation with cosine distance
- Discover related files you didn't know were connected
- Configurable cluster count
- Combine keyword and semantic search
- Adjustable semantic weight slider
- Ranked results with relevance scores
- File previews in search results
- See files organized by modification date
- Configurable time range (7/14/30/90 days)
- Quick access to recently changed files
Your friendly git companion for ADHD developers!
- Urgency Levels: Chill → Nudge → Warning → Panic based on repo state
- Smart Commit Suggestions: Groups files by directory/extension with auto-generated messages
- Duplicate Detection: Finds identical files by content hash
- Copy Pattern Detection: Flags
_copy,_backup,_oldfile naming - Days Since Commit: Gentle reminders when it's been too long
- Quick Actions:
- WIP commit all changes
- Create feature branch
- Initialize new repo
- Node.js v18+
- Rust (latest stable)
- Azure OpenAI account (for embeddings)
# Clone the repository
git clone https://github.com/AceOmni/wayfinder.git
cd wayfinder
# Install dependencies
npm install
# Run in development mode
npm run tauri dev
# Build for production
npm run tauri buildWayfinder now defaults to local endpoints/models so you can run without retyping:
Terminal 1 (chat LLM):
koboldcpp.exe --model qwen2.5-coder-1.5b-instruct-q4_k_m.gguf --port 5001 --gpulayers 99
API base: http://localhost:5001/v1
Terminal 2 (embeddings):
koboldcpp.exe --model embeddinggemma-300m-f16.gguf --port 5002 --gpulayers 99 --embeddings
API base: http://localhost:5002/v1
In-app defaults: Embeddings provider is set to llama with model embeddinggemma-300m-f16 at http://localhost:5002; Git Clippy chat uses qwen2.5-coder-1.5b-instruct-q4_k_m.gguf at http://localhost:5001.
-
Copy the template config:
cp azure_config.template.json .wayfinder_index/azure_config.json
-
Edit with your Azure credentials:
{ "endpoint": "https://YOUR-RESOURCE.openai.azure.com", "api_key": "YOUR_API_KEY_HERE", "deployment_name": "text-embedding-3-small", "api_version": "2024-02-01" } -
Or configure directly in the app's Embeddings section.
- Click Scan in the sidebar
- Select file types to include
- Enter or browse for a folder path
- Click Start Scan
- Click Embeddings in the sidebar
- Configure Azure OpenAI if not already done
- Click Generate Embeddings
- Wait for processing (cached for future runs)
- Click Clusters in the sidebar
- Optionally set the number of clusters
- Click Create Clusters
- Explore auto-organized file groups
- Click Search in the sidebar
- Enter your search query
- Adjust the semantic weight slider
- View ranked results with previews
- Scan a folder that contains a git repository
- Click Git Clippy in the sidebar
- View suggestions and take actions
- Dismiss suggestions you don't need
| Component | Technology |
|---|---|
| Desktop Framework | Tauri 2.0 |
| Frontend | React 18 + TypeScript |
| Styling | CSS with CSS Variables |
| Backend | Rust |
| Embeddings | Azure OpenAI API |
| Clustering | K-means (pure Rust) |
| File Scanning | walkdir crate |
| HTTP Client | reqwest |
wayfinder/
├── src/ # React frontend
│ ├── components/ # React components
│ ├── services/ # Tauri API wrappers
│ ├── styles/ # CSS stylesheets
│ └── types.ts # TypeScript types
├── src-tauri/ # Rust backend
│ └── src/
│ ├── commands.rs # Tauri command handlers
│ ├── git_assistant.rs # Git Clippy logic
│ ├── main.rs # App entry point
│ └── lib.rs # Module exports
├── azure_config.template.json
└── README.md
- Azure API keys are stored locally in
.wayfinder_index/azure_config.json - This file is gitignored and never committed
- Keys are only used for Azure OpenAI API calls
- No data is sent to external servers except embeddings
MIT License - feel free to use, modify, and distribute.
Contributions welcome! Please open an issue or PR.
Made with ❤️ by NautiDog