Skip to content

Kai v2.3.0

Choose a tag to compare

@gertybot gertybot released this 28 Sep 21:16
· 32 commits to main since this release
1a05b9c

Tyre ledger helpers, and a documentation restructure. Additive: no commands, paths or credentials change from v2.2.1.

Added: tyre ledger helpers (#16)

skills/gear-maintenance/scripts/tyres.py edits the tyre ledger, so data/tyres.json no longer needs hand-editing:

python3 skills/gear-maintenance/scripts/tyres.py list
python3 skills/gear-maintenance/scripts/tyres.py add-wheelset road_wheels --name "Road wheels" --gear-id b1234567
python3 skills/gear-maintenance/scripts/tyres.py add-set road_wheels --model "GP5000 28mm" --replace-at 4000
python3 skills/gear-maintenance/scripts/tyres.py add-set road_wheels --model "GP5000 28mm" --replace   # retires the old set, fits the new one, in one write
python3 skills/gear-maintenance/scripts/tyres.py retire road_wheels-gp5000-28mm-2026-01-01
  • A wheelset wears one active tyre set at a time; add-set --replace retires the old one (recording when) and fits the new one atomically.
  • fitted_bike_odometer_km is informational only: from --odometer, or from Strava only when the wheelset has exactly one bike and the set is fitted today. Strava being unreachable never blocks a change.
  • Notes, custom fields and key order in your existing ledger are preserved. A ledger left in the old skills/strava/data/ location is edited in place, with a notice; a new file is never created alongside it.
  • The mileage report is unchanged (tyre-mileage.sh).

Documentation restructure

The README was 381 lines covering three audiences at once. It's now 123 lines: the pitch, the capability table, how it works, a five-step quick start, and a documentation index. Everything else moved out, and each command now lives in exactly one place instead of being repeated across files:

  • docs/installation.md — requirements, Python packages (venv and uv), connecting each data source, gear maintenance setup.
  • docs/openclaw.md, docs/claude-code-codex.md, docs/hermes.md — one page per agent.
  • docs/features.md — every capability in detail: what you get, how it works, what it needs, known limits, and example prompts.
  • docs/architecture.md — how it works, repository layout, customizing, privacy detail.
  • docs/upgrading.md — v1.x → v2, gear maintenance moved.
  • CONTRIBUTING.md — set-up, tests, branch and PR naming, the personal-data rule, how to add a skill, releases.
  • CHANGELOG.md — one entry per release from here on.
  • .github/ — a pull request template and bug/feature issue templates, each with a reminder to keep personal data out of anything public.

Old links keep working: the README still has a short "Upgrading from v1.x" section at the anchor the v2.0.0 release notes point to.

Tests (83, was 79)

New: every relative link and heading anchor across the tracked docs resolves; the anchor published releases link to still exists; the README stays under 160 lines; every docs/ page is linked from it; 23 new tests for tyres.py (refusal without --replace, atomic replace, id collisions, ledger-location fallback, a round trip through the real mileage report).

Known issues

  • FIT downloads from the Garmin skill are saved as a ZIP, so analyze/parse on them fails (#15).
  • tyre-mileage.sh treats a tyre's fitted date as midnight UTC, so a fit-day ride outside UTC can be missed or miscounted (#22).
  • SECURITY.md holds Kai's own agent rules, but GitHub treats that filename as the repo's vulnerability-reporting policy (#24).
  • The Hermes Agent and Codex setups are still untested against live installs.

Full changelog: v2.2.1...v2.3.0