Resources

Security

Screen recordings run through the systems you care most about. Here is exactly how Knovvy handles that content, in plain terms, including the parts we have not built yet.

Read the privacy policy

The short version

πŸ”
Private by defaultNothing is public until you publish it. Revoking a link kills it immediately, and re-publishing mints a brand new one.
πŸ•ΆοΈ
Secrets blurred at capturePassword, one-time-code and card fields are redacted from DOM signals before the screenshot is stored. No AI, no guessing.
πŸŽ™οΈ
Transcription we ownAudio is transcribed on our own infrastructure with whisper.cpp. It is never handed to a per-minute transcription vendor.
πŸ’³
Card data never reaches usBilling runs through Stripe Checkout and the Stripe portal, so card numbers never touch a Knovvy server.

The detail, by topic

Open the ones you care about. Everything here describes how Knovvy behaves today, not how we intend it to behave.

What the extension can see, and when

Capture runs in the browser, so the extension needs access to whatever internal tool you are documenting. Here is what it does with that access.

  • Every listener is gated on an active capture session. Before you press record, clicks and typing are ignored: no step, no screenshot, nothing sent.
  • Finishing or discarding a capture puts it back to sleep.
  • During a session, three things go to the API: the instruction text derived from what you clicked, a screenshot of the tab, and the step’s page title, hostname, and URL.

Why each permission exists

  • activeTab and tabs: know which tab you are capturing, and take the screenshot.
  • storage: hold the in-progress session so a capture survives a navigation or a worker restart.
  • tabCapture and offscreen: record the video half of a dual-capture.
  • All-URL host access: capture has to work on your internal tools, which we cannot enumerate in advance.
How sensitive fields are redacted

When you type into a field, Knovvy decides whether it is sensitive from DOM signals only. No model call, no pixel heuristic, identical behavior every time. A field is treated as secret if any of these hold:

  • type="password" on the input.
  • An autocomplete of one-time-code, cc-number, or cc-csc.
  • A keyword match on the field name, id, aria-label, or placeholder: password, OTP, one-time, secret, CVV, CVC, card number, SSN, social, routing, account number, PIN, token, API key, security code.

What happens on a match

  • The typed value becomes bullets in the written step, so the SOP reads "Enter β€’β€’β€’β€’β€’β€’ in Password".
  • A blur region is attached over that field, covering the pixels in the stored screenshot.

This detects form fields, not text. A secret already rendered as page text, say an API key shown after you generate it, is not something the DOM marks sensitive, so it is not caught automatically. Blur it yourself in the editor.

Access, sharing, and revocation

Every guide, recording, and folder belongs to a workspace. Members hold one of four roles, checked on the server for every request rather than hidden in the interface:

  • viewer: read what has been shared with them.
  • editor: create and edit content.
  • admin: plus members, invites, and billing.
  • owner: everything, and never assignable through the API.

Grants only ever widen access

On top of the role you can grant view, edit, or manage on one guide, recording, or folder, optionally with an expiry date. Grants are additive by design: they can open something up, but can never lock an owner out of their own workspace content.

Revoking a public link

  • Publishing mints a random token and serves the guide at /g/<token>.
  • Making it private clears the token. The URL 404s on the next request, with no grace period and no cached public copy.
  • Publishing again mints a brand new token, so the revoked link stays dead permanently.
  • Teammates granted the guide directly keep access through a revoke, since that is a separate grant.
Accounts and sessions
  • Passwords are hashed with scrypt using a random per-user salt and compared in constant time. The password itself is never stored and cannot be recovered from what we hold.
  • Sessions are opaque random tokens recorded server-side, not self-contained JWTs. That is the slower design and the one we want: a session can be revoked and stop working immediately, which a signed token cannot do.
  • Sessions expire after 30 days.
  • Email sign-in links are single use and expire after 15 minutes. Using one consumes it.
  • Google and Slack sign-in are supported, in which case the password path is never used for that account.
Storage and processing

Where files live

  • Screenshots and video sit behind a storage facade with no public bucket browsing. In production that is Cloudflare R2.
  • Object keys are random UUIDs, validated so a key can never escape into a path traversal.
  • Media is served through the API by that random key, which is what lets images load for someone opening a guide you published without an account. Keys are not listed, enumerable, or derivable from the guide URL.

That last point is a real design tradeoff, not a footnote. If capability-URL media does not fit your threat model, tell us before you roll out rather than discovering it later.

Transcription runs on our machines

Captions and video-to-guide transcription use whisper.cpp on infrastructure we operate. Your audio is not shipped to a third-party speech vendor, and there is no per-minute meter creating pressure to cut that corner later.

Where AI is, and is not, involved

  • Capture never calls a model. Steps, screenshots, click highlights, and blurring are all deterministic, derived from real browser events.
  • Generative features are separate and opt-in: titles, summaries, chapters, and writing a document from a recording. Those do send the relevant text to a third-party model provider.
  • You can run Knovvy end to end and never touch a model.
Payments
  • Billing runs on Stripe Checkout and the Stripe Customer Portal. Card details are entered on Stripe and never pass through a Knovvy server.
  • We store a Stripe customer id and a subscription id, which is what tells us your plan and seat count.
  • Incoming webhooks are verified with an HMAC-SHA256 signature over the raw body, compared in constant time, and rejected outside a five minute window so a captured request cannot be replayed.
What we have not built yet

A security page that only lists strengths is useless for real diligence. As of today, these do not exist:

  • A SOC 2 report. We have not started an audit.
  • SAML single sign-on and SCIM provisioning.
  • A workspace-level audit log of who viewed or changed what.
  • Customer-managed encryption keys, and pinning data to a specific region.

Where each of these sits is on the roadmap, and this page is updated when they ship, not before. If one is a hard requirement, talk to us about Enterprise and say which, because that ordering is driven by who actually asks.

Reporting something

Email support@knovvy.app with enough detail to reproduce it. We will confirm receipt, and we will not take action against anyone reporting a genuine issue in good faith.

Common questions

Is my content private by default?

Yes. Every guide and recording is private to your workspace when it is created. Nothing is reachable from outside until you explicitly publish it or grant someone access, and both of those are reversible.

Can Knovvy see my passwords when I record?

Password fields, one-time-code fields, and card fields are detected from DOM signals and redacted at capture time: the typed value becomes bullets in the written step, and the field is blurred in the stored screenshot. This runs before anything is uploaded, and it is deterministic, with no AI involved.

Does the extension record when I am not capturing?

No. The content script loads on pages you visit, but every listener is gated on an active capture session. Until you start a capture, no step is created, no screenshot is taken, and nothing is sent to our servers.

Where is my audio transcribed?

On infrastructure Knovvy operates, using whisper.cpp. Audio is not sent to a third-party transcription service, which is also why transcription is included in your plan rather than metered per minute.

What happens when I revoke a public link?

The token is cleared and the URL returns a 404 on the very next request, with no grace period. If you publish the guide again later it gets a completely new token, so the revoked link stays dead permanently.

Is Knovvy SOC 2 certified?

Not today, and we would rather say so than imply otherwise. We have not begun a SOC 2 audit. SAML SSO, SCIM, and a workspace audit log are also not built yet. This page is updated when they ship.

Do you store credit card details?

No. Billing goes through Stripe Checkout and the Stripe Customer Portal, so card numbers are entered on Stripe and never reach a Knovvy server. We hold only a Stripe customer and subscription id.

Ready to capture the know-how?