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-syncon 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 loginwith your Citet address, thencitet-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 withcitet-sync allow-browserafter 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.