lissue
lissue (short for Local Issue) is a powerful, Git-friendly local TODO CLI designed for developers and AI coding agents. It manages your project tasks using a hybrid storage of SQLite (for speed) and JSON (for Git-based sharing).

Why lissue?
The name lissue comes from "Local Issue". It aims to bring the powerful issue-tracking experience of GitHub/GitLab directly to your local terminal, enabling seamless collaboration between humans and AI agents through Git.
Key Features
- Interactive TUI: A beautiful, Lazygit-inspired terminal interface for humans.
- Hybrid Storage: Fast local operations with SQLite + Git-syncable JSON storage.
- Git-Optimized: "1 Task per File" architecture prevents merge conflicts.
- AI-Ready: Specialized commands for AI agents, including context dumping and auto-locking.
- Hierarchical Tasks: Support for parent-child relationships and tree view display.
- Vim-like Experience: Familiar keybindings (
/,j/k,h/l) for speed.
Installation
From crates.io (Recommended)
From Source
# Clone the repository
# Install locally
Quick Start
-
Initialize the repository in your project root:
-
Launch TUI (Interactive Mode):
-
Add a task via CLI:
# Add a subtask to ID 1 with related files
TUI Guide
Run lissue without arguments to enter the interactive mode.
| Key | Action |
|---|---|
j / k |
Navigate tasks or files |
h / l |
Switch between Status tabs (Open, Doing, Pending, Done) |
/ |
Search tasks or files (Fuzzy matching) |
a |
Quick add a new task title |
A |
Attach mode: Toggle project files to the selected task |
m |
Edit full task description in your $EDITOR |
d |
Mark task as Done |
c |
Claim task (Assign to yourself and mark as Doing) |
s |
Sync with JSON files |
q / Esc |
Quit or exit current mode |
Command Reference
| Command | Options | Description |
|---|---|---|
lissue init |
Initialize .lissue directory and database. |
|
lissue add [TITLE] |
-m, -p, -f |
Add a new task. -p: parent ID, -f: linked file. |
lissue list |
-f, -t, -s, -u |
List tasks. -t: tree, -s: status, -u: unassigned. |
lissue attach <ID> <FILES>... |
Link existing files to a task. | |
lissue next |
Get the next available task (Open & Unassigned). | |
lissue claim <ID> |
--by |
Mark task as In Progress and assign to yourself/agent. |
lissue close <ID> |
Close a task. | |
lissue open <ID> |
Reopen a closed task. | |
lissue link <ID> |
--to |
Create a parent-child relationship. |
lissue context <ID> |
Dump task details and linked file contents for AI. | |
lissue mv <OLD> <NEW> |
Move a file and update all linked tasks. | |
lissue rm <ID> |
Permanently remove a task. | |
lissue clear |
Permanently remove all closed tasks. |
Configuration
Settings are stored in .lissue/config.yaml:
output.default_format:humanorjsonoutput.auto_sync: Enable/disable implicit sync duringlistornext.integration.git_mv_hook: Usegit mvduringlissue mv.context.strategy:paths_onlyorraw_content.
License
MIT OR Apache-2.0