Skip to content
MagicFrog

Security model

Compliance you can verify, not promise — six mechanisms, one by one

Each mechanism is product behavior with a way to check it. When something happens, answer in five minutes: who, when, on which machine, did what.

→

The security boundary of an enterprise Agent OS should be made of mechanisms, not vendor promises. Six cards follow, each an independently verifiable fact.

Ordered from the outermost attack surface to the innermost, routing to data ownership.

The points under each card are assertions, not slogans: if any one fails, it is a bug in the repository. That is the difference between a security model and a whitepaper.

The mechanisms share another trait: none asks you to trust that MagicFrog keeps its word — routing is code, audit is records, encryption is whose hand holds the key. All verification material is on your side.

If you remember one line: in MagicFrog, every action answers which machine and who approved — the other five facts are its expansions.

routing

01

Explicit target routing

Every browser, command, and file action names its target computerId. Wrong machine, offline, or not allowed — it fails explicitly and never silently switches to another machine.

  • Missing ID, mismatch, revocation, or missing capability: explicit failure, every time
  • Resource handles stay bound to their original computerId — no cross-machine reuse
  • Operation records name the machine that actually executed
audit

02

Actions you can audit and answer

Every action answers two questions: which machine it landed on, and who approved it. Audit records are written in the same transaction as the operation, not added afterwards.

  • The approved target is the machine that actually executes
  • Results and audit records name the target machine
credentials

03

Credentials and encryption

Admin passwords are stored as argon2id in PHC form; plaintext never touches storage. Sensitive fields get field-level encryption. Model keys are BYOK — they belong to your company's own accounts and never ship inside the client build.

  • The workspace stays locked until the first-launch password change completes
  • Passwords live only as argon2id in PHC form — plaintext never touches storage
  • Model keys are BYOK and never ship in the client
egress

04

Network egress, fail-closed

The agent reaches internal systems through a client egress you authorize. Dropped links, expiry, revocation, or a policy failure close the path — falling back to direct access is never allowed.

  • Egress selection is an explicit lifecycle
  • Switching egress never reuses the old channel
lifecycle

05

Device lifecycle

Existing computers and servers enroll with a single command. Unenrolling revokes access only — no shutdown, no reinstall, no touching the machine's own data.

  • Enrollment completes in one command
  • Unenrolling revokes access only
  • No shutdown, no reinstall, no touching the machine's data
data-ownership

06

Data you own

Self-hosted deployments default to SQLite, with data files on your own server. This site itself carries zero third-party tracking — data ownership starts with not peeking yourself.

  • The default and only required database is SQLite
  • Data files live on your own server
  • Zero third-party tracking on this site

All six mechanisms share one design decision: explicit over implicit. Failures are explicit, authorization is explicit, audit is explicit — there is no black box to trust.

None of the six mechanisms is a configuration choice — they are defaults written into the product code. That is what line-by-line verifiable means.

The data flow of one tool call

From your instruction to the record on disk, every step has a name: who issued it, which machine, which egress, who approved, where the record lands.

Five stages of one browser operation, from instruction to record — any unmet stage fails the operation in place.

The flow diagram also answers a common doubt: would the agent casually touch another machine? Step two settles it — routing understands computerId, never habit.

Any explicit failure stops the operation in place: no retry storms, no silent rerouting, no reassignment after timeout. Failure is the most honest outcome this data flow produces.

  1. Data flow · 01

    The instruction enters the control plane

    You issue a task from the workbench; the instruction and context are written to the session record on your server.

  2. Data flow · 02

    Routing resolves by target machine

    The middleware enforces target discipline: no named target, no dispatch; a named target is checked for liveness, ownership, and capability.

  3. Data flow · 03

    Egress binds to the session

    Traffic leaves via direct or your authorized client tunnel; a dead tunnel breaks the path — never back to direct.

  4. Data flow · 04

    The device authorizes a second time

    The target machine's daemon checks the method against declared capabilities and refuses anything beyond them.

  5. Data flow · 05

    Audit lands with the operation

    Result and audit record commit together, naming the tool, the action, the target machine, and a millisecond timestamp.

No step in these five stages depends on trusting that the system behaves: each is a check, and failures surface explicitly where they occur.

The deployment trust boundary

What lives on your server — and what never enters it.

The trust boundary sits on the server line: every item inside is verifiable by you.

The test for the trust boundary is plain: unplug the WAN — does your MagicFrog still run? Yes — everything except model calls, which use your keys, closes locally.

After this boundary map, the next move is one real deployment to verify it.

Inside · your server

  • SQLite database: accounts, tasks, sessions, and audit, all in your data directory
  • Field-encryption key: generated and kept by you; lost means unrecoverable
  • Voice endpoints: loopback by default, transcription and synthesis stay on your infrastructure
  • Model keys: BYOK, stored on your server, never shipped in the client build

Outside · never enters

  • No third-party tracking: this site runs zero analytics; the workbench ships no telemetry
  • No subscriptions or vendor catalogs: BYOK channels only
  • No multi-tenancy: one server serves your account alone
  • No implicit privilege: a member never becomes owner; no such path exists in the product

Everything inside the boundary can be backed up, migrated, and audited; nothing outside it is ever depended on. That is what self-hosting actually means.

Seven follow-up questions on the boundary

Five follow-ups on encryption, audit, and isolation. For anything deeper, read the matching doc section.

Can audit records feed our own logging system?

Yes. The audit sink is pluggable — the default is one structured log line on stderr, and deployments can wire tool audits into their own collectors.

What if the field-encryption key is lost?

The encrypted columns are unrecoverable — deliberate fail-closed. Back the key up with the data directory; rotation runs a re-encryption migration with no plaintext window on disk.

Is the initial admin password forced to change?

Yes. The first-launch account is flagged must_change_password; until the change completes, every business endpoint answers 403 and the client shows only the change screen.

How are browser sessions isolated?

Each session is a separate browser instance: own process, own profile directory, own debugging port. Handles do not resolve across sessions or machines.

Can the model provider see my business data?

A model sees what that session sends, through your keys to your chosen provider. MagicFrog runs no hosted layer and never proxies your model traffic.

Is OAuth sign-in enabled by default?

No — the route does not exist until you configure it, so there is zero exposure. To enable it, set the client id and secret in the admin console with strict redirect-URI validation and an email-domain allowlist; self-hosted accounts remain the primary channel.

How fast does an egress revocation take effect?

Within five seconds: SIGTERM first, SIGKILL after a two-second grace, a hard five-second bound — and every connection through that proxy is actively terminated, not left to time out.

One last note: security is deployed, not purchased. Every mechanism here depends on deploying by the doc — generate your keys, complete the password change, authorize your egress. Do those three and every line on this page holds.

Deeper questions all have a doc section: self-hosting covers encryption and keys, routing covers the two-layer authorization, egress covers the fail-closed state machine.

The security boundary isn't something we hand you — you draw it. MagicFrog just makes every line visible.