diff --git a/content/docs/configure-and-extend/index.mdx b/content/docs/configure-and-extend/index.mdx
index ce46a4c..18898c0 100644
--- a/content/docs/configure-and-extend/index.mdx
+++ b/content/docs/configure-and-extend/index.mdx
@@ -94,7 +94,7 @@ team, or local workflow needs.
- Agent tools are missing or too broad: start with
[Connections and MCP](/configure-and-extend/connections-and-mcp), then check
[Connection Scope and Overrides](/web/guides/connection-scope-and-overrides).
-- Repo is visible but cannot trigger hosted work: start with
+- A repo is missing or cannot trigger hosted work: start with
[GitHub](/integrations/github) and [Installations](/web/installations).
- Sandbox launch reports missing access: start with
[Plans & Billing](/plans-and-billing), then confirm repo settings in
diff --git a/content/docs/guides/common-use-cases.mdx b/content/docs/guides/common-use-cases.mdx
index a5b50d4..376b10d 100644
--- a/content/docs/guides/common-use-cases.mdx
+++ b/content/docs/guides/common-use-cases.mdx
@@ -171,8 +171,8 @@ Check in this order:
or [Automations](/web/automations)
5. [Observability](/web/observability), but only after a run actually exists
-If the repo is only visible through OAuth, hosted GitHub routing will not be
-healthy yet. Fix App coverage first.
+If the repo owner's GitHub App installation is not linked to you, hosted GitHub
+routing will not be healthy yet. Fix App coverage first.
## Use the hosted API
diff --git a/content/docs/guides/index.mdx b/content/docs/guides/index.mdx
index aacbe64..44a9c19 100644
--- a/content/docs/guides/index.mdx
+++ b/content/docs/guides/index.mdx
@@ -65,7 +65,7 @@ known, but the sequence still matters.
`, or the wrong route is
marked default.
diff --git a/content/docs/platform/how-mogplex-fits-together.mdx b/content/docs/platform/how-mogplex-fits-together.mdx
index 9b7f621..f1088a3 100644
--- a/content/docs/platform/how-mogplex-fits-together.mdx
+++ b/content/docs/platform/how-mogplex-fits-together.mdx
@@ -27,7 +27,7 @@ Each object answers a different question.
| Object | Owns | Start here when |
| --- | --- | --- |
| Account state | Identity, managed model and sandbox access, CLI tokens, model defaults, Slack installs, connections, MCP definitions | sign-in, model, billing, token, Slack, or connection state looks wrong |
-| GitHub installation | App-backed coverage for one GitHub user or org | repos are visible but GitHub events do not trigger work |
+| GitHub installation | App-backed coverage for one GitHub user or org | repos are missing or GitHub events do not trigger work |
| Repo | Imported repository state and repo-specific settings | the target repo is missing, duplicated, hidden, or needs runtime settings |
| Agent | Reusable behavior, slug, prompt, model, skills, rules, and context | the worker itself behaves wrong or a mention slug does not resolve |
| Route | The rule that decides what wakes work | the wrong event, repo, or workflow starts work |
@@ -60,13 +60,16 @@ Each object answers a different question.
### Visibility vs triggerability
-Repo visibility means Mogplex can see a repo through account sync.
+Repo visibility means Mogplex lists a repo. With a GitHub App, Mogplex lists
+repos from installations linked to you and repos shared to your team.
-Triggerability means the owning GitHub user or org has App-backed coverage, so
-GitHub webhook events can start hosted work.
+Triggerability means the owning GitHub user or org has App-backed coverage, and
+a route is bound to that installation or repo, so GitHub webhook events can
+start hosted work.
-A repo can be visible without being triggerable. When that happens, fix
-[GitHub App coverage](/web/guides/github-app-coverage) before editing routes.
+If a repo is missing, fix [GitHub App coverage](/web/guides/github-app-coverage).
+If a listed repo does not trigger, check the route's installation binding
+before editing the agent.
### Agent definition vs route binding
diff --git a/content/docs/quickstart.mdx b/content/docs/quickstart.mdx
index 7ea6a97..b286e5d 100644
--- a/content/docs/quickstart.mdx
+++ b/content/docs/quickstart.mdx
@@ -22,9 +22,11 @@ needs before it can do useful work:
- Slack workspace and channel links if work should start from Slack
- shared connections and MCP definitions, if the repo needs external tools
-If a repo is visible through OAuth but not covered by the GitHub App, hosted
-routing will still fail later. Use [Installations](/web/installations) to
-confirm coverage before debugging triggers or automations. The
+GitHub sign-in alone does not give Mogplex repository access. The repo owner's
+GitHub App installation must be linked to you: install the App on your personal
+account, or on an org where you are an org owner. Use
+[Installations](/web/installations) to confirm coverage before debugging
+triggers or automations. The
[GitHub integration guide](/integrations/github) explains the full setup model.
## 2. Open the repo
diff --git a/content/docs/reference/glossary.mdx b/content/docs/reference/glossary.mdx
index fba1f00..4804cfb 100644
--- a/content/docs/reference/glossary.mdx
+++ b/content/docs/reference/glossary.mdx
@@ -85,9 +85,10 @@ Read next: [Custom Slash Commands](/configure-and-extend/custom-slash-commands).
The state that lets Mogplex receive webhook-backed GitHub events for a user or
organization.
-OAuth visibility can make repos visible in the app, but GitHub App coverage is
-what makes hosted routing healthy for Triggers and Automations. If a repo is
-visible but events do not start work, check App coverage first.
+GitHub sign-in identifies you but grants no repository access. GitHub App
+coverage, from an installation linked to you, is what gives Mogplex repo access
+and makes hosted routing healthy for Triggers and Automations. If a repo is
+missing or events do not start work, check App coverage first.
Read next: [GitHub App Coverage](/web/guides/github-app-coverage).
@@ -153,11 +154,12 @@ Read next: [Projects](/web/spaces).
## Repo visibility
-Whether Mogplex can see a repo through account sync.
+Whether a repo appears in Projects for you.
-Visibility is not the same as triggerability. A repo can be visible through
-OAuth but still unable to start hosted GitHub-event work until the owning user
-or organization has GitHub App coverage.
+Visibility is not the same as triggerability. With a GitHub App, Mogplex lists
+repos from installations linked to you and repos shared to your team. Only a
+self-hosted deployment without a GitHub App lists repos through GitHub OAuth,
+and those repos cannot start hosted GitHub-event work.
Read next: [GitHub](/integrations/github).
@@ -222,11 +224,11 @@ Read next: [Triggers](/web/triggers).
## Triggerability
-Whether a visible repo can actually start hosted GitHub-event work.
+Whether a repo can actually start hosted GitHub-event work.
-Triggerability requires the right GitHub App coverage. If a repo appears in
-Projects but Triggers or Automations do not fire, debug triggerability before
-changing the agent.
+Triggerability requires the right GitHub App coverage and a route bound to the
+installation that owns the event. If Triggers or Automations do not fire for a
+repo, debug triggerability before changing the agent.
Read next: [Coverage and Triggerability](/web/installations/coverage-and-triggerability).
diff --git a/content/docs/reference/security-and-data-handling.mdx b/content/docs/reference/security-and-data-handling.mdx
index e80550d..d610b1b 100644
--- a/content/docs/reference/security-and-data-handling.mdx
+++ b/content/docs/reference/security-and-data-handling.mdx
@@ -13,8 +13,8 @@ when debugging.
Mogplex crosses several systems:
-- GitHub OAuth and the Mogplex GitHub App for identity, repo discovery, and
- webhook-backed routing
+- GitHub OAuth for identity and org membership, and the Mogplex GitHub App for
+ repository access and webhook-backed routing
- managed sandbox access for preview runtimes
- managed model access for hosted execution
- Slack OAuth and webhooks for Slack conversations and repo-agent starts
diff --git a/content/docs/self-hosting/database-and-auth.mdx b/content/docs/self-hosting/database-and-auth.mdx
index 047455b..a7120ae 100644
--- a/content/docs/self-hosting/database-and-auth.mdx
+++ b/content/docs/self-hosting/database-and-auth.mdx
@@ -97,8 +97,11 @@ ID and secret are set.
| Microsoft | `AUTH_MICROSOFT_CLIENT_ID`, `AUTH_MICROSOFT_CLIENT_SECRET`, `AUTH_MICROSOFT_TENANT_ID` (default `common`) | `https:///api/auth/callback/microsoft` |
| Email and password | Resend (below) | None |
-GitHub sign-in is identity only. Repository access comes from a separate GitHub
-OAuth app and your [GitHub App](/self-hosting/github-app).
+GitHub sign-in is identity only. Org membership, which Mogplex uses to find and
+link installations, comes from the GitHub connection through the separate
+GitHub OAuth app (`GITHUB_CLIENT_*`). Repository access comes from your
+[GitHub App](/self-hosting/github-app) installations. A deployment without a
+GitHub App lists repositories through a separate GitHub OAuth app instead.
## Email
diff --git a/content/docs/self-hosting/environment-variables.mdx b/content/docs/self-hosting/environment-variables.mdx
index c491347..54a2b30 100644
--- a/content/docs/self-hosting/environment-variables.mdx
+++ b/content/docs/self-hosting/environment-variables.mdx
@@ -66,7 +66,7 @@ See [Database and auth](/self-hosting/database-and-auth#use-a-least-privilege-ru
| `GITHUB_APP_NAME` | GitHub App slug, as in `github.com/apps/`. |
| `GITHUB_APP_PRIVATE_KEY` | PEM. Write newlines as `\n` in single-line env files. |
| `GITHUB_WEBHOOK_SECRET` | Must match the App's webhook secret. |
-| `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | Classic GitHub OAuth app for repository listing and reauthorization. The GitHub App's own client credentials do not work here. |
+| `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | Classic GitHub OAuth app for user identity, org membership, and reauthorization. Without a GitHub App, it also lists repositories. The GitHub App's own client credentials do not work here. |
| `GITHUB_APP_CLIENT_ID`, `GITHUB_APP_CLIENT_SECRET` | Optional. The App's own OAuth client credentials, used only to create repositories in personal accounts. App service only; Trigger.dev does not need them. Callback: `/api/auth/github/app-user/callback`. See [GitHub App](/self-hosting/github-app#client-credentials-for-personal-repositories). |
| `MOGPLEX_SETUP_ENABLED` | `1` enables `/admin/setup/github` in production while the GitHub App is unconfigured. Remove it after setup. |
diff --git a/content/docs/self-hosting/github-app.mdx b/content/docs/self-hosting/github-app.mdx
index 5466fc6..bc5210e 100644
--- a/content/docs/self-hosting/github-app.mdx
+++ b/content/docs/self-hosting/github-app.mdx
@@ -13,7 +13,7 @@ GitHub has two separate jobs in Mogplex. Configure both:
| Piece | What it unlocks | Variables |
| --- | --- | --- |
| GitHub App | Installation-backed repo access, webhooks, check runs, PR reviews, triggers, and automations | `GITHUB_APP_ID`, `GITHUB_APP_NAME`, `GITHUB_APP_PRIVATE_KEY`, `GITHUB_WEBHOOK_SECRET`, and optionally `GITHUB_APP_CLIENT_ID` and `GITHUB_APP_CLIENT_SECRET` |
-| GitHub OAuth app | Repository listing and import, and reauthorization when a token needs new scopes | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` |
+| GitHub OAuth app | User identity and org membership, used to find and link installations, and reauthorization when a token needs new scopes. Without a GitHub App, it also lists and imports repositories | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` |
GitHub *sign-in* (`AUTH_GITHUB_*`) is a third, identity-only setting. See
[Database and auth](/self-hosting/database-and-auth#sign-in-providers).
@@ -155,15 +155,17 @@ Open **Developer settings → OAuth Apps → New OAuth App**.
| Homepage URL | `https://` |
| Authorization callback URL | `https:///api/auth/github/callback` |
-Mogplex requests the `repo`, `read:org`, `read:user`, and `user:email` scopes.
-Store the credentials:
+With a GitHub App configured, Mogplex requests the `read:org`, `read:user`, and
+`user:email` scopes. Repository access comes only from App installations. In a
+deployment without a GitHub App, Mogplex also requests `repo` so it can list and
+import repositories. Store the credentials:
```bash
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
```
-
+
GitHub accepts any redirect path under an OAuth app's callback URL. If you set
the callback URL to `https:///api/auth`, one OAuth app serves both
`/api/auth/github/callback` and GitHub sign-in at
@@ -174,9 +176,14 @@ GITHUB_CLIENT_SECRET=...
## 4. Install and verify
1. Redeploy so the app reads the new variables.
-2. Sign in, open **Settings → Account**, and connect GitHub. This installs the
- App on the accounts or organizations that own your repositories.
-3. Open [Installations](/web/installations) and confirm coverage. Then sync
+2. Sign in, open **Settings → Account**, and select **Install GitHub App**.
+ Install the App on your personal account, or on an organization where you
+ are an owner. Mogplex links the installation when GitHub returns you to the
+ deployment. Organization members who are not owners cannot link the org
+ installation. See
+ [Who can link an installation](/web/installations#who-can-link-an-installation).
+3. Check the linked installations under **Settings → Account** (see
+ [Installations](/web/installations)) and confirm coverage. Then sync
repositories in **Settings → Repositories** (see [Projects](/web/spaces)).
4. In the App's **Advanced → Recent deliveries**, confirm that deliveries return
`2xx`. A `401` means `GITHUB_WEBHOOK_SECRET` does not match the App's
@@ -187,7 +194,8 @@ GITHUB_CLIENT_SECRET=...
| Symptom | Check |
| --- | --- |
| **Connect GitHub** opens an OAuth screen instead of the App install | One of `GITHUB_APP_ID`, `GITHUB_APP_PRIVATE_KEY`, or `GITHUB_APP_NAME` is missing. |
-| Repos are listed but triggers never fire | The App is not installed on that owner, or the webhook URL points somewhere else. |
+| Repos are listed but triggers never fire | The webhook URL points somewhere else, or webhook deliveries fail. Check **Advanced → Recent deliveries**. |
+| An organization does not appear after install | The installation is not linked. An organization owner installs or configures the App so the callback links it. See [An org you belong to does not appear](/web/installations#an-org-you-belong-to-does-not-appear). |
| `invalid_state` after the GitHub redirect | The callback reached a different domain than the one that started the flow. Make `NEXT_PUBLIC_APP_URL` match the public URL. |
| New permissions have no effect | Each installation must accept the new permissions on GitHub. For repository creation, see [Repository creation failures](#repository-creation-failures). |
| Creating a repository in an organization fails with "cannot create repositories yet" | GitHub returned `Resource not accessible by integration`. See [Repository creation failures](#repository-creation-failures). |
diff --git a/content/docs/support.mdx b/content/docs/support.mdx
index 60ce8e9..a075e05 100644
--- a/content/docs/support.mdx
+++ b/content/docs/support.mdx
@@ -14,7 +14,7 @@ repo coverage, routing, execution, and local CLI state.
| Symptom | Start here |
| --- | --- |
| A charge, invoice, credit balance, payment method, or due date looks wrong | [Plans & Billing](/plans-and-billing), then email [support@mogplex.com](mailto:support@mogplex.com) |
-| Repo is visible but GitHub events do not start work | [GitHub](/integrations/github) and [Installations](/web/installations) |
+| A repo is missing or GitHub events do not start work | [GitHub](/integrations/github) and [Installations](/web/installations) |
| A model is missing from a picker or CLI run | [Available Models](/web/models) and [Model Selection and Cost](/guides/model-selection-and-cost) |
| Hosted run cannot call an external service | [Connections and MCP](/configure-and-extend/connections-and-mcp) and [Connection Scope and Overrides](/web/guides/connection-scope-and-overrides) |
| Slack mention does not start repo work | [Slack](/integrations/slack), [Settings](/web/settings#slack), and [Observability Runbook](/guides/observability-runbook) |
diff --git a/content/docs/web/guides/choose-routing-surface.mdx b/content/docs/web/guides/choose-routing-surface.mdx
index 2b5851c..6bcbcb8 100644
--- a/content/docs/web/guides/choose-routing-surface.mdx
+++ b/content/docs/web/guides/choose-routing-surface.mdx
@@ -17,8 +17,7 @@ Answer these questions first:
1. is the source of truth a GitHub App installation event, one repo, or a
workflow graph?
-2. does the repo owner already have GitHub App coverage, or is it only synced
- through OAuth?
+2. is the repo owner's GitHub App installation linked to you yet?
3. do you need draft and publish control, or should the route be live as soon
as it is created?
4. is this standing responsibility for one repo, or policy for an installation?
@@ -49,8 +48,8 @@ Use Triggers when you want the smallest routing surface that still works.
Two prerequisite details matter:
- Triggers are installation-scoped, so GitHub App coverage is required.
-- Seeing a repo in [Projects](/web/spaces) is not enough if that repo is only
- synced through OAuth.
+- GitHub sign-in alone is not enough. The installation for the repo owner must
+ be linked to you.
If the trigger form has no usable installations, stop and fix App coverage
before debugging the agent.
@@ -94,7 +93,7 @@ If you need branching, publish control, or a workflow that spans multiple
steps, use Automations.
The setup nuance is the same as Triggers: Automations are installation-scoped
-and need GitHub App coverage, not just synced repos.
+and need GitHub App coverage on the installation that owns the event.
The operating nuance is different: the draft graph is not the live route until
you publish it.
diff --git a/content/docs/web/guides/github-app-coverage.mdx b/content/docs/web/guides/github-app-coverage.mdx
index a241cca..4437823 100644
--- a/content/docs/web/guides/github-app-coverage.mdx
+++ b/content/docs/web/guides/github-app-coverage.mdx
@@ -1,32 +1,35 @@
---
title: GitHub App Coverage
-description: Understand the difference between GitHub OAuth and GitHub App coverage, and verify why a repo is or is not triggerable.
+description: Understand the difference between GitHub sign-in and GitHub App coverage, and verify why a repo is or is not triggerable.
---
Most confusion in Mogplex setup comes from mixing up two different GitHub
states:
-- **GitHub connected** through OAuth
-- **GitHub App installed** for the account or org that owns the repo
+- **GitHub connected** through GitHub sign-in
+- **GitHub App installed** for the account or org that owns the repo, with the
+ installation linked to you
They are related, but they do different jobs.
-## OAuth vs App coverage
+## Sign-in vs App coverage
-GitHub OAuth gives Mogplex your user identity and basic account connection.
+The GitHub connection (GitHub OAuth) gives Mogplex your GitHub identity and
+your org memberships. It does not grant repository access.
+Signing in to Mogplex with GitHub is a separate step that only identifies you.
-GitHub App coverage determines which repos Mogplex can treat as triggerable for
-webhook-backed work such as [Triggers](/web/triggers) and
-[Automations](/web/automations).
-
-That means a repo can be visible in [Projects](/web/spaces) but still not be
-usable for triggered routing if the App is not installed for that owner.
+GitHub App coverage determines which repos Mogplex can access, and which it can
+treat as triggerable for webhook-backed work such as [Triggers](/web/triggers)
+and [Automations](/web/automations). Coverage comes from an installation linked
+to you: on your personal account, or on an org where you are an org owner. Org
+members who are not owners use team-shared repositories instead. See
+[Who can link an installation](/web/installations#who-can-link-an-installation).
## Common symptoms of missing App coverage
- Triggers is empty even though GitHub is connected
- Automations cannot find the installation or repo you expect
-- A repo appears in Projects, but GitHub-backed routing is unavailable
+- An org you belong to is missing from Settings
- Settings shows GitHub connected, but installation coverage is missing or for
the wrong owner
@@ -45,14 +48,17 @@ confirm the App is installed where you think it is.
## What to do next
-If GitHub is connected but the App is not installed for the repo owner:
+If GitHub is connected but no installation is linked to you for the repo owner:
-1. Install the Mogplex GitHub App for that owner
+1. Install or configure the Mogplex GitHub App for that owner. For an org, an
+ org owner must do this. See
+ [An org you belong to does not appear](/web/installations#an-org-you-belong-to-does-not-appear).
2. Return to [Settings](/web/settings) and refresh the installation state
3. Go back to [Projects](/web/spaces) and sync repos again
4. Re-check [Triggers](/web/triggers) or [Automations](/web/automations)
## Rule of thumb
-If the question is "why can Mogplex see this repo but not route webhook work
-for it?", the answer is usually App coverage, not OAuth.
+If the question is "why can't Mogplex use this repo or route webhook work for
+it?", the answer is usually an installation that is not linked to you, not
+GitHub sign-in.
diff --git a/content/docs/web/guides/index.mdx b/content/docs/web/guides/index.mdx
index e655e4d..d54f296 100644
--- a/content/docs/web/guides/index.mdx
+++ b/content/docs/web/guides/index.mdx
@@ -20,7 +20,7 @@ not just route-by-route descriptions.