
Cultivate Your Tasks.
Season After Season.
Like the wood lily, some tasks are perennial. They return, requiring steady attention. Perennial Task is a command-line utility built to help you manage responsibilities and build lasting habits.
A Radically Simple Philosophy
Perennial Task was built on three core principles that set it apart.
Your Data is Yours. Period.
Each task is a simple, human-readable XML file. No cloud, no proprietary formats. You can back it up, version control it with Git, or sync it yourself. You have total control.
Perennial, Not Disposable.
Tasks aren't just deleted. Scheduled tasks reschedule themselves, and all tasks maintain a full completion history. This encourages continuous maintenance, not just one-off completions.
Live Where You Work.
For developers and power users, the terminal is home. Manage your tasks without context switching. It's faster, scriptable, and integrates perfectly into a keyboard-driven workflow.
Designed for Clarity and Control
A small set of powerful features gives you everything you need and nothing you don't.
Simple Task Types
Manage any job with just two types: Normal for one-off items and Scheduled for tasks with a due date.
Flexible Rescheduling
Set a task to reschedule based on its due date (for fixed events like rent) or its completion date (for flexible tasks like haircuts).
Completion History
Every task maintains a log of its completion dates, so you can track your consistency and reflect on your habits over time.
Interactive Editing
Easily edit any detail of an existing task—from its name to its reschedule settings—from a simple, interactive menu.
$ prn report
OVERDUE: Deploy security patches (was due 3 days ago)
OVERDUE: Water the Plants (was due 1 day ago)
DUE TODAY: Submit weekly report
UPCOMING: Prepare for team meeting (due in 2 days)
Commands
A comprehensive list of all available commands.
prn create
Interactively prompts you to create a new Normal or Scheduled task.
prn edit
Interactively edit an existing task, including its due date and reschedule settings.
prn complete
Mark a task as complete. If the task is scheduled to repeat, its next due date will be calculated and set automatically.
prn describe
Shows a detailed description, status, and completion summary of any single task.
prn history
Shows the full, detailed completion history for a single task.
prn report
Generates a report of all due, overdue, and upcoming tasks.
prn help
Displays a list of available commands.
prn version
Displays the application's version number.
Flexible Installation
Install the application using one of three methods depending on your needs.
Method 1: PHAR Release (Recommended for most users)
This method uses a single, executable .phar
file that contains the entire application. It is the easiest way to get started.
# 1. Download the prn.phar file from the latest release on GitHub.
$ Download prn.phar
# 2. Make it executable.
$ chmod +x prn.phar
# 3. (Optional) Move it into your PATH to make it accessible from anywhere.
$ sudo mv prn.phar /usr/local/bin/prn
# 4. Run it.
$ prn help
Method 2: Composer (Recommended for PHP developers)
If you are a PHP developer, you can install Perennial Task globally using Composer.
# 1. Install the package globally.
$ composer global require arthurdick/perennial-task
# 2. Update Your PATH: Ensure Composer's global bin directory is in your system's PATH. Add the following line to your ~/.bashrc
or ~/.zshrc
:
$ export PATH="$PATH:$(composer global config bin-dir --absolute -q)"
# 3. Apply the Changes.
$ source ~/.bashrc
# 4. Start managing tasks!
$ prn create
Method 3: Manual Installation from Source (Recommended for contributors)
This method is for developers who want to work on the source code.
- Linux Environment
- PHP 7.4+ with
SimpleXML
andDOM
extensions
# 1. Clone the repository and install dependencies.
$ git clone https://github.com/arthurdick/perennial-task.git
$ cd perennial-task
$ composer install
# 2. Run the application using the prn executable in the project root.
$ ./prn help
Free and Open Source
Perennial Task is released under the MIT License. Feel free to use, modify, and distribute it. Contributions and feedback are always welcome!