togo is a command line task/todo management utility designed to be simple, fast, and easy to use.
.togo file in the project tree, with a global fallback. Force with --source project|global.togo is available on the Arch User Repository (AUR)
paru -S togo-bin
Download the latest pre-built binaries from the Releases page.
[!NOTE] Don't forget to set the
PATHenvironment variable.
export PATH="$HOME/.local/bin:$PATH"
go install github.com/prime-run/togo@latest
# Clone the repository
git clone https://github.com/prime-run/togo.git
cd togo
make
# And follow the prompts
All make installation methods should set up shell completion out of the box.
In case your shell isn't detected, you can run togo completion --help.
To add a task:
togo add "Task description"
# or without quotes, it's treated as stdin!
togo add Call the client about project scope
Togo tasks can be loaded/saved in 2 levels:
todos.json file in project directory. Togo searches upward through parent directories to find the nearest todos.json file, creating a hierarchical task structure. If no project file is found, it falls back to the global storage.personal task file under ~/.config/togo/todos.json.Control the storage location with the --source flag:
# project (default)
togo list
togo add "Write docs" -s project
# force global
togo list --source global
Initialize project-local storage in current working directory:
togo init # initializes todos.json file in the current directory (project level)
In the TUI, the header shows the active source as source: project or source: global.
Togo provides two primary modes of operation:
The TUI allows managing todos visually and allows for bulk actions:
togo
# or
togo list # Active todos only
togo list --all # All todos
togo list --archived # Archived todos only
Togo offers flexible command syntax with three usage patterns:
All commands accept the persistent
--source|-sflag:project(default) orglobal.
togo toggle meeting
# force using global source
togo toggle meeting --source global
If only one task contains "meeting," it executes immediately—no selection needed. If multiple tasks match (e.g., "team meeting" and "client meeting"), Togo automatically opens the selection list so you can choose the one you meant.
togo toggle
# against project-local source explicitly
togo toggle -s project
Opens a selection list where you can choose from available tasks:
As you type, Togo searches through tasks and filters the results.
If you've configured shell completion (see below), you can use tab-completion:
togo toggle [TAB]
Your shell will present available tasks. Type a few letters to filter by name:
togo toggle me[TAB]
The shell will show only tasks containing "me"—perfect for quick selection.
--source also supports completion to project and global.
[!TIP] This really speeds up task management since fuzzy matching is supported by the completion script. For example, to mark the task
Auto ***snapshot*** /boot ...ascompleted, just runningtogo toggle snapwould toggle it. Ifsnapmatches more than one task, you'll be prompted to select from the matches.
togo add "Task description" - Add a new tasktogo toggle [task] - Toggle completion statustogo archive [task] - Archive a completed tasktogo unarchive [task] - Restore an archived tasktogo delete [task] - Remove a task permanentlytogo list [flags] - View tasks (--all, --archived)togo init - Create an empty todos.json file in the current directory (enable project-local storage)Notes:
--source|-s {project|global} to control where tasks are read/written.Enabling shell completion allows for tab-completion of commands and task names, improving efficiency.
# 1. Create completion directory
mkdir -p ~/.zsh/completion
echo "fpath=(~/.zsh/completion \$fpath)" >> ~/.zshrc
# 2. Enable completions
echo "autoload -Uz compinit && compinit" >> ~/.zshrc
# 3. Apply Togo completion
togo completion zsh > ~/.zsh/completion/_togo
source ~/.zshrc
# 1. Ensure completion is sourced
echo "[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion" >> ~/.bashrc
source ~/.bashrc
# 2. Install Togo completion
togo completion bash > ~/.bash_completion
source ~/.bash_completion
mkdir -p ~/.config/fish/completions
togo completion fish > ~/.config/fish/completions/togo.fish
Storage locations:
- Project: nearest
./todos.jsonfile (JSON).- Global:
$XDG_CONFIG_HOME/togo/todos.json(or$HOME/.config/togo/todos.json).
This project is licensed under MIT - see the LICENSE file for details.
Go
87.5%
Makefile
12.5%
togo is a command line task/todo management utility designed to be simple, fast, and easy to use.
.togo file in the project tree, with a global fallback. Force with --source project|global.togo is available on the Arch User Repository (AUR)
paru -S togo-bin
Download the latest pre-built binaries from the Releases page.
[!NOTE] Don't forget to set the
PATHenvironment variable.
export PATH="$HOME/.local/bin:$PATH"
go install github.com/prime-run/togo@latest
# Clone the repository
git clone https://github.com/prime-run/togo.git
cd togo
make
# And follow the prompts
All make installation methods should set up shell completion out of the box.
In case your shell isn't detected, you can run togo completion --help.
To add a task:
togo add "Task description"
# or without quotes, it's treated as stdin!
togo add Call the client about project scope
Togo tasks can be loaded/saved in 2 levels:
todos.json file in project directory. Togo searches upward through parent directories to find the nearest todos.json file, creating a hierarchical task structure. If no project file is found, it falls back to the global storage.personal task file under ~/.config/togo/todos.json.Control the storage location with the --source flag:
# project (default)
togo list
togo add "Write docs" -s project
# force global
togo list --source global
Initialize project-local storage in current working directory:
togo init # initializes todos.json file in the current directory (project level)
In the TUI, the header shows the active source as source: project or source: global.
Togo provides two primary modes of operation:
The TUI allows managing todos visually and allows for bulk actions:
togo
# or
togo list # Active todos only
togo list --all # All todos
togo list --archived # Archived todos only
Togo offers flexible command syntax with three usage patterns:
All commands accept the persistent
--source|-sflag:project(default) orglobal.
togo toggle meeting
# force using global source
togo toggle meeting --source global
If only one task contains "meeting," it executes immediately—no selection needed. If multiple tasks match (e.g., "team meeting" and "client meeting"), Togo automatically opens the selection list so you can choose the one you meant.
togo toggle
# against project-local source explicitly
togo toggle -s project
Opens a selection list where you can choose from available tasks:
As you type, Togo searches through tasks and filters the results.
If you've configured shell completion (see below), you can use tab-completion:
togo toggle [TAB]
Your shell will present available tasks. Type a few letters to filter by name:
togo toggle me[TAB]
The shell will show only tasks containing "me"—perfect for quick selection.
--source also supports completion to project and global.
[!TIP] This really speeds up task management since fuzzy matching is supported by the completion script. For example, to mark the task
Auto ***snapshot*** /boot ...ascompleted, just runningtogo toggle snapwould toggle it. Ifsnapmatches more than one task, you'll be prompted to select from the matches.
togo add "Task description" - Add a new tasktogo toggle [task] - Toggle completion statustogo archive [task] - Archive a completed tasktogo unarchive [task] - Restore an archived tasktogo delete [task] - Remove a task permanentlytogo list [flags] - View tasks (--all, --archived)togo init - Create an empty todos.json file in the current directory (enable project-local storage)Notes:
--source|-s {project|global} to control where tasks are read/written.Enabling shell completion allows for tab-completion of commands and task names, improving efficiency.
# 1. Create completion directory
mkdir -p ~/.zsh/completion
echo "fpath=(~/.zsh/completion \$fpath)" >> ~/.zshrc
# 2. Enable completions
echo "autoload -Uz compinit && compinit" >> ~/.zshrc
# 3. Apply Togo completion
togo completion zsh > ~/.zsh/completion/_togo
source ~/.zshrc
# 1. Ensure completion is sourced
echo "[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion" >> ~/.bashrc
source ~/.bashrc
# 2. Install Togo completion
togo completion bash > ~/.bash_completion
source ~/.bash_completion
mkdir -p ~/.config/fish/completions
togo completion fish > ~/.config/fish/completions/togo.fish
Storage locations:
- Project: nearest
./todos.jsonfile (JSON).- Global:
$XDG_CONFIG_HOME/togo/todos.json(or$HOME/.config/togo/todos.json).
This project is licensed under MIT - see the LICENSE file for details.
Go
87.5%
Makefile
12.5%