# GitHub

> Connect the repository your website is built from. EOMA opens a pull request you review and merge — it never writes to your main branch.

Source: https://eoma.ai/docs/integrations/github
Product: EOMA — AI search visibility for brands (https://eoma.ai)
Last updated: 2026-08-14

---
## In 10 seconds

- EOMA installs an app on the repositories **you choose**, and works only inside those.
- Every change arrives as a pull request on its own branch named `eoma/draft/…`. Your main branch is never written to.
- Nothing reaches your visitors until you merge. That step stays with you, always.

## Before you start

- Your website must be built from a Git repository on GitHub. If your site is WordPress,
  connect that instead — see [Integrations](/docs/settings/integrations).
- You need permission to install an app on the repository. On a personal account that is you; on an
  organisation it is an owner, or someone an owner has approved.
- You must be the **owner** of the brand in EOMA, otherwise the row shows "Owner only".

## Steps

### 1 — Press Connect and choose the repositories

Settings → Integrations → the **Publishing — CMS & Sites** group → the **GitHub** row.

```
┌─ Settings ─────────────────┬──────────────────────────────────┐
│  WORKSPACE                 │  Publishing — CMS & Sites        │
│    Plan & Usage            │    WordPress      [ Connect ]    │
│  ● Integrations   ← here   │    GitHub         [ Connect ] ←  │
└────────────────────────────┴──────────────────────────────────┘
```

Connect sends you to GitHub's own install screen. GitHub asks which account or organisation to
install into, and then whether to grant **all repositories** or **only select repositories**. Choose
*only select repositories* and pick the one your site is built from. This is the single most
important decision on this page: it is the boundary of everything that follows.

### 2 — Choose the repository and the branch

Back in EOMA the row shows **Select repo**. Pressing it opens **Select Repository** — the list of
repositories you granted access to, and a **Branch** dropdown underneath.

The branch you pick is the **base**: the branch EOMA compares against and points its pull requests
at. For most sites that is `main`, which is already selected for you. Press **Save**.

### 3 — Approve a piece of work and choose GitHub

Connecting gives EOMA somewhere to go. It does not send anything by itself. The first pull request
appears when you approve a finished draft on [Actions](/docs/pages/actions) and pick
GitHub as the destination.

## What you'll see

### The GitHub row and its "Connect" button

In **Publishing — CMS & Sites**, second row. Non-owners see **Owner only** where the button is.

### GitHub's own install screen

Not part of EOMA. This is where repository access is granted, and it is the only place it can be
changed later.

### "Select Repository" — the repo list and "Branch"

One line per repository you granted, showing its full name and its default branch. Below the
selection, a **Branch** dropdown. At the bottom left, a link reading
*"Don't see your repo? Manage repository access on GitHub →"*.

### The row once a repository is chosen

The button is replaced by `owner/repo · branch`, with **Change repo** and **Disconnect** beside it.
Change repo re-opens the same picker — you can move to a different repository without disconnecting
and starting over.

### The pull request, on GitHub

Not in EOMA. A branch called `eoma/draft/<id>`, the changed files, and a pull request pointed at
your base branch. EOMA also posts the link back onto the action, so you can open it from either side.

## Reading the numbers

**What EOMA writes, exactly.** This is the blast radius, and it is small on purpose:

| EOMA does | EOMA does not |
|---|---|
| Commit to a branch named `eoma/draft/<action id>`, one branch per piece of work | Commit to `main`, or to whatever base branch you selected |
| Write the one file that piece of work produces | Touch any other file, or delete anything |
| Open a pull request from that branch into your base | Merge it, approve it, or close it |
| Read the repository to find the right path and the current file | Read repositories you did not grant access to |
| Reset **its own** draft branch back to your base when it redoes a piece of work | Force-push, rewrite history, or change any branch that is not `eoma/draft/…` |

If EOMA cannot do something within those lines, it stops and tells you. It has no second route.

**"Don't see your repo?"** The picker lists only what the app was granted. A repository missing from
the list is not broken — it was outside the selection you made on GitHub. The link takes you to the
page where you widen it. You do not need to disconnect first.

**The branch list can be shorter than your real branch list.** EOMA reads up to 100 branches. Your
default branch is always at the top and always selectable, so a repository with hundreds of branches
still works; a rarely-used branch may just not appear. If you need one that is missing, tell support.

**Where the file lands.** EOMA picks a path from the kind of work: a blog post goes to
`content/blog/<name>.md`, a page to `content/pages/<name>.md`, your `llms.txt` to the root of the
repository. Structured-data snippets go to `content/schema/`. If your repository is laid out
differently, say so before the first publish and the paths can be set per brand — a pull request in
the wrong folder is easy to close, but easier not to open.

**"Opens a pull request in your repo — merging stays with you".** The line you will see when you
approve. The confirmation that follows spells out the same three facts: EOMA opens the pull request
and writes nothing directly, you see the change line by line, nothing goes live until you merge.

**Disconnecting removes the installation.** Pressing **Disconnect** removes EOMA's app from your
GitHub account as well as the connection inside EOMA. Branches and pull requests already opened stay
where they are — they are yours. You can delete or merge them at your own pace.

## When it goes wrong

| You see | Why | What to do |
|---|---|---|
| "Owner only" instead of a Connect button | You are not the owner of this brand in EOMA. | Ask the brand owner to connect it. |
| "No repositories found." after connecting | The app was installed, but no repository was selected — or it went onto a different account than the one that owns your site. | Use *Manage repository access on GitHub* and add the repository. It appears in the picker straight away. |
| An action says the publishing target is not configured | GitHub is connected, but no repository was ever chosen. | Settings → Integrations → GitHub → **Select repo**. |
| A pull request opens against the wrong branch | The base branch chosen at connect time is not the one your site builds from. | **Change repo**, pick the right branch, and save. The next pull request uses it. |
| The pull request is correct, but nothing changes on your site | It has not been merged. EOMA never merges. | Merge it on GitHub. Your normal deploy runs as it always does. |
| You merged, and the action still shows as in progress | EOMA is not told when a pull request is merged — nothing watches for it yet. | Say so in support and the action gets closed. It is a bookkeeping gap on our side; your change is live regardless. |
| The repository is on an organisation and the install needs approval | GitHub asks an organisation owner to approve new apps. | An owner approves it once from GitHub's settings, then continue at step 2. |

## Related

- [Actions](/docs/pages/actions) — where you approve the work that becomes a pull request
- [Vercel](/docs/integrations/vercel) — for a Vercel site that deploys from this same repository
- [WordPress](/docs/integrations/wordpress) — the destination that publishes live instead
