ClawLink

How to connect GitHub to Hermes Agent

Connect GitHub to Hermes Agent with ClawLink: no personal access token, no GitHub App to install, no token file on your machine. 846 GitHub tools your agent calls from chat.

Get started for free
Hermes Agent
Hermes Agent
ClawLink
ClawLink
GitHub
GitHub
GitHubOAUTH2MCP

Manage repositories, issues, pull requests, and workflows. Once connected, Hermes Agent can read and act on GitHub from chat — pairing, token refresh, and tool wiring handled for you.

846 tools

Most guides for giving Hermes Agent GitHub access start with registering your own OAuth app or pasting API keys into env files, then leave the token refresh and tool wiring to you. ClawLink gives Hermes a more practical GitHub setup: pair once in the browser and your always-on Hermes agent can act on GitHub for you, reading and doing real work on your behalf with no auth, token refresh, or tool wiring to build yourself.

Copy this prompt into Hermes to install the plugin and pair your account.

Prompt for Hermes
Set up ClawLink for Hermes and tell me when it's ready.

1. Install the plugin:
hermes plugins install ClawLink-HQ/hermes-plugin --enable

2. Start pairing. It prints an approval link, so show me the link and stop, don't wait:
hermes clawlink begin

3. I'll approve it in my browser, then reply "approved".

4. When I say approved, finish setup:
hermes clawlink finish

5. Then run `hermes clawlink test` and tell me whether ClawLink is ready.

Setup

It takes three steps to connect Hermes to GitHub.

  1. 1

    Install and pair

    Install the ClawLink plugin, then pair Hermes with a one-time browser approval:

    hermes plugins install ClawLink-HQ/hermes-plugin --enable
  2. 2

    Connect GitHub

    One-click OAuth in the dashboard.

  3. 3

    Use it from chat

    Ask Hermes Agent: "What can you do with GitHub?"

Install by command

The prompt above walks Hermes through this. By hand, it is four commands and a browser approval:

hermes plugins install ClawLink-HQ/hermes-plugin --enable
hermes clawlink begin    # prints an approval link — open it and approve
hermes clawlink finish   # after approving in the browser
hermes clawlink test

Then connect GitHub in the ClawLink dashboard — a one-click OAuth approval, no API keys.

Verify the connection by asking Hermes:

List the open issues in the repository I name that were created in the last 48 hours. Group them into bug, feature request, and question, and tell me which two look most urgent and why. Do not label or close anything yet.

Using a different agent?

The Hermes plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:

npx -y @useclawlink/cli login

login opens the same browser approval and stores a credential locally. Once GitHub is connected in the dashboard, that agent calls the same 846 GitHub tools over MCP. Full setup for MCP clients and shell agents: connect apps to any AI agent.

GitHub MCP for Hermes

Looking for a GitHub MCP server for Hermes Agent? ClawLink connects GitHub to Hermes Agent and exposes 846 GitHub tools your agent can call over MCP, with hosted auth and nothing to run or maintain yourself. Using OpenClaw instead? The OpenClaw GitHub integration works the same way.

Every other route to GitHub ends with a credential in a file. The native MCP path has you create a personal access token with repo and workflow scopes and paste it into a config block. The GitHub App path has you register an app, install it on the right repositories, and manage its private key. Both work, and both mean a long-lived secret sits on the machine your agent runs on. ClawLink connects through GitHub's OAuth flow: you approve access in the browser, and the 846 tools below become callable from Hermes chat. There is no token to rotate, no config file to edit, and the grant is listed under authorized applications in your GitHub settings where you can revoke it in one click.

Why 846 tools and how to work with that

The number is real, counted from the generated manifest, and it changes how you should prompt.

  • GitHub's REST API surface is enormous, and this integration exposes it rather than a curated subset. That is a genuine advantage when you need something specific, such as deployment statuses, branch protection, or organization webhooks, and a liability if you expect the agent to know all 846 by heart.
  • Name the outcome, not the tool. Ask for "open a pull request from this branch" rather than guessing a tool name. The agent resolves it against the catalog, and guessed names produce the tool-not-found card above.
  • Schemas load on demand. Nothing loads the full catalog into the agent's context at once, which is why the first call of a session can need a retry and why the page does not list all 846.

Using OpenClaw too? The OpenClaw GitHub integration uses the same GitHub OAuth connection and the same tools; only the agent-side pairing differs.

What the Hermes Agent GitHub integration can do

846 GitHub tools are ready for Hermes Agent once the account is connected. The 30 below are the ones people reach for most; your agent can call all 846.

30 of 846 GitHub tools for Hermes

ToolWhat it does
Abort repository migration github_abort_repository_migrationTool to abort a repository migration that is queued or in progress. Use when you need to cancel an ongoing migration operation.
Accept repository invitation github_accept_repository_invitationAccepts a PENDING repository invitation that has been issued to the authenticated user.
Add a repository collaborator github_add_a_repository_collaboratorAdds a GitHub user as a repository collaborator, or updates their permission if already a collaborator; permission applies to organization-owned repositories (personal ones default to 'push' and ignore this field), and an invitation…
Add app access restrictions github_add_app_access_restrictionsAdds GitHub Apps to the list of apps allowed to push to a protected branch. The branch must already have protection rules with restrictions enabled.
Add assignees to an issue github_add_assignees_to_an_issueAdds assignees to a GitHub issue. This action only adds users - it does not remove existing assignees. Changes are silently ignored if the authenticated user lacks push access to the repository.
Add email address for authenticated user github_add_email_address_for_authenticated_userAdds one or more email addresses (which will be initially unverified) to the authenticated user's GitHub account; use this to associate new emails, noting an email verified for another account will error, while an existing email for the…
Add field to user project github_add_field_to_user_projectTool to add a custom field to a user-owned GitHub Projects V2 project. Use when you need to add fields like status, priority, or custom data to organize project items.
Add item to user project github_add_item_to_user_projectTool to add an issue or pull request to a user-owned GitHub project. Use when you need to add existing repository items to a project board.
Add labels to an issue github_add_labels_to_an_issueAdds labels (provided in the request body) to a repository issue; labels that do not already exist are created.
Add or update team membership for user github_add_or_update_team_membership_for_userAdds a GitHub user to a team or updates their role (member or maintainer), inviting them to the organization if not already a member; idempotent, returning current details if no change is made.
Add or update team project permissions github_add_or_update_team_project_permissionsAdds a classic project to a team or updates the team's permission on it. This endpoint grants or updates permissions for a team on a specific classic project (not Projects V2).
Add or update team repository permissions github_add_or_update_team_repository_permissionsSets or updates a team's permission level for a repository within an organization; the team must be a member of the organization.
API root github_api_rootRetrieves a map of all top-level GitHub REST API resource URLs and their templates
Check if gist is starred github_check_if_gist_is_starredChecks if a gist is starred by the authenticated user
Check if pull request has been merged github_check_if_pull_request_has_been_mergedChecks if a specified GitHub pull request has been merged, indicated by a 204 HTTP status
Check if user can be assigned github_check_if_user_can_be_assignedVerifies if a GitHub user can be assigned to issues in a repository; assignability is confirmed
Check if user can be assigned to issue github_check_if_user_can_be_assigned_to_issueChecks if a specified GitHub user can be assigned to a given issue within a repository
Check if user follows another user github_check_if_user_follows_another_userChecks if a GitHub user username follows target_user; returns a 204 HTTP status if true
Check if user is blocked by authenticated user github_check_if_user_is_blocked_by_authenticated_userChecks if the specified GitHub user is blocked by the authenticated user; a 204 No Content
Check if user is blocked by organization github_check_if_user_is_blocked_by_organizationChecks if a GitHub user is blocked by an organization
Check if user is repository collaborator github_check_if_user_is_repository_collaboratorChecks if a user is a collaborator on a specified GitHub repository, returning a 204 status if
Check person followed by auth user github_check_person_followed_by_auth_userChecks if the authenticated GitHub user follows a target GitHub user
Check private vulnerability reporting status github_check_private_vulnerability_reporting_statusChecks if private vulnerability reporting is enabled for the specified repository
Check public organization membership for user github_check_public_organization_membership_for_userCheck if a user is a public member of an organization
Check team permissions for a project github_check_team_permissions_for_a_projectChecks if a team has 'read', 'write', or 'admin' permissions for an organization's specific
Check team permissions for a repository github_check_team_permissions_for_a_repositoryChecks a team's permissions for a specific repository within an organization, including
Check token github_check_tokenChecks if a GitHub App or OAuth access_token is valid for the specified client_id and retrieves
Compare two commits github_compare_two_commitsCompares two commit points (commits, branches, tags, or SHAs) within a repository or across
Create inference chat completions github_create_inference_chat_completionsCreate chat completions using GitHub Models inference API
Create inference embeddings github_create_inference_embeddingsCreate inference embeddings using GitHub's AI models

Try it: find the GitHub tool you need

Browse the 30 GitHub tools

Click any tool to see exactly what Hermes can do and copy a ready-to-use prompt.

Example prompts

List the open issues in the repository I name that were created in the last 48 hours. Group them into bug, feature request, and question, and tell me which two look most urgent and why. Do not label or close anything yet.

Pull the diff for pull request 412 in my repository and summarize what changed by file. Flag anything that touches authentication or migrations, and draft review comments for the three riskiest hunks. Show me the drafts before posting.

Create an issue in my repository titled "Checkout 500s on Safari 17" with the repro steps I paste next, label it bug, and assign it to me. Give me the issue number and URL when it exists.

Search my organization's repositories for uses of the deprecated helper formatLegacyDate, list every file and line, and tell me which repositories would need changing. Do not edit anything.

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want GitHub working from chat.

ManualClawLink
Connection flowRegister a GitHub app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift.Users connect GitHub through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code.
Ongoing maintenanceYou own refresh logic, permission debugging, environment config, and every provider-specific edge case for GitHub.ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure.
Agent usabilityYou still need to expose the right GitHub actions to the runtime in a format your agent can reliably use.846 tools for GitHub are already exposed through ClawLink, so the agent can read and act from chat immediately.

Composio also exposes GitHub to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for Hermes Agent users instead. You install the plugin once, connect GitHub in the browser, and the 846 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full Composio alternatives comparison.

Troubleshooting

Hermes paired but still can't use GitHub

Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.

Connection succeeds but no tools appear

Reconnect GitHub from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.

"Tool schema not loaded yet" error when calling GitHub tools

GitHub tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every GitHub call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.

GitHub returns 403 or "permission denied" on one action while others work

Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.

GitHub returns 403 "Resource not accessible by integration" or 404 on a repository that exists

Search results answer this with GitHub App permission surgery: the app is not installed on the repository, request the missing permission and reinstall. That is the right fix for a GitHub App and the wrong fix here, because this connection is a user OAuth grant with no installation to adjust. Three things cause it instead. The first is organization approval: many organizations require an owner to approve third-party OAuth applications, and until that happens org-owned repositories return 404 rather than 403, because GitHub hides private resources it will not let you see. That 404-instead-of-403 behaviour is deliberate on GitHub's part and it makes the failure look like a typo. The second is plain access: the connection acts as you, so a repository you were never added to stays unreachable. The third is a placeholder argument, where the agent invents an owner or repo string such as your-org, and the call reaches GitHub and comes back as missing. List first with github_list_repositories_for_the_authenticated_user, then retry with a real full name.

Ask the agent to diagnose it:

Run github_get_the_authenticated_user and tell me which GitHub account is connected. Then run github_list_repositories_for_the_authenticated_user and show me whether the repository I asked about is in the list. Do not retry the failing call until both have returned.
GitHub returns 403 with "API rate limit exceeded" or a secondary rate limit message

GitHub applies two different limits and they need different responses. The primary rate limit is a request budget over a window, and the response carries headers telling you when it resets; waiting for the reset is the only fix. Secondary rate limits are separate and trigger on bursts of writes or expensive queries, and they can fire well inside the primary budget. An agent looping over hundreds of files, or opening many issues in sequence, hits the secondary limit first. The response often includes a Retry-After value, which is the interval to respect. Reconnecting changes nothing for either one. What does help is changing the shape of the work: ask for search calls instead of enumerate-everything calls, and batch related edits into a single commit rather than one call per file.

Ask the agent to diagnose it:

Report the exact status code and response headers from the failed GitHub call, including any x-ratelimit-reset or Retry-After values. Do not retry it.
A GitHub tool returns "tool not found" on a connection that works

With 846 tools in this integration, schemas load on demand rather than all at once, so the first GitHub call in a fresh session can arrive before the catalog does. Retrying once normally resolves it. If the same name fails twice, the name is wrong rather than missing, and the error message lists the closest real tools; retrying with one of those works. Search results for this phrase describe a different world entirely, where an MCP server is missing from claude_desktop_config.json or a server name breaks a length limit. There is no local server and no config file in this setup, so none of those fixes apply.

Ask the agent to diagnose it:

List the GitHub tools you actually have access to that relate to what I asked for, then use the closest exact name.
OAuth finished in the browser but the account is still missing

Try reconnecting GitHub and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

FAQ

Is there a Hermes Agent GitHub integration?

Yes. ClawLink is the fastest way to connect Hermes to GitHub: link your GitHub account once in the browser and Hermes Agent can call the GitHub API through 846 ready-made tools — no custom code or token handling.

How do I connect GitHub to Hermes with ClawLink?

Install the plugin with hermes plugins install ClawLink-HQ/hermes-plugin --enable, then pair once: run hermes clawlink begin, approve the link in your browser, and run hermes clawlink finish. Connect GitHub in the dashboard and Hermes can use it from the next message — no config files or API keys to manage.

How long does it take to connect GitHub to Hermes Agent?

About two minutes. Sign in, click Connect next to GitHub in the dashboard, authenticate, and Hermes Agent can use it from the next chat message.

Why use ClawLink instead of wiring GitHub up myself?

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want GitHub working from chat.

Can an AI agent access my repositories without a personal access token?

Yes, and the difference is in what the credential can do when it leaks rather than in what it can do when it works. A classic personal access token carries whatever scopes you gave it across everything your account can reach, and it keeps working until you remember to revoke it. A fine-grained token narrows that, which is why GitHub recommends them, but it is still a string you store and renew. This connection is an OAuth grant instead: nothing is written to disk on your side, GitHub lists the authorization in your account settings, and revoking it there ends the agent's access immediately without you hunting for where the token was saved.

Which repositories can the agent reach?

The ones your GitHub account can already reach, subject to what you approved during sign-in. This is delegated access, so the agent inherits your permissions rather than receiving its own. A private repository in an organization you do not belong to is invisible to it. Organization policy can also restrict it further: many organizations require an owner to approve third-party OAuth applications before members can use them against org-owned repositories, and until that approval exists the agent will see your personal repositories and none of the organization's. Ask the agent to run github_list_repositories_for_the_authenticated_user and read the list back if you want to know exactly where you stand.

Is it safe to connect GitHub to an AI agent?

The honest answer separates two risks that usually get discussed as one. The credential risk is the smaller one here, and it is the one this connection improves: no token file exists on your machine to leak, the grant is visible in your GitHub settings, and revocation is immediate and does not depend on us. The behavioural risk is real and is not solved by any connection model: an agent that reads an issue, a pull request comment, or a README is reading text written by other people, and that text can contain instructions aimed at the agent. Treat write actions accordingly. Ask for drafts before pushes, keep branch protection on anything that matters, and remember that the agent acting as you means its commits carry your name. Reviewing what it proposes is not paranoia, it is the same review you would give a new contributor.

Does this work with GitHub Enterprise Server?

The connection targets github.com. A self-hosted GitHub Enterprise Server instance behind your own network is not reachable through this flow, and the self-hosted MCP servers that do target it need a token you manage and a network path to the instance.

Hermes paired but still can't use GitHub

Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.