The Matrix Scribe

I'm working on my project, The Matrix Scribe.

The Matrix Scribe helps us re-post or transcribe messages into matrix that we received from somewhere else, posing as different ghost users to represent the original authors.

Scribe will post this:

Ann I'm Ann.

Bob Hello! I'm Bob.

when I write this to @scribe-bot:

@julian /scribe as Ann

@julian I'm Ann.

@julian /scribe as Bob

@julian Hello! I'm Bob.

(That is an illustration of the goal. See the 'Project Status' section to learn the actual functionality.)

Why would we build or use Scribe?

The reasons I am building Scribe are:

What is Scribe For?

Perhaps I am writing my diary in matrix, and want to write down some of what my friends said. Perhaps I want to make a real matrix room representing a fictional conversation between characters in a story I am writing. Perhaps I had a conversation in a silo messaging app, and I am copy-and-pasting it to my matrix scribe in order to keep an archive that is under my own control. Perhaps I will automate the relaying of messages from an external source to the scribe, using it as a building block to make a one-way bridge.

Without a Scribe, how else might we record a conversation in matrix? We might quote the participants informally:

@julian Ann said, “I'm Ann.”

@julian Bob said, “Hello! I'm Bob.”

Or we might create new user accounts representing “Ann” and “Bob”, log in as Ann and write her line, then log in as Bob and write his line, then switch back to Ann and so on. Some matrix clients support multiple logins like this.

But informal quoting is lame for some purposes, and managing “ghost” user accounts manually is tedious and ill-suited to automation.

We can imagine some scenarios.

Transcribe a non-matrix conversation

I want to quote or transcribe a conversation. I do not want to make contact with the speakers in this scenario, nor want them to participate in this transcription. They may not have their own matrix accounts, and, if they do, I do not want to invoke them. The speakers should therefore appear as “ghost” users in this transcript.

— new room #scribe-transcript-1

Ann I'm Ann.

Bob Hello! I'm Bob.

I want to post this transcript in a room of its own. If the scribe could create the new room for me, that would be convenient.

— in chat with @scribe-bot

@julian /scribe in new-room as Ann

@scribe-bot created room #ann-bob-1

@scribe-bot scribing as Ann

@julian I'm Ann. ...

Variant: inventing a conversation between fictional characters.

Post within an existing conversation

Taking care to avoid misleading the participants, we might want to distinguish the scribed user names in some way.

Julian (@julian) Everyone please note I'm inviting Ann to join us. She is on the telephone to me and I will be scribing her comments here via Matrix Scribe.

~Ann (@scribe_ann) Hello! Julian is kindly scribing for me.

~Kitty cat (@scribe_kitty_cat) Meow! Ann always brings me with her.

Mrs Brown (@m.brown) OK, now let's get on with the meeting.

Here we arranged for Scribe to format its ghost user display names and matrix identifiers (mxid) in special ways. (The matrix client used to view the conversation will also have its own particular way of displaying those: one client might show only the display name while another shows the mxid and another shows both.)

How does Scribe work?

Scribe works like a one-sided, one-way bridge to matrix. The other side of the bridge doesn't connect directly to an external messaging system; rather it provides a simple interface for a human or an automation script to drive it.

Scribe links to a matrix server as an “application service”, which gives it more power than a “bot”. In particular it can create and control ghost user accounts and, if authorised, real user accounts.

Scribe takes its input from either

We tell Scribe to write its output to a particular matrix room. (This is not, in general, the room where we talk to the Scribe-bot, though that is possible.)

@julian /scribe in #ann-bob-1

@scribe-bot {created|joined|can't join} room #ann-bob-1

Scribe is not intended to bridge messages written by matrix users back to what we called its “input” side. If it did, the Scribe would then become more like a general-purpose bridge framework. That might be a step too far beyond its core purpose.

Permission and Authentication

Scribe is not intended to mislead users. It should be deployed in such a way that its use is clear, for example distinguishing its ghost user names and identifiers, and it should require the usual kinds of permission to join conversations with real users.

Scribe needs permission from the matrix server, to link as an “application service” so that it can create and control “ghost” user accounts.

Project Status

Selected versions (see also latest versions):

Blog posts:



Follow/Feedback/Contact: RSS feed · Fedi follow this blog: @julian​ · use the Cactus Comments box above · matrix me · Fedi follow me · email me · Donate: via Liberapay All posts © Julian Foad and licensed CC-BY-ND except quotes, translations, or where stated otherwise