answered from live GitHub & Hugging Face data
How can I verify the provenance of commits made by coding agents like Codex or Copilot?
A "Verified" badge proves a signing key made the commit. It does not prove which agent wrote it. Check the author, the co-author trailer, and the session link as well.
The real question is whether a commit record can show that an agent wrote it. For GitHub's own agent, the answer is yes, with limits. For Codex, I could not confirm the records.
Signals for Copilot cloud agent
GitHub's documentation describes the following for Copilot cloud agent commits:
- The commit author is Copilot.
- The person who started the task appears as a co-author.
- Each commit message includes a link to the session logs.
- Commits are signed and show as "Verified" on GitHub. (Managing agent sessions)
These signals work together. The author shows the actor. The co-author shows the accountable human. The session link shows the reasoning and tool use.
What each signal proves
| Signal | What it proves | What it does not prove |
|---|---|---|
| Verified badge | A GPG, SSH, or S/MIME key, or a bot, signed the commit. | Which agent wrote the change. |
| Author field | The identity that GitHub or git recorded. | That the identity was not set by hand. |
| Co-author trailer | The human who started the task. | That the human reviewed the change. |
| Session log link | Where the agent logged its work. | That the log is complete. |
Three rules from GitHub's docs affect the trust level:
- Bot signatures need a clean request. A GitHub App commit verifies only if the request has no custom author, committer, or signature data. (About commit signature verification)
- Rebase and merge drops the signature. GitHub rewrites the commits, and it cannot sign them as the original author. (same page)
- A verified record persists. Once verified, the status stays even if the signing key is later revoked or expires. (same page)
Steps to check a commit
- Open the commit on GitHub. Confirm the status is "Verified" or "Verified" with the bot signature.
- Confirm the author is the agent identity, not a person.
- Read the message trailers. Run
git log -1 --format=%B <sha> | git interpret-trailers --parseto list them. - Open the session link in the message. Confirm it matches the pull request.
- If the merge used rebase, check the pre-merge commits on the pull request branch instead.
Kernel convention
The Linux kernel uses a different model. AI agents must not add Signed-off-by. The human submitter adds it. Contributions should carry an Assisted-by trailer, for example Assisted-by: LLM coccinelle sparse. (AI Coding Assistants)
Git's trailer rules are described in git-interpret-trailers. Use the same parsing step to read trailers from any tool that writes them.
Gaps
- Codex: The GitHub documentation tool does not cover OpenAI Codex. I could not confirm how Codex marks its commits, so I cannot give a verified signal for it.
- Third-party verifier: I could not check the live status of
githug-ai/verify. Treat any verifier tool as unconfirmed until you check its repository.
Recommendation
For Copilot cloud agent, use the Verified badge, the author, the co-author trailer, and the session link together. Do not rely on the badge alone. For other agents, use the trailer convention your project already uses, and require a human Signed-off-by or sign-off if your project needs one.
If you run more than one agent and need each agent to show its own identity, a githug agent key is one option. It gives each agent its own key. Agent commits carry trailers that name the agent, the run, and the accountable human. The hug CLI sets this up, and it is free during the beta.