Skip to main content

CLIIT

Markdown-native issue tracking for coding agents.

CI Python 3.10+

Install · Quickstart · Usage · AI coding agents · Configuration

A terminal session: issue init, create, next --claim, start and close, then the Markdown file it wrote and the git diff that closing it produced

Keep issues, work plans, claims, and completion evidence in Git. No server or account required. CLIIT (Command-Line Issue Tracker) stores each issue as a Markdown file in .issues/, so your backlog reviews in pull requests and travels with the clone.

  • Plain files you own. Read and edit issues in any text editor, even without CLIIT.
  • Focused daily workflow. Search, prioritize, assign, and track dependencies from your terminal.
  • A clear next step. issue next selects actionable work by status, priority, and age.
  • Continuity for coding agents. JSON output, issue claims, and saved work plans help sessions pick up where they left off.

Install

Requires Python 3.10+. Works on Linux, macOS, and Windows. Install from PyPI with uv:

uv tool install cliit
issue --version

Both issue and cliit run the same CLI. To update, run uv tool upgrade cliit. If your shell cannot find issue, run uv tool update-shell and reopen your terminal.

Alternatively, run python -m pip install cliit inside an activated virtual environment. Git is optional for installation; use it to share issues and view their history.

Quickstart

Run these commands in your project's root directory:

issue init
issue create "Fix login redirect" "The session cookie disappears after sign-in." -p high -l bug
issue list
issue next
issue start ISS-001

The example assumes a new tracker; use the ID returned by create in an existing one. start marks the issue in progress and creates .issues/work/ISS-001.md. Edit that plan as you work, keeping its checkpoints and next step current.

After implementing and checking the fix, record the result:

issue close ISS-001 --completed -m "Fixed session cookie handling." --verified "Signed in and confirmed the session survives the redirect."

Commit .issues/ alongside your code to keep the issue, work plan, and resolution in the same history.

Usage

Run issue --help for all commands, or issue <command> --help for its options.

Find and organize work

Task Command
Get a project overview issue brief
Find the next issue to work on issue next
List open, high-priority bugs issue list open -p high -l bug
Find available work issue list --ready --unassigned
See blocked issues issue list --blocked
Search titles and descriptions issue search "login redirect"
Read an issue issue view ISS-001
Change priority or add a label issue set ISS-001 -p high -l auth
Remove a label issue set ISS-001 --unlabel auth
Add a dependency issue set ISS-002 --blocked-by ISS-001
Remove a dependency issue set ISS-002 --unblock ISS-001
Claim an issue issue claim ISS-001 --by alex
Assign ownership issue assign ISS-001 --to alex
Release ownership issue release ISS-001
Reopen an issue issue set ISS-001 open
Read its committed history issue log ISS-001
Check tracker files for problems issue check

Statuses are open, in-progress, and closed. Priorities are high, medium (the default), and low. Repeat -l to add or filter by multiple labels; filters combine, and search requires every word to match, ignoring case.

list places the most urgent rows nearest your terminal prompt. next prefers in-progress work, then higher priority, then older issues. It skips closed and blocked issues, and skips other people's assignments when your identity is known. It only reads unless you add --claim.

Close with a reason

Every close requires one reason and a nonblank, single-line message (-m).

Reason Additional requirement
--completed At least one piece of evidence
--not-planned None
--duplicate-of ID Another existing issue
--superseded-by ID Another existing issue

Evidence flags are repeatable: --commit <sha>, --test "<command>", --pr <url>, and --verified "<manual check>". A close supported only by --verified is accepted with a warning.

Use issue close to close an issue; issue set ... closed is refused. Reopening clears the current resolution, while committed history remains available through issue log.

AI coding agents

Set ISSUE_USER to a distinct name for each worker, or use your configured git config user.name. Then use the same workflow from a script or agent:

issue init --agents
issue brief --json
issue next --claim --json
issue start ISS-001

Use the ID returned by next for start. Claims coordinate workers in the same working copy; --claim tries another candidate if one is taken. Claiming requires an identity and does not change the issue's status.

In a fresh project, init --agents creates shared instructions in AGENTS.md and a CLAUDE.md import. Existing instructions are preserved.

Work plans live at .issues/work/ISS-001.md. Update checkpoints, decisions, discoveries, Current, and Next as work progresses. Running start again resumes an existing plan without overwriting it. It refuses blocked, closed, or someone else's issues unless you explicitly use --anyway for blockers or --take for ownership and reopening.

Use issue next --compact or issue start ISS-001 --compact for a shorter plan summary. Read the full plan when recovering context; next --compact cannot be combined with --json. issue check --plans reports plan progress.

Event logs record observations separately from the editable plan:

issue event ISS-001 "Worker started" --type lifecycle
issue event ISS-001 --json

Events are appended to .issues/work/ISS-001.events.jsonl. Use --stdin to record piped output instead of a text argument.

Configuration

Commands find .issues/ by walking up from the current directory. init always creates a tracker in the current directory.

Environment variable Purpose Default
ISSUES_DIR Use a specific tracker directory, bypassing discovery Nearest .issues/
ISSUE_PREFIX Letters used for newly created IDs ISS
ISSUE_USER Identity for claims and work selection git config user.name

For example, set an agent identity with export ISSUE_USER=agent-1 on macOS/Linux or $env:ISSUE_USER = "agent-1" in PowerShell.

File format

An issue is a Markdown document with flat key: value frontmatter:

---
id: ISS-001
status: open
created_at: 2026-09-11T10:00:00+06:00
priority: high
labels: auth, bug
---
# Fix login redirect

The session cookie disappears after sign-in.

Optional metadata includes updated_at, assignee, and blocked_by. Labels and blocker IDs are comma-separated; resolution evidence is a JSON array. Values occupy one printable line. Write files as UTF-8 with LF line endings; CRLF is accepted on read. Unknown frontmatter keys survive CLI edits.

You can edit files directly. Run issue check afterwards to catch malformed metadata, missing references, dependency cycles, and damaged work artifacts.

Stability

CLIIT is currently 0.1.0. These interfaces are maintained compatibility contracts, including before 1.0:

  • Issue files: existing field names and meanings stay stable; absent optional fields stay absent, and unknown frontmatter keys are preserved.
  • JSON output: existing keys and types stay stable; additional keys may appear. list, search, check, and event reads return arrays; view, next, and brief return objects on success. Optional issue fields may be absent. Diagnostics go to stderr.
  • Exit codes: an empty filter result is 0; a lookup with no result or a refused write is 1. A partially successful batch write also returns 1.
  • Configuration: the three environment variables above keep their meanings.

Human-readable output, stderr wording, work-plan and event-log file formats, and internal Python modules are not stable APIs. Use the CLI and --json for integrations.

Scope

CLIIT is built for a backlog shared through one repository. It works offline and outside Git, but committed history requires Git. There is no hosted UI, notification service, or synchronization with GitHub Issues.

For bugs and questions, use GitHub Issues. For security reports, see SECURITY.md. Project setup and the pull request workflow are in CONTRIBUTING.md.

Metadata

Release files for cliit 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cliit 0.1.1
File Size Uploaded
cliit-0.1.1.tar.gz 353.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cliit 0.1.1
File Interpreter ABI Platform
cliit-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 421.1 kB

Release files / cliit-0.1.1.tar.gz

Download URL cliit-0.1.1.tar.gz
Size 353.6 kB
Tags Source
SHA-256 checksum
How to use checksums
25f87934df192e047487291fe990f3585fd9d9b3bf917618b0ce918349d30037
BLAKE2b-256 checksum
How to use checksums
2cce16da03c9d8e462c187b99457adaf4a223d232686699e4b9115972fff09c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / cliit-0.1.1-py3-none-any.whl

Download URL cliit-0.1.1-py3-none-any.whl
Size 67.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6edfedcd4e20b759fcda454a44e905f5b800423ed0b62f7033c89959f047eb4b
BLAKE2b-256 checksum
How to use checksums
4df3cfbed1b5079d41ef8366d0b4dee8918e52d3b9b3cef43c780b68f78de7b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page