FlowCLI

Logo

A fast, minimal CLI project task manager for efficient task and project management

View the Project on GitHub AY2526S1-CS2113-W13-2/tp

FlowCLI Cover

User Guide

Introduction

FlowCLI is a Command Line Interface (CLI) app for managing tasks and projects, optimised for fast, fully keyboard-driven workflows. It offers two convenient ways to work: inline commands for power users who want to type everything at once, and interactive mode for guided step-by-step input. Track priorities, deadlines and statuses of your projects, filter and sort instantly, then export the current view to a TXT file to save your changes. If you’re a fast typer, FlowCLI is perfect for you - save hours on project management as it gets your work done faster than click-heavy apps.

Quick Start

  1. Ensure Java 17 is installed: java -version should report 17.x.
  2. Download the latest flowcli.jar from here.
  3. Run the application from a terminal in the same folder as the JAR:
    java -jar flowcli.jar
    
  4. You will see flowCLIs greetings, then you may begin typing the commands
  5. Type help to see the list of commands.
  6. FlowCLI will read commands until you enter bye. You can use either inline commands (full syntax) or interactive mode (just type the command name for guided input).

Important Notes

Data Persistence

FlowCLI automatically saves your data! All projects and tasks are automatically saved to data/flowcli-data.txt when you exit with bye. When you reopen FlowCLI, your data is automatically loaded.

Additional features:

Features

General Command Format

FlowCLI supports two command modes to suit your preference:

Inline Commands: Provide all arguments in one line for quick execution

Interactive Mode: Get guided prompts for missing information

Both modes work identically - choose whichever feels more comfortable!

Create a project: create-project <projectName> / create (interactive mode)

Adds a new project. If you add a new project with the same name (any casing), FlowCLI reports a duplicate.

Project names can be wrapped in quotes (double " or single '). FlowCLI will automatically remove the surrounding quotes when storing the project name. Quotes are optional - you can use them for names with spaces, or omit them entirely.

create-project "Birthday Bash"
create-project 'Birthday Bash'
create-project Birthday Bash

All three examples above create projects Birthday Bash.

List projects or tasks: list --all or list <projectIndex> or list (interactive mode)

list 1

Add a task: add-task <projectIndex> <description> [--priority <level>] [--deadline <YYYY-MM-DD>] or add (interactive mode)

Adds a task under an existing project with optional priority and deadline. Priority defaults to medium, deadline defaults to none.

Structure is felxible such that you can also input --deadline first before --priority as long as the input are valid

add-task 1 Hang fairy lights --priority high --deadline 2025-01-31

Common mistakes and fixes:

Update a task: update-task <projectIndex> <taskIndex> [--description <desc>] [--deadline <YYYY-MM-DD|none>] [--priority <level>] or update (interactive mode)

Edits the specified task in place. You can change one field or combine multiple options in the same command.

update-task 1 2 --description "Assemble party bags" --deadline 2025-02-15 --priority medium
update-task 1 3 --deadline none

Common mistakes and fixes:

Mark or unmark a task: mark <projectIndex> <taskIndex> / unmark <projectIndex> <taskIndex> or mark/unmark (interactive mode)

Marks the specified task (based on the number shown in list <projectIndex>) as done or not done.

mark 1 2

Delete items: delete-project <projectIndex> --confirm or delete-task <projectIndex> <taskIndex> or delete (interactive mode)

delete-task 1 3
delete-project 1 --confirm

Sort tasks across projects: sort-tasks <--deadline|--priority> <ascending|descending> or sort (interactive mode)

Displays every task from every project in the requested order and remembers this view for exporting.

sort-tasks --deadline ascending

Common mistakes and fixes:

Filter tasks across projects: filter-tasks --priority <value> or filter (interactive mode)

Shows only tasks that match the chosen priority. The filtered view can be exported directly.

filter-tasks --priority high

Common mistakes and fixes:

Get project status: status <projectIndex> or status --all or status (interactive mode)

status 1
status --all

Export tasks: export-tasks <filename>.txt [projectIndex] [filter-tasks --priority <value>] [sort-tasks <--deadline|--priority> <order>] or export (interactive mode)

Saves tasks to a plain-text file with flexible export options.

Export behavior:

Clearing the cached view: The cached sorted/filtered view is automatically cleared when you use list commands:

Notes:

Common mistakes and fixes:

Interactive mode options: After entering a filename, choose to export: all tasks, a specific project, filtered tasks, sorted tasks, or filtered+sorted tasks, then confirm.

Export file format example: When you export tasks, FLowCLI creates a plain text file like this:

CS2113T Project - high priority
============================================

[X] [H] Finalize DG (Due: 2025-11-10)
[ ] [H] Implement UI (Due: 2025-11-20)
[ ] [M] Write UG (Due: 2025-11-25)

Get help and exit: help / bye

Common Workflows

Here are some practical examples of how to combine commands for common use cases:

Daily Task Review

# Check what's urgent
filter-tasks --priority high
status --all

# Review and update a task
list 1
update-task 1 2 --deadline 2025-11-15
mark 1 1

Weekly Planning

# See all upcoming deadlines
sort-tasks --deadline ascending

# Export high-priority items for the week
export-tasks weekly-plan.txt filter-tasks --priority high sort-tasks --deadline ascending

Project Cleanup

# Check project status
status --all

# Mark completed tasks
mark 1 1
mark 1 3

# Remove finished tasks
delete-task 1 1

Custom Reports

# Create a report of medium-priority tasks
export-tasks medium-tasks.txt filter-tasks --priority medium

# Create a deadline-sorted report for a specific project
export-tasks project1-deadlines.txt 1 sort-tasks --deadline ascending

Testing Your Setup

Want to make sure FlowCLI is working perfectly? Follow these steps to test all features and get comfortable with the interface.

Quick Test Setup

  1. Get started fast: Launch FlowCLI and try these basic commands to verify everything works:
    # Start FlowCLI
    java -jar flowcli.jar
    
    # Get help (shows all available commands)
    help
    
    # Create your first project
    create-project "My First Project"
    
    # Try out interactive mode to create!
    create
    
    # Add a sample task
    add-task 1 "Test task" --priority high --deadline 2025-12-31
    
    # View your project
    list --all
    
    # Exit when done
    bye
    

Comprehensive Testing Guide

For a thorough test of all FlowCLI features, use this sample dataset:

Sample Data Setup

# Create sample projects
create-project "CS2113T Project"
create-project "Internship Hunt"
create-project "Household Chores"
create-project "Fitness Plan"
create-project "Side Project - Website"

# Add tasks with various priorities and deadlines
add-task 1 "Finalize DG" --priority high --deadline 2025-11-10
add-task 1 "Implement UI" --priority high --deadline 2025-11-20
add-task 1 "Write UG" --priority medium --deadline 2025-11-25
add-task 1 "Prepare for Demo" --priority medium
add-task 1 "Review teammate PR" --priority low

add-task 2 "Update Resume" --priority high
add-task 2 "Apply to 5 companies" --priority medium --deadline 2025-11-15
add-task 2 "Research company A" --priority low
add-task 2 "Practice LeetCode" --priority medium

add-task 3 "Buy groceries" --priority medium --deadline 2025-10-29
add-task 3 "Clean room" --priority low
add-task 3 "Pay utility bill" --priority high --deadline 2025-11-01

add-task 4 "Go for run" --priority medium
add-task 4 "Meal prep for week" --priority low
add-task 4 "Go to gym" --priority medium

add-task 5 "Design homepage" --priority medium
add-task 5 "Set up database" --priority high --deadline 2025-12-01
add-task 5 "Draft 'About Me' page" --priority low

# Mark some tasks as complete
mark 1 1
mark 2 1
mark 3 3
mark 4 1

These are to build up the list of projects and tasks, with the necessary details. You can freely test out

sort/filter, delete, update, export

with these however you like.

Test All Commands

Now explore FlowCLI’s full capabilities:

What to Expect

Troubleshooting Tips

Troubleshooting

Common Errors and Solutions

“Project index is out of range”

“Task index is out of range”

“Export failed: Permission denied”

“Export failed: Directory does not exist”

“Export failed due to filesystem error (read-only, disk full, etc.)”

“File is currently open or locked”

Interactive mode not triggering?

“Invalid date format”

“Invalid priority value”

“Unexpected extra parameters”

“This command does not accept any parameters”

Tips and Best Practices

Workflow Optimization

Command Usage

Task Management

Export Strategies

FAQ

Q: How do I transfer my tasks to another machine? A: FlowCLI stores tasks in data/flowcli-data.txt. Copy this file to the same location (relative to where you run the JAR) on the new machine. Alternatively, use export-tasks all_tasks.txt for a human-readable snapshot.

Q: Why do I get an error about an invalid index? A: Project and task indices must be valid numbers corresponding to the lists. Use list --all to see project indices and list <projectIndex> for task indices.

Q: What’s the difference between inline commands and interactive mode? A: Inline commands require you to type the full command with all arguments (e.g., add-task 1 "Buy groceries" --priority high). Interactive mode lets you type just the command name (e.g., add) and then guides you through each required input step-by-step. Both modes do exactly the same thing - choose whichever you prefer!

Command Summary

Action Format Example
Create project create-project <projectName> create-project BirthdayBash
List all projects list --all list --all
List tasks list <projectIndex> list 1
Add task add-task <projectIndex> <desc> [--priority <level>] [--deadline <YYYY-MM-DD>] add-task 1 "Inflate balloons" --priority high --deadline 2024-06-15
Update task update-task <projectIndex> <taskIndex> [--description <desc>] [--deadline <YYYY-MM-DD\|none>] [--priority <level>] update-task 1 1 --priority medium
Mark / Unmark mark <projectIndex> <taskIndex> / unmark <projectIndex> <taskIndex> mark 1 1
Delete project delete-project <projectIndex> --confirm delete-project 1 --confirm
Delete task delete-task <projectIndex> <taskIndex> delete-task 1 2
Sort tasks sort-tasks <--deadline\|--priority> <ascending\|descending> sort-tasks --priority descending
Filter tasks filter-tasks --priority <value> filter-tasks --priority medium
Get status status <projectIndex> / status --all status 1
Export tasks export-tasks <filename>.txt [projectIndex] [filter-tasks ...] [sort-tasks ...] export-tasks party-plan.txt 1
Help / Exit help / bye help

Or, simply just use basic commands: create, list, add, update, mark/unmark, delete, sort, filter, status, export, help, bye, to easily trigger the interactive prompt