specfill
An interactive TUI that fills the gaps in your project seed prompts.
You paste a long "seed" prompt you intend to hand to a coding agent (or load it from a file). An LLM agent researches the topic with model-native web search, finds the aspects that are underspecified enough that the agent would have to guess, and interviews you about them — plan-mode style, one question at a time, with concrete arrow-key options, multi-select where it makes sense, an "Other: enter text" escape hatch, and skipping. Questions come in adaptive rounds (in the language of your prompt) until the spec is complete, or until you press Finish now. The result is your original prompt, style and structure faithfully preserved, with only the newly acquired information woven in — and where an answer contradicts the original, the latest answer wins. Decisions you left unresolved stay exactly as ambiguous as you wrote them; nothing is invented.
Installation
Requires Python ≥ 3.12 on macOS or Linux. Install as a uv tool:
uv tool install specfill # from a checkout: uv tool install .
On first launch a configuration wizard collects your provider preset (OpenAI, OpenAI-compatible, Anthropic, or Google), model identifier, API key, and an optional custom base URL. The API key is stored in the system keyring, with a fallback to the config file (chmod 600) when no keyring backend is available.
Usage
specfill # paste your prompt into the editor
specfill my-prompt.md # or prefill it from a file
Flow:
- Paste your seed prompt, press
Ctrl+Sto analyze. The agent researches with web search before questioning (progress shown live); if your model has no native search, or search fails mid-session, it warns and continues. - Answer the questions — arrow keys +
Enter/Spaceto select, type into Other / details… for free-text answers.Ctrl+Nanswer ·Ctrl+Kskip ·Ctrl+Ffinish now. - Result streams into a scrollable preview.
ccopies it to the clipboard (with confirmation),rregenerates it from the same answers, andpquits and prints the revised prompt — and only that — to stdout.
Skipped questions are treated as "implementer's discretion" and never re-asked.
Configuration
Settings live in ~/.config/specfill/config.toml (honors $XDG_CONFIG_HOME)
and can be edited three ways: the in-app settings screen (Ctrl+O on the paste
screen), the CLI, or the file itself.
specfill config show # current configuration
specfill config path # config file location
specfill config set provider anthropic # provider | model | base-url | web-search
specfill config set model claude-opus-5
specfill config set-key # store the API key (hidden prompt)
Every setting can also be overridden per-invocation via SPECFILL_*
environment variables (e.g. SPECFILL_MODEL, SPECFILL_WEB_SEARCH=false).
API keys resolve from the keyring first, then the config file /
$SPECFILL_API_KEY, then the provider's conventional variable
(OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY).
LLM inference is provider-agnostic via Pydantic AI (default model: OpenAI GPT-5.6 Sol); the UI is Textual.
Development
uv sync
uv run pytest # offline tests (scripted models, no network)
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 specfill-0.1.0.tar.gz.
File metadata
- Download URL: specfill-0.1.0.tar.gz
- Upload date:
- Size: 95.2 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71fa218c4e5fe0fa743f2318779806d0feef4164435cdaaf476004bb0ce8b065
|
|
| MD5 |
51b33a4ba0ca3e8636dc50450d42dc2c
|
|
| BLAKE2b-256 |
52d380c11b6ddf2c25fcf4a76fb12ecd30247cf0b6f2101af110922bcb353b91
|
File details
Details for the file specfill-0.1.0-py3-none-any.whl.
File metadata
- Download URL: specfill-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bf212aa32a6a0016a5a9f89a4ea1ce986204b65d0c6e9f04387fbb6239cc489
|
|
| MD5 |
bd773d28b553ce4bccca5ae1b63c3a28
|
|
| BLAKE2b-256 |
c0ea2567db845ef5ae2b873a27ae607dc4c744dddd7dbbd49a9ad8264d65acb3
|