Intramedial is in restricted beta. At sign up or sign in, you have to provide the beta tester password you received or request one at preview@intramedial.com. Thank you.
Loading…
github.enforceModule 29
Plane module
GitHub write gate
Make a commit's check go red unless the agent behind it holds the grant and, for a write, a human has confirmed.
github.enforce admits a repository action through Intralock and reports the verdict back to GitHub as a check run or commit status. It admits repo:<repo>, defaults the action to write, and pins an allowed commit to the agent so later webhook events for that sha ride the same decision.
Agents act when the plane says yes, and the record says why.
Put admission in front of your MCP servers, repositories, SaaS tools and cloud accounts. Every agent gets a lease or a reason – and you keep the lever to stop any of them.
Without GITHUB_PAT or a bound GitHub App the verdict is still returned and ledgered, but commitStatus and checkRun are null, so nothing shows on the commit. Bind one, then confirm with github/app.
Record
The record
What gets recorded
repo
The repository, such as acme/payments. The admitted resource is repo: followed by this value.
actorDid
The agent whose write this is. A webhook actor is the GitHub login that sent it.
action
read, or . Anything else, or nothing, is admitted as .
Require the intramedial/acp check on the branch. A pending or failed check keeps the agent's commit from merging until someone confirms it.
Confirming from the pull request
A reviewer comments /acp allow. The signed webhook mints the token, admits again and flips the same commit's status to success.
Taking approval back
revoke drops the pin an agent holds for a sha and posts a failure, so a commit already approved can be refused again.
Keeping agents off shared branches
namespace rewrites an agent's branch under agent/<slug>/ and refuses protected names such as main, release* and hotfix/*.
When to use something else
Admitting calls to an MCP server. Use mcp.enforce; this module works on repositories and commits.
Collecting the human decision. The approval itself belongs to coordination.approve; this module posts the result.
Gating a single branch or ref by name. Admission here is per repository; only namespace knows protected branch names.
Evidence
Guarantees
What it does, and what it does not
A module is a strong claim about a narrow thing. Rely on it for exactly what it is.
It does
The verdict is Intralock's, with llm: false; the same actor, repo and action give the same answer as coordination.admit.
Every enforce appends a github.enforce event to the ledger with the repo, sha, outcome and reason.
A refusal for one actor never drops a sha pin held by a different actor, so a stranger cannot cancel an approval.
A write that needs confirmation stays pending when it arrives from a webhook; only an explicit enforce posts the failure.
It does not
That a merge is blocked. The check blocks only if branch protection requires intramedial/acp; the gateway cannot set that for you.
That the code in the commit is safe. The decision is about who may write, not what was written.
That a ruling revokes an approval. revoke is an explicit call that is gated by a warrant; no ruling triggers it.
That a push is gated. Push ingest only records; the pull request, check, workflow and merge-queue events are the ones that enforce.
Details
Build notes
Before you build
What is posted
With a GitHub App bound the verdict is a check run named intramedial/acp, with commit status as the fallback. A GITHUB_PAT posts commit status only.
The sha pin
An allowed write records the actor against repo, action and sha. A later event for that sha can then mint a token for the same actor without a second human.
Webhook events
Pull request, check suite, check run, workflow run and merge group events admit the head as a write and post a pending status until a token arrives.
Permissions
revoke needs policies.approve and a dual-control or adjudicated warrant. enforce, ingest and status take no role of their own.
Limits and metering
The check run and status are posted only when a PAT or App credential is bound; otherwise both fields are null.
status returns the last 50 ingested items, filtered by repo or sha when given.
revoke without a warrant returns 403 because warrant-gated routes are closed by default.
namespace takes actorDid and branch; without an actor it returns 400.
Access
API & MCP
REST and MCP
Authenticate with a workspace API key as a Bearer token. The base URL is https://api.intramedial.com.
REST endpoints
POST/api/v1/acp/github/enforceAdmit a repository action and post the verdict to GitHub.
POST/api/v1/acp/github/ingestRecord a GitHub webhook and enforce the events that call for it.
GET/api/v1/acp/github/statusRead recent audit items, the last head and the pin holder.
POST/api/v1/acp/github/revokeDrop the sha pin held by the actor and post a failure.
MCP actions
MCPcoordination.github.enforceAdmit a repository action from an agent.
MCPcoordination.github.ingestRecord a webhook body from an agent.
MCPcoordination.github.statusRead recent GitHub audit items from an agent.