Repository navigation
Releases
clibo v1.14.0
Automated release for v1.14.0. See CHANGELOG.md for details.
v1.13.0 β search anywhere, streak everywhere, todo by date (74 tools)
pip install --upgrade clibo # or: pipx upgrade clibo Β· uv tool install -U cliboThis 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 sourcesThe 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 / --tagPrecedence: --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 alwaysd["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 cliboRun 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)
pip install --upgrade clibo # or: pipx upgrade clibo Β· uv tool install -U cliboHeadline: 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 logdispatcher:clibo vitals log temp 39.2
works alongsideclibo vitals temp 39.2. Verb-shape uniformity
with the rest of the codebase.vitals log bp 120/80slash
shorthand included. -
π
meds takeauto-creates:clibo meds take "Vitamin D"
now works without a priormeds add. The natural "I took an
aspirin" flow needs no ceremony.--strictpreserves the old
fail-on-unknown behaviour. Numeric IDs always strict (no
fat-finger creation). Plusmeds edit/stop/rmaccept name. -
π
car drive: business / personal / commute mileage
tracking.clibo car drive "Acme meeting" --mi 47 -c business.
car statsincludesdrive_by_category[]for tax-time totals. -
Sentinel bug fix:
ctx.invoke()in the bare-command
callbacks doesn't resolve TyperArgumentInfo/OptionInfo
sentinels. Caught + fixed during the rollout; every callback
with optional args now passes explicit defaults so empty-DB
bare commands don't error withError 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 cliboTo 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)
pip install --upgrade clibo # or: pipx upgrade clibo Β· uv tool install -U cliboHeadline: 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 view1-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 triggerclibo 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
-
βοΈ travelstatus + when β every trip row now has
status: upcoming | ongoing | ended | undatedand 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_inkept 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 cliboTo 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)
pip install --upgrade clibo # or: pipx upgrade clibo Β· uv tool install -U cliboHeadline: 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_wpmPer-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_readPlus: 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, 5RMSkips 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
SplitExpenserows, so they flow through
balances,who, andsettlelike any other shared expense β no
fake bill needed. -
π©Ί
clibo doctorgains 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/favnow accepts a label, not
just an integer ID.bills pay Electricitylands 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)
pip install --upgrade cliboThe 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:
- Numeric
identβdb.get(Model, int(ident)) - Otherwise, case-insensitive exact match on
field - 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 SUMMARYis now optional β defaults to the kind name sopets log Whiskers vetdoesn't demand a fabricated description.- Two brand-new edit subcommands where none existed before:
network editandbirthdays 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 Annapicks 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)
pip install --upgrade cliboThree 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 chartJSON 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 yesterdayBackward-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)
pip install --upgrade cliboThree 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)
pip install --upgrade cliboThree 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 IDBug fixes
clibo infoheader was hardcoded "50 local-first CLI tools" β stale since v1.0. Now readslen(CATALOG)so it always reflects reality.collect_weeknow bounds every query with an explicit upper date, so backdated windows (used bycompare) 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
pip install --upgrade cliboWhat'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.