Introducing quiCkLI
quiCkLI is a small, educational Python framework for building command-line applications. It keeps registration, parsing, validation, dispatch, and help visible so developers can learn how CLI tools fit together.
Sven Patrick Meier builds quiCkLI as a small, transparent framework for learning CLI design and Python software architecture.
View all authorsquiCkLI is a small, educational Python framework for building command-line applications. It keeps registration, parsing, validation, dispatch, and help visible so developers can learn how CLI tools fit together.
If you have ever wanted to build a small Python command-line tool but found larger
frameworks overwhelming, quiCkLI was designed for you. It is a minimal framework
that keeps the essentials visible so you can learn - and build - without unnecessary
complexity.
In this first article of the Getting Started with quiCkLI series you will build a
greeting tool with exactly three concepts: Application, Argument, and Option.
There are already excellent Python CLI frameworks. argparse is in the standard library.
click is polished and widely used. typer generates interfaces from type annotations.
If these exist, why build another one?
This post answers that question honestly. It is the first in a series about the
development of quiCkLI - what it is, why it exists, and where it is going.
Designing a CLI is more than mapping strings to functions. You need to decide how users discover commands, provide values, recover from mistakes, and compose tools in scripts.
In Part 1 you built a greeting tool with a single argument and a flag. In this article you will add two new ideas: validators that reject invalid input before your handler runs, and global options that apply to every command in an application.
The example is quickcat, a minimal file viewer modeled after the Unix cat command.
Application.run() reads sys.argv[1:] by default. Pass an explicit list to override,
or set auto_sys_argv=False to disable automatic reading.
Every design decision in quiCkLI was made with a specific kind of developer in mind. In
this post I want to be explicit about who that is, because it explains decisions that
might otherwise seem arbitrary.
In the first two parts of this series you built a greeting tool and a file viewer. In this
final article you will combine everything you have learned to build pyk5l, a
kubectl-like multi-command application.
By the end you will understand every primitive in quickli and how they fit together in
a realistic application.
Operations work values repeatability, composability, low overhead, and precise control. Those properties are natural strengths of command-line tools, especially when a task must run from a shell, a scheduled job, a container, or a recovery environment.
AI agents need tools with clear inputs, observable outputs, and bounded side effects. A CLI can provide that contract without hiding the operation behind an opaque integration layer.