> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gravitygtm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Security & credentials: how Gravity handles your secrets

> The trust model behind Gravity Agents Lite: almost every secret stays in your own accounts, the few exceptions move through one encrypted hosted channel, and nothing is ever emailed or Slacked in plaintext.

Gravity Agents Lite is built around one rule: **a credential is never
handled over chat, email, or a plaintext document — only through a
deliberate, purpose-built path.** That's a narrower claim than "Gravity
never holds your credentials" — on the fully customer-managed tier this
page describes, a specific, small set of values (documented below and in
[Getting started](/agents-lite/getting-started)) legitimately do reach
Gravity once, during initial setup, through the single encrypted channel
described here — never informally. Every other secret involved in your
deployment stays entirely in your own accounts.

<Tip>
  This page describes the trust model in general. For the onboarding
  conversation and the account-setup steps that generate these secrets in
  the first place, see [Getting started](/agents-lite/getting-started).
</Tip>

## Categories of secret

### 1. Secrets you generate

Most things you create yourself — a personal access token, a third-party
tool's API key, a database credential — go **straight into your own
stores** and are never sent to Gravity at all:

* Values you generate as part of account setup are pasted directly into
  your own repository's encrypted Actions secrets, or your own hosting
  provider's environment variables.
* For these, Gravity never sees the plaintext value, never asks for it in
  a message, and never stores a copy anywhere.
* **The golden rule: never put a password, API key, or token into email or
  Slack** — even if asked. If a step ever seems to require this, treat it
  as unusual and confirm through this documentation or a direct
  conversation first.

A few specific values are the deliberate exception, because Gravity needs
them to stand your fleet up in the first place — most notably your
Anthropic API key and your key-value store's REST credentials (see
[Getting started](/agents-lite/getting-started)'s account-setup steps).
These get shared with Gravity exactly once, through the same hosted intake
page described next — never informally — and Gravity's use of them is
limited to that one-time provisioning step.

For any of these — the provisioning-time values above, or a third-party
tool's API key that a specific module needs but doesn't have its own
pre-built collection step — Gravity provides a dedicated, encrypted,
hosted intake page — never a chat message or an email thread — for
submitting it. That page:

* Encrypts every submitted value at rest immediately on write.
* Never redisplays a previously-submitted value — only confirms that
  *something* is set for that field, mirroring how GitHub Actions secrets
  and most hosting providers' environment variables already work.
* Is reached only through your own authenticated setup link, the same
  mechanism used elsewhere in onboarding — never a public or guessable
  URL.
* Is decrypted only by Gravity's own provisioning process, through an
  internal endpoint that customer-facing tools and chat sessions never
  touch.

### 2. Secrets Gravity provides

A small number of values — a Gravity-issued service credential, your
deployed agents' internal identifiers — are generated by Gravity as part
of standing up your fleet.

On this fully customer-managed tier, Gravity's only access to your
repository is a collaborator account with **Write** permission — enough to
push agent code, but GitHub requires **Admin** permission to manage a
repository's Actions secrets, which Gravity's collaborator account
deliberately never has. So for these values:

* Gravity gives you each value securely — through the same hosted intake
  channel described above, or live on a call — never over chat or email.
* **You set it yourself**, pasting it into your own repository's encrypted
  Actions secrets, exactly like a secret you generated yourself.
* You can see the secret's *name* under your repository's own secrets
  settings at any time, and you can delete or rotate it yourself, whenever
  you want — Gravity has no standing access to change it later.

(On the Gravity-hosted and hybrid tiers, where Gravity owns the repository
outright, its deploy process *does* write these values in directly, since
Gravity holds Admin on its own repository. See
[the three deployment tiers](/agents-lite/overview#the-three-deployment-tiers)
— this page describes the fully customer-managed tier specifically.)

### 3. Secrets that stay entirely with Gravity

A third category never reaches you at all, on any tier: the enrichment
APIs (HarvestAPI, You.com, Findymail) that some modules use for
LinkedIn/company-data lookups run entirely on Gravity's own accounts,
including on the fully customer-managed tier. You never generate, hold,
or see a key for these, and Gravity never asks you to — usage is simply
tracked per customer. This is a separate, permanent exception on top of
the per-component defaults described in
[the three deployment tiers](/agents-lite/overview#the-three-deployment-tiers)
— it applies no matter which of the four infra components you own.

## One-time logins happen live, never over a message

A few connections — email/calendar access, LinkedIn — require a real
OAuth consent screen with your own login. These are always completed
**live**, directly in your own browser, during setup or on a screenshare
call:

* The resulting access token goes straight from the OAuth provider into
  your own credential store — it never passes through Gravity, a message,
  or a document at any point.
* Each of these connections can be revoked **instantly**, at any time,
  from your own account settings (Google, Slack, LinkedIn, etc.) — no
  coordination with Gravity required.

## What this means in practice

* **Nothing sensitive is ever emailed, Slacked, or pasted into a shared
  document.** Every path above either stays entirely inside your own
  accounts or moves through an encrypted, purpose-built hosted page.
* **Config changes are separate from credentials.** The
  [self-serve config MCP server](/agents-lite/self-serve-config) reads and
  writes ordinary settings (channel IDs, schedule times, thresholds) — it
  never handles a credential, and its own onboarding tools explicitly defer
  every credential to the hosted intake page described above rather than
  asking for one directly.
* **You can always verify.** Repository and hosting secret lists show
  names, never values. Your change history (via `get_change_history`)
  shows every configuration edit made through the config server, accepted
  or rejected. Nothing about your deployment's credential state is opaque
  to you.

## Next steps

* [Getting started](/agents-lite/getting-started) — the onboarding
  conversation and account-setup steps where each of these secrets first
  gets created
* [Onboarding reference](/agents-lite/onboarding-reference) — the precise
  field-by-field detail behind that conversation
* [Self-serve configuration](/agents-lite/self-serve-config) — the
  ongoing, credential-free way to manage your settings
* [Available integrations & modules](/agents-lite/integrations-and-modules) —
  what each integration requires, and who manages it
* [Agent reference](/agents-lite/agent-reference) — what each module does,
  reads, and writes, module by module
