Skip to main content

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
  • Selectable models for configured LLM providers

Installation

[!IMPORTANT] Headless environments may require a third party keyring backend. See keyring documentation here.

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] [--set-model] [--debug] [--provider PROVIDER]
           [--model MODEL]
           [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
                        Set a default LLM provider
  --set-model           Set a default model for a provider
  --debug               Enable debug level logging
  --provider PROVIDER   Specify an LLM provider
  --model MODEL         Specify a model

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"

Supported Providers

Provider Status
Google Gemini Supported
Groq Supported

Adding a New LLM Provider

Create a new Python file in src/how_tui/providers/ with a class that subclasses LLMProvider:

class LLMProvider(ABC):
    @staticmethod
    @abstractmethod
    def generate_commands(
        prompt: str,
        model: str,
    ) -> CommandResponse: ...

    """Send request to the LLM to generate commands based on the user question.

    Returns:
        CommandResponse: List of commands.

    Raises:
        GenerateCommandsError: When an issue occurs while generating commands.
    """

    @staticmethod
    @abstractmethod
    def authenticate(console: Console, force: bool = False) -> bool: ...

    """Authenticate the user with the LLM provider.
    
    Returns:
        bool: True for successful authentication, False otherwise.
    """

    @staticmethod
    @abstractmethod
    def unauthenticate() -> None: ...

    """Remove authentication for the LLM provider (ex. delete API key)."""

    @staticmethod
    @abstractmethod
    def get_models() -> list[str]: ...

    """
    Retrieve a list of models supported by the LLM provider.
    
    Returns: 
        list[str]: A list of models supported by the LLM provider.

    Raises:
        FetchModelsError: When an error occurs while fetching models.
    """

Development

This project is managed with uv. To download Python dependencies and create a virtual environment:

uv sync

Run how-tui:

uv run how-tui "Prompt here"

License

MIT

Release files for how-tui 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for how-tui 1.0.2
File Size Uploaded
how_tui-1.0.2.tar.gz 7.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for how-tui 1.0.2
File Interpreter ABI Platform
how_tui-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 19.9 kB

Release files / how_tui-1.0.2.tar.gz

Download URL how_tui-1.0.2.tar.gz
Size 7.9 kB
Tags Source
SHA-256 checksum
How to use checksums
33b7be42dc338748ed0f7ee0c06c42930e38bff144f63ac83e0fafad48e479c3
BLAKE2b-256 checksum
How to use checksums
9c98be049f12e66ed7ff15365aa6f0918ad83100dfb725512f383518cee2b885
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / how_tui-1.0.2-py3-none-any.whl

Download URL how_tui-1.0.2-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9a9dbadf772bee62a5f4de924db6cb5382276ddaa7a9303a7b4460a60b3fc0d3
BLAKE2b-256 checksum
How to use checksums
56ec08ad379c6ebbc0983fe3e04c380670bc4af3b2a8bfbfa976c9815406dc8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

1.0.3

2 release files

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release 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