OpenDevToolkit is a small command line tool that groups a handful of practical developer utilities under one executable.
It is designed for personal use, small projects, and simple automation. It is not intended to replace full platforms, hosted services, or complex workflow tools.
Everything runs locally. Nothing is auto-detected, synced, or uploaded anywhere.
This is a local install intended for development or personal use.
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .After installing, confirm it is working:
odt --help
odt pluginsThe main command is odt. Each tool is exposed as a subcommand.
odt --help
odt pluginsChecks a README file for common issues that make repositories harder to understand or adopt.
odt readme check README.mdIt looks for things like a title, install steps, usage examples, screenshots, and license mentions.
If checks fail, the command exits with a non-zero status so it can be used in CI.
A very simple time tracker that stores data locally in JSON.
odt time start "my-project"
odt time status
odt time stop
odt time report --days 7
odt time export --out time.jsonThere is no account system and no syncing. Project names are just strings.
Performs basic repository hygiene checks.
odt repo check .This checks for things like the presence of a README, license, gitignore, source directory, and common junk files.
It reports warnings only and does not modify anything.
Lists common junk files and directories, with a dry run by default.
odt files clean
odt files clean --applyNothing is deleted unless --apply is explicitly provided.
A minimal local notes tool that stores plain text notes.
odt notes add "fix README wording"
odt notes listNotes are stored locally and are not associated with any repository unless you choose to use them that way.
By default, OpenDevToolkit stores state in a per-user data directory on the machine.
If you want to control where data is written, you can override it:
odt --data-dir ./_odt_data time statusTools are implemented as plugins discovered through Python entry points.
Each plugin registers its own subcommands and does not depend on other plugins. The interface is intentionally small and stable.
See docs/PLUGIN_SPEC.md for details.
Tests can be run locally with:
pip install pytest
pytestA GitHub Actions workflow runs the same tests on push and pull requests.
This project is intentionally limited in scope.
It is meant to:
- replace scattered one-off scripts
- provide a single CLI entry point
- stay understandable without documentation sprawl
It is not meant to:
- be a framework
- be a hosted service
- dictate how you work
MIT License. See LICENSE for details.
