A command-line interface for managing todos with the Taskleef todo app.
- Rust toolchain (for building from source)
git clone https://github.com/Xatter/taskleef.git
cd taskleef
cargo build --releaseThe binary will be at target/release/taskleef. Copy it to your PATH:
cp target/release/taskleef /usr/local/bin/- Go to taskleef.com and generate an API key
- Set the
TASKLEEF_API_KEYenvironment variable:
export TASKLEEF_API_KEY=your-api-key-hereAdd this to your ~/.bashrc or ~/.zshrc to make it permanent.
Create an auth file (e.g., ~/.taskleef.auth) containing:
TASKLEEF_API_KEY=your-api-key-hereThen use the --auth-file flag:
taskleef --auth-file ~/.taskleef.auth list
taskleef -a ~/.taskleef.auth listThis is useful for managing multiple accounts or keeping credentials separate.
If you're running your own Taskleef server, set:
export TASKLEEF_API_URL=https://your-server.comIf you prefer using tl instead of taskleef, add this alias to your ~/.bashrc or ~/.zshrc:
alias tl=taskleefsource /path/to/taskleef/taskleef-completion.bashsource /path/to/taskleef/taskleef-completion.zshAdd the appropriate line to your ~/.bashrc or ~/.zshrc to enable completion on startup.
Taskleef provides a Model Context Protocol server, allowing AI assistants like Claude Code and Claude Desktop to manage your todos, boards, and Kanban workflows directly.
claude mcp add --transport http taskleef https://taskleef.com/mcp/messages -H "X-API-Key: YOUR_API_KEY"Then restart Claude Code and verify with claude mcp list.
Add to ~/.claude.json:
{
"mcpServers": {
"taskleef": {
"type": "http",
"url": "https://taskleef.com/mcp/messages",
"headers": {
"X-API-Key": "your-api-key-here"
}
}
}
}Add to your MCP settings file:
{
"mcpServers": {
"taskleef": {
"transport": {
"type": "sse",
"url": "https://taskleef.com/mcp/sse",
"headers": {
"X-API-Key": "your-api-key-here"
}
}
}
}
}See the full API documentation for all 39 available tools across todos, boards, columns, cards, members, tags, and comments.
taskleef [--auth-file <path>] <command> [args]
taskleef [-a <path>] <command> [args]# List pending todos
taskleef list
taskleef ls
# List all todos (including completed)
taskleef list -a
# Add a new todo
taskleef add "Buy groceries"
# Quick add (without 'add' keyword)
taskleef "Buy groceries"
# Show a todo with details and subtasks
taskleef show <title-or-id>
# Mark a todo as complete
taskleef complete <title-or-id>
taskleef done <title-or-id>
# Delete a todo
taskleef delete <title-or-id>
taskleef rm <title-or-id># List todos not assigned to any project
taskleef inbox# Add a subtask to a todo
taskleef subtask <parent-title-or-id> "Subtask title"# List all projects
taskleef project list
# Create a new project
taskleef project add "Project Name"
# Show project with its todos
taskleef project show <project-name-or-id>
# Delete a project
taskleef project delete <project-name-or-id>
# Add a todo to a project
taskleef project add-todo <project-name-or-id> <todo-title-or-id>
# Remove a todo from a project
taskleef project remove-todo <project-name-or-id> <todo-title-or-id># Show default board (ASCII view)
taskleef board
# List all accessible boards
taskleef board list
# Show a specific board with columns and cards
taskleef board show <board-name-or-id>
# List cards in a specific column
taskleef board column <column-name-or-id>
# Move a card to a different column
taskleef board move <card-title-or-id> <column-name-or-id>
# Mark a card as done in its current column
taskleef board done <card-title-or-id>
# Assign a card to the current user
taskleef board assign <card-title-or-id>
# Delete all cards in a column
taskleef board clear <column-name-or-id>Launch a full-screen terminal UI with an interactive kanban board.
# Open the TUI (starts with board picker)
taskleef tui
taskleef tBoard picker: ↑/↓ to select, Enter to open, q to quit.
Kanban board:
| Key | Action |
|---|---|
←/→ or h/l |
Navigate columns |
↑/↓ or j/k |
Navigate cards |
Enter |
Open card detail (animated) |
m |
Move card to another column |
d |
Mark card as done |
b |
Mark card as blocked |
i |
Mark card as active (inbox) |
r |
Refresh board data |
Esc |
Back to board list |
q |
Quit |
Cards are grouped by status within each column (Active, Blocked, Done) and all are navigable.
Commands that accept an identifier support:
- ID prefix: The first few characters of the UUID (e.g.,
abc12) - Title match: Partial, case-insensitive title match (e.g.,
groceriesmatches "Buy groceries")
# Add a todo
$ taskleef add "Review pull request"
Created: Review pull request (a1b2c)
# List todos
$ taskleef ls
Pending todos:
○ a1b2c Review pull request
● d3e4f 2024-01-15 Fix login bug
# Complete a todo by title
$ taskleef done "pull request"
Completed: Review pull request
# Create a project and add todos
$ taskleef project add "Website Redesign"
Created project: Website Redesign (x7y8z)
$ taskleef project add-todo "Website" "Fix login"
Added todo to project: Website Redesign
# View a kanban board
$ taskleef board
┌─────────────┬─────────────┬─────────────┐
│ Backlog │ In Progress │ Done │
├─────────────┼─────────────┼─────────────┤
│ ○ Fix bug │ ● Feature A │ ✓ Setup CI │
│ ○ Add tests │ │ │
└─────────────┴─────────────┴─────────────┘
# Move a card to a different column
$ taskleef board move "Feature A" "Done"
Moved: Feature A -> Done- ○ No priority
- ● (green) Low priority
- ● (yellow) Medium priority
- ● (red) High priority
MIT

