Skip to main content

CLIChatty

A curses-based terminal interface to the chatty messaging app's database. Messages are sent using mmcli, and MMS messages are sent through the mmsd-tng daemon over D-Bus. It is designed to be used via SSH, this way you can message from your computer.

SSH into your phone, then run clic or clichatty to start the program. For help with keybindings, press H. For help with flags, run clic -h.


Choosing a database

By default clic uses the chatty database at ~/.purple/chatty/db/chatty-history.db. Pass -d/--database PATH to work with a different one, e.g. to browse a copy of your history or the database of a second chatty profile:

clic -d /tmp/chatty-history.db
clic -d other.db -a peer -t 20

The database is used for both reading and writing, so messages sent are recorded in the one you selected. On its own (clic -d other.db) the flag still starts the curses interface.


MMS

Multimedia messages (pictures, files, group chats) require mmsd-tng to be running on the phone (Chatty launches it automatically), and gdbus (part of glib2-utils) on PATH.

  • In the compose window, <c-x> attaches a file and the message is sent as an MMS. Group threads and messages sent with -s/--subject are also sent as MMS.
  • From the command line: clic -a 'alias' -m 'text' -f /path/to/image.jpg -f /path/to/file.txt

Sent and received MMS are recorded and their attachments cached by the Chatty app itself: mmsd-tng's MessageAdded signal tells Chatty about every MMS (it saves payloads under $XDG_DATA_HOME/chatty/mms/<tag>/ and writes the messages/mm_messages/files rows). Clichatty just triggers the send via mmsd-tng and displays what Chatty stored, so nothing is recorded twice.


Reply-time statistics

Pressing i over a thread shows its message count, member list, and, per member, two reply-time distributions:

  • you → member: how long you normally take to reply to them.
  • member → you: how long they normally take to reply to you.

Consecutive messages from the same side are treated as a single "turn", and a reply time is measured from the last message of one turn to the first message of the next turn from the other side. For each direction you get the average and median response time (plus the number of replies it is based on); a second, capped figure recomputes the same stats using only gaps of 24h or less, so multi-day gaps between conversations don't skew the numbers. Gaps with invalid or missing data (clock skew, carrier messages with no sender) are ignored entirely.

Message statistics

The i screen carries more than reply times:

  • Volume — how many messages you sent and received, and how long the thread has been going, measured in days active rather than raw span so a two-day burst doesn't read as a month-long trickle.
  • Per member — how much each person sent you, as a share of the thread.
  • Who opens conversations — a conversation counts as opened by whoever sends the first message after 4h of silence, so a long back-and-forth is attributed to whoever restarted it instead of to whoever typed more.
  • Who has the last word — whether their most recent message is still unanswered, and how long each side has been silent.
  • When you talk — messages per hour of the day and per weekday, as sparklines, so you can see the hours a thread is actually used in.

S in the thread list shows the same idea across every thread at once: totals, the busiest thread, and when you talk in aggregate.

The same numbers are available without the interface:

clic --stats
clic --stats -d /path/to/chatty-history.db

Installing

The recommended installation method is with uv:

uv tool install clichatty

Release files for clichatty 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for clichatty 0.7.0
File Size Uploaded
clichatty-0.7.0.tar.gz 89.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for clichatty 0.7.0
File Interpreter ABI Platform
clichatty-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 148.2 kB

Release files / clichatty-0.7.0.tar.gz

Download URL clichatty-0.7.0.tar.gz
Size 89.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e6cbc379b92382baa26c4632a856c0e85f0082d94e86b21b59e561ec934285f5
BLAKE2b-256 checksum
How to use checksums
5d761f03e8ebefc4ebb1c436dfcf85cb6fb9116e48a59fb517792a2d26e873d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / clichatty-0.7.0-py3-none-any.whl

Download URL clichatty-0.7.0-py3-none-any.whl
Size 59.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
60304893465a826ab6bf7855592e9d64c2b23ea4c313138c320dead540eaf9f7
BLAKE2b-256 checksum
How to use checksums
bac23a0dfcbf225823f408e02218c7a94b9058eac3386953afb3444db03fbdc5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.25

2 release files

0.6.24

2 release files

0.6.23

2 release files

0.6.22

2 release files

0.6.21

2 release files

0.6.20

2 release files

0.6.19

2 release files

0.6.18

2 release files

0.6.17

2 release files

0.6.16

2 release files

0.6.14

2 release files

0.6.13

2 release files

0.6.12

2 release files

0.6.11

2 release files

0.6.10

2 release files

0.6.9

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.24

2 release files

0.4.23

2 release files

0.4.22

2 release files

0.4.21

2 release files

0.4.20

2 release files

0.4.18

2 release files

0.4.17

2 release files

0.4.16

2 release files

0.4.15

2 release files

0.4.13

2 release files

0.4.12

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.16

2 release files

0.3.15

2 release files

0.3.14

2 release files

0.3.13

2 release files

0.3.12

2 release files

0.3.11

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page