Skip to main content

A command line tool for chat conversations with LLMs

Project description

AlleyCat - A command line tool for AI text processing

AlleyCat Alleycat is a command-line text processing utility that transforms input text using Large Language Models (LLMs). Like traditional Unix tools such as awk or sed, alleycat reads from standard input or command arguments and writes transformed text to standard output. Instead of using pattern matching or scripted transformations, alleycat leverages AI to interpret and modify text based on natural language instructions.

For comprehensive documentation, see Alleycat Guide.

Warning: very new, not all tests passing, no build or deployment etc.

Project Structure

The project follows a modern Python package structure with a src layout:

alleycat/
├── src/
│   ├── alleycat_apps/      # Application code
│   │   └── cli/           # CLI interface
│   └── alleycat_core/     # Core functionality
├── tests/                 # Test files
├── pyproject.toml         # Project configuration
└── setup.py              # Development installation

Package Organization

  • alleycat_apps: Contains application-specific code
    • cli: Command-line interface implementation
  • alleycat_core: Core functionality and business logic
    • config: Configuration management
    • llm: LLM integration and API handling

Installation

AlleyCat can be installed in several ways depending on your needs:

From PyPI (Recommended)

Install using pip with UV:

uv pip install alleycat

Or using pipx for isolated CLI tool installation (recommended for command-line tools):

pipx install alleycat

From Source

Install directly from the GitHub repository:

uv pip install git+https://github.com/avowkind/alleycat.git

Local Installation

If you've cloned the repository or downloaded the source:

cd alleycat
uv pip install .

After installation, you can run AlleyCat from anywhere with:

alleycat --help

Development Setup

This project uses uv as the package manager for faster and more reliable Python package management.

Prerequisites

  • Python 3.12 or higher
  • uv package manager

Installation

  1. Clone the repository:

    git clone <repository-url>
    cd alleycat
    
  2. Create and activate a virtual environment with uv:

    uv venv
    source .venv/bin/activate  # On Unix/macOS
    # or
    .venv\Scripts\activate     # On Windows
    
  3. Install the package in development mode:

    uv pip install -e .
    
  4. Install development dependencies:

    uv pip install -e ".[dev]"
    

Usage

The CLI tool can be run using uv run to ensure the correct Python environment but when running in the deployed folder you can also just use alleycat as it is in the pyproject.toml commands:

# Show help
uv run alleycat --help

# Basic usage
uv run alleycat "Your prompt here"

# With options
uv run alleycat --format markdown --temperature 0.7 "Your prompt here"

Command Line Options

# Basic usage
alleycat "Your prompt here"

# Pipe input
echo "Your prompt" | alleycat

# With formatting options
alleycat --format markdown --temperature 0.7 "Your prompt here"

# Using system instructions
alleycat -i "You are a helpful assistant" "Your prompt here"
alleycat -i prompts/custom-style.txt "Your prompt here"

Available options:

  • --model, -m: Choose LLM model (default: gpt-4o-mini, env: ALLEYCAT_MODEL)
  • --temperature, -t: Sampling temperature 0.0-2.0 (default: 0.7)
  • --format, -f: Output format - text, markdown, or json (default: text)
  • --api-key: OpenAI API key (env: ALLEYCAT_OPENAI_API_KEY)
  • --instructions, -i: System instructions (string or file path)
  • --verbose, -v: Enable verbose debug output
  • --stream, -s: Stream the response as it's generated

Environment variables:

  • ALLEYCAT_MODEL: Default model to use
  • ALLEYCAT_OPENAI_API_KEY: OpenAI API key
  • ALLEYCAT_TEMPERATURE: Default temperature setting

Package Management

The project uses setuptools for package management, configured in pyproject.toml:

[build-system]
requires = ["setuptools>=61.0.0", "wheel"]
build-backend = "setuptools.build_meta"

[tool.setuptools]
package-dir = {"" = "src"}
packages = ["alleycat_apps", "alleycat_core"]

This configuration:

  • Uses the src layout for better package isolation
  • Explicitly declares packages to include
  • Supports development installation with pip install -e .

Development Tools

  • Testing: pytest with async support

    uv run pytest
    
  • Linting: ruff

    uv run ruff check .
    
  • Type Checking: mypy

    uv run mypy src
    

License

MIT License - see LICENSE file for details.

Why "Alleycat"?

The name "Alleycat" draws inspiration from Unix tradition and the tool's nature:

  • Like the classic Unix tools cat and tac, it processes text through standard I/O
  • Like an alley cat, it's agile and adaptable, transforming text in various ways
  • It prowls through your text, hunting for meaning and responding with feline grace

Future Features - Coming Soon (perhaps)

  • Interactive mode for continuous conversations
  • Support for multiple LLM providers beyond OpenAI
  • Chat history management with local storage
  • Custom prompt templates
  • Streaming responses
  • Context window management
  • Model parameter presets
  • Command completion for shells

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

alleycat-0.1.2.tar.gz (32.3 kB view details)

Uploaded Source

Built Distribution

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

alleycat-0.1.2-py3-none-any.whl (42.2 kB view details)

Uploaded Python 3

File details

Details for the file alleycat-0.1.2.tar.gz.

File metadata

  • Download URL: alleycat-0.1.2.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for alleycat-0.1.2.tar.gz
Algorithm Hash digest
SHA256 09fb5ad0c1cac7af98dfd8bdeec716630f35329ccc05bebb88bb55eb53ce9c00
MD5 1f8a833722010e0f53efac422f6d1e19
BLAKE2b-256 de38ff78be0fcbe0f6ee119452f9f2ca1ce2b910e630d69762ad764e58f49bd0

See more details on using hashes here.

File details

Details for the file alleycat-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: alleycat-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 42.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for alleycat-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2a513b55bda6222631e6615a9c5717541fe0e4c5e1499861e7917a09e0616f25
MD5 6c079fd39291e4823d3dd33e21e453b3
BLAKE2b-256 2ba85aca3cf72a16b3488ad0f851382adc1bb402247d880bbb56c963987ece2a

See more details on using hashes here.

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