Skip to main content

Local markdown worklog helpers for developer workflows.

Project description

worklogs

Local markdown worklog helpers for developer workflows.

worklogs creates dated markdown files under a scope, date folder, and compact filename:

~/worklog/<scope>/YYYY/MM-month/DD-ddd/HHMM-Ha--name--kind.md

Installation

python -m pip install worklogs

For local development:

uv sync --extra dev

Standard Python fallback:

python -m pip install -e ".[dev]"

Usage

Check the installed version:

worklogs --version

Create a plan with explicit fields:

worklogs new --scope work --kind plan --project backend-api --slug improve-deploy-notes

Create the same plan with the fast filename-shaped token:

worklogs new plan--backend-api--improve-deploy-notes --scope work

Plans create a linked companion execution note by default:

HHMM--plan--backend-api--improve-deploy-notes.md
HHMM--note--backend-api--improve-deploy-notes-execution-log.md

Create a standalone note:

worklogs new note--personal-site--theme-ideas --scope personal

Preview the generated paths and markdown without writing files:

worklogs new plan--backend-api--improve-deploy-notes --scope work --dry-run

Print created paths for scripts:

worklogs new note--personal-site--theme-ideas --scope personal --print-path

Create a dated project workset directory:

worklogs workset new backend-api-refactor --worksets-root ~/worksets

Create a dated workset under organizer folders:

worklogs workset new release-tools/python-packaging/worklogs-0.2.1 \
  --worksets-root ~/worksets

Worksets are created under:

<worksets-root>/YYYY/MM-month/DD-ddd/<workset-path>/

Preview a workset path without creating it:

worklogs workset new release-tools/python-packaging/worklogs-0.2.1 \
  --worksets-root ~/worksets \
  --dry-run

Print only the created path for scripts:

worklogs workset new backend-api-refactor \
  --worksets-root ~/worksets \
  --print-path

Supported kinds:

plan
note
investigation
codereview

Config

Optional defaults live in:

~/.config/worklogs/config.toml

Example:

root = "~/worklog"
default_scope = "work"
timezone = "America/Toronto"
worksets_root = "~/worksets"

Resolution order:

  1. CLI flags
  2. environment variables: WORKLOG_ROOT, WORKLOG_SCOPE, WORKLOG_TIMEZONE, WORKLOG_WORKSETS_ROOT
  3. config file
  4. package defaults

With default_scope configured, the fast path can omit --scope:

worklogs new plan--backend-api--improve-deploy-notes

With worksets_root configured, the workset path can omit --worksets-root:

worklogs workset new backend-api-refactor

For shorter personal shell usage, add a local alias:

alias wl='worklogs'

The package installs the explicit worklogs command; wl is intentionally left as a shell-level shortcut so it cannot shadow another global command.

Development Workflow

Run the standard checks before opening a PR:

uv run ruff format --check .
uv run ruff check .
uv run mypy
uv run pytest
uv build

If you are using standard Python tools instead of uv:

python -m ruff format --check .
python -m ruff check .
python -m mypy
python -m pytest
python -m build

CI / GitHub Actions

GitHub Actions runs:

  • fast Ruff-only checks
  • Ruff, mypy, and pytest
  • package build and wheel smoke test with pip
  • package build and wheel smoke test with uv

The release workflow in .github/workflows/release.yml builds and publishes the package to PyPI when a GitHub Release is published.

Publishing

This project uses PyPI Trusted Publishing. The PyPI pending publisher should be:

PyPI project name: worklogs
Owner: alik-git
Repository name: worklogs
Workflow name: release.yml
Environment name: pypi

Create a GitHub Release for the version in pyproject.toml:

gh release create v0.2.1 \
  --title "v0.2.1" \
  --notes "Add dated workset directory creation."

Publishing is release-driven on purpose: normal pushes and pull requests build and test the package, but only GitHub Releases publish to PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

worklogs-0.3.5.tar.gz (38.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

worklogs-0.3.5-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file worklogs-0.3.5.tar.gz.

File metadata

  • Download URL: worklogs-0.3.5.tar.gz
  • Upload date:
  • Size: 38.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for worklogs-0.3.5.tar.gz
Algorithm Hash digest
SHA256 7db1790794b1e23901961216e02db2849f4f3dfd5e582fbfe108e176c00d888b
MD5 33ffee42f9137e7490d6b4f4fb5b6ad5
BLAKE2b-256 921f8c9450bfb0fadab96a619600788d3433c1050473ea4624957a9ec1ba2977

See more details on using hashes here.

Provenance

The following attestation bundles were made for worklogs-0.3.5.tar.gz:

Publisher: release.yml on alik-git/worklogs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file worklogs-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: worklogs-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for worklogs-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 258965ddd155baa37992c7d990150898fb69b22e316a7b778c26ed720966cc5a
MD5 3e46034b35a2a11782f7128d8fc9901c
BLAKE2b-256 88eda11a37843df573dae7e765ab16d9820e7b1873a5f3b034b2bac47984d000

See more details on using hashes here.

Provenance

The following attestation bundles were made for worklogs-0.3.5-py3-none-any.whl:

Publisher: release.yml on alik-git/worklogs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page