~/.meridian/meridian.db. You can query it directly with sqlite3 or any SQLite client, or access it through the MCP server tools. The schema described here reflects what the daemon writes during normal operation.
app_sessions Table
Theapp_sessions table is the primary output of Meridian. Each row represents one contiguous block of time spent in a single application. The daemon writes a new row every time the focused app changes and the previous session is complete.
JSON Column Formats
window_titles
An array of objects, one per distinct window title observed during the session. Thecount field is the number of screenpipe frames in which that title appeared.
signals
An array of events detected during the session. Meridian currently captures two event types:clipboard_copy— text that was copied to the clipboardapp_switch— brief switches to another app and back
Example Row
The following is an illustrative session row serialised as JSON.Related Tables
In addition toapp_sessions, the database contains several supporting tables that the daemon and MCP server use.
active_session
Holds a single row (alwaysid = 1) representing the currently open, in-progress session. The daemon upserts this row on every poll tick and promotes it to app_sessions when the focused app changes.
pm_tasks
A cache of open tickets fetched from Jira, GitHub, and Linear by the connector daemons. The classifier uses this table to match session content to ticket keys.ticket_links
Maps sessions to ticket keys as determined by the AI tagger pipeline. A single session can be linked to at most one primary ticket at a time; the column is also denormalised ontoapp_sessions.task_key for query convenience.