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.


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.
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.
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.
1Install and pair
Install the ClawLink plugin, then pair Hermes with a one-time browser approval:
hermes plugins install ClawLink-HQ/hermes-plugin --enable- 2
Connect GitHub
One-click OAuth in the dashboard.
- 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 testThen 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 loginlogin 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
| Tool | What it does |
|---|---|
Abort repository migration github_abort_repository_migration | Tool 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_invitation | Accepts a PENDING repository invitation that has been issued to the authenticated user. |
Add a repository collaborator github_add_a_repository_collaborator | Adds 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_restrictions | Adds 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_issue | Adds 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_user | Adds 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_project | Tool 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_project | Tool 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_issue | Adds 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_user | Adds 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_permissions | Adds 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_permissions | Sets 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_root | Retrieves a map of all top-level GitHub REST API resource URLs and their templates |
Check if gist is starred github_check_if_gist_is_starred | Checks if a gist is starred by the authenticated user |
Check if pull request has been merged github_check_if_pull_request_has_been_merged | Checks 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_assigned | Verifies 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_issue | Checks 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_user | Checks 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_user | Checks 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_organization | Checks if a GitHub user is blocked by an organization |
Check if user is repository collaborator github_check_if_user_is_repository_collaborator | Checks 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_user | Checks if the authenticated GitHub user follows a target GitHub user |
Check private vulnerability reporting status github_check_private_vulnerability_reporting_status | Checks if private vulnerability reporting is enabled for the specified repository |
Check public organization membership for user github_check_public_organization_membership_for_user | Check if a user is a public member of an organization |
Check team permissions for a project github_check_team_permissions_for_a_project | Checks 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_repository | Checks a team's permissions for a specific repository within an organization, including |
Check token github_check_token | Checks if a GitHub App or OAuth access_token is valid for the specified client_id and retrieves |
Compare two commits github_compare_two_commits | Compares two commit points (commits, branches, tags, or SHAs) within a repository or across |
Create inference chat completions github_create_inference_chat_completions | Create chat completions using GitHub Models inference API |
Create inference embeddings github_create_inference_embeddings | Create 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.
ClawLink vs. building it yourself
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.
| Manual | ClawLink | |
|---|---|---|
| Connection flow | Register 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 maintenance | You 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 usability | You 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. |
ClawLink vs. Composio
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.
Related
Hermes SafetyCulture integration
SafetyCulture (formerly iAuditor) is a workplace operations platform that enables teams to conduct digital inspections, manage audits, track issues, schedule tasks, and maintain compliance through mobile and web applications.
Connect LaunchDarkly
A feature management platform that helps teams build better software faster using feature flags.
Crowdin
Manage translations, localization projects, and language resources