oakallow-governance — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited oakallow-governance (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
oakallow is a hosted remote MCP server that sits between an agent and the actions it wants to take. It does not run your tools or receive your tool parameters. It governs the moment of execution: it checks whether a specific action is permitted, gates risky or irreversible actions behind human approval, and records an immutable audit row.
This skill tells you, the agent, when and how to call oakallow's tools so a governed workflow behaves correctly.
https://api.oakallow.io/mcp (Streamable HTTP)mcp:read (list, check, read activity), mcp:write (create approval requests)oakallow is hosted and requires an oakallow account. You cannot use this connector anonymously.
screen, the human signs in to their oakallow account, and approves the scopes (mcp:read, mcp:write). Authorization is bound to that signed-in account.
dashboard, a person registers the tools an agent may use, sets the permission rules for each tool, decides which actions require approval, and approves or denies requests. The connector does not configure tools or set rules, and it can never approve on a human's behalf.
human signs in. Surface that to the user rather than trying to work around it.
oakallow is a requester and pass-through, not a decider. The connector can ask whether something is allowed and can request approval, but it can never approve or deny on a human's behalf. Decisions happen on a separate, MFA-bound surface (the oakallow dashboard or mobile app). So the agent's job is:
Never assume an action is allowed. Never try to self-approve. Never route a decision through the connector.
| Tool | Purpose | Reads only |
|---|---|---|
list_my_tools | Enumerate the tools available to the signed-in user in the named org | yes |
check_permission | Ask whether a given tool call would be allowed, require approval, or be blocked | yes (see note) |
list_pending_approvals | List approval requests still awaiting a human decision | yes |
check_approval_status | Poll a pending approval request by its reference | yes |
An oakallow account can have more than one organization, and each org has its own tools, rules, approvers, and alerting. So a check must go to the org the action actually belongs to.
check_permission and list_my_tools take an optional `org` argument — the org's external id (org_oak_…):
per-org from the oakallow dashboard, so the org id for the org this skill governs is stated below — pass that id on every check_permission call. If you omit it on a multi-org account, the call is refused rather than sent to the wrong org.
You cannot list orgs through the connector and you cannot reach an org you do not have access to — passing an org id you lack access to is refused. The org id comes from this skill (downloaded for that specific org), not from probing.
`check_permission` is a dry-run. It returns a read-only verdict (allowed/requires_approval/disabled) and nothing else — it does NOT create an approval request and does NOT return a reference (REF-…). The approval and itsREF-…are created later, when you call the gated tool itself through oakallow (see the workflow below). One side effect to know: checking a tool oakallow has never seen is intentionally not a no-op — oakallow auto-creates a gated draft entry for that tool with conservative, fail-closed defaults so the eventual call is governed and the owner can triage it. An unknown tool is never silently trusted, so do not callcheck_permissionspeculatively on tools you have no intention of using.
Follow this sequence whenever you are about to take an action that affects another system or could be risky or irreversible.
this skill names (see "Targeting the right organization"). This is a dry-run: it returns a verdict only and creates nothing.
allowed then the action is permitted without approval — perform it(step 5).
requires_approval then it is gated — go to step 2 to create the approval.disabled / blocked then do not perform the action; surface the reason andstop. Do not look for a workaround.
the `org` id, the tool's parameters, and a clear `reason`. oakallow does NOT execute the tool — when it is gated, oakallow creates the approval request, notifies a human, and returns a requires_approval response carrying a reference (`REF-…`). This call is what mints the reference; there is no separate "request approval" tool. (If it returns allowed, the action was permitted — perform it. If disabled/blocked, stop.)
human approver must decide in the oakallow dashboard or app under enforced MFA. Note the `REF-…` returned in step 2.
not hammer it. When the status resolves:
approved then perform the action.denied then do not perform the action. Report the denial, and the reasonif one was given, to the user.
expired then the request timed out without a decision. Do not perform theaction; offer to re-request if the user still wants it.
not execute customer tools). Each approval authorizes exactly one execution. oakallow records an immutable audit row for the outcome.
When an action requires approval, the human approver sees a reason. Make it genuinely useful, because it is what a person uses to decide in seconds:
parameters. oakallow only carries a PII-scrubbed reason by design, so do not try to smuggle sensitive payloads into the reason text.
Good: "Restart the production payments-api service on host db-3 to clear a stuck worker queue the user reported at 14:02."
Bad: "Do the thing", or pasting an API key or full request body into the reason.
a human decision, which is useful when resuming a session or when the user asks "what is waiting on me?".
get a different answer.
decide in the dashboard.
creates gated draft entries that the org owner then has to triage.
denied, or blocked, and surface the reference.
User: "Delete the abandoned staging-old database."
>
1. Agent callscheck_permissiondescribing: delete database staging-old. 2. Verdict isrequires_approval; oakallow creates a request and notifies a human, returning a reference. 3. Agent tells the user: "That is a destructive action, so I have requested approval. A human needs to approve it in oakallow." 4. Agent pollscheck_approval_statuswith the reference until it resolves. 5. Onapproved, the agent performs the delete once and reports completion. oakallow writes the audit row.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.