Context-aware CLI framework for building interactive command-line tools with fuzzy search menus and modular command architecture. Works like Git, Poetry, or Terraform—install once, use everywhere.
Building CLI tools often feels like choosing between two extremes: a rigid, complex framework that takes days to learn, or a messy collection of scripts that are impossible to maintain.
Clingy was born to bridge that gap. It solves the "CLI fatigue" by providing a framework where automation meets interaction.
- Zero-Boilerplate Discovery: Just drop a file in your
commands/folder, and it's instantly available in your CLI. No manual registration, no complex routing. - Interactive by Default: Every command you write automatically gains a, fuzzy-searchable menu (powered by
fzf). You build the logic once; the framework provides the interface. - Submenu Architecture: Use our intuitive node-based system to build complex, nested menus that feel like professional-grade software.
- Context-Aware: Like Git, Clingy automatically detects your project root. Run it from any subdirectory, and it knows exactly where it is.
See the Interactive Documentation.
Navigate through the project documentation:
- Architecture — Internal design and execution flow.
- Creating Commands — Guide for building custom CLI commands.
- Basic Template — Simple CLI for prototyping.
- Konfig Template — Dotfiles and symlink manager.
- Serverless Template — AWS Lambda + Go workflow manager.
Clingy basic starter template
clingy-basic.mp4
Clingy konfigs template
clingy-konfig.mp4
# Using uv (recommended)
uv pip install clingy-cli
# Using pip
pip install clingy-cliRequired Dependency: fzf (fuzzy finder). Install via your package manager (brew, apt, pacman, etc.).
mkdir my-tool && cd my-tool
clingy initclingy # Interactive mode (fzf menu)
clingy greet --name User # CLI modeIf a template update is available, sync your project files while preserving your configuration:
clingy --update-template# Install in editable mode
pip install -e .
# Run tests
pytest tests/
# Format code
black . --line-length 100
isort . --profile black