DEV Community

Cover image for Building kdex: How I Built a Complete CLI Tool Using GitHub Copilot CLI
Adam
Adam

Posted on

Building kdex: How I Built a Complete CLI Tool Using GitHub Copilot CLI

GitHub Copilot CLI Challenge Submission

This is a submission for the GitHub Copilot CLI Challenge

What I Built

I built kdex—a full-featured Rust CLI for indexing code, docs, and notes for AI-powered search—entirely with GitHub Copilot CLI. From initial brainstorming to a production-ready tool published on crates.io with CI/CD, landing page, and MCP server integration. Here's how it went.

As developers, we accumulate knowledge everywhere: code across dozens of repositories, notes in Obsidian vaults, documentation scattered in wikis. When working with AI assistants, they have no idea what's in your files—you end up copy-pasting context manually.

I wanted to build a tool that solves this. A local-first CLI that indexes everything and lets AI assistants search it via the Model Context Protocol (MCP).

Demo

kdex in action

Website: https://urbanisierung.github.io/kdex/
Github: https://github.com/urbanisierung/kdex

My Experience with GitHub Copilot CLI

The Approach: Brainstorm → Roadmap → Execute

Phase 1: Requirements Brainstorming

I started by having a conversation with Copilot CLI about what I wanted to build. We discussed:

  • Target users (developers, knowledge workers, AI-assisted workflows)
  • Core features (local indexing, full-text search, MCP integration)
  • Tech stack decisions (Rust, SQLite with FTS5, ratatui for TUI)
  • UX considerations (dual-mode CLI: interactive TUI + traditional commands)

The result was a comprehensive .github/copilot-instructions.md that established all the ground rules: coding standards, documentation requirements, folder structure, and project conventions.

Phase 2: Roadmap Generation

Next, I asked Copilot CLI to create a detailed implementation roadmap. It generated a 73KB doc/roadmap.md with:

  • 14 implementation phases
  • Each phase broken into parts with specific action items
  • Code examples, SQL schemas, and module structures
  • User journeys for different personas
  • UX specifications including edge cases

The roadmap became the source of truth. As features were completed, Copilot CLI would check off items and move to the next.

Phase 3: Implementation

With a clear roadmap, I gave a simple instruction: "Implement the next phase."

And it did. Phase after phase.


The Implementation Journey

Foundation (Day 1)

  • Scaffolded Rust project with proper structure
  • Implemented configuration system with OS-aware paths
  • Created SQLite database layer with FTS5 full-text search
  • Built the indexer with binary file detection and .gitignore support
  • Developed CLI commands: index, search, list, update, remove

TUI & Polish (Day 2)

  • Built full-screen interactive terminal UI with ratatui
  • Added real-time search, file preview, repository management
  • Implemented loading states, confirmation dialogs, welcome screen
  • Fixed clippy warnings (the project maintains a zero-warning policy)

MCP Server (Day 3)

  • Integrated the rmcp crate for MCP protocol
  • Implemented 4 tools: search, list_repos, get_file, get_context
  • Created integration documentation for GitHub Copilot, Claude, and Gemini

Vector Search (Day 4)

  • Added semantic search using fastembed (MiniLM embeddings)
  • Implemented hybrid search with Reciprocal Rank Fusion
  • Built text chunking for large files

Remote Repositories (Day 5)

  • Added ability to index GitHub repos by URL
  • Implemented background sync with auto-pull
  • Added SSH and token authentication for private repos
  • Built config export/import for machine migration

CI/CD & Release (Day 6)

  • Set up GitHub Actions for testing on Linux/macOS/Windows
  • Created release workflow with cross-platform binary builds
  • Configured crates.io publishing with Trusted Publishing (OIDC)
  • Built install script for curl-based installation

Marketing & Documentation (Day 7)

  • Rewrote README with engaging marketing content
  • Created landing page for GitHub Pages
  • Documented Ollama integration for local LLMs
  • Added add-mcp and self-update commands

Top comments (0)