how-tui
A terminal command assistant that uses LLMs to generate shell commands from natural language questions. Ask it how to do something and it will suggest commands for your specific OS and shell.
Features
- Ask natural-language questions and get relevant terminal command suggestions
- OS and shell aware — generates commands specific to your environment
- Pluggable LLM provider system — easily add new providers
- Authentication credentials stored securely in your OS keyring
- Structured output via Pydantic for reliable command parsing
- Selectable models for configured LLM providers
Installation
Install how-tui with uv:
uv tool install how-tui
Requirements
- Python >= 3.14
- An API key for a supported LLM provider
Usage
$ how
usage: how [-h] [--list-supported-providers] [--list-configured-providers] [--add-provider]
[--remove-provider] [--set-default-provider]
[prompt]
positional arguments:
prompt Question for the LLM
options:
-h, --help show this help message and exit
--list-supported-providers
List all supported LLM providers
--list-configured-providers
List your configured LLM providers
--add-provider Setup an LLM provider
--remove-provider Remove an LLM provider
--set-default-provider
Remove an LLM provider
First-Time Setup
how --add-provider
This will walk you through selecting an LLM provider and authenticating.
Ask a question
how "compress a folder"
how "find all files larger than 100MB"
how "list all running docker containers"
how "rename multiple files at once"
Roadmap
- Logs — Add configurable logging for debugging provider interactions, request/response payloads, and errors.
- Tests — Add a comprehensive test suite covering CLI behavior, provider integration, config management, and command parsing.
- Descriptions for each command — Display a short explanation alongside each suggested command so users understand what it does before selecting.
- More LLM Providers - Add support for more LLM providers.
Supported Providers
| Provider | Status |
|---|---|
| Google Gemini | Supported |
| Groq | Supported |
Adding a New LLM Provider
Drop a new Python file in src/how_tui/providers/ with a class that subclasses LLMProvider:
from abc import ABC, abstractmethod
from how_tui.models.command import CommandResponse
class LLMProvider(ABC):
@staticmethod
@abstractmethod
def generate_commands(
prompt: str,
model: str,
) -> CommandResponse: ...
@staticmethod
@abstractmethod
def authenticate(force: bool = False) -> None: ...
@staticmethod
@abstractmethod
def unauthenticate() -> None: ...
@staticmethod
@abstractmethod
def get_models() -> list[str]: ...
License
MIT
Release files for how-tui 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| how_tui-1.0.0.tar.gz | 6.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| how_tui-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.4 kB
Release files / how_tui-1.0.0.tar.gz
| Download URL | how_tui-1.0.0.tar.gz |
|---|---|
| Size | 6.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6844d7d8c2a80ecde940011838c831412fc533b3e545750a9544b105b52a1c86
|
|
BLAKE2b-256 checksum How to use checksums |
b54f4b22b10d2f6733a30824d98d87da98805cb4cd46bc0fda702edf62bf9a10
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / how_tui-1.0.0-py3-none-any.whl
| Download URL | how_tui-1.0.0-py3-none-any.whl |
|---|---|
| Size | 10.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cf054a5489c27c6ca36bb6e73beea4816b431b50ef1e8d2c0e2b976b699159d1
|
|
BLAKE2b-256 checksum How to use checksums |
45851bcf362410fd3c6408f84c1564b58a2f8ab768ae2aeead9e89c35d9e14c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|