Mark what you doubt.
An offline review surface for AI-assisted papers — paired with a plugin (for Claude Code or OpenCode) that applies your review back to the source.
In medieval manuscripts, scribes drew a small mark — the obelus,
÷— in the margin of any passage they judged doubtful. When most of a paper is generated by a model, writing is cheap and review is expensive. Obelus is a tool for marking doubt.
A project by 4gentic.
- Open the web or desktop app. Drop a PDF, Markdown (Beta), or HTML (Beta) paper.
- Highlight passages, write margin notes, categorize each mark, thread comments, apply a per-paper rubric.
- Export a review bundle — a single JSON file with enough context to locate every passage in your source.
- In your paper's repo, run
/apply-revision <bundle>. The plugin detects your source format (.tex(Beta) /.md/.typ/.html), plans a minimal-diff fix, and — on your confirmation — applies it. Seedocs/plan-example.mdfor a worked plan — the shape, read end to end, without running the desktop.
The apps never see the network at runtime. No telemetry, no analytics, no counters — your draft never leaves the device.
- The advisor. Marks weak arguments and unclear paragraphs in a student's AI-drafted Markdown chapter. Hands back a bundle; the student runs
/apply-revisionand reviews the diff. - The peer reviewer, offline. Drops a conference PDF on a plane. Returns with a structured Major/Minor reviewer's letter generated by
/write-review. - The co-author team. Writer renders LaTeX (Beta) to HTML preview; reviewer marks the HTML; writer accepts diffs hunk by hunk in the desktop app.
- The triage stack. A reading list of arXiv PDFs lands in a desktop "desk" — quick passes per paper, one consolidated bundle, per-paper write-ups out the other side.
- Offline by construction. PDFs in OPFS, annotations in IndexedDB. No network at runtime. External assets in HTML/Markdown papers are stripped before the DOM loads them.
- Source-anchored marks. Selections carry their origin: PDF bbox, Markdown line/col, HTML XPath — not screenshots, not page numbers.
- Format-agnostic. PDF · Markdown (Beta) · HTML (Beta) on the review side;
.tex(Beta) ·.md·.typ·.htmlon the apply side. - Editorial surface. Three columns: paper · 220px margin gutter · review pane. Margin notes align vertically to their source line.
- Plugin is optional. The bundle is plain JSON; the exported Markdown is self-describing. Use any coding agent.
- Not a cloud service, not a PDF editor, not a collaboration tool — by design.
Web app — visit obelus.4gentic.ai. Installable as a PWA, fully functional offline after first load. PDF, Markdown, and HTML review; bundle export.
Desktop app — Tauri v2 build. Adds source editing in CodeMirror, a git-style diff review pane, project folders, managed Typst and Tectonic (Beta) engines, and Claude Code or OpenCode in-app. Downloads land under Releases once the v1 pipeline ships.
First launch notes. Desktop builds are unsigned in v1. macOS will refuse the first launch with "cannot be opened because it is from an unidentified developer" — right-click the app → Open once, and macOS remembers. Windows SmartScreen shows "Unrecognized app" — click More info → Run anyway. Linux AppImages run directly. Signed releases are planned post-v1.
Plugin — in your paper repo. Under Claude Code, install from the marketplace:
/plugin marketplace add 4gentic/obelus
/plugin install obelus@4genticUnder OpenCode, copy the plugin folder manually — see packages/claude-plugin/README.md for the exact paths. Skills: /apply-revision, /apply-fix, /write-review, /fix-compile.
apps/
web/ Vite + React + TypeScript. Landing + PWA.
desktop/ Tauri v2 app (Rust + React renderer).
packages/
bundle-schema/ The bundle contract (Zod + JSON Schema).
bundle-builder/ Pure builder: Repository + ids → Bundle.
anchor/ PDF/source/HTML anchoring primitives.
pdf-view/ PdfDocument + PdfPage + SelectionListener.
md-view/ Markdown adapter (line/col anchors).
html-view/ HTML adapter (shadow-DOM, XPath anchors).
source-render/ remark/rehype pipeline; OPFS asset rewriter.
review-shell/ Three-column layout + DocumentView contract.
repo/ Repository interface, Dexie (web), SQLite (desktop).
categories/ Default categories + per-project overrides.
claude-sidecar/ Desktop-only: Rust spawn + TS event contract.
claude-plugin/ The .claude/ shipped to users.
design-tokens/ tokens.css + TS constants.
brand/ Marks, favicons, OG image.
pnpm install
pnpm dev # web app on :5173
pnpm --filter desktop dev # desktop app (requires Rust toolchain)
pnpm verify # lint + typecheck + test + network-guard + buildMaintainer-facing. See docs/RELEASING.md for the tag-driven release flow, updater-keypair setup, and signing-secret checklist.
Report vulnerabilities privately to engineering@4gentic.ai or follow the process in SECURITY.md. Do not file a public issue for a security report.
Read CONTRIBUTING.md first. Open issues tagged good-first-mark are scoped for a first contribution. The aesthetic invariants and code conventions in CLAUDE.md are not negotiable; the persona charters in .claude/agents/ say which area owns what.
If Obelus is useful to you, star the repo.
MIT. Brand assets are MIT too — use the wordmark freely when linking back.