Trust & compliance
Security controls you can verify.
emisar sits between AI assistants and production systems. We keep that authority narrow: runners connect out, agents get declared actions instead of shell access, risky changes stop for a person, and every decision leaves evidence. This page covers the controls operating today and the documents available for review.
Identity & access
- OIDC single sign-on with Okta, Entra ID, JumpCloud, Google Workspace, or Keycloak
- SCIM 2.0 directory sync: offboarding in your IdP revokes emisar access
- Account-wide MFA enforcement (TOTP + recovery codes)
- Owner / admin / billing manager / operator / viewer roles, least-privilege by default
- Per-user runner and pack access limits where people and agents can act
- MCP bridge keys are short-lived and rotate themselves.
- Automatic rotation requires an expiring portal-issued agent key and a persistent, writable store for the bridge credential
- Full session management for browser and API-key access
- Agent connect by browser approval: the key is installed, never pasted or put on a command line
Audit & monitoring
- Portal audit: actor, action, target, policy and approval decisions, outcome, exit code, and linked run
- Run history: exact action arguments kept for the plan's window; sensitive fields are masked in console and API views, not storage
- Runner journal: a redacted copy of action arguments in SHA-256 hash-chained JSONL kept on each host
- emisar audit verify reports breaks in the retained runner journal's chain; it cannot rule out that a privileged host operator replaced or truncated the entire local journal
- Poll NDJSON into your SIEM with a read-only audit-export token
Data handling
- Production data in private Cloud SQL PostgreSQL, United States region
- TLS 1.2+ at the edge; required database TLS; provider-managed encryption at rest
- Audit retention by plan: 7 / 90 / 365 days
- We never sell your data, or use it to train AI models
- Export your data any time (full snapshot); delete on request
- GDPR & CCPA honored; server-side analytics with no identifier cookie outside checkout
The trust boundary
- Outbound-only runners, with no inbound port open on your hosts
- Per-runner tokens expire in 90 days and refresh themselves, so you don't need host access to renew them
- Typed action contract: the agent can't request undeclared commands
- Signed dispatch (Ed25519 or ECDSA P-256 leaf keys): the cloud can relay a request but never forge one
- Local admission control: the host has the last word
- Known secret patterns redacted before output leaves the host
- Content-addressed packs: an unrecognized change blocks dispatch until an admin reviews it
Production infrastructure
The hosted service runs on Google Cloud in the United
States. Application instances have no public IP addresses; production traffic
reaches them through a Google Cloud HTTPS load balancer with managed certificates and a
TLS 1.2 minimum. The Cloud SQL database is private-addressed, requires TLS, and has
automated backups, point-in-time recovery, and deletion protection. The public DNS zone is
signed with DNSSEC, with a validating chain of trust from the signed
.dev
parent zone to emisar.dev.
Secrets live in Secret Manager and workload identities receive access only to the secrets and resources they need. Administrative access is restricted through Identity-Aware Proxy and OS Login. VPC flow logs and Cloud Monitoring alerts cover the platform; independent external probes feed on-call alerting and our public status page.
Change control & software delivery
Pull requests run with read-only permissions and no deployment credentials. The main-branch delivery workflow calls the same reusable CI workflow again, so production receives the commit that passed CI. That run covers compilation, tests, dependency-advisory checks, static security analysis, architecture checks, and an image smoke test. GitHub Actions are pinned to exact commits; downloaded tools are version-pinned and checksum-verified.
Delivery scans the tested image for high and critical vulnerabilities, generates a CycloneDX SBOM, and publishes provenance and SBOM attestations. The image is promoted by immutable digest, never rebuilt after testing. Infrastructure changes become a saved HCP Terraform plan: auto-apply is disabled, the plan must still match the current main commit and state, and a person must review it and choose Confirm & Apply. Rollouts keep the previous instances serving until the replacement passes readiness checks.
Subprocessors
A short list, each contractually bound to confidentiality and to processing data only on our instructions:
- Google Cloud Platform: application hosting, networking, managed PostgreSQL, and backups, US region.
- Paddle: payment processing and subscription retention (Paddle Retain, loaded only on the checkout page); we never see or store full card numbers.
- Postmark: transactional email (confirmations, approvals, magic links).
- Mixpanel: marketing & growth analytics; server-side with no analytics identifier cookie, never your runners' data.
- Sentry: error monitoring, hosted in the United States; request bodies, parameters, user email and IP fields are removed before sending, and configured secret keys are redacted.
- X Corp: advertising attribution for signups arriving from an X ad; server-side, and only the ad's click identifier, the signup time, and an opaque one-way hash that lets X discard duplicates.
We update this list before adding a subprocessor. See the privacy policy for the full detail.
Security review & procurement
Security review material is available now. We complete security questionnaires and can provide supporting material for access control, change management, vulnerability management, monitoring, backup and recovery, retention, and deletion. SOC 2 Type II audit preparation is underway; the independent examination is not complete. We also offer a Data Processing Addendum you can sign (email support@emisar.dev to request one).
Insurance
Professional-indemnity coverage of USD $1M and general-liability coverage of USD $2M apply to hosted use on Team and Enterprise plans, worldwide including the USA and Canada. A certificate of insurance is available on request.
Availability & SLA
The hosted control plane targets 99.95% monthly uptime on Team and 99.99% on Enterprise, backed by a written SLA in the Enterprise order form. Because runners dial out and the host has the last word, a control-plane outage pauses new dispatches. It never leaves an action half-run or bypasses a gate.
Deployment & licensing
emisar runs as a hosted control plane today. The code that runs on your hosts (the runner, the MCP bridge, and the action packs) is open source under the Apache License 2.0. You can inspect, build, and keep operating it independently of us. The control plane is source-available under the Business Source License, and each release converts to Apache-2.0 on its change date. So the code can't end up locked behind a vendor that disappears. Supported self-hosted and air-gapped deployments are not generally available. If on-prem or air-gap is a hard requirement, contact us. We want to hear about it.
Release integrity
A public
GitHub Actions workflow
builds the current runner and MCP-bridge releases. It publishes
SLSA Build Level 2 provenance
for
the combined checksum and each archive, signed by Sigstore and bound to the exact tag
and workflow that produced it. Before a binary ever
runs as sudo
on your host, you can prove that it came from our source, not a tampered mirror, and that
its bytes match what we published:
# authenticate the checksum metadata first (use the MCP names for the bridge) $ gh attestation verify SHA256SUMS --bundle SHA256SUMS.sigstore.jsonl \ --repo andrewdryga/emisar \ --signer-workflow AndrewDryga/emisar/.github/workflows/runner-release-trusted.yml \ --source-ref refs/tags/runner-v<version> --deny-self-hosted-runners ✓ Verification succeeded! … # verify only the archive you downloaded $ awk -v file='emisar-<version>-linux-amd64.tar.gz' \ '$2 == file { print; found=1 } END { exit !found }' SHA256SUMS | sha256sum -c - emisar-<version>-linux-amd64.tar.gz: OK # optional online evidence for the archive and container (requires GitHub authentication) $ gh attestation verify emisar-<version>-linux-amd64.tar.gz \ --repo andrewdryga/emisar \ --signer-workflow AndrewDryga/emisar/.github/workflows/runner-release-trusted.yml \ --source-ref refs/tags/runner-v<version> --deny-self-hosted-runners $ gh attestation verify oci://ghcr.io/andrewdryga/emisar-runner:<version> \ --repo andrewdryga/emisar \ --signer-workflow AndrewDryga/emisar/.github/workflows/runner-release-trusted.yml \ --source-ref refs/tags/runner-v<version> --deny-self-hosted-runners
The signed checksum check is the installer's trust path when GitHub CLI is installed. It
needs access to the two public trust-root hosts in Network requirements, but no GitHub login. Without GitHub CLI, the installers
and emisar update
ask before continuing, or warn and
continue when run unattended. In that case the checksum from the release mirror alone proves the
selected archive's bytes. An authenticated GitHub CLI can add the per-archive online check.
Reporting a vulnerability
Email security@emisar.dev. We acknowledge reports within 72 hours, keep you updated, and credit you if you'd like. Please give us a reasonable window to fix an issue before disclosing it publicly.
Review emisar with your security team.
We'll walk through the trust boundary, production controls, available evidence, DPA, and the requirements specific to your environment.
Three runners. Seven-day audit. No credit card.