tisket
A plaintext, git-tracked issue tracker. Each issue is a markdown file
with YAML frontmatter. The files live in .tisket/ inside your git
repo. Tisket needs no external service and no API tokens. It works
offline. Coding agents read and write issues as ordinary file
operations instead of calls to a hosted API.
Install
cargo install --locked tisket
brew install cjohnhanson/tap/tisket
uv tool install tisket
npm install -g tisket
cargo install builds from source. It needs Rust 1.88 and a C
compiler. The other three carry a prebuilt binary for macOS and Linux,
x86-64 and arm64, published by a tagged release.
To build the unreleased main branch:
cargo install --locked --git https://github.com/cjohnhanson/tisket
Or run it without installing:
uvx tisket issue list
npx tisket issue list
A release also carries prebuilt archives and a .deb, on the releases
page. Each archive
holds the binary and the man page. Install a .deb with dpkg -i: it
is a file, not a repository, so apt-get install does not reach it.
Check the install with tisket --version.
Usage
tisket init # set up .tisket/ in a git repo
tisket issue create "Fix the thing" # create an issue
tisket issue list # list open issues
tisket issue list -s todo # filter by status
tisket issue show ab12 # show the issue details
tisket issue edit ab12 --add-label urgent
tisket issue close ab12 # move the file to .closed/
tisket search "TLS|certificates" # search every issue with a regex
tisket store list # show this tracker and the trackers it declares
tisket serve [--bind ADDR] # serve this tracker over MCP
tisket docs [topic] # show the bundled documentation
How it works
Each issue is one file. The filename has a 4-character random prefix
and a slug from the title. The file holds YAML frontmatter for the
metadata and a markdown body. Tisket moves a closed issue to
.closed/.
.tisket/
default/ # project directory
ab12-fix-the-widget.md # open issue
.closed/
cd34-old-resolved-thing.md # closed issue
An issue moves through a status lifecycle: discovery → todo →
in_progress → done (or cancelled). An issue can also be blocked
or paused.
Scratch notes
Each issue can have a ## Scratch Notes section below the issue body.
An agent appends its working notes there: investigation logs,
approaches that failed, and partial findings. The problem description
above stays unchanged.
tisket scratch ab12 append "Confirmed: bounds check missing on line 42"
tisket scratch ab12 read
Git-aware divergence detection
When you list or show an issue, tisket also reads that issue file from
every other branch. It compares the files field by field. If another
branch has a different status, assignee, or priority, tisket marks the
issue with a *. It also names each branch that differs. You see the
conflict before a merge overwrites one version.
Serving over MCP
tisket serve offers the same tracker to a Model Context Protocol
client. The library answers both interfaces, so the server returns what
the CLI returns.
tisket serve # speak MCP on stdin and stdout
tisket serve --bind 127.0.0.1:7432 # serve over HTTP at /mcp on that address
tisket serve --access read-write # also allow appending to working notes
The server is read-only by default. With --access read-write it adds
one write: appending to an issue's scratch notes. A caller cannot
create an issue, change a status, or edit a body through the server. A
served tracker has no authentication: bind it to 127.0.0.1, or put a
proxy that authenticates in front of it.
Documentation
- What is Tisket? — design, file format, status lifecycle
- Getting Started — first issue walkthrough
- Workflow — daily issue management past the basics
- CLI Reference — complete command documentation
tisket docs prints the same pages from the installed binary.
Related
Tisket belongs to a group of plaintext, git-tracked, agent-readable tools.
- zettel — zettelkasten notes for a repository
- almanac — agent skill index, over pluggable sources
- gaff — context-lifecycle handler for coding agents
- missouri — end-to-end tests as directed graphs of filesystem states
- mdstore — the frontmattered markdown library tisket stores issues with
License
MIT.
Metadata
Release files for tisket 0.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tisket-0.2.4.tar.gz | 91.5 kB | Without provenance | Details for tisket-0.2.4.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| tisket-0.2.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl | Python 3 | none | Linux musl 1.1+ x86-64, Linux glibc 2.17+ x86-64 | Details for tisket-0.2.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl |
| tisket-0.2.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl | Python 3 | none | Linux musl 1.1+ ARM64, Linux glibc 2.17+ ARM64 | Details for tisket-0.2.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl |
| tisket-0.2.4-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details for tisket-0.2.4-py3-none-macosx_11_0_arm64.whl |
| tisket-0.2.4-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details for tisket-0.2.4-py3-none-macosx_10_12_x86_64.whl |
Total release size: 31.9 MB
Release files / tisket-0.2.4.tar.gz
| Download URL | tisket-0.2.4.tar.gz |
|---|---|
| Size | 91.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ed53cbbccdade9aa0dcd1b40fca1458cfc4b522f86b0dd2075f30156af139d7b
|
|
BLAKE2b-256 checksum How to use checksums |
dc56f8b4f0293cb70a7e7526cfdfeb11b41eb0b7239e0a22b8067393c8a97bc4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","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 / tisket-0.2.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl
| Download URL | tisket-0.2.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl |
|---|---|
| Size | 8.4 MB |
| Tags | Linux glibc 2.17+ x86-64 Linux musl 1.1+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
ae2685592e9f619d9dd6d2282e5652dfa2f9cd6e3714405c34e267c67d9f1a0b
|
|
BLAKE2b-256 checksum How to use checksums |
4f0dcb725ad7177f4f76670e79b40734c6af30f104a0f8dfbf03b08eb0ff52da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","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 / tisket-0.2.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl
| Download URL | tisket-0.2.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl |
|---|---|
| Size | 7.8 MB |
| Tags | Linux glibc 2.17+ ARM64 Linux musl 1.1+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
378a74de79340e266cefe7e668e16cfc925c8256de4ab8cf3ded661b09bdbd5a
|
|
BLAKE2b-256 checksum How to use checksums |
899c5126e14cadcb4574e116923f58bb57ee8f34f0b493c86972ce5092970222
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","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 / tisket-0.2.4-py3-none-macosx_11_0_arm64.whl
| Download URL | tisket-0.2.4-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 7.7 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
71790c6cad0bc4c80b1b9245fe3919d98732b0e10455bc7f22ccb7921f492dc0
|
|
BLAKE2b-256 checksum How to use checksums |
3e62738c98429d7d4c1f148c9ea74aa1c70850b8b8b2d0070e5fc731b7b1f775
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","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 / tisket-0.2.4-py3-none-macosx_10_12_x86_64.whl
| Download URL | tisket-0.2.4-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
38a0792ad6d8516c97c179ff71dcd5e65cc2838ed58d3daa592229e9ef630196
|
|
BLAKE2b-256 checksum How to use checksums |
99f2bbd494047598f73e3757dd50320d9d8d926177fcd33d75b202e99d9242e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","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}
|
Security for tisket 0.2.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.