Skip to main content

AI-powered terminal assistant that generates shell commands from natural language.

Project description

tutr - Terminal Utility for Con(T)extual Responses

A stupid simple, AI-powered terminal assistant that generates commands from natural language.

What does it do?

Generates terminal commands from natural language queries.

> tutr git create and switch to a new branch called testing

  git checkout -b testing
> tutr go back to the previous directory

  cd -

Installation

Requires Python 3.10+.

pipx install tutr

Or run it without installing:

uvx tutr

For development from source:

git clone https://github.com/spi/tutr.git
cd tutr
uv sync

Setup

On first run, tutr launches an interactive setup to select your provider, model, and API key:

$ tutr git "show recent commits"

Welcome to tutr! Let's get you set up.

Select your LLM provider:
  1. Gemini
  2. Anthropic
  3. OpenAI
  4. Ollama (local, no API key needed)

  Enter choice (1-4): 1

Enter your Gemini API key:
  API key:

Select a model:
  1. Gemini 3 Flash (recommended)
  2. Gemini 2.0 Flash
  3. Gemini 2.5 Pro

  Enter choice (1-3): 1

Configuration saved to ~/.tutr/config.json

Setup is skipped if ~/.tutr/config.json already exists or provider API key environment variables are set.

Usage

tutr <command> <what you want to do>

Auto-start in Every Terminal

tutr is an interactive shell wrapper. To launch it automatically for every new interactive terminal, add this to your shell rc file.

Bash (~/.bashrc)

if [[ $- == *i* ]] && [[ -z "${TUTR_AUTOSTARTED:-}" ]] && [[ -z "${TUTR_SKIP_AUTOSTART:-}" ]]; then
  export TUTR_AUTOSTARTED=1
  exec tutr
fi

Zsh (~/.zshrc)

if [[ -o interactive ]] && [[ -z "${TUTR_AUTOSTARTED:-}" ]] && [[ -z "${TUTR_SKIP_AUTOSTART:-}" ]]; then
  export TUTR_AUTOSTARTED=1
  exec tutr
fi

Notes:

  • TUTR_AUTOSTARTED prevents recursion when tutr sources your normal rc file.
  • Set TUTR_SKIP_AUTOSTART=1 before opening a terminal to temporarily bypass autostart.
  • Active wrapped shells show a prompt prefix (default [tutr]) and set TUTR_ACTIVE=1.
  • Customize the prefix with TUTR_PROMPT_PREFIX (example: export TUTR_PROMPT_PREFIX="[ai]").
  • Use tutr-cli ... if you want the original one-shot command generator behavior.

Examples

tutr git "create and switch to a new branch called testing"
tutr sed "replace all instances of 'foo' with 'bar' in myfile.txt"
tutr curl "http://example.com and display all request headers"

Arguments

Argument Description
command The terminal command to get help with (e.g., git, sed, curl)
query What you want to do, in natural language

Options

Flag Description
-h, --help Show help message
-V, --version Show version
-d, --debug Enable debug logging
-e, --explain Show LLM explanation and source for the generated command

Configuration

Config is stored in ~/.tutr/config.json. Environment variables override the config file.

Environment Variable Description Default
TUTR_MODEL LLM model to use (litellm format) gemini/gemini-3-flash-preview
GEMINI_API_KEY Gemini API key
ANTHROPIC_API_KEY Anthropic API key
OPENAI_API_KEY OpenAI API key

You can also enable command explanations persistently in ~/.tutr/config.json:

{
  "show_explanation": true
}

To re-run setup, delete the config file:

rm ~/.tutr/config.json

Development

Run all quality checks:

uv run poe check

Run tests only:

uv run pytest

Lint and format:

uv run ruff check .
uv run ruff format .

Publishing to PyPI

Build and validate distribution artifacts:

uv sync
uv run poe dist

Upload to TestPyPI first:

export TWINE_USERNAME=__token__
export TWINE_PASSWORD=<testpypi-api-token>
uv run poe publish_testpypi

Then upload to PyPI:

export TWINE_USERNAME=__token__
export TWINE_PASSWORD=<pypi-api-token>
uv run poe publish_pypi

You can create API tokens in your account settings:

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

tutr-0.1.4.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

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

tutr-0.1.4-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file tutr-0.1.4.tar.gz.

File metadata

  • Download URL: tutr-0.1.4.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tutr-0.1.4.tar.gz
Algorithm Hash digest
SHA256 b72c8348625b9e3242f986ed817dd92cacc6e84f70157a6d71af6ffb140af3c6
MD5 6fa52c9ba66a86681f76d21e0459dda3
BLAKE2b-256 ffc9204862f9d33a1858cf47e594c307374ffe13193570a8b8ee389f6633c2f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutr-0.1.4.tar.gz:

Publisher: python-publish.yml on spi3/tutr

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

File details

Details for the file tutr-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: tutr-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tutr-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 caf3cda431d9799d8fdd09d4bdeba683bab6e05ee4e71153c9ec893a2cad910b
MD5 884df49f7729d336028ea09912444cc8
BLAKE2b-256 60e9882af4305d1c424bb8f48698cb2adc117b6d969679e9269d2979f4769c7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutr-0.1.4-py3-none-any.whl:

Publisher: python-publish.yml on spi3/tutr

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