pm_tasks table, uses them as classification targets when it processes each app session, and once classification matches a session to an issue it can also draft a worklog against that issue. You can enable one, the other, or both at the same time.
Neither GitHub nor Linear exposes a native time-tracking / worklog API, so on these trackers Meridian records a worklog as a structured comment on the matched issue: a single Markdown line of the form **⏱ Worklog — 1h 30m** · 2026-06-02 09:00, followed by the synthesised narrative of what you did, followed by an HTML-comment machine marker (meridian-worklog v1 …) carrying the exact UTC window and seconds so the entry can be parsed back out later. Worklogs are still gated by approval in the dashboard’s Worklogs view — the same draft → approve → post pipeline as Jira, just with a different final hop. See Review and approve worklogs.
- GitHub Issues
- Linear
What Meridian does with GitHub Issues
Meridian fetches open issues from your GitHub organisation’s repositories using the GitHub REST API. Each issue is stored inpm_tasks alongside any Jira or Linear issues you’ve configured. When Meridian classifies a coding session — say, an hour in VS Code on a feature branch — it matches that work against your open issues and writes a ticket_links row with the best-matching issue key.Prerequisites
- A GitHub account with access to the organisation (or personal) issues you want to track
- A personal access token (PAT) with write access to issue comments — Meridian needs this to post worklog comments after you approve them
Create a GitHub personal access token
Navigate to Developer settings
Scroll to the bottom of the left sidebar and click Developer settings.
Generate a new token
Select Personal access tokens → Tokens (classic) or Fine-grained tokens. Click Generate new token.
- Classic token (simplest) — enable the
reposcope. This single scope covers both reading issues and posting worklog comments, on personal and org-owned repos. - Fine-grained token — grant Issues: Read and write on every repository Meridian should monitor (read-only is not enough; Meridian needs write access to add the worklog comment when you approve a draft).
Set environment variables
Open the Meridian env file:~/.meridian/.env:GITHUB_ORG is the issue owner Meridian should sync — an organisation slug or your own GitHub username (for personal repos). Meridian fetches open issues assigned to you under that owner. If GITHUB_REPOS is omitted, every repository under the owner that your token can read is included.Apply and verify
Check the connection
github: connected in the output. Meridian reports the connection status for every configured integration.Filter to specific repositories
SetGITHUB_REPOS to a comma-separated list of owner/repo strings:pm_tasks. This is useful when your organisation has many repositories but you only actively work in a subset.What “posting a worklog” means on GitHub
GitHub has no native time-tracking API, so when you approve a worklog draft Meridian posts it as a comment on the matched issue viaPOST /repos/{owner}/{repo}/issues/{number}/comments. The comment looks like:- A new comment on the issue authored by the token’s user, with the time-spent line and the synthesised narrative.
- The same comment surfaced on any Project (v2) board the issue belongs to — Project cards already show issue comments, so no extra setup is needed.
- A hidden machine marker on the last line that Meridian (and any other tool) can grep for to reconstruct the exact window and seconds later. Worklogs are idempotent on
(task_key, window_start, window_end)— re-running the pipeline never double-posts.
repo (classic) or Issues: Read and write (fine-grained) scope you configured above is all that’s needed — no separate Projects scope is required.Troubleshooting
401 or 403 errors on startup, or when a worklog tries to post
401 or 403 errors on startup, or when a worklog tries to post
Check that your token has not expired and has the correct scopes. Classic tokens need the
repo scope; fine-grained tokens need Issues: Read and write (read-only will let issues sync but worklog comments will fail with 403). Regenerate the token in GitHub Settings if needed.pm_tasks is empty for GitHub
pm_tasks is empty for GitHub
Confirm that
GITHUB_ORG matches your organisation’s login name exactly (case-sensitive). If GITHUB_REPOS is set, verify each entry uses the full owner/repo format. Your token must have access to at least one repository in the org.meridian doctor shows github: not configured
meridian doctor shows github: not configured
Both
GITHUB_TOKEN and GITHUB_ORG are required. Run meridian config edit and confirm neither is commented out.