clibo 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. clibo-1.1.0/.claude/scheduled_tasks.lock +1 -0
  2. clibo-1.1.0/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
  3. clibo-1.1.0/.github/ISSUE_TEMPLATE/feature_request.md +32 -0
  4. clibo-1.1.0/.github/pull_request_template.md +26 -0
  5. clibo-1.1.0/.github/workflows/ci.yml +32 -0
  6. clibo-1.1.0/.github/workflows/publish.yml +33 -0
  7. clibo-1.1.0/.github/workflows/release.yml +60 -0
  8. clibo-1.1.0/.gitignore +22 -0
  9. clibo-1.1.0/AGENTS.md +107 -0
  10. clibo-1.1.0/CHANGELOG.md +124 -0
  11. clibo-1.1.0/CONTRIBUTING.md +78 -0
  12. clibo-1.1.0/LICENSE +21 -0
  13. clibo-1.1.0/PKG-INFO +356 -0
  14. clibo-1.1.0/PLAN.md +104 -0
  15. clibo-1.1.0/PROGRESS.md +1356 -0
  16. clibo-1.1.0/README.md +330 -0
  17. clibo-1.1.0/clibo/__init__.py +8 -0
  18. clibo-1.1.0/clibo/admin.py +151 -0
  19. clibo-1.1.0/clibo/catalog.py +109 -0
  20. clibo-1.1.0/clibo/clis/__init__.py +147 -0
  21. clibo-1.1.0/clibo/clis/bills.py +212 -0
  22. clibo-1.1.0/clibo/clis/birthdays.py +214 -0
  23. clibo-1.1.0/clibo/clis/bookmark.py +204 -0
  24. clibo-1.1.0/clibo/clis/books.py +252 -0
  25. clibo-1.1.0/clibo/clis/brag.py +199 -0
  26. clibo-1.1.0/clibo/clis/budget.py +179 -0
  27. clibo-1.1.0/clibo/clis/caffeine.py +401 -0
  28. clibo-1.1.0/clibo/clis/calorie.py +288 -0
  29. clibo-1.1.0/clibo/clis/car.py +200 -0
  30. clibo-1.1.0/clibo/clis/chores.py +183 -0
  31. clibo-1.1.0/clibo/clis/clients.py +252 -0
  32. clibo-1.1.0/clibo/clis/crm.py +234 -0
  33. clibo-1.1.0/clibo/clis/cv.py +306 -0
  34. clibo-1.1.0/clibo/clis/dashboard.py +161 -0
  35. clibo-1.1.0/clibo/clis/debt.py +212 -0
  36. clibo-1.1.0/clibo/clis/documents.py +265 -0
  37. clibo-1.1.0/clibo/clis/dreams.py +247 -0
  38. clibo-1.1.0/clibo/clis/events.py +216 -0
  39. clibo-1.1.0/clibo/clis/expense.py +253 -0
  40. clibo-1.1.0/clibo/clis/films.py +207 -0
  41. clibo-1.1.0/clibo/clis/flashcards.py +204 -0
  42. clibo-1.1.0/clibo/clis/focus.py +208 -0
  43. clibo-1.1.0/clibo/clis/followup.py +196 -0
  44. clibo-1.1.0/clibo/clis/gifts.py +173 -0
  45. clibo-1.1.0/clibo/clis/goals.py +251 -0
  46. clibo-1.1.0/clibo/clis/gratitude.py +206 -0
  47. clibo-1.1.0/clibo/clis/groceries.py +144 -0
  48. clibo-1.1.0/clibo/clis/habit.py +270 -0
  49. clibo-1.1.0/clibo/clis/home.py +166 -0
  50. clibo-1.1.0/clibo/clis/ideas.py +246 -0
  51. clibo-1.1.0/clibo/clis/income.py +234 -0
  52. clibo-1.1.0/clibo/clis/invoice.py +236 -0
  53. clibo-1.1.0/clibo/clis/jobs.py +219 -0
  54. clibo-1.1.0/clibo/clis/journal.py +237 -0
  55. clibo-1.1.0/clibo/clis/leads.py +242 -0
  56. clibo-1.1.0/clibo/clis/lessons.py +198 -0
  57. clibo-1.1.0/clibo/clis/meals.py +187 -0
  58. clibo-1.1.0/clibo/clis/meditate.py +215 -0
  59. clibo-1.1.0/clibo/clis/meds.py +265 -0
  60. clibo-1.1.0/clibo/clis/meetings.py +231 -0
  61. clibo-1.1.0/clibo/clis/mileage.py +232 -0
  62. clibo-1.1.0/clibo/clis/mood.py +176 -0
  63. clibo-1.1.0/clibo/clis/network.py +168 -0
  64. clibo-1.1.0/clibo/clis/networth.py +222 -0
  65. clibo-1.1.0/clibo/clis/notes.py +214 -0
  66. clibo-1.1.0/clibo/clis/pantry.py +178 -0
  67. clibo-1.1.0/clibo/clis/period.py +225 -0
  68. clibo-1.1.0/clibo/clis/pets.py +251 -0
  69. clibo-1.1.0/clibo/clis/plants.py +186 -0
  70. clibo-1.1.0/clibo/clis/quotes.py +188 -0
  71. clibo-1.1.0/clibo/clis/recipes.py +222 -0
  72. clibo-1.1.0/clibo/clis/savings.py +239 -0
  73. clibo-1.1.0/clibo/clis/sleep.py +198 -0
  74. clibo-1.1.0/clibo/clis/split.py +229 -0
  75. clibo-1.1.0/clibo/clis/steps.py +337 -0
  76. clibo-1.1.0/clibo/clis/stretches.py +239 -0
  77. clibo-1.1.0/clibo/clis/subs.py +206 -0
  78. clibo-1.1.0/clibo/clis/time.py +245 -0
  79. clibo-1.1.0/clibo/clis/tip.py +319 -0
  80. clibo-1.1.0/clibo/clis/todo.py +233 -0
  81. clibo-1.1.0/clibo/clis/travel.py +283 -0
  82. clibo-1.1.0/clibo/clis/vitals.py +262 -0
  83. clibo-1.1.0/clibo/clis/water.py +171 -0
  84. clibo-1.1.0/clibo/clis/weight.py +175 -0
  85. clibo-1.1.0/clibo/clis/wishlist.py +176 -0
  86. clibo-1.1.0/clibo/clis/worklog.py +184 -0
  87. clibo-1.1.0/clibo/clis/workout.py +218 -0
  88. clibo-1.1.0/clibo/core/__init__.py +1 -0
  89. clibo-1.1.0/clibo/core/base.py +186 -0
  90. clibo-1.1.0/clibo/core/config.py +37 -0
  91. clibo-1.1.0/clibo/core/db.py +104 -0
  92. clibo-1.1.0/clibo/core/output.py +147 -0
  93. clibo-1.1.0/clibo/core/settings.py +45 -0
  94. clibo-1.1.0/clibo/dashboard.py +256 -0
  95. clibo-1.1.0/clibo/main.py +441 -0
  96. clibo-1.1.0/clibo/recent.py +242 -0
  97. clibo-1.1.0/clibo/search.py +150 -0
  98. clibo-1.1.0/clibo/tags.py +75 -0
  99. clibo-1.1.0/clibo/weekly.py +282 -0
  100. clibo-1.1.0/clibo/widgets.py +375 -0
  101. clibo-1.1.0/docs/ADDING_A_TOOL.md +68 -0
  102. clibo-1.1.0/docs/PHILOSOPHY.md +100 -0
  103. clibo-1.1.0/docs/SCHEMA.md +1001 -0
  104. clibo-1.1.0/examples/README.md +24 -0
  105. clibo-1.1.0/examples/daily_brief.py +101 -0
  106. clibo-1.1.0/examples/daily_brief.sh +47 -0
  107. clibo-1.1.0/examples/find_and_act.py +53 -0
  108. clibo-1.1.0/install.sh +20 -0
  109. clibo-1.1.0/pyproject.toml +65 -0
  110. clibo-1.1.0/scripts/demo.sh +59 -0
  111. clibo-1.1.0/scripts/dump_schema.py +107 -0
  112. clibo-1.1.0/skills/README.md +28 -0
  113. clibo-1.1.0/skills/bills/SKILL.md +41 -0
  114. clibo-1.1.0/skills/birthdays/SKILL.md +39 -0
  115. clibo-1.1.0/skills/bookmark/SKILL.md +39 -0
  116. clibo-1.1.0/skills/books/SKILL.md +40 -0
  117. clibo-1.1.0/skills/brag/SKILL.md +41 -0
  118. clibo-1.1.0/skills/budget/SKILL.md +41 -0
  119. clibo-1.1.0/skills/caffeine/SKILL.md +58 -0
  120. clibo-1.1.0/skills/calorie/SKILL.md +43 -0
  121. clibo-1.1.0/skills/car/SKILL.md +42 -0
  122. clibo-1.1.0/skills/chores/SKILL.md +41 -0
  123. clibo-1.1.0/skills/clients/SKILL.md +40 -0
  124. clibo-1.1.0/skills/crm/SKILL.md +40 -0
  125. clibo-1.1.0/skills/cv/SKILL.md +45 -0
  126. clibo-1.1.0/skills/dashboard/SKILL.md +47 -0
  127. clibo-1.1.0/skills/debt/SKILL.md +40 -0
  128. clibo-1.1.0/skills/documents/SKILL.md +53 -0
  129. clibo-1.1.0/skills/dreams/SKILL.md +41 -0
  130. clibo-1.1.0/skills/events/SKILL.md +39 -0
  131. clibo-1.1.0/skills/expense/SKILL.md +40 -0
  132. clibo-1.1.0/skills/films/SKILL.md +36 -0
  133. clibo-1.1.0/skills/flashcards/SKILL.md +46 -0
  134. clibo-1.1.0/skills/focus/SKILL.md +41 -0
  135. clibo-1.1.0/skills/followup/SKILL.md +40 -0
  136. clibo-1.1.0/skills/gifts/SKILL.md +38 -0
  137. clibo-1.1.0/skills/goals/SKILL.md +41 -0
  138. clibo-1.1.0/skills/gratitude/SKILL.md +38 -0
  139. clibo-1.1.0/skills/groceries/SKILL.md +36 -0
  140. clibo-1.1.0/skills/habit/SKILL.md +41 -0
  141. clibo-1.1.0/skills/home/SKILL.md +38 -0
  142. clibo-1.1.0/skills/ideas/SKILL.md +44 -0
  143. clibo-1.1.0/skills/income/SKILL.md +40 -0
  144. clibo-1.1.0/skills/invoice/SKILL.md +44 -0
  145. clibo-1.1.0/skills/jobs/SKILL.md +39 -0
  146. clibo-1.1.0/skills/journal/SKILL.md +42 -0
  147. clibo-1.1.0/skills/leads/SKILL.md +42 -0
  148. clibo-1.1.0/skills/lessons/SKILL.md +39 -0
  149. clibo-1.1.0/skills/meals/SKILL.md +39 -0
  150. clibo-1.1.0/skills/meditate/SKILL.md +40 -0
  151. clibo-1.1.0/skills/meds/SKILL.md +41 -0
  152. clibo-1.1.0/skills/meetings/SKILL.md +40 -0
  153. clibo-1.1.0/skills/mileage/SKILL.md +39 -0
  154. clibo-1.1.0/skills/mood/SKILL.md +40 -0
  155. clibo-1.1.0/skills/network/SKILL.md +37 -0
  156. clibo-1.1.0/skills/networth/SKILL.md +41 -0
  157. clibo-1.1.0/skills/notes/SKILL.md +41 -0
  158. clibo-1.1.0/skills/pantry/SKILL.md +37 -0
  159. clibo-1.1.0/skills/period/SKILL.md +44 -0
  160. clibo-1.1.0/skills/pets/SKILL.md +40 -0
  161. clibo-1.1.0/skills/plants/SKILL.md +40 -0
  162. clibo-1.1.0/skills/quotes/SKILL.md +36 -0
  163. clibo-1.1.0/skills/recipes/SKILL.md +41 -0
  164. clibo-1.1.0/skills/savings/SKILL.md +43 -0
  165. clibo-1.1.0/skills/sleep/SKILL.md +41 -0
  166. clibo-1.1.0/skills/split/SKILL.md +43 -0
  167. clibo-1.1.0/skills/steps/SKILL.md +47 -0
  168. clibo-1.1.0/skills/stretches/SKILL.md +45 -0
  169. clibo-1.1.0/skills/subs/SKILL.md +41 -0
  170. clibo-1.1.0/skills/time/SKILL.md +41 -0
  171. clibo-1.1.0/skills/tip/SKILL.md +49 -0
  172. clibo-1.1.0/skills/todo/SKILL.md +43 -0
  173. clibo-1.1.0/skills/travel/SKILL.md +42 -0
  174. clibo-1.1.0/skills/vitals/SKILL.md +47 -0
  175. clibo-1.1.0/skills/water/SKILL.md +39 -0
  176. clibo-1.1.0/skills/weight/SKILL.md +38 -0
  177. clibo-1.1.0/skills/wishlist/SKILL.md +42 -0
  178. clibo-1.1.0/skills/worklog/SKILL.md +37 -0
  179. clibo-1.1.0/skills/workout/SKILL.md +41 -0
  180. clibo-1.1.0/tests/conftest.py +43 -0
  181. clibo-1.1.0/tests/test_add_alias.py +60 -0
  182. clibo-1.1.0/tests/test_admin.py +55 -0
  183. clibo-1.1.0/tests/test_bills.py +44 -0
  184. clibo-1.1.0/tests/test_birthdays.py +55 -0
  185. clibo-1.1.0/tests/test_bookmark.py +47 -0
  186. clibo-1.1.0/tests/test_books.py +61 -0
  187. clibo-1.1.0/tests/test_brag.py +39 -0
  188. clibo-1.1.0/tests/test_budget.py +46 -0
  189. clibo-1.1.0/tests/test_caffeine.py +173 -0
  190. clibo-1.1.0/tests/test_calorie.py +42 -0
  191. clibo-1.1.0/tests/test_car.py +88 -0
  192. clibo-1.1.0/tests/test_chores.py +43 -0
  193. clibo-1.1.0/tests/test_clients.py +45 -0
  194. clibo-1.1.0/tests/test_crm.py +51 -0
  195. clibo-1.1.0/tests/test_cv.py +73 -0
  196. clibo-1.1.0/tests/test_dashboard.py +56 -0
  197. clibo-1.1.0/tests/test_debt.py +47 -0
  198. clibo-1.1.0/tests/test_doctor.py +30 -0
  199. clibo-1.1.0/tests/test_documents.py +189 -0
  200. clibo-1.1.0/tests/test_dreams.py +66 -0
  201. clibo-1.1.0/tests/test_dump_schema.py +34 -0
  202. clibo-1.1.0/tests/test_events.py +52 -0
  203. clibo-1.1.0/tests/test_expense.py +46 -0
  204. clibo-1.1.0/tests/test_films.py +47 -0
  205. clibo-1.1.0/tests/test_flashcards.py +68 -0
  206. clibo-1.1.0/tests/test_focus.py +41 -0
  207. clibo-1.1.0/tests/test_followup.py +47 -0
  208. clibo-1.1.0/tests/test_gifts.py +39 -0
  209. clibo-1.1.0/tests/test_goals.py +55 -0
  210. clibo-1.1.0/tests/test_gratitude.py +52 -0
  211. clibo-1.1.0/tests/test_groceries.py +43 -0
  212. clibo-1.1.0/tests/test_habit.py +55 -0
  213. clibo-1.1.0/tests/test_home.py +41 -0
  214. clibo-1.1.0/tests/test_ideas.py +51 -0
  215. clibo-1.1.0/tests/test_import.py +63 -0
  216. clibo-1.1.0/tests/test_income.py +42 -0
  217. clibo-1.1.0/tests/test_init.py +51 -0
  218. clibo-1.1.0/tests/test_invoice.py +47 -0
  219. clibo-1.1.0/tests/test_jobs.py +46 -0
  220. clibo-1.1.0/tests/test_journal.py +42 -0
  221. clibo-1.1.0/tests/test_leads.py +41 -0
  222. clibo-1.1.0/tests/test_lessons.py +53 -0
  223. clibo-1.1.0/tests/test_meals.py +44 -0
  224. clibo-1.1.0/tests/test_meditate.py +43 -0
  225. clibo-1.1.0/tests/test_meds.py +49 -0
  226. clibo-1.1.0/tests/test_meetings.py +43 -0
  227. clibo-1.1.0/tests/test_migrations.py +82 -0
  228. clibo-1.1.0/tests/test_mileage.py +46 -0
  229. clibo-1.1.0/tests/test_mood.py +39 -0
  230. clibo-1.1.0/tests/test_network.py +39 -0
  231. clibo-1.1.0/tests/test_networth.py +38 -0
  232. clibo-1.1.0/tests/test_notes.py +43 -0
  233. clibo-1.1.0/tests/test_pantry.py +49 -0
  234. clibo-1.1.0/tests/test_parse_date.py +130 -0
  235. clibo-1.1.0/tests/test_period.py +46 -0
  236. clibo-1.1.0/tests/test_pets.py +54 -0
  237. clibo-1.1.0/tests/test_plants.py +43 -0
  238. clibo-1.1.0/tests/test_quotes.py +58 -0
  239. clibo-1.1.0/tests/test_recent.py +56 -0
  240. clibo-1.1.0/tests/test_recipes.py +43 -0
  241. clibo-1.1.0/tests/test_savings.py +46 -0
  242. clibo-1.1.0/tests/test_search.py +61 -0
  243. clibo-1.1.0/tests/test_sleep.py +36 -0
  244. clibo-1.1.0/tests/test_split.py +39 -0
  245. clibo-1.1.0/tests/test_steps.py +128 -0
  246. clibo-1.1.0/tests/test_stretches.py +102 -0
  247. clibo-1.1.0/tests/test_subs.py +42 -0
  248. clibo-1.1.0/tests/test_tags.py +69 -0
  249. clibo-1.1.0/tests/test_time.py +47 -0
  250. clibo-1.1.0/tests/test_tip.py +120 -0
  251. clibo-1.1.0/tests/test_today.py +58 -0
  252. clibo-1.1.0/tests/test_todo.py +56 -0
  253. clibo-1.1.0/tests/test_travel.py +53 -0
  254. clibo-1.1.0/tests/test_vitals.py +41 -0
  255. clibo-1.1.0/tests/test_water.py +36 -0
  256. clibo-1.1.0/tests/test_week.py +65 -0
  257. clibo-1.1.0/tests/test_weight.py +29 -0
  258. clibo-1.1.0/tests/test_wishlist.py +37 -0
  259. clibo-1.1.0/tests/test_worklog.py +41 -0
  260. clibo-1.1.0/tests/test_workout.py +75 -0
@@ -0,0 +1 @@
1
+ {"sessionId":"64da017d-3a40-4db0-8a48-f0cdcdb0e0d6","pid":49315,"procStart":"Fri May 22 16:44:14 2026","acquiredAt":1779469388744}
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: ๐Ÿ› Bug report
3
+ about: Report something clibo does wrong
4
+ labels: bug
5
+ ---
6
+
7
+ ## What happened
8
+
9
+ <!-- Describe the bug in 1-2 sentences. -->
10
+
11
+ ## To reproduce
12
+
13
+ The smallest sequence of `clibo ...` commands that produces the bug:
14
+
15
+ ```bash
16
+ clibo โ€ฆ
17
+ clibo โ€ฆ
18
+ ```
19
+
20
+ ## What you expected to happen
21
+
22
+ ## What actually happened
23
+
24
+ Paste the full output / traceback. If it's terminal output, drop it in a code
25
+ block so the formatting survives.
26
+
27
+ ```
28
+ โ€ฆ
29
+ ```
30
+
31
+ ## Environment
32
+
33
+ Run `clibo doctor --json` and paste the result:
34
+
35
+ ```json
36
+ โ€ฆ
37
+ ```
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: โœจ Feature request
3
+ about: Suggest a new tool, command or improvement
4
+ labels: enhancement
5
+ ---
6
+
7
+ ## What you'd like
8
+
9
+ <!-- One paragraph describing the feature. -->
10
+
11
+ ## Why it matters
12
+
13
+ <!-- The use case it unlocks. If it's a new tool, who would use it daily? -->
14
+
15
+ ## Sketch
16
+
17
+ If you're proposing a new sub-command, what would it look like?
18
+
19
+ ```bash
20
+ clibo <tool> <verb> ...
21
+ ```
22
+
23
+ What does `--json` return?
24
+
25
+ ```json
26
+ โ€ฆ
27
+ ```
28
+
29
+ ## Alternatives
30
+
31
+ Anything else you considered or any existing tool that already does most of
32
+ this?
@@ -0,0 +1,26 @@
1
+ <!--
2
+ Thanks for contributing! A small checklist keeps clibo consistent across all
3
+ 50+ tools. Tick whatever applies; delete sections that don't.
4
+ -->
5
+
6
+ ## What this PR does
7
+
8
+ <!-- One paragraph. -->
9
+
10
+ ## Checklist
11
+
12
+ ### For a new tool
13
+
14
+ - [ ] Module in `clibo/clis/<tool>.py` follows `docs/ADDING_A_TOOL.md`.
15
+ - [ ] Namespaced `__tablename__` (e.g. `<tool>_<thing>`).
16
+ - [ ] Every command accepts `--json` and uses `core.output` helpers.
17
+ - [ ] Registered in `clibo/clis/__init__.py` (imports **and** `ALL`).
18
+ - [ ] Tests at `tests/test_<tool>.py` cover create, list/show, `--json` shape, stats, an error path.
19
+ - [ ] Micro-skill at `skills/<tool>/SKILL.md` with frontmatter, commands, examples, and a *For agents* section.
20
+ - [ ] Box ticked in `PLAN.md`; entry appended to `PROGRESS.md`.
21
+
22
+ ### Always
23
+
24
+ - [ ] `./.venv/bin/pytest` is green.
25
+ - [ ] Smoke-tested by hand, including `--json`.
26
+ - [ ] No `Co-Authored-By` trailer, no "Generated with โ€ฆ" line, no LLM mentions in commit messages.
@@ -0,0 +1,32 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ python-version: ["3.10", "3.11", "3.12"]
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - name: Set up Python ${{ matrix.python-version }}
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ python-version: ${{ matrix.python-version }}
20
+ - name: Install
21
+ run: |
22
+ python -m pip install --upgrade pip
23
+ pip install -e ".[dev]"
24
+ - name: Lint with ruff
25
+ run: ruff check clibo/ tests/ scripts/
26
+ - name: Run tests
27
+ run: pytest
28
+ - name: Smoke-test the CLI
29
+ run: |
30
+ clibo info
31
+ clibo calorie log "ci test" -k 100
32
+ clibo calorie today --json
@@ -0,0 +1,33 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: astral-sh/setup-uv@v4
13
+ with:
14
+ python-version: "3.12"
15
+ - run: uv sync --all-extras --dev
16
+ - run: uv run pytest tests/
17
+ - run: uv run ruff check clibo/ tests/ scripts/
18
+
19
+ publish:
20
+ needs: test
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: actions/setup-python@v5
25
+ with:
26
+ python-version: "3.12"
27
+ - run: pip install build twine
28
+ - run: python -m build
29
+ - run: twine check dist/*
30
+ - run: twine upload dist/*
31
+ env:
32
+ TWINE_USERNAME: __token__
33
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,60 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*.*.*'
7
+
8
+ permissions:
9
+ contents: write # needed to create the release & upload assets
10
+
11
+ jobs:
12
+ build-and-release:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - name: Set up Python
18
+ uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.12"
21
+
22
+ - name: Build wheel + sdist
23
+ run: |
24
+ python -m pip install --upgrade pip build
25
+ python -m build
26
+
27
+ - name: Show artifacts
28
+ run: ls -la dist/
29
+
30
+ - name: Sanity-check version matches the tag
31
+ run: |
32
+ tag="${GITHUB_REF#refs/tags/v}"
33
+ ver=$(python -c "import tomllib,sys; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
34
+ if [ "$tag" != "$ver" ]; then
35
+ echo "Tag $tag does not match pyproject version $ver" >&2
36
+ exit 1
37
+ fi
38
+
39
+ - name: Create or update the GitHub release
40
+ env:
41
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42
+ run: |
43
+ tag="${GITHUB_REF#refs/tags/}"
44
+ if ! gh release view "$tag" >/dev/null 2>&1; then
45
+ gh release create "$tag" \
46
+ --title "clibo $tag" \
47
+ --notes "Automated release for $tag. See [CHANGELOG.md](https://github.com/${GITHUB_REPOSITORY}/blob/main/CHANGELOG.md) for details."
48
+ fi
49
+ gh release upload "$tag" dist/* --clobber
50
+
51
+ - name: Publish to PyPI (only if PYPI_API_TOKEN is configured)
52
+ env:
53
+ PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
54
+ if: env.PYPI_API_TOKEN != ''
55
+ run: |
56
+ python -m pip install --upgrade twine
57
+ python -m twine upload dist/* \
58
+ --username __token__ \
59
+ --password "$PYPI_API_TOKEN" \
60
+ --non-interactive
clibo-1.1.0/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ .venv/
9
+ venv/
10
+
11
+ # Tooling
12
+ .pytest_cache/
13
+ .ruff_cache/
14
+ .mypy_cache/
15
+
16
+ # clibo local data (never commit a user's database)
17
+ *.db
18
+ *.db-journal
19
+ .clibo/
20
+
21
+ # OS
22
+ .DS_Store
clibo-1.1.0/AGENTS.md ADDED
@@ -0,0 +1,107 @@
1
+ # Agents guide
2
+
3
+ This file is for **AI agents** (Claude Code, Codex, Aider, OpenCode, โ€ฆ) that
4
+ will be calling clibo on a user's machine. If you are a human contributor,
5
+ read [`docs/ADDING_A_TOOL.md`](docs/ADDING_A_TOOL.md) instead.
6
+
7
+ ## What clibo is
8
+
9
+ A box of **50 local-first CLI tools** under one `clibo` command, all writing
10
+ to a single SQLite file at `~/.clibo/clibo.db`. There is no network, no
11
+ account, no cloud โ€” installing clibo is enough.
12
+
13
+ Each tool is a sub-command: `clibo calorie`, `clibo crm`, `clibo todo`, โ€ฆ Run
14
+ `clibo info --json` for the full list, or `clibo <tool> --help` for any tool.
15
+
16
+ ## The contract every command keeps
17
+
18
+ | Rule | Why it matters |
19
+ |---|---|
20
+ | Every command accepts `--json`. | Stdout becomes a clean, parseable JSON document. |
21
+ | Mutations return the affected record. | `add`/`log`/`edit` emit the created/updated object โ€” no follow-up read required. |
22
+ | Deletes return `{"deleted": ID}`. | One-shot confirmation. |
23
+ | Errors go to **stderr** with non-zero exit code. | Use the exit code and read stderr to recover. |
24
+ | Verbs are predictable. | `add` (or a domain verb like `log`, `drink`, `take`), `list`, `show`, `edit`, `rm`, `stats`. |
25
+ | Free-form IDs accept names too. | Most tools resolve a positional argument as numeric ID *or* case-insensitive name (`clibo habit check "Read 10 pages"`). |
26
+ | Dates are forgiving. | `today`, `yesterday`, `tomorrow`, `YYYY-MM-DD`, `DD.MM`, `MM/DD`. |
27
+
28
+ ## Three integrating commands you'll use a lot
29
+
30
+ ```bash
31
+ clibo today --json # one snapshot across 12 tools โ€” fastest "what's going on?"
32
+ clibo search Q --json # full-text search across 22 text-bearing tables
33
+ clibo export --json # dump the entire local state to one JSON document
34
+ ```
35
+
36
+ `clibo doctor --json` returns `{"healthy": true, ...}` โ€” use it as a smoke
37
+ check before doing real work.
38
+
39
+ ## Per-tool skills
40
+
41
+ Every tool ships a micro-skill in [`skills/<tool>/SKILL.md`](skills/) with
42
+ YAML frontmatter compatible with Claude Code Skills. Each skill has:
43
+
44
+ - a `name` and `description` for skill-selection,
45
+ - a command table with flags,
46
+ - copy-paste examples,
47
+ - a **For agents** section that documents the exact JSON output.
48
+
49
+ If you can read one file from this repo to learn a tool, read its
50
+ `skills/<tool>/SKILL.md`.
51
+
52
+ ## Common agent recipes
53
+
54
+ ### Log a meal
55
+
56
+ ```bash
57
+ clibo calorie log "oatmeal with berries" --kcal 320 --protein 12 --carbs 48 --fat 6 -m breakfast --json
58
+ ```
59
+ Returns the created entry; check `data["id"]` if you need to edit it later.
60
+
61
+ ### Find every mention of a topic
62
+
63
+ ```bash
64
+ clibo search "acme" --json
65
+ ```
66
+ Returns `{"query": "acme", "count": N, "results": [{"source", "id", "snippet"}, ...]}`.
67
+ `source` is the tool name; `id` is the row ID in that tool's table.
68
+
69
+ ### Read the whole picture
70
+
71
+ ```bash
72
+ clibo today --json # everything actionable today
73
+ path=$(clibo export --json | jq -r .path); cat $path # entire DB as JSON (all tables)
74
+ ```
75
+
76
+ `clibo export --json` returns `{"path", "tables", "rows"}` โ€” the dump itself
77
+ is written to `path` so it can be reused later.
78
+
79
+ ### Mutate by name without a separate lookup
80
+
81
+ ```bash
82
+ clibo habit check "Read 10 pages" --json
83
+ clibo crm touch "Anna Petrova" --json
84
+ clibo savings deposit "Vacation" 200 --json
85
+ ```
86
+
87
+ ### Detect that clibo is installed and working
88
+
89
+ ```bash
90
+ clibo doctor --json | jq .healthy # โ†’ true
91
+ ```
92
+
93
+ ## Things to avoid
94
+
95
+ - **Don't shell out to `sqlite3` directly.** The schema may evolve between
96
+ versions; use the CLI. If you need bulk reads, use `clibo export --json`.
97
+ - **Don't write the database file.** Use the CLI for mutations so triggers,
98
+ defaults and timestamps stay consistent.
99
+ - **Don't assume timezone.** All dates are local-time, naive. Use the
100
+ command's own date parsing instead of pre-formatting.
101
+ - **Don't pre-quote `--json`.** It's a plain flag.
102
+
103
+ ## Versioning
104
+
105
+ Run `clibo --version` or read `clibo doctor --json | jq .version`. Major
106
+ versions follow semver โ€” a 1.x bump means the JSON contract for any command
107
+ may have changed; minor bumps add new tools or fields.
@@ -0,0 +1,124 @@
1
+ # Changelog
2
+
3
+ All notable changes to **clibo** are recorded here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
5
+ follows [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [Unreleased] โ€” staged for `v1.1.0`
8
+
9
+ Thirteen polish iterations have landed on `main` since `v1.0.0`. Ship them
10
+ by pushing a `v1.1.0` tag โ€” the
11
+ [`Release` workflow](.github/workflows/release.yml) handles the rest.
12
+
13
+ ### Added โ€” six new cross-tool commands
14
+
15
+ - ๐Ÿš€ `clibo init` โ€” one-shot onboarding. Sets the shared currency plus daily
16
+ goals for calories, water, focus, sleep and meditation in a single call.
17
+ - ๐Ÿ—“๏ธ `clibo week` โ€” 7-day rollup across sleep, calories, water, focus,
18
+ mood, habits (vs each habit's weekly target), expenses (with top
19
+ category) and productivity (tasks/journal/worklog).
20
+ - ๐Ÿ“œ `clibo recent` โ€” chronological activity feed across 40+ tables,
21
+ newest-first, with relative "just now / 9h ago / yesterday" labels.
22
+ - ๐Ÿท๏ธ `clibo tags` โ€” discover every tag used across notes, todo, bookmark,
23
+ crm, brag, recipes and journal, with counts and per-source breakdown.
24
+ - ๐Ÿฉบ `clibo doctor` โ€” install health check: version, Python, tools built,
25
+ database size and per-table row counts; `--json` returns a `healthy` bool.
26
+ - ๐Ÿ“ฅ `clibo import PATH` โ€” counterpart to `clibo export`. Loads a JSON dump
27
+ back into the live database (`INSERT OR IGNORE` by default, `--replace`
28
+ for a clean overwrite). Accepts both the v1 envelope and a bare
29
+ `{table: [rows]}` map.
30
+
31
+ ### Added โ€” documentation & ergonomics
32
+
33
+ - ๐Ÿ“ `AGENTS.md` at the repo root: one-page agent guide with the universal
34
+ contract, integrating commands, copy-paste recipes and pitfalls.
35
+ - ๐ŸŽฏ `docs/PHILOSOPHY.md` โ€” the seven design trade-offs that explain
36
+ why clibo looks the way it does (local-first, JSON contract, 50 tools
37
+ vs library, forgiving dates, beautiful output, sane test bar).
38
+ - ๐Ÿ“„ `docs/SCHEMA.md` โ€” auto-generated reference for all 63 tables;
39
+ regenerated by `scripts/dump_schema.py`.
40
+ - ๐Ÿ“ `examples/` directory: `daily_brief.py`/`daily_brief.sh` (combine
41
+ `today` + `week` into a Markdown brief) and `find_and_act.py` (the
42
+ search-then-act agent pattern). All smoke-tested end-to-end.
43
+ - ๐Ÿ› ๏ธ `CONTRIBUTING.md` and `.github/{ISSUE_TEMPLATE,pull_request_template}.md`
44
+ โ€” the four-part "done" definition for new tools, a maintainer
45
+ Releasing section, plus pointers to SCHEMA.md and PHILOSOPHY.md.
46
+
47
+ ### Added โ€” infrastructure
48
+
49
+ - ๐Ÿค– `.github/workflows/release.yml` โ€” automated release on `v*.*.*` tag
50
+ push: builds wheel + sdist, sanity-checks the tag matches `pyproject`'s
51
+ version, creates the GitHub release with artifacts, and publishes to
52
+ PyPI when the `PYPI_API_TOKEN` repo secret is set.
53
+ - ๐Ÿงน `ruff>=0.5` lint, configured in `pyproject.toml`
54
+ (`E/W/F/I/UP/B/SIM`), enforced as a new `Lint with ruff` step in CI.
55
+ The first run found 12 real issues (unused imports / locals / a stale
56
+ `typing.Callable`); all fixed.
57
+ - ๐Ÿ“ฆ Wheel and sdist attached to the GitHub release page for v1.0.0
58
+ (and every future release via the workflow).
59
+
60
+ ### Tests
61
+
62
+ - 332 passing (up from 299 at v1.0.0); ruff clean.
63
+
64
+ [Unreleased]: https://github.com/dm1tryG/clibo/compare/v1.0.0...HEAD
65
+
66
+ ## [1.0.0] โ€” 2026-05-23
67
+
68
+ The first stable release. All 50 planned tools are shipped, every command
69
+ supports a `--json` mode for AI agents, and the project carries 299 tests.
70
+
71
+ ### Added โ€” 50 local-first CLI tools, in 5 categories
72
+
73
+ - **๐Ÿƒ Health & Wellness** โ€” `calorie`, `water`, `weight`, `workout`,
74
+ `sleep`, `mood`, `meds`, `period`, `meditate`, `vitals`.
75
+ - **๐Ÿ’ฐ Money & Finance** โ€” `expense`, `budget`, `subs`, `bills`, `savings`,
76
+ `debt`, `networth`, `invoice`, `split`, `wishlist`.
77
+ - **โœ… Productivity & Work** โ€” `todo`, `notes`, `habit`, `focus`, `time`,
78
+ `journal`, `goals`, `events`, `worklog`, `bookmark`.
79
+ - **๐Ÿค CRM & Relationships** โ€” `crm`, `leads`, `followup`, `meetings`,
80
+ `jobs`, `clients`, `birthdays`, `network`, `gifts`, `brag`.
81
+ - **๐Ÿ  Home & Life** โ€” `groceries`, `pantry`, `recipes`, `meals`, `chores`,
82
+ `plants`, `car`, `home`, `pets`, `travel`.
83
+
84
+ ### Added โ€” Cross-tool commands
85
+
86
+ - `clibo today` โ€” a one-screen dashboard pulling from 12 tools at once:
87
+ overdue/today tasks, habit check-offs, water/calorie/focus progress bars,
88
+ today's events and meals, bills due, follow-ups, plants needing water,
89
+ chores due, and today's birthdays.
90
+ - `clibo search QUERY` โ€” one query across 13 text-bearing tables (notes,
91
+ journal, todo, bookmark, crm, network, meetings, brag, recipes, worklog,
92
+ gifts, expense, wishlist).
93
+ - `clibo backup [PATH]` / `clibo restore PATH` โ€” file-level SQLite backup
94
+ and restore, with timestamped defaults under `~/.clibo/backups/`.
95
+ - `clibo export [PATH]` โ€” dump every clibo table to one JSON file,
96
+ ideal for an agent to read the whole local state in one go.
97
+ - `clibo info` โ€” progress dashboard for the project itself.
98
+
99
+ ### Added โ€” Agent-native contract
100
+
101
+ - Every command accepts `--json` for machine-readable output on stdout.
102
+ - Mutations return the affected record as JSON; deletes return
103
+ `{"deleted": ID}`; errors go to stderr with a non-zero exit code.
104
+ - One micro-skill (`SKILL.md`) per tool in `skills/`, ready to drop into
105
+ an AI agent's skill set.
106
+
107
+ ### Added โ€” Engineering
108
+
109
+ - Stack: Python 3.10+ ยท [Typer](https://typer.tiangolo.com/) ยท
110
+ [SQLModel](https://sqlmodel.tiangolo.com/) ยท [Rich](https://rich.readthedocs.io/).
111
+ - One SQLite file at `~/.clibo/clibo.db` (`CLIBO_HOME` / `CLIBO_DB` override).
112
+ - 299 pytest tests covering every tool and the cross-tool commands.
113
+ - GitHub Actions CI on Python 3.10/3.11/3.12.
114
+ - MIT licensed.
115
+
116
+ ### Install
117
+
118
+ ```bash
119
+ uv tool install --from git+https://github.com/dm1tryG/clibo.git clibo
120
+ # or
121
+ pipx install git+https://github.com/dm1tryG/clibo.git
122
+ ```
123
+
124
+ [1.0.0]: https://github.com/dm1tryG/clibo/releases/tag/v1.0.0
@@ -0,0 +1,78 @@
1
+ # Contributing to clibo
2
+
3
+ Thanks for thinking about contributing โ€” clibo is built to grow.
4
+
5
+ ## Quick setup
6
+
7
+ ```bash
8
+ git clone https://github.com/dm1tryG/clibo.git
9
+ cd clibo
10
+ uv venv .venv # or python -m venv .venv
11
+ uv pip install --python .venv -e ".[dev]"
12
+ ./.venv/bin/pytest # 300+ tests
13
+ ./.venv/bin/ruff check # lint
14
+ ```
15
+
16
+ CI runs both `ruff check` and `pytest` โ€” keep both green locally before opening
17
+ a PR. Ruff config lives in `pyproject.toml`.
18
+
19
+ The full developer guide for adding a new clibo tool lives at
20
+ [`docs/ADDING_A_TOOL.md`](docs/ADDING_A_TOOL.md) โ€” read it before you start.
21
+ [`clibo/clis/calorie.py`](clibo/clis/calorie.py) is the canonical reference.
22
+ [`docs/SCHEMA.md`](docs/SCHEMA.md) lists every existing table; regenerate it
23
+ with `python scripts/dump_schema.py` after adding a new model.
24
+ [`docs/PHILOSOPHY.md`](docs/PHILOSOPHY.md) explains the design trade-offs every
25
+ tool is built on โ€” please read it before proposing structural changes.
26
+
27
+ ## What a "done" tool looks like
28
+
29
+ A tool is not done until **all four** of these are true:
30
+
31
+ 1. The module in `clibo/clis/<tool>.py` follows the pattern in
32
+ `docs/ADDING_A_TOOL.md`: namespaced table name, Typer `app`, predictable
33
+ verbs, `--json` on every command, output routed through `core.output`.
34
+ 2. It is registered in `clibo/clis/__init__.py` (both the import block and
35
+ the `ALL` list).
36
+ 3. There is a pytest file at `tests/test_<tool>.py` that covers create, a
37
+ read/list, the `--json` shape, `stats`, and at least one error path.
38
+ 4. There is a micro-skill at `skills/<tool>/SKILL.md` with the YAML
39
+ frontmatter (`name`, `description`), a command table, examples, and a
40
+ **For agents** section documenting the JSON output.
41
+
42
+ `./.venv/bin/pytest` must be green. Smoke-test the new tool by hand,
43
+ including `--json`, before opening a PR.
44
+
45
+ ## Commit messages
46
+
47
+ Plain, present-tense, one short subject line. No `Co-Authored-By` trailers,
48
+ no "Generated with โ€ฆ" lines, no mentions of any LLM.
49
+
50
+ ## PR checklist
51
+
52
+ A short [pull-request template](.github/pull_request_template.md) is
53
+ auto-filled when you open a PR โ€” please tick the boxes honestly.
54
+
55
+ ## Releasing (maintainers)
56
+
57
+ Cutting a new version is one command on a clean `main`:
58
+
59
+ 1. Bump `version` in `pyproject.toml` **and** `__version__` in
60
+ `clibo/__init__.py`.
61
+ 2. Add a `## [X.Y.Z] โ€” YYYY-MM-DD` section at the top of `CHANGELOG.md`.
62
+ 3. Commit the bump, then:
63
+
64
+ ```bash
65
+ git tag -a vX.Y.Z -m "clibo vX.Y.Z"
66
+ git push origin main --follow-tags
67
+ ```
68
+
69
+ The [`Release` workflow](.github/workflows/release.yml) takes it from there:
70
+ builds the wheel and sdist, sanity-checks the tag matches the pyproject
71
+ version, creates the GitHub release, attaches the artifacts, and (if the
72
+ `PYPI_API_TOKEN` repo secret is set) publishes to PyPI.
73
+
74
+ ## Code of conduct
75
+
76
+ Be kind. Assume good faith. We follow the
77
+ [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
78
+ in spirit; no formal document needed at this size.
clibo-1.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dm1tryG
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.