AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
WYSIWYG LaTeX editor
Translation pending
Developer toolsTypeScript · JavaScriptGitHub @GabrielGreenbergOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Visual LaTeX editor for academic writing. Designed for AI compatibility.
Virgil is a browser-based editor for .tex papers. It runs entirely
client-side, keeps your files on your own disk, and is built to be worked
on alongside Claude (or any coding agent) without giving up plain-text
LaTeX.
Virgil is not a WYSIWYG LaTeX editor. It does not compile LaTeX, does
not produce a PDF, and does not try to render your paper the way the
typesetter will. There is no preview pane.Read the full README ↗Visual LaTeX editor for academic writing. Designed for AI compatibility.
Virgil is a browser-based editor for .tex papers. It runs entirely
client-side, keeps your files on your own disk, and is built to be worked
on alongside Claude (or any coding agent) without giving up plain-text
LaTeX.
Virgil is not a WYSIWYG LaTeX editor. It does not compile LaTeX, does not produce a PDF, and does not try to render your paper the way the typesetter will. There is no preview pane.
What it does do is render LaTeX source meaningfully while you
write — italics look italic, footnotes sit in the margin, math displays
in its own color, section headings use a real heading hierarchy, \ref
resolves to the number you're pointing at. The LaTeX source underneath
is preserved exactly; clicking an inline element opens an editor on the
raw command.
Think of it as the difference between reading your paper in a terminal and reading it in a typeset proof. Virgil is neither — it's a workspace that respects LaTeX as the source of truth while giving you a comfortable surface to write on.
Virgil doesn't ship an API key or call any model itself. Instead, it's
built for a cowork pattern: your AI assistant (Claude Code, Claude
Cowork, or any agent with filesystem access) reads the same .tex and
.bib files Virgil reads, then writes structured JSON sidecars into the
paper's virgil/ folder. Virgil picks them up and surfaces them in the
editor.
Concretely, an agent can:
suggestions.json → they appear in the
Suggestion panel with accept/reject/skip controls (y/n/s)
and a progress bar.revisions.json → they thread into revision
dialogues, either paper-wide or anchored to a selection.ai-requests.json → the footnote,
note, quotation, citation, and todo panels each have "ask" affordances
that queue requests for an agent to resolve.bib-review-requests.json → per-entry field and notes
reviews flow back into bibliography cards.Every AI exchange is a file on disk that you can read, diff, and version-control. No account, no key, no cloud round-trip.
\textbf, \emph, \textit, \underline,
$…$ math (purple monospace), \footnote (superscript), % comments
(subdued blue), bullet and numbered lists.\label{} / \ref{} resolution —
\ref displays the current number of its target.\commandname + Enter to insert or
convert the surrounding block.The sidebar is a configurable set of panels. Each side of the editor can show a different subset, and the Omni View can display several at once, either as a list or inline with the text they're anchored to.
.bib entries, drag into text, pick the
citation command (natbib and biblatex families both supported)..bib via citation-js.cite, citet, citep, citealt, citeauthor,
citeyear, citeyearpar, nocite, and multi-cite forms.textcite, parencite, autocite, footcite,
smartcite, fullcite, citetitle, citedate, citeurl, plus the
s-suffix multi-cite variants.bib-review-requests.json.Virgil uses the browser's File System Access API to read and write files directly on your disk. There is no backend, no database, and nothing uploaded. Each paper lives in its own folder:
my-paper/
├── main.tex ← your LaTeX source
├── references.bib ← optional, sibling .bib
└── virgil/ ← Virgil's per-paper metadata
├── virgil.json ← paragraph UUID sidecar
├── editor-state.json ← cursor, selection
├── revisions.json ← AI dialogue (general + text-anchored)
├── suggestions.json ← AI line edits
├── ai-requests.json ← panel-scoped AI requests
├── citations.json ← citation refs and bib package config
├── bib-settings.json ← bib package + entry generation requests
├── bib-review-requests.json
├── notes.json ← marginal notes
├── footnotes.json ← footnote state
├── quotations.json ← quotation groups
├── todos.json ← per-paper todos
├── archive.json ← archived snippets
└── annotations.json ← bib entry annotations
Every sidecar is plain JSON — readable, diff-able, and safe to commit.
Virgil requires a Chromium-based browser: Chrome, Edge, Brave, Arc, Opera, Vivaldi. Firefox and Safari do not implement the File System Access API and won't work. This is a browser limitation — any fallback would either upload your files (defeating the point) or hide them in browser-private storage (where LaTeX tooling can't touch them).
FSA permission grants are reset on every reload by spec. You'll see one click-to-grant per paper per session.
npm install
npm run dev
Open http://localhost:3000. On first load the workspace is empty — click Open to point at an existing paper folder, or + to name and create a new one.
npm run build
Produces a fully static site in out/. No Node runtime, no API routes,
nothing to serve dynamically. Drop out/ on any static host.
If you're embedding Virgil at a path like
https://example.com/tools/virgil/ rather than at the origin root, set
NEXT_PUBLIC_BASE_PATH at build time:
NEXT_PUBLIC_BASE_PATH=/tools/virgil npm run build
That single env var threads through next.config.ts, the manifest's
start_url/scope/icon paths, and the service-worker registration.
⚠️ Pick the final URL once. Browser storage (IndexedDB, FSA permission
grants) is scoped to origin + path, so changing basePath after launch
invalidates everyone's stored folder handles.
output: "export")idb-keyval) for the doc index, tab state, and folder handlessrc/lib/storage-fsa.ts is the only place
that touches diskcitation-js in the browserVirgil is licensed under the PolyForm Noncommercial License 1.0.0. See LICENSE for the full text.
In short: you can freely use, modify, and distribute Virgil for any noncommercial purpose — personal writing, academic research, teaching, hobby projects, use inside a charitable or educational organization. Commercial use requires a separate license — email [email protected] to arrange one.
This is a source-available license, not an OSI-approved open-source license.