utils/focus_project
Krzysztof kuhy Rudnicki d45b1086c3
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
earned_time pre-commit / pre-commit (push) Waiting to run
earned_time tests / test (push) Waiting to run
file length / file-length (push) Waiting to run
focus-project pre-commit / pre-commit (push) Waiting to run
focus-project tests / test (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
palette drift / palette (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
shared gate tests / gate unit tests (push) Waiting to run
focus_project: update_project, v0.3.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WzxdWYcmik6APnHfc9gEVy
2026-11-02 08:34:32 +01:00
..
focus_project focus_project: update_project, v0.3.0 2026-11-02 08:34:32 +01:00
systemd focus_project: minutes, ledger, harvester 2026-11-02 08:19:01 +01:00
.pre-commit-config.yaml focus_project: registry, stands_down, activity 2026-11-02 08:13:52 +01:00
install_harvest.sh focus_project: minutes, ledger, harvester 2026-11-02 08:19:01 +01:00
install.sh focus_project: registry, stands_down, activity 2026-11-02 08:13:52 +01:00
pyproject.toml focus_project: update_project, v0.3.0 2026-11-02 08:34:32 +01:00
README.md focus_project: registry, stands_down, activity 2026-11-02 08:13:52 +01:00
requirements.txt focus_project: registry, stands_down, activity 2026-11-02 08:13:52 +01:00

focus_project

Time-boxed focus projects ("until Thursday I prepare for X"). The active project switches chosen gates off and defines a daily-minutes gate.

import focus_project as fp

fp.stands_down("leetcode", today)   # gate in leetcode|book|reading|tutor; never raises
fp.active(today)                    # Project | None
fp.status(today)                    # dict for i3bar / GUIs
fp.record_activity("timer", "start")

Data: $FOCUS_PROJECT_DATA or ~/.local/share/focus_project/ (projects.json, activity.jsonl). minutes.py is owned by the minutes/harvester agent. Install: ./install.sh (stdlib only, editable user install for /usr/bin/python3).