View on GitHub

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 and DOM 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!