Skip to content

Releases

clibo v1.14.0

Choose a tag to compare

@github-actions github-actions released this 24 May 17:26

Automated release for v1.14.0. See CHANGELOG.md for details.

v1.13.0 β€” search anywhere, streak everywhere, todo by date (74 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 24 May 08:14
pip install --upgrade clibo    # or: pipx upgrade clibo  Β·  uv tool install -U clibo

This release closes three big visibility loops β€” search, streaks, date-filtered todos β€” plus year-aware reading stats, meetings UX overhaul, and four more bare-command tools. No new entity tools; deep UX polish across the suite.

πŸ” clibo search now reaches 51 sources

Before v1.13: 35 sources. The natural ask "When was the last time I went to the dentist?" returned zero hits because events wasn't indexed. Same for birthdays, goals, jobs, leads, travel, pets, bills, subs, savings, debt, invoice, clients, home, plants, chores.

Now they're all there:

clibo search dentist        # β†’ events  "Dentist appointment (2026-06-15)"
clibo search Mom            # β†’ birthdays  "Mom Β· birthday (03-15)"
clibo search Stripe         # β†’ jobs  "Software Engineer @ Stripe (interviewing)"
clibo search Electricity    # β†’ bills
clibo search alice@bigcorp.com   # β†’ clients (by email)
clibo search "Maine Coon"   # β†’ pets (by breed)
clibo search Berlin         # β†’ travel
clibo search kitchen        # β†’ plants (by location)

16 new sources covering events / birthdays / goals / jobs / leads / travel / pets / bills / subs / savings / debt / invoice / clients / home / plants / chores. Every text-bearing field on each model is indexed.

πŸ”₯ Streak family complete

Five new streak subcommands + aggregator inclusion:

clibo workout streak    # πŸ‹οΈ Workout streak: 3 days πŸ”₯πŸ”₯πŸ”₯ (longest ever: 5)
clibo mileage streak    # πŸƒ Mileage streak: 7 days
clibo meditate streak   # 🧘 Meditation streak: 12 days
clibo stretches streak  # 🧎 Stretching streak: 4 days

clibo streaks           # β†’ aggregator: shows all 9 streak sources

The top-level clibo streaks view now covers all 9 daily-cadence tools (habits, gratitude, steps, fasting, challenges + the 5 new ones). Every tool exposes the same {current_streak, longest_streak, days_logged} shape. Same-day double-sessions correctly count as one streak day.

βœ… todo list gains date filters

Before v1.13: --project / --tag / --all. No date filtering at all β€” the most common task-management ask required client-side JSON filtering.

clibo todo list --due today       # what's due today
clibo todo list --due tomorrow    # what's due tomorrow
clibo todo list --overdue         # past-due pending tasks
clibo todo list --due-within 7    # this week incl. overdue + today
clibo todo list --due 2026-06-01  # exact date

clibo todo list --due today -P Acme   # composes with --project / --tag

Precedence: --due wins over --due-within. Date filters only apply to tasks with a due date (undated tasks naturally drop out).

πŸ“… books year β€” annual reading rollup

Mirrors donations year. Answers "what was my best year of reading?" directly:

clibo books year             # current year β€” books_finished, avg_rating,
                             # sessions, pages_read, days_read, top_rated[]
clibo books year -y 2025     # past year
clibo books stats            # gains by_year[] lifetime breakdown

πŸ—“οΈ meetings inline actions

The "finished a meeting, here's the summary" flow now fits in one CLI call:

clibo meetings add "Acme Q3" \
  -a "Bob,Alice,me" \
  -N "Discussed Q3 priorities" \
  -A "Bob: send timeline" \
  -A "Alice: draft proposal" \
  -A "me: schedule follow-up"

The OWNER: prefix parses the owner inline. Plus a new meetings edit, fuzzy meeting resolver (so meetings action "Acme" matches "Acme Q3 roadmap"), and meetings rm by name (cascades action items).

🍎 calorie today per-meal breakdown

clibo calorie today -m breakfast   # scope to one meal
clibo calorie today --json         # includes by_meal[] subtotals always

d["by_meal"]["breakfast"]["kcal"] answers "how many calories for breakfast today?" in one field.

πŸ†• 4 more bare-command tools

Joining the 36 from v1.12.0:

clibo leads        # pipeline (open deals grouped by stage)
clibo birthdays    # upcoming (next 30 days)
clibo followup     # due (overdue + due-soon)
clibo jobs         # pipeline (application counts by status)

By the numbers

  • 1,145 tests (+197 since v1.12.0), ruff clean
  • 74 tools (unchanged this release)
  • 9 iterations stacked (109 β†’ 117)

Upgrading

pipx upgrade clibo
uv tool install -U clibo
pip install -U clibo

Run clibo doctor --check-updates to know when you've drifted from latest.

v1.12.0 β€” type the tool's name, get the answer (36 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 24 May 05:40
pip install --upgrade clibo    # or: pipx upgrade clibo  Β·  uv tool install -U clibo

Headline: bare command = the answer

Across 36 of 74 tools in clibo, typing clibo X (with no
subcommand) now runs that tool's dominant summary β€” instead of
showing help. The agent mental model β€” "type the tool's name,
get the answer"
β€” now works everywhere it makes sense.

clibo caffeine        # β˜• Caffeine today Β· Sun 24 May
                      #   β€’ 07:00   coffee β€” 200 mg
                      #   200 mg total today (limit 400)

clibo bills           # πŸ”” Bills due this week
clibo plants          # πŸ”” Plants needing water
clibo split           # βš–οΈ Balances Β· who owes whom
clibo expense         # πŸ’Έ Spending Β· 2026-05 by category
clibo workout         # πŸ‹οΈ Today's workout
clibo writing         # ✍️ Today Β· 1200/500 w Β· streak πŸ”₯

The same --help flag still shows the menu; every existing
subcommand (add, log, list, edit, rm, stats, …) works
identically. Pure UX additive.

The 36 tools updated, by category:

Category Tools
Health & Wellness (12) calorie, water, mood, sleep, steps, workout, meds, vitals, habit, caffeine, fasting, symptom
Money & Finance (5) networth, bills, expense, income, donations, subs, split
Productivity & Work (5) focus, time, events, journal, worklog, challenge
Home & Life (5) chores, plants, documents, packages, meals
Hobbies & Culture (5) gratitude, writing, mileage, flashcards, dreams, stretches

Other wins since v1.11.0

  • πŸ€’ vitals log dispatcher: clibo vitals log temp 39.2
    works alongside clibo vitals temp 39.2. Verb-shape uniformity
    with the rest of the codebase. vitals log bp 120/80 slash
    shorthand included.

  • πŸ’Š meds take auto-creates: clibo meds take "Vitamin D"
    now works without a prior meds add. The natural "I took an
    aspirin" flow needs no ceremony. --strict preserves the old
    fail-on-unknown behaviour. Numeric IDs always strict (no
    fat-finger creation). Plus meds edit/stop/rm accept name.

  • πŸš— car drive: business / personal / commute mileage
    tracking. clibo car drive "Acme meeting" --mi 47 -c business.
    car stats includes drive_by_category[] for tax-time totals.

  • Sentinel bug fix: ctx.invoke() in the bare-command
    callbacks doesn't resolve Typer ArgumentInfo/OptionInfo
    sentinels. Caught + fixed during the rollout; every callback
    with optional args now passes explicit defaults so empty-DB
    bare commands don't error with Error binding parameter.

By the numbers

  • 1,061 tests (+113 since v1.11.0), ruff clean
  • 74 tools (unchanged this release β€” pattern, not new surface)
  • 8 iterations stacked (99 β†’ 107)

Upgrading

pipx upgrade clibo
uv tool install -U clibo
pip install -U clibo

To know when you've drifted from latest, run clibo doctor --check-updates.

v1.11.0 β€” πŸ€’ symptom tool + every new tool now shows up everywhere (74 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 24 May 00:46
pip install --upgrade clibo    # or: pipx upgrade clibo  Β·  uv tool install -U clibo

Headline: the 74th tool β€” πŸ€’ symptom

A structured pain & symptom tracker filling a real gap in the health
suite. vitals stores measurable readings (BP, glucose); mood is
whole-person 1-5; journal is freeform. Nothing handled subjective,
scale-able
experiences β€” chronic back pain, migraines, allergies,
IBS flare-ups, post-viral fatigue.

clibo symptom log "back pain" -i 7 -l lumbar -r ibuprofen
# βœ“ Logged πŸ€’ back pain (lumbar) β€” 7/10 (severe)

clibo symptom history "back pain"
# πŸ“ˆ back pain Β· last 90d
# Date         Episodes  Avg  Max
# 2026-05-22   1         5.0  5/10 Β· moderate
# 2026-05-23   1         6.0  6/10 Β· moderate
# 2026-05-24   1         7.0  7/10 Β· severe
# πŸ“Š trend: β†— worsening Β· worst 7/10 on 2026-05-24

clibo symptom stats     # top complaints, days affected, worst-ever
clibo symptom today     # coloured per-entry view

1-10 medical pain scale. Returns intensity_label
(mild / moderate / severe / worst possible) inline so agents can
format severity prose without bucket logic. Colour-coded tables.

Every new tool now shows up everywhere

The big arc of this release: the four media-log tools shipped in
v1.10.0
(writing, books with sessions, films with episode
progress, workout pr) plus this release's symptom now surface
across all 6 cross-tool primitives.

clibo today β€” new blocks

✍️ Writing  1200/500 w πŸŽ‰   Β·   1 session   Β·   πŸ”₯ 1-day streak
πŸ“– Reading  30p Β· 1 session Β· ⏱ 45 min Β· Atomic Habits
πŸ€’ Symptoms 1 episode Β· worst 7/10 (back pain)

clibo week / clibo month β€” new sections

Writing slots into Productivity with top_projects. Reading gets a
new 🎨 Hobbies section. Symptoms get their own πŸ€’ Symptoms section
with avg intensity + worst-day + top-symptom.

clibo recent β€” three new sources in the activity feed

✍️ writing      wrote 1200w on novel (45 min)
πŸ“– reading      read 30p of Atomic Habits (45 min)
πŸ€’ symptom      back pain 7/10 (lumbar)

clibo search β€” three new searchable sources

clibo search "chapter"   # β†’ hits writing notes + reading session notes
clibo search "lumbar"    # β†’ hits symptoms by location
clibo search "ibuprofen" # β†’ hits symptoms by relief
clibo search "bright"    # β†’ hits symptoms by trigger

clibo checkin β€” two new daily trackers

Writing ("Did you write today?") and Symptom ("Any symptoms today?")
both surface as active trackers once you have 2+ entries in 14 days.
Returns the last value inline (back pain 7/10 (lumbar)).

Other polish

  • ✈️ travel status + when β€” every trip row now has
    status: upcoming | ongoing | ended | undated and a tense-aware
    when: "in 5d", "ongoing Β· day 3 of 5", "ended yesterday".
    Kills the contradictory "starts_in": "3d ago" output v1.10.0
    produced for past trips. starts_in kept for back-compat.

  • Day-of-trip counter on ongoing trips β€” answers "how much of my
    vacation is left?" at a glance.

By the numbers

  • 948 tests (+61 since v1.10.0), ruff clean
  • 74 tools (+1 β€” symptom)
  • 89 SQLite tables (+1 β€” symptom_entry)
  • 7 iterations stacked (92 β†’ 98), 6 of them shipping cross-tool
    visibility wins

Upgrading

pipx upgrade clibo
uv tool install -U clibo
pip install -U clibo

To know when you've drifted from latest, run clibo doctor --check-updates.

v1.10.0 β€” writing tool + per-session tracking on every media log (73 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 23 May 22:29
pip install --upgrade clibo    # or: pipx upgrade clibo  Β·  uv tool install -U clibo

Headline: the 73rd tool

✍️ clibo writing β€” daily word-count tracker for novelists, bloggers,
essayists, NaNoWriMo participants. Writers track words, not minutes β€”
focus and time lose the metric that matters most. Pace (wpm), per-project
breakdown, daily goal, streak.

clibo writing log novel -w 1200 -t 45
# βœ“ Logged ✍️ 1200w on novel Β· 1200/500w today
clibo writing goal 1667                       # NaNoWriMo daily
clibo writing today                           # goal bar, streak, by-project
clibo writing stats                           # best_day, top_projects, avg_wpm

Per-session tracking on every media log

The big theme of this release is making books, films, and workout
answer "what did I do this week and how fast?" out of the box.

πŸ“š books β€” pages Γ— minutes

New BookSession table; books read now accepts -t MIN:

clibo books read "Atomic Habits" 30 -t 45     # 40 pages/hour
clibo books history --days 7                  # session timeline
clibo books stats                             # avg_pages_per_hour, days_read

Plus: books edit (was missing), books rm by title (was integer-only),
and exact-title match wins over substring (books show "Dune" finds Dune
not Dune: Part Two).

🎬 films β€” episode pointer for TV

Two new columns (season, episode); a progress subcommand with three
modes:

clibo films add "Better Call Saul" -k show -S 6 -E 5    # status auto-becomes "watching"
clibo films progress "Better Call Saul" --bump          # +1 episode
clibo films progress "Better Call Saul" -S 6 -E 10      # absolute pointer
clibo films show "Better Call Saul"                     # β†’ "S06E10"

Plus films show and films edit (both were missing), name-based rm,
and the same exact-match resolver fix.

πŸ‹οΈ workout pr β€” personal records

clibo workout pr                              # heaviest per exercise, sessions/exercise
clibo workout pr "bench press"                # rep-range breakdown β€” 1RM, 3RM, 5RM

Skips cardio rows automatically. workout show <name> / workout rm <name>
also gained name-resolve.

Other wins

  • 🀝 split owe / split lent β€” direct IOU shortcuts:

    clibo split owe Anna 50 --for dinner        # "I owe Anna $50"
    clibo split lent Bob 20                      # "Bob owes me $20"

    Stored as 1-participant SplitExpense rows, so they flow through
    balances, who, and settle like any other shared expense β€” no
    fake bill needed.

  • 🩺 clibo doctor gains three new checks:

    • --check-updates β€” opt-in PyPI query (3s timeout, fails silently)
    • schema drift detection (compares model columns vs live SQLite)
    • unconfigured-settings hint ("5 settings unconfigured β€” run clibo init")
    • canonical warnings: [str] field for agents
  • Name-resolution rolled out to the last six transactional tools:
    income, subs, bills, wishlist, bookmark, donations. Every
    show/edit/rm/cancel/pay/buy/fav now accepts a label, not
    just an integer ID. bills pay Electricity lands on the unpaid one.

By the numbers

  • 887 tests (+80 since v1.9.0), ruff clean
  • 73 tools (+1 β€” writing)
  • 88 SQLite tables (+2 β€” writing_session, books_session)
  • 6 iterations stacked (85 β†’ 91)

Upgrading

If you've been on v1.0.0 (pipx default git URL): pipx upgrade clibo will
catch you up to v1.10.0 in one command. To know when you've drifted in
future, run clibo doctor --check-updates.

v1.9.0 β€” name-resolution across every entity tool (72 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 23 May 20:12
pip install --upgrade clibo

The headline change

13 entity tools now uniformly accept either an integer ID or a fuzzy name on every mutating subcommand. The integer-ID barrier that blocked natural agent flows like "Bob got promoted" is gone.

clibo crm edit Bob -c "Acme Corp"          # was: required CONTACT_ID
clibo brag rm "auth refactor"              # was: required ACHIEVEMENT_ID
clibo cv achieve "Staff Engineer" "Led the migration to events"
clibo birthdays edit Dad -d "March 15"     # was: no edit existed
clibo network edit Sarah -c Stripe         # was: no edit existed
clibo jobs move Stripe interviewing
clibo plants edit Basil -l kitchen
clibo gifts bought Anna                    # picks the most-recent gift
clibo followup done Alice                  # picks the pending one
clibo pets edit Whiskers --breed "Maine Coon"

Tools covered: books, crm, clients, jobs, followup, plants, pets, network, leads, gifts, birthdays, brag, cv.

How it works

A new lookup_by_id_or_name(db, model, ident, field) helper in clibo/core/base.py standardises the resolution:

  1. Numeric ident β†’ db.get(Model, int(ident))
  2. Otherwise, case-insensitive exact match on field
  3. Falls back to case-insensitive substring match

So clibo crm show Smith finds Bob Smith, and integer IDs still work everywhere β€” fully backward-compatible.

Other goodies

  • pets log SUMMARY is now optional β€” defaults to the kind name so pets log Whiskers vet doesn't demand a fabricated description.
  • Two brand-new edit subcommands where none existed before: network edit and birthdays edit. Fix that "wrong date" or "joined Stripe" without manually re-creating the row.
  • Many-to-one resolution for gifts: when a recipient has multiple gifts, gifts bought Anna picks the most-recently-added one.

Tests: 770 passing (+36 since v1.8.0). Ruff clean. Tool count unchanged at 72.

v1.8.0 β€” CSV export Β· month compare Β· CRM by name (72 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 23 May 19:13
pip install --upgrade clibo

Three additions since v1.7.0

πŸ“Š clibo export --csv [DIR]

One CSV per table to a directory. Open any tracker's history directly in Excel / Numbers / Sheets. Empty tables still get a header-only file via PRAGMA table_info, so the schema is visible even before logging anything.

clibo export --csv ~/Desktop/clibo-data
# β†’ 86 .csv files, ready to chart

JSON export (clibo export) is unchanged β€” same behaviour as before when --csv isn't passed.

βš–οΈ clibo compare --month

Calendar-month-over-calendar-month deltas, alongside the existing week-over-week. Net cash flow becomes the headline row. January correctly wraps to December of the prior year.

βš–οΈ  Comparison   April 2025  vs  May 2025

  πŸ’΅ Income          4000.00 β†’ 4500.00    ↑ 12.5%       ← green: more income
  πŸ’Έ Expenses        1400.00 β†’ 1500.00    ↑ 7.1%        ← red: more spending
  πŸ’° Net cash flow   2600.00 β†’ 2950.00    ↑ 13.5%       ← green: bigger surplus

Arrow reflects the actual direction; colour encodes whether that direction is good or bad for the metric.

πŸ‘₯ clibo crm show/edit/rm/touch <name>

CRM mutating commands no longer require remembering an integer ID. Pass a name (fuzzy substring match) instead.

clibo crm add "Bob Smith" -c Acme
clibo crm edit Bob -c "Acme Corp" -s active   # by name
clibo crm show Smith                           # partial match works
clibo crm touch Smith -d yesterday

Backward-compatible: passing a numeric ID still resolves correctly.


Tests: 734 passing (+11 since v1.7.0). Ruff clean. Tool count unchanged at 72.

v1.7.0 β€” sparklines + streaks + examples polish (72 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 23 May 18:08
pip install --upgrade clibo

Three quality-of-life additions since v1.6.0

πŸ”₯ clibo streaks β€” every active streak in one view

Aggregates habits, gratitude, step-goal, fasting target-hits, and active challenges into a single motivational view, sorted strongest-first.

πŸ”₯ Streaks   5 active

  πŸ”₯  Read                       5   Β·
  πŸ”₯  Walk                       5   Β·
  πŸ™  Daily gratitude            5   Β·
  πŸ‘Ÿ  Step goal                  5   Β·   (goal 10,000/day)
  πŸš€  no sugar                   1   Β·   (day 1/30)

πŸ“ˆ ASCII sparklines on stats

Six daily-tracker stats commands now render a one-line Unicode sparkline so you can see the shape of your trend at a glance.

πŸ“Š Weight stats Β· last 7d
  ...
  Trend  ↓ -1.5kg
  Chart  β–ˆβ–‡β–…β–„β–‚β–

Wired into: weight stats, sleep stats, steps stats, mood stats, caffeine stats, expense stats. Missing days render as Β· so the time progression stays honest.

πŸ“š Examples β€” 11 use-case walkthroughs

examples/ now ships 11 markdown walkthroughs organised both ways:

  • By case: morning-checkin, evening-wrapup, weekly-retrospective, monthly-money, agent-daily-brief
  • By category: health-tracking, money-tracking, productivity, relationships, home-life, hobbies

Each is 70-110 lines, scannable top-to-bottom. agent-daily-brief.md spells out the contract an LLM driver needs: clibo today --json + clibo checkin --json + clibo streaks --json are the three commands.

Tests: 719 passing (+21 since v1.6.0). Ruff clean.

v1.6.0 β€” compare, edit ID|last, yesterday view (72 tools)

Choose a tag to compare

@dm1tryG dm1tryG released this 23 May 17:01
pip install --upgrade clibo

Three new commands since v1.5.0

βš–οΈ clibo compare

Week-over-week side-by-side for every key metric. Sleep, mood, steps, workouts, caffeine, expenses, donations, fasting, meditate, stretches, mileage, habits-hit, journal & gratitude entries, tasks completed.

😴 Sleep avg               6.5h   β†’   7.5h           ↑ 15.4%
πŸ‘Ÿ Steps total          15,000   β†’   19,500         ↑ 30%
β˜• Caffeine mg         170 mg   β†’   63 mg          ↓ 62.9%
πŸ’Έ Expenses total     150.00   β†’   25.00          ↓ 83.3%

Arrows reflect the actual direction (↑/↓); colour encodes whether that direction is good or bad for the metric β€” green-down on a caffeine decrease, green-up on a sleep increase. No more confusing semantics.

πŸ“… clibo today --on DATE + clibo yesterday

today now accepts any date β€” --on yesterday, --on "3 days ago", --on 2026-05-15. The header reads "Today" / "Yesterday" / weekday-name depending on how close the date is. clibo yesterday is the one-word alias for the most natural-language case.

✏️ edit ID|last on six daily trackers

weight, mood, sleep, caffeine, steps, gratitude all gained an edit subcommand. Pass either an entry ID or the keyword last to fix the most recent entry:

clibo weight log 75              # typo
clibo weight edit last -w 71.5   # fix without looking up the ID

Bug fixes

  • clibo info header was hardcoded "50 local-first CLI tools" β€” stale since v1.0. Now reads len(CATALOG) so it always reflects reality.
  • collect_week now bounds every query with an explicit upper date, so backdated windows (used by compare) don't leak entries from outside.

Tests: 698 passing (+28 since v1.5.0). Ruff clean.

v1.5.0 β€” daily check-ins, Pydantic typing, agent-friendly today

Choose a tag to compare

@dm1tryG dm1tryG released this 23 May 16:18
pip install --upgrade clibo

What's new

πŸ“Š Daily check-ins on clibo today

clibo today now surfaces every actively-tracked category (β‰₯2 entries in the last 14 days), not just water/focus bars. You'll see a πŸ“Š Daily check-ins section listing each tracker with βœ“ if logged today (with today's value) or β—‹ if pending (with the last known value + how many days ago).

πŸ“‹ New clibo checkin command

Surfaces only the pending check-ins as questions, each with a copy-pasteable command and the last value. The --json form is ideal for an AI agent to ask the user one question per pending tracker and then run the suggested log command:

clibo checkin --json
# -> {"pending": [{"name": "Weight", "question": "What's your weight today?",
#                  "command": "clibo weight log <kg>", "last_value": "71 kg",
#                  "last_days_ago": 1, ...}], ...}

πŸ› οΈ Internals: Pydantic models for the integration views

today, week, month, checkin now use typed Pydantic v2 models internally instead of nested dicts. Same JSON output shape (every existing consumer keeps working) but the producer-consumer contract is now compiler-checkable. Cleaner code, fewer foot-guns.

Tests: 670 passing. Ruff clean.