mitre

Create a Task Manager CLI Tool

This project aims to develop a basic command-line interface (CLI) task management tool that enables users to efficiently manage their tasks and lists directly from the terminal. The tool is designed to provide a straightforward and intuitive interface for creating, organizing, and tracking tasks. Use any language you like.

Working Agreement
link

A working agreement is essentially a promise to you or to your team on habits and processes you agree to follow while working on a project.

Tip: Try to incorporate as many of these habits as possible, as is they aim to reflect a real-world workflow vs just hacking away at something. They are designed to keep you organized and ensure you deliver a quality product.

optional
all_inclusive
circle
Error Handling and Feedback

As a developer, I agree to handle errors gracefully and provide feedback to the user.

Key Points
  • Implement error messages for invalid commands, missing arguments, or other user errors.
  • Ensure success messages for operations such as adding tasks or creating lists are distinct and easily visible.
  • Provide suggestions for correcting common errors to guide users in the right direction.
optional
all_inclusive
circle
Stories Must be Properly Tested

As a developer, I agree to ensure each story is properly tested. (A lot of times it can be a pain to test a CLI's tool main function, you'll understand when you get there, try your best, 100% code coverage is not required)

Key Points
  • Each story includes necessary unit testing.
  • Tests are run upon completion of a story.
  • All tests should pass before merge.
optional
all_inclusive
circle
Use Story Branches

As a developer, I agree to create a new git branch for each story I work on.

Key Points
  • Checkout a new branch for each story.
  • Development for a story is committed to the story branch.
  • Upon completion, create a PR to merge a story branch back into main.
  • If you are doing this project solo, you will be merging your own PRs.
(F) Project Setup and Initialization
link

Set up the project environment and initial CLI tool structure to ensure smooth development and usability.

optional
circle
(S) Environment Setup

As a developer, I want to set up the development environment, so that I can begin building the CLI tool efficiently.

Key Points
  • Install necessary tools and dependencies, such as a specific programming language, libraries, or frameworks.
  • Create a project directory structure with separate folders for source code, tests, and documentation.
  • Initialize version control (e.g., Git) and set up a repository for tracking changes.
optional
circle
(S) Basic CLI Structure

As a developer, I want to create the basic structure of the CLI tool, so that I can start adding features and commands.

Key Points
  • Implement a command-line interface that accepts user input and provides a basic response.
  • Set up a command parser to handle different command options and arguments.
  • Ensure that the tool runs without errors and provides an initial message when executed.
optional
circle
(S) Command Help

As a user, I want to access help for commands, so that I can easily understand how to use the tool.

Key Points
  • Implement a `--help` command that provides a brief description of all available commands and their usage.
  • Include examples for each command to demonstrate typical usage scenarios.
  • Ensure the help output is clear and well-organized for easy reading.
(F) Task Management
link

Implement commands to add, delete, and complete tasks within lists, with persistent storage.

optional
circle
(S) Add Task Command

As a user, I want to add tasks to a list using a command, so that I can keep track of things I need to do.

Key Points
  • Implement the `--add-task` command to add a task to a specified list.
  • Ensure that tasks can be added with a title and optional description.
  • Confirm task addition by displaying a success message to the user.
  • Save tasks to a JSON file to persist data across sessions.
optional
circle
(S) Delete Task Command

As a user, I want to delete tasks from a list using a command, so that I can remove tasks I no longer need to complete.

Key Points
  • Implement the `--delete-task` command to remove a task from a specified list.
  • Allow users to specify the task to delete by its index or name.
  • Confirm task deletion with a success message and update the list display.
  • Update the JSON file to reflect task deletions.
optional
circle
(S) Complete Task Command

As a user, I want to mark tasks as complete, so that I can track which tasks I have finished.

Key Points
  • Implement the `--complete-task` command to mark a task as complete.
  • Visually indicate completed tasks (e.g., by adding a checkmark or changing text color).
  • Provide feedback on the task's completion status.
  • Update the JSON file to record the completion status of tasks.
(F) List Management
link

Create and manage lists to organize tasks, with persistent storage.

optional
circle
(S) New List Command

As a user, I want to create new lists, so that I can organize tasks into different categories.

Key Points
  • Implement the `--new-list` command to create a new task list with a specified name.
  • Ensure that list names are unique and provide an error message if a duplicate name is entered.
  • Confirm list creation with a success message.
  • Save the new list to a JSON file for persistence.
optional
circle
(S) Show Lists Command

As a user, I want to see all my lists and their tasks, so that I can review and manage them effectively.

Key Points
  • Implement the `--show-lists` command to display all existing lists and their tasks.
  • Format the output to clearly show list names and associated tasks, with completed tasks marked appropriately.
  • Load lists and tasks from the JSON file to ensure data is up-to-date.
optional
circle
(S) Delete List Command

As a user, I want to delete entire lists, so that I can remove obsolete or unwanted task categories.

Key Points
  • Implement the `--delete-list` command to remove a specified list and all its tasks.
  • Ensure confirmation from the user before deleting a list to prevent accidental loss.
  • Provide feedback on the deletion process and update the display of lists.
  • Update the JSON file to reflect list deletions.
(F) User Experience Enhancements
link

Improve usability and user experience with intuitive commands and clear feedback.

optional
circle
(S) User Configuration and Preferences

As a user, I want to configure settings and preferences for the tool, so that I can customize my experience.

Key Points
  • Allow users to set preferences such as default list sorting or display options.
  • Implement a configuration file or command-line options for setting these preferences.
  • Ensure that changes to preferences are persisted between sessions.
optional
circle
(S) Task Filtering

As a user, I want to filter tasks by status, so that I can view only incomplete or completed tasks.

Key Points
  • Implement a filtering option to show only incomplete or completed tasks.
  • Ensure the filter is easy to use and can be applied when displaying task lists.
  • Provide clear indications of filtered views to the user.