Skip to main content

promptfinder

Fuzzy and semantic finder for the prompts you typed into Codex, Claude Code and Cursor — and the answers you got back. One local SQLite index, a Textual TUI, cloud embeddings only when you turn them on.

uv tool install .          # or: uv tool install promptfinder (once published)
promptfinder               # opens the TUI; the first launch runs the onboarding wizard

What it does

  • Discovers coding-agent sessions on macOS and Linux: ~/.codex/sessions (+ archived_sessions), ~/.claude/projects, Cursor's globalStorage/state.vscdb.
  • Indexes human prompts (inputs) and, optionally, the final model response of every turn (outputs). Tool calls, tool results, reasoning and system/meta messages are never indexed.
  • Groups sessions by project = git root of the session's working directory; inside a repo you can flip between current project and global.
  • Fuzzy search (fzf-style, no external binary) over message bodies and metadata; semantic search through Gemini Embedding 2 (default) or another provider, stored in sqlite-vec.
  • Keeps indexed copies when a source disappears — they are shown with an archived badge and stay searchable.
  • Re-indexes on startup and, optionally, through a background watcher installed as a launchd LaunchAgent / systemd user unit.

Commands

promptfinder                       TUI (fuzzy by default; ctrl+y copy, ctrl+t semantic, ctrl+g scope, ctrl+a agents, ctrl+r roles)
promptfinder --select              print the chosen message on Enter (e.g. codex "$(promptfinder --select)")
promptfinder onboard               re-run the wizard

promptfinder index [--full] [--embed] [--yes] [--agent codex] [--json]
promptfinder search "landing page" [--mode fuzzy|semantic] [--current|--global] [--project PATH]
                                   [--agent codex,…] [--role input|output|both] [--since 2026-01-01]
                                   [--limit 10] [--no-archived] [--format text|json|bodies|full]
promptfinder copy "landing page"   copy the best hit to the clipboard (--pick 2 for the second, same filters as search)
promptfinder copy --id 1234        copy a message by id (ids come from search --format json)
promptfinder copy                  interactive picker: Enter copies the highlighted prompt and exits
promptfinder status [--json]       counts, embedding coverage, daemon state
promptfinder doctor [--online]     discovery, adapter sniff, sqlite-vec, keys, service, diagnostics
promptfinder config show|path|set KEY VALUE|unset KEY|edit
promptfinder purge --embeddings [--index NAME] | --all
promptfinder rebuild               re-index everything (cached vectors are re-used, nothing is re-embedded)
promptfinder daemon run|install|uninstall|status|logs

Configuration

~/.config/promptfinder/config.toml (also on macOS; $XDG_CONFIG_HOME is honoured). API keys are stored in plaintext by design — the file is created with mode 0600. Environment variables (GOOGLE_API_KEY/GEMINI_API_KEY, OPENAI_API_KEY, OPENROUTER_API_KEY) are used as a fallback for interactive use; the background daemon only sees the config file.

[indexing]
agents = ["codex", "claude_code", "cursor"]
roles = ["input"]                 # add "output" to index final responses

[search]
default_mode = "fuzzy"            # fuzzy | semantic
default_scope = "current"         # current | global (current applies only inside a git repo)

[embeddings]
enabled = true
active_index = "google-gemini-embedding-2-3072"
[[embeddings.indexes]]
name = "google-gemini-embedding-2-3072"
provider = "google"
model = "gemini-embedding-2"
dimensions = 3072

[providers.google]
api_key = "…"

Changing the embedding provider, model or dimensions creates a new index; the active one is selected with embeddings.active_index. Nothing is sent to a provider until the backfill has been confirmed once (backfill_confirmed_at), after which the watcher embeds new messages automatically.

Data lives in ~/.local/share/promptfinder/index.sqlite; daemon logs in ~/.local/state/promptfinder/.

Development

uv sync --all-groups
uv run promptfinder doctor
uv run pytest
uv run ruff check src tests

See docs/prompts/plan.md for the design and the verified on-disk formats of the three agents.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

promptfinder-0.1.0.tar.gz (60.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

promptfinder-0.1.0-py3-none-any.whl (78.8 kB view details)

Uploaded Python 3

File details

Details for the file promptfinder-0.1.0.tar.gz.

File metadata

  • Download URL: promptfinder-0.1.0.tar.gz
  • Upload date:
  • Size: 60.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for promptfinder-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5d979142b822f4d3126ed534c554472add853707597e942ec66999aa12a26ac2
MD5 77b05cb1492c382da35be01f9eaa2dec
BLAKE2b-256 aaf1bbe80576b52c91aab317b4df9a4805e1a45cde81492ca73ccd5798aec779

See more details on using hashes here.

File details

Details for the file promptfinder-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: promptfinder-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 78.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for promptfinder-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52a0d2e5e0722e80ad06263d26e11580f94c6705250c2608bc9ae3e0b77f4a3c
MD5 0be4aff4979b0a5aa5f0d805af922d5c
BLAKE2b-256 e40687c04d4d39dc94845743f4fdcd86de03159c61f112c6c4a9d3450a9672b5

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page