Skip to main content

Automated, AI-powered CLI snippet manager — auto-captures shell commands, describes them, and finds them by meaning.

Project description

Recall

Automated, AI-powered CLI snippet manager. Stop re-googling that one ffmpeg incantation — Recall captures your long shell commands, describes them in plain English, and lets you find them again by meaning, not exact wording.

License: MIT Python


What it does

  1. Auto-captures long / complex terminal commands via a shell hook (after you run them — zero manual effort).
  2. Describes them automatically using a local LLM (Ollama, free & offline) or, optionally, the Claude API.
  3. Stores everything in a single portable SQLite file you can copy or sync.
  4. Finds commands semantically — search "clean up docker space" and get back docker rm $(docker ps -aq) even if you never used those words.

Everything runs locally and free by default. No account, no cloud, no telemetry. The single recall.db file is the whole product — copy it to a new machine and you are done.

Free by default

The AI description step is pluggable:

Provider Cost Needs Default
ollama Free, offline Ollama installed ✅ yes
heuristic Free, offline nothing fallback
claude Paid (API) ANTHROPIC_API_KEY opt-in

If no provider is reachable, Recall falls back to a heuristic description and keeps working — the tool never breaks because an LLM is unavailable.


Install

Requires Python 3.11+.

From PyPI (simplest — works out of the box, zero config):

pip install recall-snippets          # or: uv tool install recall-snippets
recall version
recall install                       # wire up the shell hook

Zero-config: a fresh install needs no LLM, no API key, and no extra downloads. Capture, add, list, search (keyword), delete and redescribe all work immediately. Descriptions use the built-in heuristic until you install Ollama or set an API key; search uses SQLite FTS5 keyword matching until you add the semantic extra. Both are optional upgrades, not requirements — see Free by default.

One-step install from source (checks Python, installs uv if missing, installs the recall command globally, and wires the shell hook):

git clone https://github.com/Surge77/recall
cd recall
./scripts/install.sh

Manual / development install:

git clone https://github.com/Surge77/recall
cd recall
uv sync
uv run recall version

Optional extras (installed on demand):

uv sync --extra ai         # Ollama / Claude description providers
uv sync --extra semantic   # local semantic search (ChromaDB + embeddings)

# from a PyPI install:
pip install "recall-snippets[ai]"
pip install "recall-snippets[semantic]"

Usage

recall install                 # install the shell hook (zsh / bash)
# ... run a long command normally; it is captured silently ...
recall search "docker cleanup" # semantic search, copies top hit to clipboard
recall list --tag docker       # browse saved snippets
recall add "<cmd>" --tags net  # manual add (auto-describes if no --desc)
recall delete 12               # remove a snippet
recall redescribe              # regenerate AI descriptions (all, or one id)
recall sync --path ~/Dropbox/recall.db   # symlink the DB for cross-machine sync

Platform note: the auto-capture hook supports zsh, bash and PowerShell (7+, via PSReadLine). On Windows you can run Recall natively in PowerShell, or use WSL / Git Bash. All other commands work on every platform.


Configuration

A config.toml is created on first run (location is per-OS via platformdirs, e.g. %LOCALAPPDATA%\recall\config.toml on Windows). Relevant capture knobs:

[capture]
min_command_length = 40                                  # skip anything shorter
trivial_commands = ["cd", "ls", "pwd", "exit", "clear", "history"]  # never captured

A command is auto-captured only if it is min_command_length characters, its first word is not in trivial_commands, it is not a comment or a recall … call, and it is not already stored. Add your own noise commands (git, npm, clear, …) to trivial_commands to skip them.


Uninstall

uv tool uninstall recall-snippets

Then remove the hook block (marked # recall auto-capture hook) from your ~/.zshrc or ~/.bashrc. Your snippets live in a single data file; delete it only if you want to discard them:

# Linux:   ~/.local/share/recall/recall.db
# macOS:   ~/Library/Application Support/recall/recall.db
# Windows: %LOCALAPPDATA%\recall\recall.db

License

MIT

Project details


Download files

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

Source Distribution

recall_snippets-0.2.1.tar.gz (267.1 kB view details)

Uploaded Source

Built Distribution

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

recall_snippets-0.2.1-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file recall_snippets-0.2.1.tar.gz.

File metadata

  • Download URL: recall_snippets-0.2.1.tar.gz
  • Upload date:
  • Size: 267.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for recall_snippets-0.2.1.tar.gz
Algorithm Hash digest
SHA256 960f1164dfb9194ae0950fa966cd2fdab7dad2fd0b8f8393a3e57349ca41a15b
MD5 0ff6021e23237362da6cbb17d751b32f
BLAKE2b-256 717ebf4da4f57d79c84e4dee017bc6e70dacb4fe37bec531ed67ca34120a044b

See more details on using hashes here.

Provenance

The following attestation bundles were made for recall_snippets-0.2.1.tar.gz:

Publisher: publish.yml on Surge77/recall

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file recall_snippets-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for recall_snippets-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 283d2ae087025b8ed3476e3675ed61e3d8c97ec1df36ca519af72e04d62ba883
MD5 024eeead1caebdf9a31547b4778be203
BLAKE2b-256 1a35c96cc6c7af048e7915b41f7e876359e3b6f3f16e7933a4cdf0d8a03a460b

See more details on using hashes here.

Provenance

The following attestation bundles were made for recall_snippets-0.2.1-py3-none-any.whl:

Publisher: publish.yml on Surge77/recall

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page