runtimeanalyz.ing

← Runtime Analysis

What leaves your machine

The recording never leaves your machine. After an answer, ra sends one usage event naming the tool and how it went, never your code, unless you said no at sign-in. On Team, an upload you run yourself sends a graph in which your class and method names are replaced by tokens. The encryption that would keep that graph unreadable to us is designed and not built.

Summary by plan

PlanSent to usKept by us
FreeUsage events: which tool ran and how it wentYour email and name, and those events
ProThe sameThe same, and your subscription
TeamThe same, and a graph of tokens on uploadThe same, and that graph
EnterpriseNothing. The server runs in your networkArranged with you, by contract

What a recording holds

The recorder writes files to tmp/runtime_analysis in your project. They hold class names, method names, file paths and line numbers, the integer ids Ruby gives objects during a run, and the classes of exceptions. They hold no values, which means no strings, numbers, attributes, SQL or inspect output. What is written to disk lists every field by tier.

Class and method names describe your domain model, so the files stay on your disk.

Free and Pro

Recording makes no network call, and the gem never talks to us. The tools read the files on your machine and print the answer there. Your licence is a signed key the tools verify themselves, in CI or anywhere else, with no call to us.

These do cross the network. None contains a recording.

  • A usage event after an answer, described below, unless you said no.
  • ra login asks our server for a code and waits for you to enter it in the browser. The terminal never sees a password.
  • ra upgrade opens checkout, and ra activate downloads the Pro build, once for each machine.
  • A coding agent you connect sees the answers it asks for. Those contain class and method names, and they go to whichever model provider that agent uses. Runtime Analysis makes no call to a language model itself.

Usage events

ra login ends with one question: “Send usage events to runtimeanalyz.ing (which tools you run and how they went, never your code)?” The answer is kept beside your licence, and RA_TELEMETRY=0 in the environment turns them off anywhere, whatever was answered. Each event is sent after the answer is printed, with a one-second timeout and never a message on failure; one that could not be sent waits for the next run.

FieldExampleNever
eventtool, record, lsp, mcp, login, activate, upgrade_shown, upgrade_clicked
toolwhat_callsits argument: the method, file or class
editionfree
version0.3.1
platformdarwin-arm64hostname, username, project name or path
outcomeok, error, no_recording, lockedthe error text
ms412
rows30the rows
trees, runs1200, 3, for a record eventany name in the recording

The rule: a count, a number, or a name of ours. Our server keeps only those fields and has no column for anything else. ra doctor shows the last event sent, and your account page lists the tools you ran in the last thirty days, by name alone, so this claim can be checked by anyone.

Team: what an upload contains

The hosted graph is built and runs as described here, and it is not open to customers yet.

Nothing is uploaded until you run the upload for a project. Before the upload is sent, every class and method name is replaced by a token, such as C1 for a class and m1 for a method. The table that turns tokens back into names stays on your machines. An answer from the server comes back in tokens, and your machine puts the names back.

One upload contains:

FieldExampleWhat it is
ProjectshopThe name you give the application
Git shaabc123The commit the run was recorded at
Environment, labeltest, suiteWhere the run happened and what you called it
Tier4How much the recorder captured
MethodsC1#m1A token for each class and each method
CallsC1#m1 → C2#m4, 3Which token called which, and how many times

It contains no file paths, line numbers or values.

The server keeps that graph, your team’s members by email and name, and your subscription. Card details go to Stripe. Our server does not receive them.

This website

The site sets no cookie and loads no analytics script. For each page view its server keeps the page, the referring site, the browser’s user agent and a salted hash of the visitor’s address. It keeps no address.

If you ask for a trial, it keeps your email and which plan you asked about. If you send a message through the contact form, it keeps your name, email and message, and forwards them by email to the person who answers.

What tokens do not hide

Tokens are pseudonyms. Someone who held your team’s graph could not read a class name from it. They could see how many classes and methods you have, which ones call which and how often, your project names, your commit shas, and when you upload. Someone who held the graph and your source code could match the shapes back to names.

Designed and not built

The design we are working towards encrypts the graph with a key your team holds, so that our server stores data it cannot read and questions are answered on your machines. None of that is built. Until it is, the server stores what the upload section lists.

These are also not available yet: a SOC 2 report, a data processing agreement, and SAML single sign-on for the account pages.

Enterprise: the server in your own network

Enterprise is for running the same server inside your own network or cloud account, so the graph is not sent to us. It is arranged with you and has no self-serve install. Tell us what your review needs and a person will answer.