A CLI kanban board/task manager for Mac and Linux
- Per project task lists
- Stored using Markdown
- Clean diffs for easy version control
- Support for sub-tasks and due dates
- Trello board imports
- GitHub project imports
Follow @taskellcli on Twitter for updates
- Using Taskell
You can install Taskell on your Mac using Homebrew:
brew install taskell
.deb package is available for Debian/Ubuntu. Download it and install with
dpkg -i <package-name>. You may also need to install the
libtinfo5 package (
sudo apt install libtinfo5).
Not officially supported, but try running
sudo dnf install ncurses-compat-libs then download and run the binary as described below. If that doesn't work you may need to build from scratch (Cabal/Stack).
A binary is available for Mac and Debian/Ubuntu. Download it and copy it to a directory in your
You can install Taskell with
cabal install taskell
Make sure you run
cabal update if you haven't run it recently.
If none of the above options work you can build taskell using Stack. First install Stack on your machine. Then clone the repo and run
stack build && stack install: this will build taskell and then install it in
~/.local/bin (so make sure that directory is in your
$PATH). Building from scratch can take a long time and occasionally doesn't work the first time (if this happens try running it again).
taskell: will use
taskell.mdin the pwd - offers to create if not found
taskell filename.md: will use
filename.mdin the pwd - offers to create if not found
-h: show help
-v: show version number
-t <trello-board-id>: import a Trello board (see below)
-g <github-project-id>: import a GitHub project (see below)
- If you're using a simple two-column "To Do" and "Done" then use the space bar to mark an item as complete while staying in the "To Do" list. If you're using a more complicated column setup then you will want to use
Lto move tasks between columns.
By default stores in a
taskell.md file in the working directory:
## To Do - Do this ## Done - Do That
Importing Trello Boards
Taskell includes the ability to fetch a Trello board and store it as local taskell file.
Before fetching a Trello board, you'll need to create an access token and store it in
First, get a Trello token
Then add it to
[trello] token = <your-trello-access-token>
You can revoke access tokens on Trello
Running the following would pull down the Trello board with the ID "TRe1l0iD" into a file named
trello.md and then open taskell with that file.
taskell -t TRe1l0iD trello.md
Make sure you have permission to view the Trello board, otherwise you'll get an error.
- This is a one-off procedure: it effectively imports a Trello board to taskell
- Currently imports:
- Card descriptions
- Card due dates
- Card checklists (merged into one list per card)
Importing GitHub Projects
Taskell includes the ability to fetch a GitHub project and store it as local taskell file.
Before fetching a GitHub board, you'll need to create a person access token and store it in
Make sure to tick the
Then add it to
[github] token = <your-github-personal-access-token>
You can delete personal access tokens on GitHub
Make sure you have permission to view the GitHub project, otherwise you'll get an error.
To import a project for an organisation called "test-org" you would use the following:
taskell -g orgs/test-org github.md
This would then show you a list of possible projects to import. Enter the number of the project you wish to import.
To import a project for the repository "test-repo" for the user "test-user":
taskell -g repos/test-user/test-repo github.md
This would then show you a list of possible projects to import. Enter the number of the project you with to import.
- This is a one-off procedure: it effectively imports a GitHub project to taskell
- Currently imports:
Taskell uses the XDG Base Directory Specification, so it will look for an
$XDG_CONFIG_HOME environmental variable and create a directory named
taskell inside it. If this variable is not found it will create the
taskell directory in
~/.config/. (If you've been using Taskell since <= 1.3.5 then it will be in a
~/.taskell directory, feel free to move this to the XDG directory.)
Taskell has a
[general] ; the default filename to create/look for filename = taskell.md [layout] ; top/bottom padding for the taskell window padding = 1 ; the width of a column column_width = 30 ; the padding of a column ; for both sides, so 3 would give a gap of 6 between two columns column_padding = 3 ; the icon to use when a task has a description ; the default icon may not display on all systems description_indicator = "≡" ; whether to show the statusbar statusbar = true [markdown] ; the markdown to start a title line with title = "##" ; the markdown to start a task line with task = "-" ; the markdown to start a sub-task line with subtask = " *" ; by default times are stored in UTC to avoid diffs if you ; change locations. Set this to true if it will always be ; edited in the same timezone localTimes = false
Make sure that the values in the
[markdown] section are surrounded by double-quotes.
If you always use sub-tasks, an alternative setup for
[markdown] might be:
[markdown] title = "##" ; each task is a header task = "###" ; subtasks are list items under the header subtask = "-"
Warning: currently if you change your
[markdown] settings any older files stored with different settings will not be readable.
You can edit the
template.md config file to change what a new taskell file looks like.
You can edit keyboard bindings in the
bindings.ini config file.
The default bindings can be found in
Available special keys:
On a Mac you can use the
alt characters: e.g.
quit = œ is equivalent to
You shouldn't try to assign the
9 keys, as it will not overwrite the default behaviour.
Due dates must be input with the format
YYYY-MM-DD HH:MM. The date will not be accepted otherwise.
You can also pass in relative times such as
1w 2d (for 1 week and 2 days). Valid units are:
These can be used in any combination. If the time is made up only of days and/or weeks, the due date will not include a time.
By default times are stored in the Markdown file as UTC. If you would like local times (and are unlikely to open the file in lots of different timezones) then you can set
true in the
markdown section of the config file. If you have this setting on and you change timezone, you'll get a diff on all your times the next time you make changes to the file.
You can edit Taskell's colour-scheme by editing
[other] ; list title title.fg = green ; status bar statusBar.bg = blue statusBar.fg = black ; current list title titleCurrent.fg = blue ; current task taskCurrent.fg = magenta ; subtasks ; selected subtaskCurrent.fg = magenta ; incomplete subtaskIncomplete.fg = blue ; complete subtaskComplete.fg = yellow ; disabled disabled.fg = yellow
You can also change the background and default text colour:
[default] ; the app background colour default.bg = brightBlack ; the app text colour default.fg = white
The available colours are:
See roadmap.md for planned features
Please check the roadmap.md before adding any bugs/feature requests to Issues.
Built using Brick. Thanks to Jonathan Daugherty for answering all my questions and pointing me in the right direction. Also thanks to Jack Leigh and Thom Wright for helping me get started. Also thanks to Katja Durrani for submitting Taskell to