VOLAT

VOLAT never touches your code

VOLAT keeps the plan. Your agents write the code and open the pull requests themselves. This page says what VOLAT can and cannot do, and each section lists the file in the repository that backs it. If something here is not backed by the code, it is a bug in this page.

VOLAT has no access to your code

VOLAT never clones a repository and never asks for a deploy key. Your agents write code and open pull requests with their own git access; VOLAT only learns the branch, the pull request, its check and conflict state.

The optional VOLAT GitHub App asks GitHub for exactly four permissions on every token: Metadata (read), Checks (write), Pull requests (read) and Commit statuses (read). Checks (write) lets it post one status check named "Mishka approval". It has no Contents, Administration, Deployments or Actions permission, so it cannot read files, push, merge or change settings. To apply your risk-path rules it reads the names of the files a pull request changes, never the patches or file contents.

Webhooks from GitHub are accepted only when their HMAC-SHA256 signature matches the secret you set.

What this does not cover

  • The check is only as strong as your branch protection: GitHub enforces a required check, VOLAT does not.
  • The GitHub App is optional, and registering it is a manual step for the owner. Until it is installed, VOLAT sees only what webhooks and your agents report.
Where this comes from
  • src/server/code-host/types.ts
  • src/server/code-host/github-app.ts
  • src/server/code-host/github.ts
  • docs/github-app.md

Agent keys are hashed and scoped

Each agent has its own key. VOLAT shows a key once, when it is created, and stores only its SHA-256 hash with a short prefix and a start-and-end hint, which are not enough to use the key.

A key carries scopes of the form resource:level (read, write or admin) and can be limited to one app. It expires (90 days unless the owner says otherwise) and the owner can revoke it. Deciding an approval is human-only whatever a key's scope. Each key also has rate limits, a daily write budget and a loop breaker.

What this does not cover

  • A key that leaks works until it expires or the owner revokes it. Keep it in your environment, never in a repo, ticket or chat.
Where this comes from
  • src/server/agents/key-format.ts
  • supabase/migrations/20261031000500_agent_keys.sql
  • src/server/agents/scopes.ts
  • docs/ARCHITECTURE.md

Workspaces are isolated by the database

Row-level security is switched on for every table. Reads run as the caller, so the database itself limits each query to the caller's workspace, for people and agents alike. Every write goes through one mutation layer that runs as a role with no DELETE or TRUNCATE rights. Browser-facing database access is read-only.

The server never trusts ids sent by the browser: it builds the caller itself from the verified session or the verified key.

What this does not cover

  • The tests prove this for the current schema. They do not replace an independent security review, and this page does not claim one.
Where this comes from
  • tests/rls.test.ts
  • docs/ARCHITECTURE.md

Every change is logged and can be undone

Each write, from a person, an agent or a system job, is saved together with an append-only change event in the same transaction: who, what, and the before and after. Nobody can edit or delete that history, including VOLAT's own roles. The Activity page shows it newest first.

People can undo a change from the Activity page or the form it came from. Undo refuses when it would hurt: a later change touched the same fields, the release is frozen, or the change involved agent keys, receipts or approval decisions.

Where this comes from
  • docs/ARCHITECTURE.md
  • tests/rls.test.ts
  • src/server/mutations/undo.ts

Deleting is soft, and restorable

VOLAT does not hard-delete rows. Deleting something sets a deleted_at time, and the owner can restore it from Settings, Trash. No database role the app uses has DELETE rights on VOLAT's tables; the one exception is the job queue's role, which can delete only inside its own queue tables.

The other side of that: the app has no permanent-delete button today, so deleted rows stay in the database.

What this does not cover

  • No retention period or erasure-on-request process is promised here, because none is built into the app.
Where this comes from
  • docs/ARCHITECTURE.md
  • docs/DATABASE.md
  • tests/rls.test.ts
  • src/components/settings/sections.tsx

Where your data is hosted

The database is Postgres on Supabase. Sign-in is Supabase Auth (an email with a link and a six-digit code, or an optional password that Supabase hashes). Attachments go to a private Supabase Storage bucket. The web app and its daily job runner run on Vercel.

This page names no region, uptime figure or compliance certification, because the repository states none. Ask before relying on one.

Where this comes from
  • docs/DATABASE.md
  • docs/auth.md
  • src/server/services/attachment-store.ts
  • vercel.json
  • docs/SETUP.md

VOLAT never calls a model

VOLAT does not run an agent and does not call a language model. It has no model SDK in its dependencies, and search is plain Postgres full-text search. Your own tools use your own model accounts; VOLAT only records the tokens or spend your agents report, so you can see them.

Where this comes from
  • src/app/docs/api/page.tsx
  • package.json
  • docs/ARCHITECTURE.md

What VOLAT stores and what it sends

Stored in your workspace: apps, releases, tickets, comments, ideas, docs and decisions, attachments, members and agents, agent sessions and run receipts, approvals, the change history, a log of agent calls (which key, which action, whether it worked), and for each ticket the repository, branch, pull request number and link, state, check state, mergeable state and head commit id. Each person's push device endpoint and settings are stored too, readable only by that person.

Sent out: sign-in emails (through Supabase), push alerts to the browsers that opted in, and, only when the GitHub App is installed, the "Mishka approval" check to GitHub. VOLAT also reads the changed file names of pull requests from GitHub. Nothing else leaves.

Where this comes from
  • supabase/migrations/20261031001200_code_status.sql
  • src/server/export/export.ts
  • docs/ARCHITECTURE.md

Export everything, any time

Settings, Workspace, Export everything downloads one JSON file with every table you can read: apps, releases, tickets, history and more. Secrets are left out: agent key hashes, device keys and personal views. A nightly export to a private repository you control is also available (docs/backups.md).

Where this comes from
  • src/components/settings/sections.tsx
  • src/server/export/export.ts
  • docs/backups.md

Questions or a concern? Read how agents connect. This page makes no compliance or certification claim.