A command line tool for chat conversations with LLMs
Project description
AlleyCat - A command line tool for AI text processing
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 codecli: Command-line interface implementation
alleycat_core: Core functionality and business logicconfig: Configuration managementllm: 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
-
Clone the repository:
git clone <repository-url> cd alleycat
-
Create and activate a virtual environment with uv:
uv venv source .venv/bin/activate # On Unix/macOS # or .venv\Scripts\activate # On Windows
-
Install the package in development mode:
uv pip install -e .
-
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"
# Interactive chat mode
alleycat --chat "Hello, how are you today?"
# or start with no initial prompt
alleycat --chat
# or talk to dr johnson
alleycat --chat -i prompts/johnson.txt
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--chat,-c: Enter interactive chat mode with continuous conversation
Environment variables:
ALLEYCAT_MODEL: Default model to useALLEYCAT_OPENAI_API_KEY: OpenAI API keyALLEYCAT_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
srclayout 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
Continuous Integration and Deployment
AlleyCat uses GitHub Actions for automated testing and deployment:
CI Workflow
A CI workflow runs on all pull requests and pushes to the main branch:
- Runs tests on Python 3.12
- Lints code with Ruff
- Type checks with mypy
- Verifies the package builds correctly
Release Process
AlleyCat uses semantic versioning with a 2-step manual-bump and automated-release process:
-
Manual Version Bump (before creating PR):
- Run
make bump-versionto increment patch version (default) - Or specify version type:
make bump-version BUMP=minor - Commit the version change with your other changes
- Create a PR to main
- Run
-
Automated Release (after PR is merged):
- When the PR is merged, a GitHub Action:
- Reads the current version from pyproject.toml
- Creates a Git tag for the version
- Builds and publishes the package to PyPI
- Creates a GitHub release with release notes
- When the PR is merged, a GitHub Action:
This approach ensures compliance with branch protection rules while maintaining a streamlined release process.
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
catandtac, 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)
- 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
Release history Release notifications | RSS feed
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 alleycat-0.2.0.tar.gz.
File metadata
- Download URL: alleycat-0.2.0.tar.gz
- Upload date:
- Size: 16.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afbd4024b74cdb3740b82fb92addd58d9c1ef1490faa96d3983588f6ea57f996
|
|
| MD5 |
c92f9e7c08a93209b1935530c7cbf75c
|
|
| BLAKE2b-256 |
671fbe3329d06cdbb5194c49c54c193510aeac1ed631a86a7d655a031287df39
|
File details
Details for the file alleycat-0.2.0-py3-none-any.whl.
File metadata
- Download URL: alleycat-0.2.0-py3-none-any.whl
- Upload date:
- Size: 19.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58ab9fc2680c6b2b91f0cdd54d7e00309fb056243a283ad723dc91710f8052d2
|
|
| MD5 |
230abe4014baea9df734caa75190f91f
|
|
| BLAKE2b-256 |
9d6c187864f3af22b9ab193d426f2d2bd9dce8830291cc6af688bc396b367917
|