Skip to content

Your data: where it is kept and where it goes

kennis keeps everything it holds on your own machine, in folders you can open, and it has no account, no server of its own and no telemetry. Its author receives nothing from your use of it. Material leaves the machine in exactly the ways listed on this page, and most of them happen only after you ask for them.

This page is a notice about how the software behaves. It is not legal advice, and it does not decide what you are permitted to store or send.

Where kennis keeps things

what Linux default what it holds
the corpus ~/.local/share/kennis the full text of every document and note, its search index, and the git history of both
configuration ~/.config/kennis/config.toml your settings, including the Unpaywall email address if you set one
credentials ~/.config/kennis/credentials.toml API keys, readable only by your account where the platform has file modes
state ~/.local/state/kennis the window's recent searches: each query, its scope, its count and when it ran, never the results
the log ~/.local/state/kennis/log what each command did, for diagnosis
models ~/.cache/kennis/models the downloaded embedding model
a context bundle .context/ inside a project the project's notes and their search index

On macOS and Windows these are the platform's equivalent folders; kennis config path prints the real ones. KENNIS_CONFIG_DIR, KENNIS_STATE_DIR, KENNIS_LOG_DIR and the corpus.root setting move them.

The corpus is a git repository with no remote. kennis commits to it and never pushes it anywhere. Recent searches can be cleared from the window's search page.

When material leaves the machine

Things you ask for, which fetch from a named host

when host what that host receives
adding an arXiv paper arxiv.org, ar5iv.labs.arxiv.org, and export.arxiv.org for its robots.txt alone the arXiv identifier, and your IP address
adding a paper by DOI, with an email set api.unpaywall.org the DOI and your email address
adding a paper by DOI with its text in hand, or pack update for a DOI entry with no citekey doi.org, which redirects to the registry that issued the DOI - api.crossref.org or data.crosscite.org the DOI, and your IP address
adding a documentation site or a file by address the site you name the pages requested, with a User-Agent naming kennis
corpus sync with a pack installed the sources the pack names the same as adding each one by hand
the first index with the default backend huggingface.co the model's name, as for any model download
the first PDF conversion huggingface.co or modelscope.cn, as MinerU's MINERU_MODEL_SOURCE chooses the names of MinerU's models

Each of these sends an identifier or an address, not your documents.

Settings that send your text to a third party

These are never defaults. Each needs a setting and a key, so neither alone turns one on.

setting host what is sent
conversion.backend = datalab www.datalab.to every document you convert, in full
embedding.backend = openai api.openai.com, or the base_url you set the text of every chunk you index and every query you search
embedding.backend = ollama localhost by default, or the base_url you set the same, to whatever machine that address is

With the defaults - MinerU for conversion and fastembed for embedding - both run on your machine.

The window links a paper to its pages on arxiv.org, doi.org and ui.adsabs.harvard.edu, and the backup's caution to this documentation on kwazzi-jack.github.io. Nothing is requested until you click one, and the page opens without a referrer, so the site is not told that kennis sent you. A pack file's first line names its schema on raw.githubusercontent.com; kennis does not fetch it, but an editor with a YAML language server may.

kennis never fetches an image inside a document on your behalf, because that request would tell the image's host which document is being read. A remote image is shown as its host's name instead.

Agents

kennis serve answers an AI agent's searches and reads with the text of your documents. Whatever the agent's model runs on receives that text: if the agent uses a hosted model, the provider receives every passage the agent reads. That is a property of the agent you connect, not of kennis, and it applies to any document kennis holds. The agent's remember tool writes notes into the corpus or the bundle.

Things you share yourself

  • A context bundle is committed with its project. .context/ holds the notes and their search index, including the indexed text, so pushing the project shares them with everyone who can read the repository.
  • A backup holds the full text of everything, encrypted with a password you type each time. If the folder you choose is synchronised by a cloud client, the encrypted file goes to that provider. See Back up the corpus.
  • A pack names its sources rather than carrying them, so sharing a pack shares where to fetch each document, not the documents.

What you are responsible for

kennis copies documents you add into the corpus and converts them, and it does not check whether you may. Whether you may keep a copy of a paper, a site or a dataset, and whether material covered by an institution's data policy - research participants' personal data, for example - may be stored on this machine, in a backup folder, or sent to a backend above, is for you and the material's terms to settle.

kennis is free software under the GNU General Public License, version 3 or later, and like all software under that licence it comes with no warranty, to the extent permitted by law. The licence's full text is in the repository's LICENSE file.