twin memory

Overview

Connect an end user's apps - Google, GitHub, Slack, Jira and more - and their memory keeps learning from what they do there, with no code of yours in the path.

A connector reads an end user's work in an app they use and keeps their memory up to date with it. Their mail and calendar, the issues and pull requests they work on, what was said in the channels they belong to: it arrives in their memory as it happens, and search, latest and every other read reach it like anything you add yourself.

You connect an app once, from the console. Nothing in your code changes.

Connecting an app

  1. In the console, open Connectors and pick an app from the list.
  2. Feeds the memory of names the end user whose memory it fills - you, by default, as in the playground. Name a test user to connect for them instead. It is the same id as X-Twin-Account; see End users.
  3. Continue to the app and sign in there, or, for an app that takes a token, paste it: the page says what the token is called, how to make one and links to the page that does.

You come back to the console connected, and the app's history - the last 90 days - starts arriving in a few minutes. From then on each of its sources is read on its own schedule, every minute to every half hour.

A connection belongs to one end user in one project. Connect the same app for another end user, or a second account for the same one, from its page.

What happens to what it reads

  • Memory only reads. A connection's token is stored encrypted and used to read, never to change anything in the app.
  • An edit is one item. When an issue moves from open to done or a message is edited, memory keeps the newest version in place of the old one, not a second copy.
  • A deletion is kept, and marked. An item the app reports deleted, archived or trashed stays in memory with when and why, so what was said is still what was said, and reads as [deleted 7 Aug 2026] …. If it is restored, the mark goes.
  • Disconnecting stops the reading. Nothing more is read and the token is deleted. What memory already learned stays with the end user; to remove it, erase the end user, or forget items.

What each connector delivered

Each item knows the app, source and connection it came from. The Connectors page shows each connection's sources, how many items each delivered and when it last read; your code asks /v1/memory/sources for the same:

curl https://api.twinmemory.dev/v1/memory/sources \
  -H "Authorization: Bearer $TWIN_MEMORY_API_KEY" \
  -H "X-Twin-Account: user_42" \
  -H "Content-Type: application/json" \
  -d '{}'

To read one app's items, latest takes it as place ("place": "github"), and search as a scope ("scope": "passages/github").

The connectors

AppConnects byReads
GoogleSign inGmail, Calendar, Drive, Tasks and Chat
GitHubSign inCommits, pull requests, reviews, issues and failed runs
SlackSign inChannels, direct messages, mentions and reactions
JiraSign inIssues, comments, worklogs, changes and attachments
ConfluenceSign inPages, blog posts, comments, tasks and attachments
NotionSign inPages, databases and comments
LinearSign inIssues, comments, projects, cycles, documents and your inbox
GitLabSign inYour activity, to-dos, issues and merge requests
BitbucketSign inPull requests, commits and failing builds
AsanaSign inTasks, projects, comments and status updates
ClickUpSign inTasks, comments, docs, time entries and chat
TrelloSign inCards, comments, boards and notifications
DropboxSign inFiles with their text, and what others share with you
Cal.comTokenBookings, upcoming and past
FathomTokenRecorded meetings, summaries and action items
ShortcutTokenStories, comments, epics and iterations
ZoteroTokenPapers, notes and annotations

Microsoft 365, Miro and Todoist

Soon. Claude Code and Cursor, which read from an app on the person's own machine, Soon.

The console lists the ones your deployment has set up; one that is not shows as Not set up yet.

On this page