Run the three platforms in parallel. Each block below is independent, fire them all in the same tool turn.
Jira (acli)
acli jira workitem search \
--jql "(assignee = currentUser() OR reporter = currentUser()) AND updated >= -7d ORDER BY updated DESC" \
--json --limit 100
Extract per item: key, fields.summary, fields.status.name, fields.project.key, fields.updated. The Jira project key (e.g. SER) is the group label.
If acli jira auth status reports unauthenticated, emit one line Jira: not authenticated, run \acli jira auth login --web`` and move on without failing.
GitHub (gh)
Three queries, all in parallel:
gh search prs --author=@me --created=">=$SINCE" \
--json repository,number,title,state,createdAt,mergedAt,url --limit 100
gh search prs --author=@me --merged --merged-at=">=$SINCE" \
--json repository,number,title,mergedAt,url --limit 100
gh search prs --reviewed-by=@me --updated=">=$SINCE" \
--json repository,number,title,author,state,url --limit 100
Dedupe by url. A single PR can appear in all three buckets; collapse it to one item and pick the strongest label in this order: merged > opened > reviewed. reviewed only applies when the author is not me. The group label is repository.nameWithOwner.
GitLab (glab)
HOSTS=$(glab auth status 2>&1 | grep -E '^[^[:space:]]')
[ -z "$HOSTS" ] && echo "GitLab: not authenticated, run \`glab auth login\`"
printf '%s\n' "$HOSTS" | while IFS= read -r H; do
[ -z "$H" ] && continue
ME=$(glab api --hostname "$H" /user | jq -r .username)
glab api --hostname "$H" "merge_requests?scope=created_by_me&updated_after=${SINCE}T00:00:00Z&per_page=100"
glab api --hostname "$H" "merge_requests?reviewer_username=${ME}&updated_after=${SINCE}T00:00:00Z&per_page=100"
done
Dedupe by web_url across all hosts (a single MR surfaced under two accounts collapses to one). Classify each MR as opened, merged (when state == "merged" and merged_at >= $SINCE), or reviewed (author username differs from the $ME of the host it came from). The group label is the project path from references.full with the !N suffix stripped, i.e. group/project.
If a host's query errors (expired token, network), record one line for it and continue with the other hosts.