AI-powered recipe extraction. No ads, no stories, just ingredients and steps.
Project description
Uncluttered
Cooking, clarified.
AI-powered recipe extraction for the terminal. Type a search query, get clean ingredients and steps. No ads, no life stories, no scrolling.
Install
pip install uncluttered
By default, only the Gemini provider is included. To use other LLM providers:
pip install "uncluttered[openai]" # For OpenAI
pip install "uncluttered[anthropic]" # For Anthropic Claude
pip install "uncluttered[ollama]" # For Ollama (local)
pip install "uncluttered[all]" # All providers
Or install from source:
git clone https://github.com/brendaninnis/uncluttered-cli.git
cd uncluttered-cli
pip install -e .
Setup
You'll need API keys for a search provider and an LLM provider:
- LLM (AI extraction) — choose one:
- Gemini (default): https://aistudio.google.com/apikey
- OpenAI: https://platform.openai.com/api-keys
- Anthropic: https://console.anthropic.com/settings/keys
- Ollama: https://ollama.com (runs locally, no API key needed)
- Tavily (recipe search): https://tavily.com (free tier available)
Create a .env file in your working directory:
cp .env.example .env
Then use a text editor to update the file with your keys:
# Choose your LLM provider (default: gemini)
LLM_PROVIDER=gemini
# Only the key for your chosen provider is required:
GEMINI_API_KEY=your-gemini-key
# OPENAI_API_KEY=your-openai-key
# ANTHROPIC_API_KEY=your-anthropic-key
# For Ollama: no API key needed, just set LLM_PROVIDER=ollama and LLM_MODEL
# LLM_MODEL=llama3.1
TAVILY_API_KEY=your-tavily-key
Usage
Search for recipes
uncluttered search "chocolate chip cookies"
This searches for recipes, extracts them using AI, saves them locally, and displays the top results ranked by trust score.
Options:
--fetch N/-f N: Number of recipes to fetch (default: 5)--display N/-d N: Number of results to display (default: 3)
View a saved recipe
uncluttered show classic-chocolate-chip-cookies
List saved recipes
uncluttered list "chocolate chip cookies"
Delete recipes
# Delete a single recipe by slug
uncluttered delete classic-chocolate-chip-cookies
# Delete all recipes for a search term
uncluttered delete --search-term "chocolate chip cookies"
# Delete all saved recipes
uncluttered delete --all
Trust Scores
Each recipe gets an AI-assessed trust score (0-100) reflecting how reliably it would produce a good result. The LLM evaluates recipes holistically, considering measurement precision, instruction completeness, source credibility, and whether the techniques make culinary sense.
- 85-100: Exceptional — precise, well-tested, confidently recommended
- 65-84: Solid — clear and complete with minor gaps
- 45-64: Adequate — functional but vague in places
- Below 45: Unreliable — significant gaps or questionable techniques
Recipes are sorted by trust score, so the best ones appear first.
Data Storage
Recipes are saved locally in ~/.local/share/uncluttered/uncluttered.db (SQLite).
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uncluttered-0.1.2.tar.gz.
File metadata
- Download URL: uncluttered-0.1.2.tar.gz
- Upload date:
- Size: 19.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a38b64e2a8d830ab74651db3874e8a17b6e74b9b1585a9d749a5973fbde2e8e
|
|
| MD5 |
10e3c02a3107de36b70e8234e3433fdc
|
|
| BLAKE2b-256 |
611b7b495b6d88b2db1f5d33dcb77bd90b44bee9dd4bec3ffd438e2d85dac31d
|
Provenance
The following attestation bundles were made for uncluttered-0.1.2.tar.gz:
Publisher:
publish.yml on brendaninnis/uncluttered-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uncluttered-0.1.2.tar.gz -
Subject digest:
3a38b64e2a8d830ab74651db3874e8a17b6e74b9b1585a9d749a5973fbde2e8e - Sigstore transparency entry: 1005612174
- Sigstore integration time:
-
Permalink:
brendaninnis/uncluttered-cli@008cbc03f040ad35ea0b32151f122022b0a1cdbf -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/brendaninnis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@008cbc03f040ad35ea0b32151f122022b0a1cdbf -
Trigger Event:
release
-
Statement type:
File details
Details for the file uncluttered-0.1.2-py3-none-any.whl.
File metadata
- Download URL: uncluttered-0.1.2-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f1c08c828b4dc3d544febf5ac0966125349870f301eed0536a06c1f44c156cb
|
|
| MD5 |
6428978b270c75afe62a1bc55b7bddfd
|
|
| BLAKE2b-256 |
80d5080691c0e85c82d5c23938d4133d580a3cc17663816d778a0a5b8ec008eb
|
Provenance
The following attestation bundles were made for uncluttered-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on brendaninnis/uncluttered-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uncluttered-0.1.2-py3-none-any.whl -
Subject digest:
1f1c08c828b4dc3d544febf5ac0966125349870f301eed0536a06c1f44c156cb - Sigstore transparency entry: 1005612176
- Sigstore integration time:
-
Permalink:
brendaninnis/uncluttered-cli@008cbc03f040ad35ea0b32151f122022b0a1cdbf -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/brendaninnis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@008cbc03f040ad35ea0b32151f122022b0a1cdbf -
Trigger Event:
release
-
Statement type: