5.7 KiB
finishte.sh
Command-line completion powered by local LLMs. Press Tab twice and get intelligent suggestions based on your terminal context.
Quick Start
One-Line Install (Recommended)
curl -sSL https://git.appmodel.nl/Tour/finish/raw/branch/main/docs/install.sh | bash
Manual Installation
git clone https://git.appmodel.nl/Tour/finish.git finish
cd finish
./finish.sh install
source ~/.bashrc
Other Installation Methods
See Installation below for package managers, Docker, and more options.
What It Does
finishte.sh enhances your terminal with context-aware command suggestions. It analyzes:
- Current directory and recent files
- Command history
- Environment variables
- Command help output
Then generates relevant completions using a local LLM.
Features
Local by Default Runs with LM-Studio on localhost. No external API calls, no data leaving your machine.
Context-Aware Understands what you're doing based on your environment and history.
Cached Stores recent queries locally for instant responses.
Flexible Switch between different models and providers easily.
Configuration
View current settings:
finishte config
Change the endpoint or model:
finishte config set endpoint http://192.168.1.100:1234/v1/chat/completions
finishte config set model your-model-name
Select a model interactively:
finishte model
Usage
Type a command and press Tab twice:
docker <TAB><TAB>
git commit <TAB><TAB>
ffmpeg <TAB><TAB>
Natural language works too:
# find large files <TAB><TAB>
# compress to zip <TAB><TAB>
Test it without executing:
finishte command "your command"
finishte command --dry-run "your command"
Installation
Quick Install (Linux/macOS)
The fastest way to get started:
curl -sSL https://git.appmodel.nl/Tour/finish/raw/branch/main/docs/install.sh | bash
source ~/.bashrc # or ~/.zshrc for zsh
finishte model
Package Managers
Homebrew (macOS)
brew tap appmodel/finish
brew install finish
finishte install
source ~/.bashrc
APT (Debian/Ubuntu)
Download the .deb package from releases:
sudo dpkg -i finish_*.deb
sudo apt-get install -f # Install dependencies
finishte install
source ~/.bashrc
Docker
Run finishte.sh in a container:
# Build the image
docker build -t finish .
# Run interactively
docker run -it finish
# Or use docker-compose
docker-compose up -d finish
docker-compose exec finish bash
Inside the container:
finishte install
source ~/.bashrc
finishte model # Configure your LLM endpoint
From Source
git clone https://git.appmodel.nl/Tour/finish.git finish
cd finish
chmod +x finish.sh
sudo ln -s $PWD/finish.sh /usr/local/bin/finish
finishte install
source ~/.bashrc
Requirements
- Bash 4.0+ or Zsh 5.0+
- curl
- jq
- bc
- bash-completion (recommended)
- LM-Studio or Ollama (for LLM inference)
Directory Structure
~/.finishte/
├── config # Configuration file
├── finishte.log # Usage log
└── cache/ # Cached completions
Commands
finishte install # Set up finishte
finishte remove # Uninstall
finishte config # Show/edit configuration
finishte model # Select model
finishte enable # Enable completions
finishte disable # Disable completions
finishte clear # Clear cache and logs
finishte usage # Show usage statistics
finishte system # Show system information
finishte --help # Show help
Providers
Currently supports:
- LM-Studio (default) - Local models via OpenAI-compatible API
- Ollama - Local models via Ollama API
Add custom providers by editing finishte.sh and adding entries to _finishte_modellist.
Development
Local Development
Clone and link for development:
git clone https://git.appmodel.nl/Tour/finish.git finish
cd finish
ln -s $PWD/finishte.sh $HOME/.local/bin/finish
finishte install
Running Tests
# Install BATS testing framework
sudo apt-get install bats # Ubuntu/Debian
# Run tests
./run_tests.sh
# Or use Docker
docker build -f Dockerfile.test -t finish:test .
docker run --rm finish:test
Building Packages
Debian Package
# Install build dependencies
sudo apt-get install debhelper devscripts
# Build the package
dpkg-buildpackage -us -uc -b
# Package will be created in parent directory
ls ../*.deb
Docker Images
# Production image
docker build -t finish:latest .
# Test image
docker build -f Dockerfile.test -t finish:test .
# Using docker-compose
docker-compose build
Distribution & Publishing
Creating a Release
- Update version in
finishte.sh(ACSH_VERSION) - Update version in
debian/changelog - Update version in
homebrew/finish.rb - Create and push a git tag:
git tag -a v0.5.0 -m "Release version 0.5.0"
git push origin v0.5.0
This triggers the GitHub Actions workflow which:
- Builds release artifacts
- Creates Debian packages
- Publishes Docker images to GitHub Container Registry
- Creates a GitHub release with downloadable assets
Homebrew Formula
After creating a release, update the Homebrew formula:
-
Calculate SHA256 of the release tarball:
curl -sL https://git.appmodel.nl/Tour/finish/archive/v0.5.0.tar.gz | sha256sum -
Update
homebrew/finish.rbwith the new SHA256 and version -
Submit to your Homebrew tap or the main Homebrew repository
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
BSD 2-Clause License. See LICENSE file.