Skip to content

robsoft/Tasker

Repository files navigation

Tasker

License: CC BY 4.0 C# .NET Core Project Status: Alpha

Tasker is licensed under CC BY 4.0. To view a copy of this license, visit https://creativecommons.org/licenses/by/4.0/

Overview

  • 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  

tasker + taskname+tasknotes

  • 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  

additional options for tasker + command;

  • -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

tasker list

  • 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  

tasker - id (or taskname)

  • 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  

tasker rem id (or taskname)

  • 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  

tasker renum

  • 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

tasker sleep id (or taskname)

  • suppress this task for the time being
  • eg tasker sleep 2
  • sample output;
  2 'Another task' sleeping

tasker wake id (or taskname)

  • reactivate this task
  • eg tasker wake 2
  • sample output;
  2 'Another task' active

tasker clean

  • 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

What gets 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
  • 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

Notes:

  • Deletions are best-effort; missing files/objects are skipped silently.
  • Dated backups currently use the previous day’s date (mirrors legacy behavior).

tasker init

  • 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 or done.txt are missing. It will treat missing files as empty and show “No active tasks” or “No completed tasks”.

tasker -h

  • help
  • also -help, --help and /? are supported

tasker clear

  • 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

Configuration (tasker.cfg)

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.

Common options

{
  "UseColor": true,
  "Verbose": true,
  "Backend": "file"   
}

File backend (local filesystem)

  • 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 and done.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 when File.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.

Firebase backend (Google Cloud Storage)

  • 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 a gs:// 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 omit CredentialsPath.

Behavior & safety:

  • If objects are missing, Tasker treats them as empty and will create CSV content on first save (e.g., after tasker init or tasker + ...).
  • BucketUrl is not a secret and can be committed. Do not commit the service account JSON.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages