Working in Citet

AI assistant

Citet has an in-editor assistant that can read your project, answer questions about it, and propose concrete edits. It is provider-agnostic: you connect your own OpenAI, Anthropic or OpenRouter key, an OpenAI-compatible server such as Ollama, or your ChatGPT subscription. Your browser talks to the provider directly (for the ChatGPT subscription, through Citet's app on your computer), so Citet's servers never see your prompts, your project text, your key or your ChatGPT sign-in.

Connecting a provider

Nothing AI-related is on by default — the assistant is inert until you connect a provider. Open Project settings → AI providers and add one of:

→OpenAI
A standard OpenAI API key.
→Anthropic
An Anthropic API key for Claude models.
→OpenRouter
One key for many vendors' models through OpenRouter.
→OpenAI-compatible server
Any server that speaks the OpenAI API — Ollama on your own computer, a university gateway, or another vendor. Needs its address and, if it asks for one, an API key. The server must allow requests from the Citet site (for Ollama, set OLLAMA_ORIGINS).
→ChatGPT subscription (through Citet on this computer)
Uses your ChatGPT Plus, Pro or business plan instead of an API key. ChatGPT does not accept requests from web pages, so your browser hands them to citet-sync on the same computer, which sends them to ChatGPT with your sign-in. citet-sync comes with the Citet extensions for VS Code and Neovim, or runs on its own (citet-sync login with your Citet address, then citet-sync daemon); it must be running while you use the assistant. Setting it up takes three steps in the AI provider settings: Citet finds citet-sync, you allow this browser once in VS Code, Neovim or with citet-sync allow-browser after comparing a short code, and you sign in to ChatGPT in a new tab. There is no fallback through Citet's servers.

You can connect several providers and mark one as the default. Each connection has its own model. Connected providers can be disconnected at any time.

What the assistant can do

The assistant works from a snapshot of your project — the open documents, the file tree, and any resolved citations — plus the prompt you give it. It offers a set of guided intents as well as free-form prompts:

→Review writing
A prose pass for clarity, flow, and tightening.
→Citation coherence
Checks that citations are used consistently and match the bibliography.
→Structure review
Looks at sectioning, ordering, and document flow.
→TODO review
Surfaces unfinished notes and placeholders in the source.
→LaTeX health
Flags include/label/ref issues, bibliography setup, duplicate labels, likely compile risks, and unused editable files.
→Style pass
A consistency pass over wording and conventions.
→Custom
Ask anything about the project in your own words.

Responses stream in as they are generated, so long reviews surface findings incrementally.

Edits are always proposed, never automatic

The assistant never writes to your files directly. When it suggests changes, they arrive as a proposed changeset that you preview and approve before anything is applied. Decline a proposal and your files are untouched.

Applying a proposal first saves a version called Before AI request in the project history, then merges the change with any newer edits; if someone changed the same passage in the meantime, nothing is applied. You can undo the change right away, and every applied change is listed in the project's disclosure log with who applied it and when, exportable as JSON or CSV.

Alongside file edits, the assistant can place annotations in the editor rail — line-level notes anchored to specific passages — so you can read its findings in context without leaving the source.

Permissions

What the assistant is allowed to do is scoped by capability. Reading the project is the baseline; proposing file edits, publishing editor annotations, and drawing decorations are each granted separately. Guided review intents that are meant to answer in chat will not queue file changes at all.

▶Where credentials and runs live

API keys are stored end-to-end encrypted with your account, so only your own unlocked devices can read them; the server stores bytes it cannot open. Plugins can request a model run through the host but never see your keys.

The ChatGPT sign-in stays with citet-sync in your computer's keyring; the browser never receives it. citet-sync listens only on 127.0.0.1, answers only the Citet sites it has sessions for, needs the secret this browser received when you allowed it, and forwards only to ChatGPT's subscription endpoint.

Your run history (prompts, answers and saved proposals) is encrypted the same way and only you can read it. The disclosure log is encrypted with the project, so every member can read it and nobody else.

Self-hosting note

The assistant calls whatever provider you connect, so model usage is billed to that account; the instance needs no AI configuration, also for the ChatGPT subscription. For a fully local setup, point an OpenAI-compatible connection at a local inference server.