What it does
GitHub connects to Custral three ways. They are independent: set up one, two, or all three.Connect
1
Authorize in Custral
Open Settings → Integrations → GitHub and start the OAuth flow.
2
Review the access requested
Custral requests the
repo scope, which GitHub grants as read and write across the repositories you authorize, plus read:user for your profile. repo is the narrowest scope GitHub offers that can read private repositories. There is no read-only equivalent. Authorize only the repositories you want Custral to see.3
Confirm
The connection appears in the integrations list. It is workspace-wide: once anyone connects GitHub, everyone in the workspace can use all three surfaces.
Linked tables
Syncs a repository’s issues or pull requests into a Custral object, kept current by webhook.1
Open the sync tab
Settings → Integrations → GitHub → Sync Data. The tab appears once the connection exists.
2
Pick a repository
The Repository picker lists every repo the connection can see, private ones marked.
3
Choose what to sync
Tick Issues, Pull Requests, or both, then press Connect & Sync.
GitHub Pull Requests — acme/widgets. It is a normal object: add your own columns, build views on it, filter and group it. The sync only ever writes the provider columns, so anything you add is yours and stays untouched.
Columns
- Pull Requests
- Issues
closed at GitHub. Custral surfaces it as merged, so the three states you filter on are the three you would expect.
State is a Select, so it filters by option rather than by text. The three options are created with the table. Filtering by a state that no record holds returns nothing, which is the correct answer and not an error: a repo where every PR has merged genuinely has no open ones.
Pull requests on a record
Put a record’s ID in a branch name, a PR title, or a PR description, and the pull request appears in that record’s Development section. Nothing to configure.What it needs
The record’s object needs an ID property whose prefix is at least two characters. That prefix is what Custral matches on.How the match works
- Case and padding do not matter.
issue-42,ISSUE-42, andISSUE-00042all find the record stored asISSUE-00042. - A prefix only matches on a word boundary.
MYISSUE-42does not matchISSUE-, and neither doesISSUE-42x. - Branch, then title, then description. All three are scanned, and the row records which one matched: a branch name is the most deliberate, a description the least.
- One pull request can name several records, and each gets its own row.
- Renaming moves the link. Change a title from
ISSUE-42toISSUE-51and the PR leaves the first record and joins the second. - An ambiguous reference is skipped. If two objects use the same ID prefix and both hold a record with that value, Custral links neither rather than guessing. Give the two objects different prefixes.
What you see
Each row shows the pull request’s state, its title as a link, and theowner/repo#number reference with the author beside it. Hover the branch icon at the end of the row to see which text matched and where, for example “Matched ISSUE-00042 in the branch name”. The section is absent on records with no pull requests, so it costs nothing on the rest of your workspace.
This is read-only. Custral never comments on, updates, or closes a pull request from a record.
Live PR status
An External property resolving one pull request onto the record it sits on. Use it when a record tracks a single PR and you want its state in a column beside your own fields.1
Add a property to hold the link
A Text, Website, or ID property on the record’s object, holding the PR URL or
owner/repo#number.2
Add the GitHub property
Add a property, open the Type picker, and choose GitHub · Pull Request from the Connected Providers group. You do not pick “External” yourself; choosing the resource sets the type for you.
3
Point it at the source
A Source property picker appears, listing only the properties that can hold a PR reference. Pick the one from step one.
open, closed or merged), the owner/repo it lives in, its number, its author, and a link to it, refreshed on its own interval.
The Connected Providers group only appears once GitHub is connected, and it appears for everyone in the workspace, not just whoever ran the OAuth.
Choosing between them
- A PR is one of many on a record (a feature with several branches): use the Development section. It needs no property and no upkeep.
- A record tracks exactly one PR and you want it as a filterable column: use the External property.
- You want to work the PRs themselves in views, boards, and reports: use a linked table.
Limitations
- Reading private repositories requires granting access to them during authorization.
- Each External property has its own refresh interval. Custral will not refresh more often than that even if the data changed upstream.
- The Development section fills in as pull requests arrive. Opening it on a repository you just connected shows the PRs updated since, not the whole history.
- Custral does not modify pull requests or comment on them. The one thing it can write is a new issue, and only when you ask the assistant to file one. That write goes through the permission gate first.
Troubleshooting
Disconnect
Disconnecting removes GitHub access from the workspace.- Linked tables stay, with the records they already hold. They stop receiving updates.
- Development sections stay and stop gaining new pull requests.
- External properties stop resolving. The property stays on the object, and its next refresh replaces the value with an error, which the cell shows. Reconnecting GitHub fixes it without touching the property: an errored value is retried on the next read.