Skip to main content
Meridian supports two additional issue trackers alongside Jira: GitHub Issues and Linear. Both work the same way under the hood — Meridian fetches your open issues into the local pm_tasks table and uses them as classification targets when it processes each app session. You can enable one, the other, or both at the same time.

What Meridian does with GitHub Issues

Meridian reads the GitHub Projects (v2) you select and ingests the open issues assigned to you in each one via the GraphQL API. Each issue is stored in pm_tasks alongside any Jira or Linear tasks you’ve configured, with its Project Status field (Todo / In Progress / Done) mapped to Meridian’s status_category so it shows in the correct dashboard column. When Meridian classifies a coding session — say, an hour in VS Code on a feature branch — it matches that work against these tasks and writes a ticket_links row with the best-matching issue key.Use this connector if you track work in GitHub Projects (boards) rather than only on Issues alone. You pick which projects to sync at install time, so personal projects, org projects, or both can be combined.

Prerequisites

  • A GitHub account with access to at least one Project (v2) containing issues assigned to you
  • Either the gh CLI installed and authenticated (recommended), or a personal access token (PAT) with the repo, read:org, and read:project scopes

Get a token

The easiest path is to let meridian setup reuse the gh CLI’s existing browser login — no PAT to manage. Fall back to a PAT only if you can’t install gh.

Set environment variables

If you ran meridian setup with gh available, GITHUB_TOKEN and GITHUB_PROJECT_IDS are already written for you. To configure them manually, open the env file:
meridian config edit
Add the GitHub block to ~/.meridian/.env:
# ~/.meridian/.env

GITHUB_TOKEN=ghp_your_personal_access_token
GITHUB_PROJECT_IDS=PVT_xxx,PVT_yyy
GITHUB_PROJECT_IDS is a comma-separated list of Projects v2 node IDs. If it is empty, no GitHub tasks are synced — Meridian needs an explicit project list (there is no longer an “all repos in an org” mode).

Apply and verify

1

Restart the daemon

meridian restart
2

Check the connection

meridian doctor
Look for github: connected in the output. Meridian reports the connection status for every configured integration.
3

Confirm issues were fetched

sqlite3 ~/.meridian/meridian.db \
  "SELECT task_key, title, status_category FROM pm_tasks WHERE provider='github' LIMIT 10;"
The status_category column reflects each issue’s Project Status field — todo, in_progress, or done.

Pick different projects later

Re-run meridian setup to bring the project picker back up, or edit GITHUB_PROJECT_IDS directly:
GITHUB_PROJECT_IDS=PVT_kwHOAB123,PVT_kwHOCD456
Only issues that appear on those project boards and are assigned to you are pulled into pm_tasks. This is the supported way to scope which repositories’ work Meridian sees.

Troubleshooting

Check that your token has not expired and has all three scopes: repo, read:org, read:project. If you’re using a gh CLI token, re-run gh auth refresh -h github.com -s read:project to add the projects scope. PATs can be regenerated at github.com/settings/tokens.
Confirm that at least one entry in GITHUB_PROJECT_IDS is a valid Projects v2 node ID (they start with PVT_) and that the project contains issues assigned to your account. Re-run meridian setup to use the interactive picker, or list available IDs with the gh api graphql query shown above.
GITHUB_TOKEN is the only strictly required variable, but without GITHUB_PROJECT_IDS no tasks will sync. Run meridian config edit and confirm both are present and uncommented.
Meridian maps the Project’s Status field to status_category. Make sure each issue has a Status set on the board — items with no Status default to todo. The exact option names (Todo, In Progress, Done) are matched case-insensitively.