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

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.
java -version should report 17.x.flowcli.jar from here.java -jar flowcli.jar
help to see the list of commands.bye. You can use either inline commands (full syntax) or interactive mode (just type the command name for guided input).✅ 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:
flowcli.jarexport-tasks to create human-readable snapshots for reports or sharingFlowCLI supports two command modes to suit your preference:
Inline Commands: Provide all arguments in one line for quick execution
list --all.--.YYYY-MM-DD format. Priorities accept low, medium, or high.Interactive Mode: Get guided prompts for missing information
add, create, update) and FlowCLI will ask for each required detailBoth modes work identically - choose whichever feels more comfortable!
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 --all or list <projectIndex> or list (interactive mode)list --all shows all projects and their indices.list <projectIndex> shows the tasks under a specific project.list 1
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:
list --all and use the shown index (starts at 1).low, medium, high (case-insensitive).YYYY-MM-DD (e.g., 2025-11-15).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.
--description replaces the task description.--deadline updates the due date; pass none (or clear) to remove an existing deadline.--priority accepts low, medium, or high.update-task 1 2 --description "Assemble party bags" --deadline 2025-02-15 --priority medium
update-task 1 3 --deadline none
Common mistakes and fixes:
list <projectIndex> to see valid task numbers.YYYY-MM-DD, or none to clear the deadline.low, medium, or high.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-project <projectIndex> --confirm or delete-task <projectIndex> <taskIndex> or delete (interactive mode)delete-project <projectIndex> --confirm removes the entire project and all its tasks.delete-task <projectIndex> <taskIndex> removes the indexed task from that project.delete-task 1 3
delete-project 1 --confirm
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:
--deadline or --priority.ascending or descending.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:
low, medium, or high.status <projectIndex> or status --all or status (interactive mode)status <projectIndex> shows the completion status for a specific project.status --all shows the completion status for all projects.status 1
status --all
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:
--all flag: Always exports all tasks from all projects
export-tasks all-tasks.txt --all
export-tasks party-plan.txt 1
export-tasks high-priority.txt filter-tasks --priority high sort-tasks --deadline ascending
sort-tasks or filter-tasks, exports that cached viewlist command), exports all tasks--all flagClearing the cached view:
The cached sorted/filtered view is automatically cleared when you use list commands:
list --all clears the cached viewlist <projectIndex> clears the cached viewNotes:
export-tasks "My Reports/tasks.txt".txt extension in the filename. In interactive mode, entering the name without .txt will auto-append .txt.Common mistakes and fixes:
.txt.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)
help / byehelp reprints the command summary inside the app.bye exits FlowCLI.Here are some practical examples of how to combine commands for common use cases:
# 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
# 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
# Check project status
status --all
# Mark completed tasks
mark 1 1
mark 1 3
# Remove finished tasks
delete-task 1 1
# 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
Want to make sure FlowCLI is working perfectly? Follow these steps to test all features and get comfortable with the interface.
# 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
For a thorough test of all FlowCLI features, use this sample dataset:
# 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.
Now explore FlowCLI’s full capabilities:
help to see all commands and their formatsadd-task 1 "New task" --priority highadd, create, list, mark, unmark, update, delete, sort, filter, or export for guided inputsort-tasks --deadline ascending or filter-tasks --priority highstatus --all to see project completion overviewexport-tasks my-tasks.txt to save your worklist --all“Project index is out of range”
list --all“Task index is out of range”
list <projectIndex> to see all tasks in that project“Export failed: Permission denied”
C:\Windows“Export failed: Directory does not exist”
~/exports/report.txt)“Export failed due to filesystem error (read-only, disk full, etc.)”
“File is currently open or locked”
Interactive mode not triggering?
add not add-task)create, add, list, mark, unmark, delete, update, sort, filter, export“Invalid date format”
YYYY-MM-DD format (e.g., 2025-11-15)“Invalid priority value”
low, medium, or highl, m, h“Unexpected extra parameters”
status and list expect only the documented argumentsstatus 1 2 → Error: “Unexpected extra parameters: 2” → Use status 1list 1 extra → Error: “Unexpected extra parameters: extra” → Use list 1help or the Command Summary table“This command does not accept any parameters”
help and bye don’t take any argumentshelp extra → Use help (no arguments needed)bye extra → Use bye (no arguments needed)list --all to check what projects you havehelp anytime to see all available commands and their formatslist before deletingstatus commandhigh for urgent/important tasksmedium for regular taskslow for nice-to-have itemsstatus --all to get a quick overview of all your projectsexport-tasks meeting.txt filter-tasks --priority high)export-tasks week.txt sort-tasks --deadline ascending)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!
| 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