Tillr
Human-in-the-loop project management for agentic software development.
Tillr sits between humans and AI agents. It defines structured iteration cycles with human checkpoints, so agents do the heavy lifting while humans retain steering authority. Everything is captured in a local SQLite database.
Install
# Homebrew
brew tap mschulkind-oss/tap && brew install tillr
# PyPI (works in any Python environment)
pipx install tillr # or: uvx tillr
# Go
go install github.com/mschulkind-oss/tillr/cmd/tillr@latest
# From source (requires Go 1.24+, Node 22+, pnpm)
git clone https://github.com/mschulkind-oss/tillr.git && cd tillr && just install
Quick Start
# Initialize a project
cd ~/my-project
tillr init my-project
# Add features
tillr feature add "User authentication"
tillr feature add "API rate limiting"
# Start an iteration cycle
tillr cycle start collaborative-design <feature-id>
# Launch the web dashboard
tillr serve
CLI Overview
tillr init <name> Initialize a new project
tillr status Project overview
tillr feature add <name> Add a feature
tillr feature list List features (--status, --json)
tillr feature show <id> Feature details with history
tillr cycle start <type> <id> Start an iteration cycle
tillr cycle status Active cycle progress
tillr cycle advance --approve Advance past a human checkpoint
tillr next --json Get next work item (for agents)
tillr done --result "..." Complete current work
tillr fail --reason "..." Report failure
tillr serve Single-project web dashboard
tillr daemon Multi-project server daemon
See docs/guides/user-guide.md for the full guide.
Multi-Project Daemon
Run Tillr as a system service managing multiple projects:
# Configure projects
tillr daemon init ~/code/project-a ~/code/project-b
# Install systemd user service
just install-service
# Deploy (build + restart)
just deploy
The daemon serves all projects on a single port with a project switcher in the UI.
Development
just dev # Backend (air live-reload) + Vite frontend
just check # Format + lint + test
just build # Build binary to bin/tillr
See CONTRIBUTING.md for full development setup.
License
Apache 2.0 — see LICENSE.
Metadata
Release files for tillr 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| tillr-0.1.3-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| tillr-0.1.3-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| tillr-0.1.3-py3-none-manylinux_2_17_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| tillr-0.1.3-py3-none-manylinux_2_17_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| tillr-0.1.3-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| tillr-0.1.3-py3-none-macosx_10_9_x86_64.whl | Python 3 | none | macOS 10.9+ x86-64 | Details |
Total release size: 87.5 MB
Release files / tillr-0.1.3-py3-none-musllinux_1_2_x86_64.whl
| Download URL | tillr-0.1.3-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 15.0 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
5975e0a5b97dceb4b1f218c571909b8ab56e55aef2b33bbfe93faed2de4241e5
|
|
BLAKE2b-256 checksum How to use checksums |
7814d087e1250928ce039a7f44c3369a04144be62f29993af42182f65da860e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tillr-0.1.3-py3-none-musllinux_1_2_aarch64.whl
| Download URL | tillr-0.1.3-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
758e457ac613fc98728e37c6fd027b4d2bff3d88c9b86e888b8df8618019cadc
|
|
BLAKE2b-256 checksum How to use checksums |
081a3662f055528fef276d84523b89432da8617a4f3c083374389fb52fb0e22f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tillr-0.1.3-py3-none-manylinux_2_17_x86_64.whl
| Download URL | tillr-0.1.3-py3-none-manylinux_2_17_x86_64.whl |
|---|---|
| Size | 15.0 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
6c6890b1ed0d176f513d784951102f1fde76a3c2ed9e3208b6437fa40baab703
|
|
BLAKE2b-256 checksum How to use checksums |
33e529e782575013b4f1565cd919a9534975a6b6111de240f0a356bfc5a1ae74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tillr-0.1.3-py3-none-manylinux_2_17_aarch64.whl
| Download URL | tillr-0.1.3-py3-none-manylinux_2_17_aarch64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
8f3868ff9e7dd3b307e78f9c62e1bb86d7e21852483e1114657382966e8fe75b
|
|
BLAKE2b-256 checksum How to use checksums |
103bd079b674e4525c11b09c4df83b5185fcf7301b6eb9e2cad97408ac84ded1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tillr-0.1.3-py3-none-macosx_11_0_arm64.whl
| Download URL | tillr-0.1.3-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 14.3 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e7d11ab69575bdac63b603b26da15e7e3a10e9253c21af39d650cf394e6cb992
|
|
BLAKE2b-256 checksum How to use checksums |
a40e352fbd180c9261f8c2f5faf8cbf1a06976e1e5f0bceaccb2fe6d3b1b84fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tillr-0.1.3-py3-none-macosx_10_9_x86_64.whl
| Download URL | tillr-0.1.3-py3-none-macosx_10_9_x86_64.whl |
|---|---|
| Size | 15.2 MB |
| Tags | Python 3 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
c4bd94b01a0461c063215febb3479fe06c9da235ba46d2df8603459aa9846ba0
|
|
BLAKE2b-256 checksum How to use checksums |
c88651d5fcc39f692ba50c1eb2b8e873b69aaa9ce819d3d67fcd23f5ecc09fac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|