Role-based access control
Every action resolves against a permission set for the actor’s role. Reads are broad; writes are checked. A viewer can’t score, an interviewer can’t publish, and no one reaches a capability their role doesn’t grant.
Fairness and security are the same discipline: make the guarantees structural, not aspirational. FairHire enforces access in code, records every consequential action to a tamper-evident chain, and keeps agents inside the same guardrails as people.
Every action resolves against a permission set for the actor’s role. Reads are broad; writes are checked. A viewer can’t score, an interviewer can’t publish, and no one reaches a capability their role doesn’t grant.
Consequential actions are written to a tamper-evident, hash-chained log — not just an activity feed. A built-in chain-verification check proves the record hasn’t been altered after the fact.
Every read and write is scoped to one organization. Run separate hiring workspaces from a single install and no workspace ever sees another’s requisitions, candidates, notes, or tags.
AI agents operate through the same guarded surface as people — but the decisions that matter (offers, rejections, publishing a fairness page, minting keys) are hard-gated to humans in code. No override flag exists for an operator agent.
Agent keys are SHA-256 hashed (plaintext shown once), scoped to one org and role, and re-resolved on every call — so revoking or expiring a key takes effect on the very next request.
DEI reporting is aggregate-only and suppressed below a cohort threshold — it never returns an individual’s demographics — and sits behind an elevated permission the default operator agent doesn’t hold. Opt-outs are honored everywhere.
A quick reference for the reviewer on your team. Because FairHire is open source, every one of these is verifiable — you don’t have to take our word for it.
Self-host free under MIT, or let us host it — the security model is the same, and it’s all readable.