pi-fzfp

Fuzzy file picker for pi – fzf-powered @file autocomplete

Packages

Package details

extension

Install pi-fzfp from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-fzfp
Package
pi-fzfp
Version
2.5.0
Published
Jun 18, 2026
Downloads
not available
Author
burneikis
License
MIT
Types
extension
Size
14 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "./index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-fzfp

Fuzzy file picker for pi. Replaces the built-in @ file autocomplete with fzf-powered fuzzy matching.

The Problem

Pi's built-in @file autocomplete uses fd with a regex pattern and substring scoring. Typing @inxts won't find index.ts because the characters aren't contiguous.

The Fix

pi-fzfp pipes fd output through fzf --filter for true subsequence fuzzy matching, scored and sorted by fzf's battle-tested algorithm.

Requirements

  • fd must be installed and on PATH
  • fzf must be installed and on PATH

Install

pi install npm:pi-fzfp

pi-fzfp stacks an fzf-powered autocomplete provider on top of the built-in provider via ctx.ui.addAutocompleteProvider(). It does not install an editor component, so it works alongside any custom editor (pi-vim, etc.) with no extra configuration or coordination — just install both packages.

How It Works

Autocomplete

  1. Intercepts @ queries in the autocomplete provider
  2. Runs fd to list all project files (respects .gitignore, excludes .git)
  3. Pipes the file list through fzf --filter=<query> for fuzzy matching and scoring
  4. Returns all matches sorted by fzf's score (no artificial limit)
  5. Builds autocomplete suggestions with proper @ prefix and quoting
  6. Non-@ queries delegate to the underlying provider unchanged

Integration

pi-fzfp registers its provider with ctx.ui.addAutocompleteProvider((current) => ...) at session_start. pi passes the currently-active provider as current, and pi-fzfp wraps it: @ queries are matched with fzf, everything else delegates to current. Because this stacks on top of whatever provider is active (built-in or from a custom editor), no editor detection or event handshake is needed.

API

wrapWithFuzzyFiles(provider, basePath?)

Wraps any AutocompleteProvider with fzf-powered fuzzy file matching for @ queries. Returns the provider unchanged if fd or fzf is not available.

FzfFileAutocompleteProvider

The wrapper class, if you need more control.