Skip to main content

GitHub

This article explains how Pensero connects to GitHub, what information is used, and how GitHub activity becomes part of your team’s delivery signals.

Written by Wayne

Overview

Pensero connects to your GitHub organization to understand how engineering work actually gets delivered.

We read metadata from Pull Requests and linked issues, not source code. This allows Pensero to reconstruct real units of work, understand collaboration and effort, and surface delivery signals that are consistent across individuals, teams, and leadership.

Setup is handled by an administrator from the Integrations section and takes only a few minutes.

What Pensero Reads from GitHub

Pensero reads metadata only. We never store or inspect your source code.

From each Pull Request, Pensero captures:

  • PR title and number

  • State (open, draft, merged, closed)

  • Description and references

  • Key timestamps (created, first comment, approval, merge)

  • Author and reviewers

  • Source and target branches

  • Linked tickets or issues

  • Diff metrics (files changed, lines added or removed, summary only)

This information gives context on what was delivered, how complex it was, and how work flowed through reviews, without exposing code.

Permissions Required

To function correctly, Pensero requests the following GitHub OAuth permissions:

Scope

What it does

repo

Read access to repositories (PRs, issues, commits, branches)

read:project

Read access to GitHub projects

read:user

Read access to user profile

read:org

Read access to organization and team information

Important: Pensero only reads. It never writes.

Even though GitHub's repo scope technically allows write access, Pensero does not use it. GitHub does not offer a more limited scope for reading Pull Request data via OAuth. This is a GitHub platform limitation, not a choice on our side. We request the minimum permissions GitHub allows to do what we need.

These permissions let Pensero understand how your team collaborates and delivers, such as PR review activity, comments, and cycle times. Pensero does not modify your code, repositories, or any GitHub content.

Self-service vs. Enterprise

For self-service onboarding, Pensero uses GitHub OAuth. If you are on the Enterprise tier and prefer a more controlled integration, we also support a GitHub App setup. This gives your team more granular control over which repositories Pensero can access. Talk to your account team if you want to go that route after your initial setup.

What Pensero Derives from GitHub

Using GitHub metadata, Pensero derives workflow signals such as:

  • Time to First Comment

  • Time to Approve

  • Time to Merge

  • Diff summaries used for code understanding

These signals help you spot review bottlenecks, approval delays, and structural slowdowns, using real delivery data.

How Pensero Organizes Work

GitHub activity is never analyzed in isolation.

Pensero assembles work into structured units:

  • Items: individual PRs or issues

  • Chunks: related work from a single contributor

  • Superchunks: shared delivery packages involving multiple contributors

This structure reflects how work actually happens across people and tools, ensuring delivery insights scale from individuals to teams and the company.

How to Connect GitHub

First-Time Setup

Step 1 - Go to Integrations

From the left sidebar, open Integrations in Pensero.

Step 2 - Complete Giuthub Authentication

Find GitHub in the list and click Connect.

You must be a GitHub Organization Owner to complete the installation.

Step 3 - Grant Permissions

Follow GitHub’s OAuth prompts and grant the required permissions.

Step 4 - Select Repositories

Choose which repositories Pensero should analyze.

You can update this selection anytime from the GitHub integration settings.

Adding New Repositories Later

  1. Go to Integrations

  2. Click Manage GitHub

  3. Select additional repositories to connect

New repositories will be ingested during the next sync.

Troubleshooting

OAuth “Grant Access” stuck with infinite spinner

This typically occurs when SAML SSO is enabled in your GitHub organization.

To resolve:

  1. Ensure you are logged in with an active SAML session.

  2. Visit:

    (Replace {yourOrgName} with your actual org name.)

  3. Reattempt installation.

Why Forked Repositories May Not Be Visible

GitHub applies stricter security rules to repositories that are forks of external organizations.

  • Accessing a forked repo requires your Personal Access Token to be explicitly approved through SAML SSO.

To resolve:

  1. Request access to the original (parent) organization.

  2. Authorize Pensero’s GitHub OAuth token here:

  3. Ask the parent organization owner to approve your request:

Think of the organization’s security policy as a border checkpoint:

  • Internal Travel (Accessing a regular private repo): When your token accesses a repository that was created inside your organization and has no external parents, it’s like traveling within the country’s borders. The security check is standard, and your token (with the right scopes) is allowed through.

  • International Travel (Accessing a forked repo): When your token tries to access a fork of an external repository, GitHub sees that this resource has a “foreign” connection to the parent organization. This is like trying to cross an international border. The original organization’s policy flags this action and says, “Wait, for any international travel, we require a special visa.”

In this analogy, the “special visa” is the SAML SSO authorization on your Personal Access Token. The policy is designed to prevent potential data leakage or unauthorized interactions with external entities, so it applies a stricter check on forked repositories.

Instructions for the User Who Added the GitHub Account to Pensero

The original organization’s security policy requires your Personal Access Token to be explicitly authorized via SAML Single Sign-On before it can be used to access repositories that are forked from external organizations.

  1. Request access to the original organization: If your fork (my_org/repository) has a parent path of original_org/repository, you need to have access to the original_org organization. Member access is sufficient.

  2. Request grant access for Pensero Git Repos OAuth: Once member access is granted, you need to request grant access for Pensero Git Repos OAuth on behalf of your OAuth token. To do this, go to https://github.com/settings/connections/applications/Ov23liAtOAfOtnLhJypa. You will see a list of organizations that have access. Click on Grant to request access for the original_org.

  3. Organization owner approval: The organization owner of original_org must approve your request at this link: https://github.com/organizations/original_org/settings/oauth_application_policy (replace original_org with the actual parent fork organization name). They will see the request as Pensero Git Repos OAuth.

Did this answer your question?