Tasker is licensed under CC BY 4.0. To view a copy of this license, visit https://creativecommons.org/licenses/by/4.0/
- command-line, Windows & Mac
- just needs to be somewhere on the system path
- in the same folder as the executable are the tasks.txt and done.txt
- possible future option to have a redirect so that the 2 files could be in dropbox, onedrive etc tasker.cfg etc
- tasks.txt is the list of active and sleeping tasks
- done.txt is just a list of tasks that have been marked as done, with a timestamp of when they were done
- always creates a backup of tasks.txt and done.txt at the start of the day (the first time it's used in a given day), in the format yyyy-mm-dd.tasks.txt and yyyy-mm-dd.done.txt
- and then after that a simple .bak is maintained for both, which is the previous version of the file throughout the day
- eg;
tasks.txt <- current tasks (and sleeping tasks)
done.txt <- done tasks
tasks.txt.bak <- previous version of tasks
done.txt.bak <- previous version of done
2024-01-03.tasks.txt <- tasks at end of 3-jan-2024
2024-01-03.done.txt <- done at end of 3-jan-2024
- add taskname with optional notes (both strings can be " escaped)
- console returns the task id
- priority implied by number of + (so + is default, ++ is higher, +++ highest)
- delimiter between name and notes is
+
(shell-safe on macOS/Linux). A legacy;
delimiter is still accepted for backward compatibility. - eg tasker + "My First Task+This is a note"
- sample output;
1 'My First Task' added
- -rd daily recurrence generated when task is done
- -rw weekly (etc)
- -rm monthly
- -ra annual
- -rn n is number of days (so r1=rd, r7=rw etc)
- -s start off as a sleeping task
- shows all outstanding tasks in order of priority and then id
- eg tasker list
- sample output;
Active tasks;
1 My first task
This is a note
2 Another task
3 A Recurring Task (daily)
4 Another task
Which has a note
- supports -sleep option to show sleeping tasks
- eg tasker list -s
- sample output;
Sleeping tasks;
2 Another task
- supports -done option to show done tasks
- eg tasker list -done
- sample output;
Completed tasks;
2024-05-01 2 Another task
- mark a task as done (adds to done list with timestamp of when done)
- eg tasker - "Myfirst task"
- eg tasker - 2
- sample output;
2 'Another task' completed
- just remove a task (don't move to done list)
- will prompt y/n
- eg tasker rem 2
- sample output;
Remove task 2 'Another task'? (Y/N) Y
2 'Another task' removed
- will prompt y/n
- renumber all the ids of the outstanding list,
- then print it out (as per list)
- eg tasker renum
- sample output;
Renumber tasks? (Y/N) Y
1 My first task
This is a note
2 Another task
3 A Recurring Task (daily)
4 Another task
Which has a note
- suppress this task for the time being
- eg tasker sleep 2
- sample output;
2 'Another task' sleeping
- reactivate this task
- eg tasker wake 2
- sample output;
2 'Another task' active
- deletes backup files/objects after a Y/N safety prompt
- eg tasker clean
- sample output;
Clean - all backups will be deleted? (Y/N) Y
15 backup files deleted
-
Filesystem backend
- Within-day backups:
tasks.txt.bak
,done.txt.bak
- Daily dated backups:
yyyy-MM-dd_tasks.txt
,yyyy-MM-dd_done.txt
in the tasks folder
- Within-day backups:
-
Firebase backend
- Within-day backups:
<prefix>/tasks.csv.bak
,<prefix>/done.csv.bak
- Daily dated backups:
<prefix>/yyyy-MM-dd_tasks.txt
,<prefix>/yyyy-MM-dd_done.txt
- Within-day backups:
Notes:
- Deletions are best-effort; missing files/objects are skipped silently.
- Dated backups currently use the previous day’s date (mirrors legacy behavior).
- initialise storage by creating empty CSV files if missing
- safe to run multiple times; if files already exist, it does nothing
- eg tasker init
- sample output;
Initialised storage (created empty tasks/done files as needed)
- behavior without init: you can run commands like tasker list before running init; the tool no longer crashes if
tasks.txt
ordone.txt
are missing. It will treat missing files as empty and show “No active tasks” or “No completed tasks”.
- help
- also -help, --help and /? are supported
- remove tasks after a Y/N safety prompt
- options:
-done
: clear only completed tasks- no option: clear all active/sleeping tasks
- examples:
tasker clear -done
Clear all completed tasks? (Y/N) Y
All completed tasks removed
tasker clear
Clear all tasks? (Y/N) Y
All tasks removed
Behavior:
- Works with both backends via the storage abstraction
- After clearing, the store saves an empty CSV (with headers) to the file/object
Tasker reads a tasker.cfg
JSON file from the app's base directory (next to the executable). It controls output style and the storage backend.
{
"UseColor": true,
"Verbose": true,
"Backend": "file"
}
- Backend:
file
- Paths can be absolute or relative. Relative paths resolve from the current working directory when Tasker runs.
- If omitted, defaults are
tasks.txt
anddone.txt
in the current working directory.
{
"Backend": "file",
"File": {
"TasksPath": "./tasks.txt",
"DonePath": "./done.txt"
},
"UseColor": true,
"Verbose": true
}
Notes:
- The legacy top-level
TasksPath
/DonePath
(if present) are still honored as a fallback whenFile.TasksPath
/File.DonePath
are not provided. - Backups: a daily-dated copy is created once per day, and a within-day
.bak
is maintained when saving. If the source file does not exist yet, backups are skipped.
- Backend:
firebase
- Requires a service account JSON with permissions to read/write objects in your bucket.
- Credential path supports
~
(home) and environment variables (e.g.$HOME
), and can be relative (resolved against the current working directory). BucketUrl
must be ags://
URL for your bucket (e.g.gs://your-project-id.appspot.com
).- Pick object keys for the two CSV files.
{
"Backend": "firebase",
"Firebase": {
"BucketUrl": "gs://your-project-id.appspot.com",
"TasksObject": "tasker/tasks.csv",
"DoneObject": "tasker/done.csv",
"CredentialsPath": "~/Documents/tasker-credentials.json"
},
"UseColor": true,
"Verbose": true
}
Credentials:
- Download a service account key JSON from Google Cloud Console (IAM & Admin → Service Accounts → Keys).
- Keep real credentials out of git. An example file is provided as
firebase.service-account.example.json
. - Alternatively, set the
GOOGLE_APPLICATION_CREDENTIALS
environment variable to the JSON path and omitCredentialsPath
.
Behavior & safety:
- If objects are missing, Tasker treats them as empty and will create CSV content on first save (e.g., after
tasker init
ortasker + ...
). BucketUrl
is not a secret and can be committed. Do not commit the service account JSON.