GitHub plugin

The GitHub plugin lets a Vaubaan Gateway mission use GitHub without handing the agent a credential. Repositories, branches, files, pull requests, issues, releases and workflows of the GitHub App installation.

One account is one installation of your company's GitHub App on an organisation, or a fine-grained personal access token; one resource is one repository. A mission picks repositories and the permissions it holds on them. GitHub has no environment label: protected branches (main, master, release-*) and working branches (feature/*, fix/*, …) are told apart by two different permissions.

Permissions

Each permission is a named risk of the plugin's catalog: a mission holds an explicit list of them, never "all". The severity is computed from the permission's six axes (undo, blast radius, data, cost, visible to, lasts); nothing is decided from it.

PermissionWhat it allowsSeverityWhy it is a risk
github.read-codeRead code, branches, commits, fileslowReads may leak secrets through `.env`-style commits (rare but non-zero). The contents of fetched files are attacker-injectable into the agent's context (OWASP LLM01) — a malicious README can steer a downstream prompt.
github.read-metaRead PRs, issues, releases, workflows, branch-protectionlowRepository metadata. Issue/PR bodies are attacker-controlled (OWASP LLM01) — handle with care on the agent side. Reading branch protection rules is diagnostic only, never dangerous in itself.
github.search-globalGlobal GitHub search (code / issues, beyond the mission resources)lowSearch traverses every public GitHub repo plus every repo the App installation has access to. Cross-org leakage is possible if the App is installed widely. Sensitivity is low by default but the surface is account-shaped, not resource-shaped.
github.feature-branch-writeCreate/modify branches under feature/*, fix/*, chore/*, …lowReversible (`git revert` or branch delete). No production side effect until merged. This is the heart of the coding-agent flow.
github.merge-protectedWrite on main / master / release-* (direct commit OR PR merge)mediumThe canonical branch — triggers downstream CI/CD on prod. Costly to revert (release notes, communications, downstream dependencies). Covers direct commits (create_or_update_file without a PR) AND merges of PRs whose base is one of these branches.
github.workflow-write-via-fileModify a GitHub Actions workflow (.github/workflows/*.yml)highThe CI YAML defines what runs with the repo's secrets. Modifying a workflow is a potential privilege-escalation vector (steal secrets via curl to attacker-controlled domain, `pull_request_target`). `dispatch_workflow` was retired for this reason — but the attack persists through file writes on the YAML itself.
github.bulk-file-writeBulk multi-file push (push_files)lowA single commit touching many files. Harder to review manually than a single-file write. Kept distinct from file-by-file so the creator can opt-in/out specifically — useful signal for spotting malicious or buggy agents. Emitted as a `files-bulk` virtual leaf alongside the per-file `file[<path>].W` slices.
github.create-prOpen a pull requestlowNo prod mutation. Notifies reviewers (visibility=team). PR title and body are reviewer-injectable.
github.comment-writeComment on an issue or PRlowA comment on a PR notifies reviewers ; on an issue, subscribers. Low risk but pollution / spam potential if abused.
github.create-releaseCreate a release (potentially public publication)mediumWith `draft=false && prerelease=false`, the release is publicly visible, notifies watchers, and triggers `on: release` workflows. Hard to "retract" — downstream consumers may already have pulled tarballs / asset URLs by the time you delete.
github.delete-releaseDelete a releasemediumIrreversible w.r.t. audit / external notifications. The tag itself persists, but the release body and assets vanish — downstream consumers may see 404s.
github.branch-protection-writeModify branch protectionmediumPosture-shift : opens the branch to out-of-process writes (e.g. disabling required reviews). Persists after the token's lifetime. Even when *tightening* (adding a required check), the change outlives the session.
github.git-pushPush with git through the gatewaylowThe git remote of the gateway relays the pack and moves the ref only after the decision. Touched by every pushed ref, next to the risk of the branch or tag it lands on ; it is what a creator limits to bound how often an agent pushes. The pack itself is not read : the decision is on refs and changed paths, never on content.
github.force-pushForce-push (rewrite the history of a branch or move a tag)lowA push that is not a fast-forward replaces commits others may have built on ; once replaced, they may survive only in someone's clone. Agents rebase often, which is precisely where a mistake destroys work.
github.branch-deleteDelete a branch with gitlowThe branch disappears for everyone ; its commits remain reachable only from other refs and clones. A deleted protected branch also touches `merge-protected`.
github.tag-writePush or delete a tag with gitmediumA tag names a release point : pushing one can trigger `on: push: tags` workflows (publication, deployment) and downstream consumers pin tags. Overlaps `create-release` on purpose : a tag pushed by git also writes `tag[<name>]`, which `create-release` covers, so a mission that may push tags says so twice. Matched on the git leaves only : `create_release` keeps touching `create-release` alone.
github.mint-install-token-cloneMint an install token (purpose=clone, read-only)mediumCredential creation, but scoped to `contents:read` only. The token has its own TTL (1h) and its own scope. Moderate risk : code extraction is possible, no mutation.
github.mint-install-token-pushMint an install token (purpose=push, write)mediumCredential creation with `contents:write + pull_requests:write + workflows:write`. The token leaves the gateway's gating perimeter ; no Vaubaan policy applies to usages of this credential. De-facto posture-shift.
github.uncategorized-writeUncategorized GitHub write (fallback)medium (the catch-all: touched only by a call no other permission covers)Catch-all for writes no fine-grained entry categorises — a branch outside the feature/* and protected conventions, or a future tool added without a catalog entry. Never offered by a preset ; the creator opts in explicitly (no implicit accept).

Presets

A preset pre-fills the permissions of a mission for one account, with a limit per period, a rate and whether each permission runs freely or asks the mission creator first. The person creating the mission adjusts it; the mission stores the explicit list.

Read-only

read-only — Read code and metadata of the selected repositories; no write, no global search.

PermissionWhat it allowsLimit per periodRateRuns
github.read-codeRead code, branches, commits, files5000120 per minuteruns freely
github.read-metaRead PRs, issues, releases, workflows, branch-protection5000120 per minuteruns freely

Developer

developer — One mission per code repository — clone and push with git on feature branches (a force-push asks first), read everything, open PRs and comment; no merge on protected branches, no branch-protection changes.

PermissionWhat it allowsLimit per periodRateRuns
github.read-codeRead code, branches, commits, files10000240 per minuteruns freely
github.read-metaRead PRs, issues, releases, workflows, branch-protection10000240 per minuteruns freely
github.search-globalGlobal GitHub search (code / issues, beyond the mission resources)50030 per minuteruns freely
github.feature-branch-writeCreate/modify branches under feature/*, fix/*, chore/*, …300060 per minuteruns freely
github.bulk-file-writeBulk multi-file push (push_files)100030 per minuteruns freely
github.create-prOpen a pull request20010 per minuteruns freely
github.comment-writeComment on an issue or PR50020 per minuteruns freely
github.workflow-write-via-fileModify a GitHub Actions workflow (.github/workflows/*.yml)505 per minuteask me first
github.git-pushPush with git through the gateway20010 per minuteruns freely
github.force-pushForce-push (rewrite the history of a branch or move a tag)202 per minuteask me first

Release manager

release-manager — Ship a release — merge into protected branches, create and delete releases, push tags with git, each asking the creator first; read everything.

PermissionWhat it allowsLimit per periodRateRuns
github.read-codeRead code, branches, commits, files5000120 per minuteruns freely
github.read-metaRead PRs, issues, releases, workflows, branch-protection5000120 per minuteruns freely
github.feature-branch-writeCreate/modify branches under feature/*, fix/*, chore/*, …50030 per minuteruns freely
github.create-prOpen a pull request10010 per minuteruns freely
github.comment-writeComment on an issue or PR20010 per minuteruns freely
github.merge-protectedWrite on main / master / release-* (direct commit OR PR merge)505 per minuteask me first
github.create-releaseCreate a release (potentially public publication)202 per minuteask me first
github.delete-releaseDelete a release51 per minuteask me first
github.git-pushPush with git through the gateway10010 per minuteruns freely
github.tag-writePush or delete a tag with git202 per minuteask me first

Tools

ToolWhat it does
github__list_branchesList branches
github__list_commitsList commits
github__list_pull_requestsList pull requests
github__list_issuesList issues
github__get_file_contentsRead a file
github__get_pull_requestRead a pull request
github__get_issueRead an issue
github__get_commitRead a commit
github__search_codeSearch code
github__search_issuesSearch issues and pull requests
github__create_branchCreate a branch
github__create_or_update_fileWrite a file on a branch
github__push_filesPush files to a branch
github__create_pull_requestOpen a pull request
github__add_issue_commentComment on an issue or pull request
github__mint_install_tokenGet a short-lived token for git
github__list_workflowsList workflows
github__list_workflow_runsList workflow runs
github__get_branch_protectionRead the protection of a branch
github__merge_pull_requestMerge a pull request
github__delete_fileDelete a file on a branch
github__update_branch_protectionChange the protection of a branch
github__list_releasesList releases
github__list_tagsList tags
github__create_releaseCreate a release
github__delete_releaseDelete a release

Tools that hand the agent a short-lived provider token (the one exception to "the agent never holds a credential"), each a permission of its own:

  • github__mint_install_token: github.mint-install-token-clone, github.mint-install-token-push

The instance is also the agents' git remote for this service: git clone and git push go through the gateway with the mission key, every pushed ref decided like a tool call (git remote).

Health

Health: not enough reports yet. A plugin version is deemed validated by the community with at least 200 reports and 90 % of them successful, over the last 90 days, as reported by the instances whose operators turned community telemetry on. It is a community signal, not a security guarantee.

Last changed 2026-10-16. This page as Markdown: /plugins/github.md