Skip to main content

CarpeDiem

CI PyPI

CarpeDiem (carpe diem — seize the day) turns quick notes into a realistic day plan: natural-language capture, a smart morning proposal with real time slots, pomodoro focus during the day, evening closing. Offline-first, in English or Italian, no account, no network in the planning path.

What makes it different:

  • Real time slots, not just a list — the planner places tasks into HH:MM–HH:MM blocks inside your explicit availability, around fixed events, respecting deadlines, priorities, durations and daily capacity.
  • Deterministic and explainable — same input always yields the same plan, and every row carries its reason (deadline, priority, calibration…). No scoring black box, no AI service.
  • It learns your pace — finishing a task records the actual pomodoros; the planner calibrates future estimates from your local history (median factor, min 5 samples, shown in Stats).
  • Local-first and private — everything lives in JSON next to your home; planning never touches the network. Optional Fernet encryption, fail-closed writes (an unreadable disk is never overwritten), CLI and TUI safely sharing the same data.
  • Usable from the terminal — the full loop works in the TUI, and add/list/done/show/replan work headless for scripts.
Capture in seconds (n, natural language) → morning proposal to confirm (P)
→ work from the Day plan timeline with pomodoro (p, o) → evening Closing (R).

In the app, open the menu (m) → Day → Recommended workflow for the 5-step daily checklist.

Leggimi in italiano

CarpeDiem home with due-date radar Home: task table with the due-date radar (priority × horizon, b cycles chart → text → hidden, click a dot to open the task).

Morning: context, availability, fixed events and proposal with time slots Buongiorno (P): explicit availability window (HH:MM–HH:MM), fixed events (HH:MM-HH:MM Title) and the proposal with HH:MM–HH:MM slots plus today context above. Confirming only adds — Esc writes nothing.

Day plan: the operational timeline of the day Day plan (p): the confirmed tasks re-scheduled in the persisted window, with inline HH:MM–HH:MM prefixes, read-only EVENT: rows and the ▶ marker on the pomodoro task. Fully operational (Enter/Space/o/O/x).

Day closing: today summary and tomorrow plan Day closing (R): today summary (done vs goal, pomodoros) and the picker that becomes exactly tomorrow's plan.

Stats with estimates-vs-actual calibration Stats (k): goals and streaks, per-project breakdown, peak hours, punctuality, heatmap — plus the estimates-vs-actual factor the planner learns from.

Agenda: overdue, today, tomorrow, next 7 days Agenda (Day → Agenda): the chronological radar — overdue, today, tomorrow, next 7 days, important undated.

Install in 2 minutes

  1. You need Python 3.12+: check with python3 --version.
  2. Recommended: isolated install with pipx (puts carpediem on your PATH):
pipx install carpediem

Plain pip works too (pip install carpediem), preferably inside a virtualenv. From the git repo:

pipx install git+https://github.com/fabx-dev/carpediem.git
  1. Alternative for developers (virtualenv):
python3 -m venv .venv
.venv/bin/pip install .
  1. Start the TUI:
carpediem

On first run: load the demo data to explore, or start empty.

Check it works:

carpediem --help
carpediem list

Common issues: pipx: command not found (install pipx first), old Python (<3.12), separate data dir with TASKO_HOME=/tmp/carpediem-demo carpediem. Docker (docker compose up) is dev-only, not the main install path.

Requires Python 3.12+. Built with Textual; data stays in local JSON (see Data below).

The daily loop

  1. Capture — n opens the form; ctrl+l fills the fields from the title using #tag *project !priority ~estimate //note (dates in Italian or English, e.g. domani, friday). Same parser in the CLI: carpediem add "Call bank tomorrow #calls *personal !high". The due field also has a 📅 calendar picker; Esc never writes.
  2. Morning (P, Buongiorno) — context (planned, due, overdue, load in 🍅 over capacity, yesterday, streak) plus the smart proposal with inline reasons (deadline, priority, calibrated estimates…). You set an explicit availability window (HH:MM–HH:MM, overnight rejected) and optional fixed events (one per line HH:MM-HH:MM Title, never persisted as tasks); the proposal shows HH:MM–HH:MM slots around them. Confirming is additive only: already-planned stay, Esc writes nothing, confirming with an empty/invalid window clears the persisted one (no stale reuse).
  3. Execution (p, Day plan) — the operational sheet: exactly the confirmed tasks (planned_for == today), re-scheduled in the persisted window in Planner merit order. Scheduled rows carry an inline HH:MM–HH:MM prefix and stay fully operational (Enter detail, Space state, o/O pomodoro, x remove); fixed events appear as read-only EVENT: rows; tasks without a slot wait at the tail without a prefix. The ▶ marker follows the running pomodoro; the evening report adds a Planned vs executed section (estimate, slot, sessions, actuals, state).
  4. Closing (R, Day closing + evening report) — R shows today (done vs goal, pomodoros) and the picker that becomes exactly tomorrow's plan; the evening report (Day → Evening report) recaps done/leftovers, can print, and jumps to R in one click. No window, no slots invented: without a confirmed window the plan shows plain rows, never a default 09:00–18:00.

Planner notes: deterministic (same input → same plan) and explainable (every row carries its reason). day_hours in Settings is capacity, not working hours. A task without an estimate counts as 1 pomodoro (30 min) for planning only — a fallback, never a user estimate. Finishing an estimated task asks for the actual pomodoros (pre-filled with the counted ones); the planner calibrates with the local median factor (min 5 samples) and shows it in Stats. No AI, and the planner itself never uses the network (planning is always offline); the only network use in the product is the opt-in Outlook calendar import below.

Views

Day: agenda, plans, calendar

  • Recommended workflow — 5-step checklist (capture / morning / day / evening / week), first entry of Day.
  • Buongiorno (P) — context + proposal + slots, see loop step 2.
  • Agenda — chronological radar: overdue, today, tomorrow, next 7 days, important undated.
  • Day plan (p) — manual plan of today (+ add from Upcoming, x remove, Space pause, Enter detail, o/O pomodoro).
  • Week (w) / Calendar (c) — week strip and month calendar (day → day plan).
  • Evening report / Day closing (R) — recap + print + tomorrow picker.
  • Outlook (opt-in) — connect your Microsoft calendar from Buongiorno (button) to load the day's fixed events; needs encryption on, your own Entra app registration, one browser login (auth-code + PKCE, Calendars.Read only).

Views and insights

  • Due-date radar (b cycles chart → text → hidden, B full board) — strip-scatter priority × horizon with today line, worst-offenders caption and undated count; click a dot for the detail (or a picker on overlap). Falls back to text automatically when empty, without overwriting your preference.
  • Stats (k) — goals/streaks, week totals, per-priority and per-project, time-of-day and weekday peaks, pomodoros, 14-day completions, punctuality, 🍅 heatmap, estimates-vs-actual factor; CSV export.
  • Smart lists — name the current home filter (state/tag/project/search) and reapply it in one click from menu or palette (ctrl+p); any manual filter touch detaches back to manual (max 10, unique names).
  • Project health (y) — OK / at-risk / critical per project (progress, overdue, momentum).
  • Templates (T) — create/edit/apply, including from a project.
  • Goals — daily/weekly targets with streaks.

Data: backup, transfer, archive

  • Backup now / Restore backup — automatic zip snapshots in ~/Tasko_backups/ (14 kept), restore validates before touching disk with rollback.
  • Export: Markdown (ctrl+e) / CSV / stats CSV / iCal — the .ics covers active tasks with due dates; files land in ~/CarpeDiem_screenshots/. Exports are readable summaries, not full backups (no recurrences/plan/actuals): use Backup snapshots for complete state. Exports are always plaintext, even with encryption on.
  • Import: CSV — idempotent on (source, external_id) (re-import skips, internal ids untouched; rows without external id are always new).
  • Archive — done tasks aside with viewer and restore.

System

  • Settings — theme, filters, goals, language, day_hours capacity (1–16).
  • Security — optional Fernet encryption (PBKDF2, key in RAM only); locked files read as empty, never as corrupt.
  • Screenshot (ctrl+s) — SVG capture to ~/CarpeDiem_screenshots/.
  • Clear filters, Theme (v), Keys list, Refresh (r), Quit (q).

Keys

Key Action
n / s New todo / subtask of selected
ctrl+l (in form) Fill fields from title (natural language)
Space then 1/2/3 Active / Paused / Done (grid with arrows + Enter)
Enter / e Details (with inline edit) / Edit
d / u Delete (confirm) / Undo
o / O / X Start-open pomodoro / pause-resume / complete-skip
P / p Buongiorno proposal / Day plan
R / r Day closing / Refresh
b / B Radar chart → text → hidden / full board
c / w / k / y Calendar / week / stats / project health
f / t / g / / State, tag, project, search filters
G / W / C Replan preview / Week review / Clear filters
Esc (search active) Clear search only (other filters kept)
T / v / m / ctrl+p Templates / theme / menu / command palette
ctrl+s / ctrl+e Screenshot SVG / Markdown export
q Quit

Press m for the menu (Day / Views and insights / Data / System). The footer shows only m ☰ Menu; the palette (ctrl+p, Category › Entry) holds every command with its shortcut.

CLI

carpediem add "Call bank tomorrow #calls *personal !high ~2"  # natural language (default)
carpediem add "Buy milk" --project home --due 2026-09-30 --priority alta --tags spesa
carpediem list                          # all, sorted by due then title
carpediem list --state active --project home
carpediem list --porcelain               # id|state|priority|due|title, script-friendly
carpediem done 12
carpediem show 12
carpediem replan [--now HH:MM] [--apply]  # read-only preview by default; --apply commits

add without flags parses the phrase (#tag *project !prio ~estimate //note, recurrence, dates it/en); with flags the title is taken literally. done/show use ids; errors go to stderr with exit codes.

Use the TUI for the daily loop and the CLI for quick capture and scripts: list --porcelain emits stable id|state|priority|due|title rows, replan previews without writing unless --apply is given, and concurrent CLI/TUI use is safe (single-writer lock + per-id merge).

Data

Everything lives in local JSON next to your home (offline-first):

File Content
~/.todo_app.json Tasks (+ .bak.json previous copy; fields include actual_pomo/minutes, source/external_id)
~/.todo_templates.json Templates
~/.todo_pomodoro.json Timer session + cycle
~/.todo_config.json Theme, filters, goals, language, day_hours, kanban_mode, smart_lists (max 10), day_window ({date, start, end, events[]})
~/.todo_archive.json Archived done tasks
~/.todo_executions.json Pomodoro execution history (calibration; never backed up)
~/.todo_outlook_token.json Outlook token, owner-only, never backed up
~/Tasko_backups/ Automatic zip snapshots (14 kept)
~/CarpeDiem_screenshots/ SVG screenshots, CSV/Markdown exports

Single-writer commit() with inter-process lock and three-way per-id merge (CLI and TUI never overwrite each other). Restore a backup any time from the menu (Backup: restore). Optional encryption from System → Security. Language follows the system (Italian or English), override with TASKO_LANG=it|en or in Settings; isolate data with TASKO_HOME=/tmp/demo.

Dev

pip install -r requirements-dev.txt
python -m pytest tests/ -q
python -m ruff check src/ tests/

See CONTRIBUTING.md. CarpeDiem is an independent open-source project. Contributions, feedback, and issues are welcome in English or Italian.

License

MIT — see LICENSE and CHANGELOG.md.

Metadata

Release files for carpediem 0.21.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for carpediem 0.21.0
File Size Uploaded
carpediem-0.21.0.tar.gz 373.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for carpediem 0.21.0
File Interpreter ABI Platform
carpediem-0.21.0-py3-none-any.whl Python 3 none any Details

Total release size: 606.5 kB

Release files / carpediem-0.21.0.tar.gz

Download URL carpediem-0.21.0.tar.gz
Size 373.0 kB
Tags Source
SHA-256 checksum
How to use checksums
41040084efc27d0d7902d78b9311863ce97109bdf5b377d56ef3e6b542adc2d5
BLAKE2b-256 checksum
How to use checksums
a67cb55792ab64b7b39b4ef563a7c499d12049003b5c5a7ed40ab60e59231c38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / carpediem-0.21.0-py3-none-any.whl

Download URL carpediem-0.21.0-py3-none-any.whl
Size 233.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ffd8a9d3152c5c8dda4c86b140dee86dbaa37121e1d896fcb84412f39a87d5bb
BLAKE2b-256 checksum
How to use checksums
99ef5147884fa850a872dcbed5eccd1b83ded9359d54b7f12ba28014e89b4094
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.21.0 This release

2 release files

0.18.4

2 release files

0.18.3

2 release files

0.18.2

2 release files

0.18.1

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page