Небольшой консольный менеджер задач на Python — без сторонних зависимостей.
Построен на стандартной библиотеке argparse, задачи хранятся в обычном JSON-файле.
- Добавление, просмотр, завершение и удаление задач прямо из терминала
- Фильтр списка: показывать только незавершённые задачи
- Удаление всех задач одной командой
- Хранение в JSON — файл легко открыть, отредактировать или забэкапить
- Путь к файлу настраивается через переменную окружения
TODO_FILE - Покрытие юнит-тестами (pytest)
todo-cli/
├── todo_cli/
│ ├── __init__.py
│ ├── __main__.py # запуск через `python -m todo_cli`
│ ├── cli.py # парсер argparse и обработка команд
│ ├── models.py # датакласс Task
│ └── storage.py # слой хранения в JSON
├── tests/
│ ├── test_cli.py
│ └── test_storage.py
├── .env.example
├── .gitignore
├── pyproject.toml
├── requirements.txt
└── README.md
- Python 3.10+
Склонируйте репозиторий и (по желанию) создайте виртуальное окружение:
git clone https://github.com/<your-username>/todo-cli.git
cd todo-cli
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtУстановите сам CLI в editable-режиме, чтобы команда todo стала доступна
в терминале:
pip install -e .Скопируйте пример файла с переменными окружения и при необходимости поправьте путь к хранилищу:
cp .env.example .env| Переменная | Описание | По умолчанию |
|---|---|---|
TODO_FILE |
Путь к JSON-файлу со списком задач. | ~/.todo-cli/tasks.json |
Также путь можно задать на каждый вызов через флаг --file.
После pip install -e . доступна команда todo. Без установки можно
запускать модуль напрямую: python -m todo_cli.
todo add "Написать README для портфолио"todo list
# показать только незавершённые задачи
todo list --pendingПример вывода:
1. [ ] Написать README для портфолио (2026-04-24T10:21:03)
2. [x] Купить молоко (2026-04-24T10:22:11)
todo done 1todo remove 2todo cleartodo --file ./tasks.json add "Попробовать todo-cli"
todo --file ./tasks.json listtodo --version
todo --help
todo add --helppip install -r requirements.txt
pytestВсе тесты должны пройти:
tests/test_cli.py ...... [ 35%]
tests/test_storage.py ........... [100%]
todo_cli/cli.pyсобирает парсерargparseс подкомандами (add,list,done,remove,clear) и передаёт управление слою хранения.todo_cli/storage.pyчитает и пишет задачи в JSON. Путь к файлу определяется по приоритету: аргумент--file→ переменная окруженияTODO_FILE→ значение по умолчанию~/.todo-cli/tasks.json.todo_cli/models.pyописывает небольшой датаклассTaskс полямиid,title,doneиcreated_at.
MIT