Repository navigation
things-cli v0.11.0 — smaller JSON for agents
JSON listings are now sized for agents, and there is a new things doctor for checking database access. Most of the rest is a refactor of the write and import code, with no change in behaviour, plus a set of fixes to how --when times are sent and checked.
Behaviour changes
-jlistings print a default set of fields.listviews,searchandprojectsused to print every field of every row. They now print the fields an agent needs to pick an item and act on it: uuid, title, type, status, start, startBucket, dates, reminder, project, area and heading titles, tags, repeating and checklist progress. Notes, parent uuids, sort indexes and the creation date are left out. On a 94-task list the output drops from 90 KB to 29 KB.--fields allprints the full record exactly as before, andthings show <uuid> -jis unchanged. (#454)--fields(-f) picks the keys yourself.things anytime -j --fields uuid,title,deadlineprints only those keys, in that order. Unknown names are refused with theunknown fieldtoken and the list of valid names. (#451, #459)- Weekdays and evening times are sent and checked.
fridayandfriday@9pmare sent as the date Things gives them (the next such day after today, sosaturday@9pmon a Saturday is next week) and read back.evening@6pmis sent asevening@18:00and checked to be in This Evening today.importaccepts and resolves them too. (#458) - A
--whenthe CLI cannot check is reported as not confirmed. An abbreviation such asfrior a phrase such asnext fridaythat Things understood used to print the item as if confirmed.add,project add,editandimportnow report it asnot confirmed (when not checked)(JSONconfirmed: false, reason: when), exit 0. (#453, #458) - Dated
--whentimes are sent as a date.today@6pm,tomorrow@9amand<date>@<time>are sent to Things asYYYY-MM-DD@HH:MMand read back, inadd,editand nowimport, so a time Things misfiles is caught. A bare 12-hour time such as9:30pmis sent as21:30. (#443, #446, #449) - Project refs say "project not found".
open --projectandproject editrefuse a ref that names a to-do, and every kind of miss (title, row number, uuid) now reports the project kind. (#448, #444, #445)
New
things doctorchecks that the Things database can be found and opened, and reports a permission denial (Full Disk Access) as such. (#447)
Also
- A padded
--list,--areaor--headingname is sent trimmed when only the trimmed name matches. A title that really has the spaces still matches as typed.importsends names as given. (#456) - The missing-area and "--heading needs a list" warnings use one wording across
add,editandimport, and a list given by uuid is named by its title. (#450) - Large refactors of the import, edit and database code, each checked against the previous binary with a comparison runner now in
tools/compare/. (#431–#455) - The README puts Install first. (#457)
- The bundled skill and the docs at things.rlew.io are updated. Run
things skill installafter upgrading.
Requirements
macOS with Things3 installed. Binaries for Apple Silicon (darwin_arm64) and Intel (darwin_amd64).
What's Changed
Other Changes
- refactor: let each error type fill its own --json error payload by @ryanlewis in #431
- refactor: share small helpers and the --when read-back verdict by @ryanlewis in #433
- fix(add): check every field before --create-tags creates a tag by @ryanlewis in #434
- refactor(db): build alias-specific SQL with functions and share the row loop by @ryanlewis in #432
- test(db): add shared test helpers and move raw TMTask inserts onto the fixture by @ryanlewis in #436
- fix: check every edit field before --create-tags creates a tag by @ryanlewis in #435
- test: keep import creation-dates in step with the pinned clock by @ryanlewis in #437
- refactor: split importcheck.go and share the --when rules with import by @ryanlewis in #438
- fix(edit): check the auth token before --create-tags creates a tag by @ryanlewis in #439
- refactor: build the target warnings in one place by @ryanlewis in #440
- test: add days to Things dates with AddDays, not the day bits by @ryanlewis in #441
- refactor: simplify code churned through 0.10.0 by @ryanlewis in #442
- fix(when): send a bare 12-hour --when time as HH:MM and read it back by @ryanlewis in #443
- fix(open): refuse a --project ref that is not a project by @ryanlewis in #444
- fix(project): match only projects by title for project edit by @ryanlewis in #445
- fix(when): send a dated --when time as YYYY-MM-DD@HH:MM and read it back by @ryanlewis in #446
- fix(db): report permission denial in database discovery; add things doctor by @ryanlewis in #447
- fix(lookup): report a project not found for every ref shape in a project lookup by @ryanlewis in #448
- fix(import): send a dated when time as YYYY-MM-DD@HH:MM and read it back as sent by @ryanlewis in #449
- feat(output): add --fields to limit JSON listings to named keys by @ryanlewis in #451
- chore(warnings): one wording for the missing-area and heading-needs-a-list warnings by @ryanlewis in #450
- refactor(edit): decide whether an edit is sent in one place by @ryanlewis in #452
- fix(when): report a --when the read-back cannot place as not confirmed by @ryanlewis in #453
- test: tidy date helpers and rows.Err, rename the unlogged rule, add the binary comparison runner by @ryanlewis in #455
- feat(output)!: print a default field set on -j listings, with --fields all for the full record by @ryanlewis in #454
- fix: send a padded list, area or heading name trimmed when only that form matches by @ryanlewis in #456
- docs(readme): move Install up and mention the import read-back of created items by @ryanlewis in #457
- fix(when): send weekday names as their date and check evening@time, in add, edit and import by @ryanlewis in #458
- feat(list): add -f as the short form of --fields by @ryanlewis in #459
- docs(release): add v0.11.0 release notes header by @ryanlewis in #460
Full Changelog: v0.10.0...v0.11.0