the signals and their derived score are provisional and subject to change.
validate manually before sharing.
ab73f977058caa7dfa5be48027f7efe71fd2296a1049bc2852173 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi327065a66e123 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi112de6d7a4b63 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJid128c18814503 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJif01153386d023 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi8d24dec0d8693 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi9c898f98f3133 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJic654353671453 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi80baa53c9cc03 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJie442892054cd3 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi6f967ca1aa323 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi4c9d46aafe3b3 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi7471fb36bf9e3 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi8d395311b5973 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmc2f6f2fe431b3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmbc869ab595f93 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm8a9dca8440393 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmf773c386eb3d3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm311b9e5eb10b3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm3c893fbda0c83 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm727452ca9dda3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm2da0240a326b3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm79b0dfcadcf63 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmc5d582868ee93 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm73b5095a48703 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm42bc2ea40dfa3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmdef3c6128b043 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm1befdedbea873 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm7eabd8afefb93 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm1837aa1532ed3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm213e246f07263 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJiae194bbd993a3 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJibc5c3d2b96c63 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi3d13ffe69b343 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJib7f1883daa183 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJie7abd1d9bef33 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJie38c37d1ac6f3 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi4ec867eee9b73 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi178d45653b8a3 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJibb287549fd113 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi249ee5b7c1523 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJid6710c4743963 weeks agoClaude-Session: https://claude.ai/code/session_016EeevKkrF1E8zoEMVqecJi6e405df9cce33 weeks agoClaude-Session: https://claude.ai/code/session_018REXyL96QweEh25TduUYPc95cccb7f4b343 weeks agoClaude-Session: https://claude.ai/code/session_018REXyL96QweEh25TduUYPca360c88983233 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm754792c1771a3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmb55f46b328bb3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm6f6fa469d46a3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm13f0f4145fba3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mme691167889793 weeks agoClaude-Session: https://claude.ai/code/session_018REXyL96QweEh25TduUYPc532d17d52f7d3 weeks agoClaude-Session: https://claude.ai/code/session_018REXyL96QweEh25TduUYPc76a79af8dc573 weeks agoClaude-Session: https://claude.ai/code/session_018REXyL96QweEh25TduUYPc0dfbcadab3d43 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mma972e30b1c5d3 weeks agoClaude-Session: https://claude.ai/code/session_012ud5cCiBphVQ1DniSXq94Laeb0efcd2c163 weeks agoClaude-Session: https://claude.ai/code/session_012ud5cCiBphVQ1DniSXq94Le1761da688463 weeks agoClaude-Session: https://claude.ai/code/session_012ud5cCiBphVQ1DniSXq94L27e3d72505803 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm6b9d0e1e25973 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm4044d48a09023 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm1bead6fb88f53 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm6cd2cea071d53 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm1d0de17a05933 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm949b2e4e114b3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm47e99a18c0a33 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm21fc0e9ba86f3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm9b2b0fd2e6a73 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm53b1e86a11d13 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm08880c439ccf3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmac0bab9a57193 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mme8c5bae22cc53 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm4fa2e609b2c23 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmd47278a1c9063 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmf8ea2df868013 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm80a19af40d0f3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm0626f1b5e9193 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mmd503a7f9bfc33 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm7d1889a5922c3 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm4d7e36e395673 weeks agoClaude-Session: https://claude.ai/code/session_011z8C3ipASeprtHpFVFa3mm6e4919bdcdf93 weeks agoClaude-Session: https://claude.ai/code/session_016jf1nwF7Mv69vLpgVGyNnHa4941636de5f4 weeks agoCo-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>b542986d62d94 weeks agoCo-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>d7ee6c3c60674 weeks agoCo-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>668b005cfda54 weeks agoCo-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>f0747eb9b4bd4 weeks agoCo-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>588e20e10ab24 weeks agoCo-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>514ad0800a774 weeks agoCo-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>30e05a74423a2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>98b1638aa2b92 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>e22ef1f4c1172 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>b0b6ec72edbd2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>102d7cb992542 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>ac1f3af9a4cd2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>f1f0efa75a2c2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>944d4ab181542 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>5b6e818553152 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>582827fa525c2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>c820a8a041302 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>3db5f12a129d2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>bffe3b88b58e2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>b69a95112b8e2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>72cf28e3caaf2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>6d7ec2c7c3022 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>c5a240fd1edf2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>54e7d60760372 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>0d7e811b016d2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>3972ca02c56b2 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>0f745982f5092 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>a41e176528e12 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>206242b51e032 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>35969d96ef222 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>38b703d9b4902 months agoCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com># CLAUDE.md
Guidance for agents working in this repo.
## What this is
Nine is the umbrella project/brand for a suite of Android apps built for
phones with a physical D-pad/keypad and no touchscreen (the target hardware
T9 predictive text was designed for). Each app follows a `[Letter]9` naming
convention:
- **L9**: Launcher on 9 keys
- **C9**: Calendars and Contacts on 9 keys
- **P9**: Phone on 9 keys
- **M9**: Messages on 9 keys
Each app ships as its own installable APK with its own F-Droid listing -
---
name: tickets
description: How to file, triage, label, work on and close Nine tickets on SourceHut (todo.sr.ht) with the hut CLI, and what each label means. Use whenever you read, create, comment on, label or close a ticket, or the user says "issue", "ticket" or "P1/P2/P3".
---
# Tickets
All Nine work is tracked in one SourceHut tracker for the whole suite: **https://todo.sr.ht/~timofurrer/nine**
(`hut todo ... -t nine`). Ticket URL form: `https://todo.sr.ht/~timofurrer/nine/<id>` (hut prints it with ---
name: release
description: Cut a suite-wide Nine release - decide which apps changed, bump versionName/versionCode, write the fastlane changelogs, commit, push, tag and push the tag, then watch the release run and verify the published APKs and F-Droid repo. Use only when the user asks to release (or to bump versions / cut a tag) for L9, C9, P9 or M9.
---
# Releasing the Nine suite
A release is one suite-wide CalVer tag. Pushing it makes sr.ht's `.builds/release.yml` re-test and lint every
module, then---
name: chunk-of-work
description: The end-to-end flow for one chunk of work in Nine - understand, propose (survey the user on design/UX/refactoring decisions), implement (with Opus/Sonnet subagents where it pays off), review, test on the phone, commit, push and close the tickets. Use whenever the user asks to fix, implement or change something, directly or by ticket number ("fix #10", "implement #27, #28", "make the dialer do X").
---
# A chunk of work
One request from the user ("fix #10, #11", "implem---
name: on-device-testing
description: When, what and how to test Nine apps on the user's real phone over adb - asking the user to connect it, safety rules for their daily phone, adb patterns for driving the keypad UI and checking providers/alarms/notifications, and labelling tickets needs-device-testing when no phone is available. Use whenever a change touches platform behaviour unit tests can't prove (Telecom, SMS role, notifications, alarms, broadcasts, providers, sync, intents from other apps, permiss---
name: commit-messages
description: How to write commit messages in this repo. Use whenever you create a git commit (or a squash/merge message) here, and when asked to reword one.
---
# Commit messages
Follow https://cbea.ms/git-commit/, with the project conventions below. Keep it short and written for a
person reading `git log` in a year.
## Subject
- Start with the thing it touches: `L9:`, `C9:`, `P9:`, `M9:` or `Core:` (`Contacts:` for the `:contacts`
module). No other prefixes - no `feat:`, `finone