Lambda Brief

Security

Last updated 26 October 2026

The short version

  • Our GitHub app is read-only. It cannot change anything in your repositories.
  • The only file contents we fetch are package manifests — the files that list your dependencies, like package.json, pyproject.toml or Gemfile. We parse them, keep the package and tool names, and throw the files away. The same goes for a manifest you upload instead of connecting a repository.
  • Your GitHub and Slack access tokens are encrypted at rest.

Why the GitHub app asks to read your code

When you install our app, GitHub shows a permission that sounds broader than what we do: read access to your repository contents. That deserves an explanation.

To build your digest we need one thing from a repository: the names of the packages and tools it depends on, which live in its manifests. GitHub's permissions don't come in that shape. Repository contents is a single permission covering every file, and the only narrower option GitHub offers is access to one file at a fixed path. That can't work here, because manifests sit at paths like packages/*/package.json or services/api/pyproject.toml that differ from project to project and can't be known in advance.

So we have to ask for read access to everything in order to fetch manifests. The permission is wide; what we do with it is narrow, and the rest of this page describes it exactly.

What we actually read

From each repository you connect, we first fetch its file listing — the paths of every file on the default branch, though not their contents — to find the manifests. Then we fetch the contents of these files, and no others:

  • JavaScript: package.json at the root and in each workspace package, and pnpm-workspace.yaml.
  • Python: pyproject.toml, Pipfile and requirements files such as requirements.txt.
  • Ruby: Gemfile, Gemfile.lock and .gemspec files.

We skip vendored and build directories, like node_modules. The listing also tells us which tools you use from the names of files like uv.lock, without opening them. We parse the manifests, keep the package and tool names, and discard the files. No other file's contents are ever fetched, and no file's contents are ever stored.

Read-only means read-only

The GitHub app holds no write permission of any kind. It cannot push commits, open pull requests, edit files, or change repository settings — GitHub enforces that, not just our code.

What our Slack app can do

Connecting Slack lets the app list your channels — including private ones you invite it to — so you can pick where digests go, join a public channel it needs to post in, and post digests to the channels you choose. It cannot read your messages: it does not hold the permission needed to.

How we store your tokens

Connecting GitHub and Slack gives us an access token for each, and those tokens are the most sensitive thing we hold. We store them encrypted at rest with AES-256-GCM, and the encryption key lives outside the database — so a copy of the database alone does not expose your tokens.

You can revoke either token at any time — from GitHub's application settings, and from your Slack workspace's app settings — and doing so immediately cuts off our access.

Infrastructure

The app and the database run on Render in an EU region, traffic is encrypted in transit, and access to production is limited to the people who need it. What data we hold and for how long is covered by our privacy policy.

Reporting a vulnerability

If you find a security problem in Lambda Brief, write to [email protected] and we'll respond quickly. We'd much rather hear about it from you than discover it later.