Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Run the test suite once per change. It drives real git repositories in temp dirs
- This is health data. Never log personal data or message contents, and never write a record anywhere except the private data repo the household owns.
- Code never knows a person, a chat or a date of a real cycle. Those live in the data repo. Keep every example and test fictional.
- Every user-facing string is translatable. English is the source; Spanish ships too, and the bot talks Spanish to its users.
- In the group the bot reads replies to the bot, answers to its questions, commands, and messages that mention it when Telegram delivers them (as a group admin, all of her messages). Voice notes, photos, videos, stickers and files from her or an admin are always processed. It also answers private chats with her or an admin. With `history_scope: all` the group's other messages go to the assistant as context marked `[not to you]`, never answered. With `answer_scope: all` her and the admins' group texts without a mention start a turn like addressed ones, marked `[no mention]` (her plain texts too when the bot reads the whole group; context stays `[not to you]`, and principle 1 is rendered scoped to allow it); the answer may be only a reaction (on every message of the turn), or no words when the assistant writes `NO_REPLY`, which the bot never sends. A person's group message is never left with nothing: a turn that shows nothing puts πŸ‘€ (Β«readΒ») on every message it covered (πŸ‘ once where πŸ‘€ is refused), and a mention, reply or voice note that got nothing gets `read_no_answer` (a sticker or photo without a mention gets πŸ‘€). Bots never start a turn, and a failed turn of only such lines posts no error and no πŸ‘€.
- In the group the bot reads replies to the bot, answers to its questions, commands, and messages that mention it when Telegram delivers them (as a group admin, all of her messages). Voice notes, photos, videos, stickers and files from her or an admin are always processed. It also answers private chats with her or an admin. With `history_scope: all` the group's other messages go to the assistant as context marked `[not to you]`, never answered. With `answer_scope: all` her and the admins' group texts without a mention start a turn like addressed ones, marked `[no mention]` (her plain texts too when the bot reads the whole group; context stays `[not to you]`, and principle 1 is rendered scoped to allow it); the answer may be only a reaction (on every message of the turn), or no words when the assistant writes `NO_REPLY`, which the bot never sends. When a turn starts, every person's message it covers gets πŸ‘€ at once, in every chat (a line handed over mid-turn when it is taken; never a tap or a bot's message, never twice), on its own thread so the turn never waits, with no πŸ‘ or text if Telegram refuses. A text answer leaves it, a reaction-only answer replaces it, silence keeps it as Β«readΒ» (πŸ‘ once where the πŸ‘€ was refused, in the `all` group), and a mention, reply or voice note that got nothing gets `read_no_answer`. Bots never start a turn, and a failed turn of only `[no mention]` lines posts no error and keeps its πŸ‘€.
- Whatever the bot offers to do (a reminder, calendar entries) waits for a tap; without one nothing happens.
- The tracker syncs to a private remote named in `.beads/config.yaml`, never to this public repo. Nothing written here names the server behind it.
- Conventional commits. PR titles say why, not what.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ SuperCycleTracker is a menstrual cycle tracker that lives in a Telegram group. I
- In the group it reads replies to the bot, answers to its questions, commands, and messages that mention it when Telegram delivers them; as a group admin it reads all of her messages. Voice notes from her or an admin are always heard, when the plugin can transcribe, and their photos, videos, stickers and files of any kind always reach the assistant. It also answers private chats with her or an admin.
- Works without any AI: buttons and `/anotar` write records directly. An optional assistant plugin reads free text and answers questions.
- The assistant reads the shared assistant principles first, in English or Spanish (`supercycletracker/principles/`): twelve rules on whom it answers, buttons, offers, privacy and honest results. The bot's own rules in `rules.md` follow them and only add what is specific to tracking a cycle. The files are copied unchanged from the shared text, and a test pins their hashes.
- A burst of messages gets one answer, and what she writes while it thinks joins that answer. An edited message is taken into account. Choices come as buttons she can tap or ignore, and an action the assistant wants to take waits for Approve or Reject.
- Every message the bot starts working on shows a πŸ‘€ at once, so nobody wonders during a long answer whether it was seen. A burst of messages gets one answer, and what she writes while it thinks joins that answer. An edited message is taken into account. Choices come as buttons she can tap or ignore, and an action the assistant wants to take waits for Approve or Reject.
- Optionally reads the rest of the group as context, marked as not addressed to it, and keeps a chat log so a fresh conversation starts from the last two weeks of the chat. A remark between people is never taken as an order.
- Optionally (`answer_scope: all`) takes her and the admins' group messages without a mention as meant for it too: it acts on what they say, answers with a πŸ‘ when that is enough, in words when they ask something or change what someone has to do, and marks talk that has nothing for it with a πŸ‘€ (Β«readΒ»), so no message is left with nothing under it.
- Optionally (`answer_scope: all`) takes her and the admins' group messages without a mention as meant for it too: it acts on what they say, answers with a πŸ‘ when that is enough, in words when they ask something or change what someone has to do, and leaves a πŸ‘€ (Β«readΒ») on talk that has nothing for it, so no message is left with nothing under it.
- Offers what it can do instead of doing it unasked: a reminder here or in her calendar, or the predicted phases and next period as calendar entries, with buttons. Without an answer nothing happens, and `/recordatorios` lists and cancels the reminders set.
- Every string is translatable. English and Spanish ship.
- Keeps the records in a private git repository you own, one commit per check-in, with `/deshacer` as undo.
Expand Down
Loading
Loading