Skip to content
Field note9 min readUpdated 2026-07-21

How OpenFace turns specialist agents, an explicit coordinator, and independent evidence into a safe auto-merge gate.

  • agents
  • review
  • auto-merge
  • evidence

Put another set of eyes before merge

Automation becomes dangerous when “finished” and “approved” collapse into the same event. OpenFace deliberately keeps them separate.

A visible chain of responsibility

A user mentions @glm-maintainer. The maintainer classifies the request and visibly delegates to one specialist account: design, coding, or documentation. That account runs Claude Code /goal, changes the repository, executes relevant checks, and publishes a pull request with evidence.

Then the work stops moving forward.

The maintainer explicitly mentions @review-agent. The reviewer receives the pull-request URL and exact head SHA, but a read-only contract. It must inspect the requirement, diff, tests, regressions, security implications, and—when the interface changed—the running application at mobile and desktop sizes.

Why the SHA matters

An approval without an immutable subject is only an opinion about the past. The reviewer records reviewed_sha; immediately before merge, the wrapper asks Forgejo for the current head again. If those values differ, merge is refused.

The merge request also includes Forgejo's head_commit_id. This gives the server one final chance to reject a stale decision.

Fail closed, visibly

The gate rejects the PR when any requirement or executed check fails, any finding remains, reviewer screenshots are missing, the reviewer modified tracked files, the report contradicts itself, or the head changed.

Rejection is not a hidden worker error. The reviewer account publishes the findings, and the maintainer mentions the specialist with the remediation. The PR remains open.

Evidence from a real run

In Issue #25, the specialist verified a back-to-top interaction. The maintainer then assigned a separate reviewer. The reviewer independently ran the app, passed 10 requirements and 9 checks, attached eight screenshots, approved SHA b55a7369…, and reported zero findings. Only then was PR #26 merged.

The important outcome is not that an agent merged code. It is that the conversation contains enough identity, state, and evidence to explain why it was allowed to merge.

Released under the MIT License. Third-party components retain their own licenses.