TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
Checks reference lists from language models for invented, misattributed and retracted sources and fetches the real papers from open access. macOS.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Language models cite dozens of sources in seconds, but some are invented, some were retracted, and nearly all still have to be found. Benthic sits in between: paste a reading list (an LLM answer, BibTeX, RIS, Markdown or plain DOIs), let Benthic check every source, and download the real ones from open-access sources. It runs as a native macOS app, as a local web interface and as a tool for Claude and other AI clients (MCP).
For every DOI, Benthic first checks your own library, then eight open-access sources. If no open-access copy exists, it offers your university library's proxy link instead.
The interface is in English or German: the first launch asks, and Settings switches it at any time. Everything runs locally on your Mac; Benthic only talks to the scholarly services listed below.
.tex file with its .bib files (or the whole project
as a .zip or folder): \cite keys missing from the .bib, .bib entries
never cited, and every cited entry verified.benthic://check?text=… link.{doi} in the
address) and a polite request to the authors for a copy, with the publisher's
page and their ORCID profiles.⌘K), dark mode, notifications, export
to CSV and XLSX, history of the last 50 runs, updates in one click.| Whole thesis: cross-check and citation style | The passage behind a citation |
|---|---|
| Retraction watch | Download results (dark mode) |
|---|---|
| Verdict | In German | Meaning |
|---|---|---|
| Verified | Bestätigt | The source exists and matches the citation |
| DOI corrected | DOI korrigiert | The source exists; the given DOI was wrong or missing |
| Deviates | Weicht ab | The source exists, but year, title or authors differ |
| Uncertain | Unsicher | A similar match; please check yourself |
| Mismatch | Passt nicht | The DOI belongs to a different work |
| Not found | Nicht auffindbar | No matching work found, probably invented |
| Retracted | Zurückgezogen | The paper was retracted |
Download the latest Benthic for macOS from the download page: one disk image for Apple Silicon and Intel, macOS 13 or later. Open it and drag Benthic into Applications. Versions for Windows and Linux are planned.
Benthic is free and not notarised by Apple, because notarisation needs a paid
Apple Developer account. macOS therefore blocks the first launch: open
System Settings → Privacy & Security, scroll down to the message about
Benthic, click Open Anyway and confirm. You do this once: updates from
inside the app need no new approval. The download page lists the SHA-256
checksum of every release (shasum -a 256 ~/Downloads/Benthic-*.dmg), and you
can always build Benthic from source.
Benthic tells you when a new version is out and installs it in one click: it downloads the disk image from benthic.isoglu.com, checks its SHA-256 against the release manifest and the app's signature, replaces itself and restarts. If it cannot replace itself where it is (for example outside Applications without write access), it opens the update in the Finder instead. What changed is in CHANGELOG.md.
On first launch a short assistant asks for your language, an e-mail address
(sent to Unpaywall, Crossref and OpenAlex as their etiquette asks), your
university and its proxy (EZproxy or OpenAthens), a download folder (default
~/Documents/Benthic) and an existing library to import.
A library or writing center can hand out its rules as one file: Settings → Your
institution's house rules loads a .json file with the institution's name, proxy
link, contact address, OpenAlex key, required citation style and ranking lists,
and nothing else. The format is described in benthic/house.py.
Benthic's tools run on your Mac, so the app has to be installed. Then either let the app connect your assistant, or install Benthic from the assistant.
Open Settings → AI connection and pick your assistant:
| Assistant | What Benthic does |
|---|---|
| Claude Desktop | One click: Benthic writes Benthic.mcpb and Claude Desktop shows its install dialog |
| ChatGPT with Codex, Antigravity, Gemini CLI | One click: Benthic adds its entry to that program's configuration (~/.codex/config.toml, ~/.gemini/config/mcp_config.json, ~/.gemini/settings.json) and keeps a backup next to the file |
| Cursor, VS Code, LM Studio | One click opens that program's own install dialog |
| Claude Code, Codex CLI | A terminal command (claude mcp add, codex mcp add) |
| Grok Build | The command to register as a stdio server |
| ChatGPT, Gemini or Grok in the browser | A prompt for a clean source list to paste into Benthic; browser chats cannot start tools on your Mac |
These entries point to one launcher, benthic-mcp.sh in Benthic's data folder, which
sets the environment of this installation and finds the app again if it was moved.
This repository is also a plugin marketplace. One command installs Benthic's tools, plus a short skill that tells the assistant when to check references:
# Claude Code
claude plugin marketplace add isoglu/benthic && claude plugin install benthic@benthic
# Codex (CLI and the ChatGPT app)
codex plugin marketplace add isoglu/benthic && codex plugin add benthic@benthic
# Gemini CLI
gemini extensions install https://github.com/isoglu/benthic
In VS Code, run Chat: Install Plugin From Source with
https://github.com/isoglu/benthic. Any other assistant can start the fixed
command every installation carries:
claude mcp add benthic --scope user -- /Applications/Benthic.app/Contents/Resources/bin/benthic-mcp
codex mcp add benthic -- /Applications/Benthic.app/Contents/Resources/bin/benthic-mcp
The plugins find the app in /Applications, ~/Applications or through
Spotlight; their files come from scripts/make_plugins.py.
| Tool | What the assistant does with it |
|---|---|
verify_references | Check a reading list (invented, wrong DOI, retracted) |
fetch_papers | Download real sources as open access into the library |
check_open_access | Check without downloading whether an open-access copy exists |
get_fulltext | Read a downloaded paper, page by page |
search_library | Search the library, also per project |
create_project, list_projects, project_status | Manage projects |
export_bibliography | Bibliography as BibTeX, RIS or APA, Harvard, IEEE, DIN and more |
assess_references | Health of a reference list: authenticity, age, venues, journal metrics |
find_sources | Real papers for a claim, with the closest passage |
check_overlap | Wording taken from the sources without quotation marks |
suggest_alternatives, corrected_bibliography | Real papers for an invented entry, the corrected list |
get_job | Collect the results of a job that is still running |
If the app is not running, the MCP server starts the backend itself and stops it again with the assistant.
Benthic has no account, no telemetry and no server of its own. Settings, library,
history and downloads stay in ~/Library/Application Support/Benthic and your
download folder. To check and fetch sources it calls these public services:
doi.org, Crossref, OpenAlex, arXiv, Unpaywall, Europe PMC, Semantic Scholar,
CORE and, with your key, Elsevier, plus the repositories and publishers where
these services say a PDF is hosted. For journal levels it asks the Finnish
Publication Forum (jufo-rest.csc.fi); you can turn that off in the settings. If an update address is set, it also reads
a small release manifest (JSON) from there and, when you update, downloads the
new disk image from the same server.
To confirm references without a DOI (magazine articles, chapters, books) it also asks Semantic Scholar and Open Library by title and author.
These services learn the DOIs, titles and authors you check. If you enter an e-mail address, Benthic sends it with its requests to Unpaywall, Crossref and OpenAlex, as their etiquette asks, and to no other service.
The retraction watch sends the DOIs of your project sources to Crossref and OpenAlex once a day (off in Projects, also per project). The DOAJ lists and, if you turn it on, the Retraction Watch Hijacked Journal Checker are downloaded from Google Sheets at most once a week; nothing about you is sent. Zotero is reached only on 127.0.0.1. OpenAlex gives every network a small free daily budget; with your own free API key (Settings › Contact and access) large lists run without that limit.
Find sources sends the statement you type (in English, translated on the Mac if needed) to OpenAlex. For web sources Benthic opens the cited page and, if it is gone, asks the Internet Archive (archive.org) for a copy. When you drop a link on Grimpo, it opens the page once to read its DOI. Grimpo's screenshots and their text recognition stay on the Mac; reading the open browser tab needs your permission the first time (macOS asks). The on-device model hints and the Zotero plug-in do not use the network.
Requirements: macOS 13 or later, Xcode Command Line Tools (for swiftc) and
uv.
git clone https://github.com/isoglu/benthic.git
cd benthic
uv venv .venv
uv pip install --python .venv/bin/python -r requirements.txt
Run the web interface and open http://127.0.0.1:8327:
.venv/bin/python run.py
Build the native app (universal by default, --native for this Mac only):
./macos/build_app.sh
open dist/Benthic.app
The build downloads a standalone CPython through uv, installs the dependencies
into the bundle, checks that each of them is listed in
THIRD_PARTY_NOTICES.md, precompiles the bytecode and
signs the app ad hoc. ./macos/make_dmg.sh then packs dist/Benthic-<version>.dmg.
.venv/bin/python -m unittest discover -s tests -t .
./scripts/trace_check.sh # source tree
./scripts/trace_check.sh dist/Benthic.app # built app
trace_check.sh keeps private paths, personal addresses and a list of
unwanted terms out of the repository, including image metadata and the source
paths inside compiled bytecode.
A plugin can add download routes that run after open access, only when the
user switches them on; AI tools never use them. Benthic loads your own plugins
from ~/Library/Application Support/Benthic/plugins; a build can also bundle
one (./macos/build_app.sh --plugin=DIR). See
docs/extending.md.
Official releases are signed ad hoc and not notarised. A release is:
./macos/build_app.sh
./macos/make_dmg.sh
./macos/make_release.sh # dist/release.json, notes from both changelogs
Before that, a new version number goes into benthic/__init__.py,
macos/Info.plist and a new section at the top of both changelogs, and
python3 scripts/make_plugins.py carries it into the plugin files. A unit test
checks that all of them agree. make_release.sh also builds the Zotero plug-in
(scripts/make_zotero_plugin.py): dist/benthic-zotero-<version>.xpi goes
with the GitHub release, dist/zotero-updates.json to
benthic.isoglu.com/zotero/updates.json, where Zotero looks for updates.
With an Apple Developer ID, ./macos/sign_and_notarize.sh signs the app with
the hardened runtime, notarises app and DMG and staples the tickets. It needs:
export BENTHIC_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export BENTHIC_NOTARY_PROFILE="benthic-notary" # from: xcrun notarytool store-credentials
--dry-run signs ad hoc with the hardened runtime and builds the DMG without
uploading anything. The script refuses builds that contain plugins or carry a
different bundle identifier, and runs trace_check.sh on the bundle first.
run.py entry point for the web interface
benthic/app.py Flask backend: jobs, settings, projects, export, MCP info
benthic/fetcher.py download cascade: library, open access, extra routes
benthic/oa.py open-access resolver (eight sources)
benthic/verify.py reference check
benthic/document.py whole theses: bibliography, citations, cross-check, quotations
benthic/latex.py LaTeX projects: \cite keys, .bib entries
benthic/quotes.py direct quotations against the full text
benthic/preprints.py published versions of preprints
benthic/related.py works your sources cite often
benthic/report.py printable check report
benthic/watchfile.py watch a thesis while writing
benthic/batch.py batch check of a folder of submissions
benthic/quota.py request counting, limits and the request log
benthic/style.py citation style check
benthic/support.py passages in a full text that come closest to a claim
benthic/finder.py real papers for a claim (OpenAlex)
benthic/overlap.py wording taken from the sources without quotation marks
benthic/integrity.py signs of manipulation: hidden text, look-alike letters, tortured phrases
benthic/house.py an institution's house rules file
benthic/clips.py Grimpo's finds: screenshots, links, text
benthic/guide.py the nine steps through a paper
benthic/watch.py retraction watch for project sources
benthic/zotero.py Zotero: send through the connector, scan the library
benthic/questionable.py DOAJ lists and hijacked journal websites
benthic/refs.py reference parser (LLM answers, BibTeX, RIS, Markdown)
benthic/routes.py extension point for plugin routes
benthic/mcp_server.py MCP server (standard library only)
benthic/connect.py setup for AI assistants, one-click configuration entries
benthic/i18n.py English and German (catalogue in benthic/locales/en.json)
benthic/static/ interface (HTML, CSS tokens, JavaScript), Grimpo in pet.html
zotero/ Zotero plug-in (built by scripts/make_zotero_plugin.py)
skills/, .claude-plugin/, plugins for Claude Code, Codex, VS Code and Gemini CLI
.codex-plugin/, .agents/
macos/ Swift shell, build, DMG, signing and design assets
tests/ unit tests (offline)
scripts/ trace check and notices generator
What is planned, and which ideas have the most votes, is on the
roadmap page. Ideas are GitHub
issues with the idea label: open one with the Idea form and vote with 👍
or 👎. Bugs go in a Bug report. Outside code contributions are not
accepted for now; see CONTRIBUTING.md.
Copyright © 2026 Sinan Isoglu.
Benthic is free software under the GNU Affero General Public License, version 3 (AGPL-3.0-only): you may use, study, change and share it. Anyone who distributes Benthic, or runs a modified version as a network service, has to make the complete source of their version available under the same licence. If the AGPL does not fit your use, for example inside a closed product or service, ask about other licensing terms through isoglu.com.
The app bundles CPython and several open-source libraries under their own licences, listed in THIRD_PARTY_NOTICES.md and shown in the app under About Benthic and Settings → Updates → Licences and notices.