Skip to main content
Meridian stores all of its data in a single SQLite file at ~/.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

The app_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. The count 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 clipboard
  • app_switch — brief switches to another app and back

Example Row

The following is an illustrative session row serialised as JSON.

In addition to app_sessions, the database contains several supporting tables that the daemon and MCP server use.

active_session

Holds a single row (always id = 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. 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 onto app_sessions.task_key for query convenience.

Useful Queries

The query below gives you a quick app-usage summary for all time — the same data that powers get-apps in the MCP server.
Run it directly against your database: