Skip to main content

whoelse

Don't build it alone.

Ask an agent to build something and it will, for the 21st time. Somewhere, twenty people already built it, each got ten stars, and three more are working on the same thing right now. None of them know each other.

whoelse puts one call in front of the first line of code: what already exists, who won, what nobody has, and then the step no other tool takes: a plan to merge the small ones into one project with every author on it, or the person whose current work overlaps yours, with what the two of you could build and the first message drafted. Nothing is sent without you.

Runs inside Claude, Cursor, Codex or any MCP client. No sign-up, no profile to fill in, no server. Free.

pip install git+https://github.com/beskvladimir-create/whoelse

whoelse: what the agent says before writing a line


The problem

Nobody is working alone on purpose. It just turns out that way: you publish, nothing happens, you go back to work. The person who would have cited you, tried your code, co-written the next paper with you, is two time zones away and has never heard your name. Discovery runs on conferences and luck, and most people get neither.

whoelse replaces luck with a lookup, and then does something with what it finds.

Don't build it alone

Idea checkers exist (idea-reality-mcp scores an idea against GitHub, HN and npm and stops at "here are similar projects"). whoelse starts where they stop. Ask your agent to build a tool:

Build me a CLI that syncs Claude Code sessions across machines.

"a CLI that syncs Claude Code sessions across machines" exists at least 40 times. The leader is
tawanorg/claude-sync (320 stars, last pushed 2026-10-06); the other 39 have a median of 1.
Between them: end-to-end encryption, Cloudflare R2, git-backed sync, Google Drive, LAN sync,
Codex sessions, backup before the 30-day deletion. None of the 40 has a terminal UI, hooks,
an Obsidian export, mobile, or cost tracking.

Options: contribute the missing backend to claude-sync; build only what nobody has; or propose a
merge to the small ones (propose_merge).

(Real output, 2026-11-08, unauthenticated GitHub search.)

That is find_duplicates. It searches GitHub for the job the tool does (not the product it serves), keeps what is actually the same thing, ranks it, and builds a feature matrix: who has what, what only one of them has, what none of them has. The verdict comes first, in one sentence. Hundreds of hours of rebuilding the same thing, and the tokens spent on it, stop here.

propose_merge goes one step further. For a cluster of small duplicates it writes the merge plan (the living leader as the base; what each repository brings, from its own README; every author a maintainer with write access; nothing deleted; a release date) and the text of one issue for each author, in their own repository, where they already read. The issues go out only after you have read them and said yes, from your GitHub account, all at once, so no author is asked to join someone else's project: all of them are asked to join one.

GitHub's acceptable use forbids bulk unsolicited content, and so does common sense, so the limits are in the code: 3 to 15 living repositories per proposal, at most 10 issues a day, 3 seconds apart, never twice to the same repository (a local ledger remembers), never to an archived, forked, inactive or organisation-owned repository, one with issues turned off, one with 1000+ stars, or your own. One proposal is a conversation; forty is a mailing.

Put it in front of the agent

plugin/ is a Claude Code plugin (MCP server plus a dont-build-it-alone skill) that makes the agent call find_duplicates before it starts building anything the user describes. For Cursor, Codex and other MCP clients the same skill text goes into the rules file. The user sees what exists before the first line is generated, which is the only moment the information is worth anything.

Real runs, one page per idea, live in awesome-already-built: session sync for Claude Code, arXiv MCP servers, PII anonymization for LLMs, token-cost dashboards, Obsidian site generators, DICOM in Rust. Add an idea there with an issue; fix your row with a pull request.

How it connects strangers

Finding people is the easy half. whoelse is built around the hard half: two people who have never heard of each other end up working on one thing, fast.

1. The work starts before the first message. start_joint_work builds a repository with the paper outline, section 1 drafted from both sides' published abstracts, a comparison table holding the numbers each side already published, a reproduction script pointing at both codebases, both names on the byline, and a 14-day plan. The other person receives a link to a third of a finished work. Saying yes is opening an issue titled "in". Saying no is ignoring it: after 14 days you finish alone and cite them.

2. Mutual matching without any letters. publish_request puts what you want to build into an open registry (one JSON file per person, in a public GitHub repository; no account with us, no server). It publishes your name and email, so your agent shows you the file and asks before it goes. Anyone who installs whoelse with the same problem is matched to you. When both sides want the same format on the same problem, one watcher (the side whose name sorts first) creates the repository, invites the other, and emails both; the other watcher sees the repository appear and confirms, or takes over after three days of silence.

3. Nobody falls out of the queue. If there is no match today, whoelse says so plainly:

Your request is published. 37 people are waiting in the network, none on text-to-SQL yet. When one joins, the work starts by itself and a link goes to you@example.org. Nothing to do; just don't remove whoelse.

whoelse-watch --loop 6h keeps checking. The link arrives by email (your own SMTP, or GitHub's own notification when the repository is created and you are invited).

4. Strangers, by design. People you already publish with are listed separately and never proposed. Requests that share an id with yours are skipped. Complementary assets score higher: your code against their data, their paper against your system.

5. Nobody's name goes public on the strength of a file. A registry file is data written by a stranger. It must fit a strict schema; the registry's CI merges it only if ids.github is the login that opened the pull request and the file is not someone else's; the watcher acts on it only if that GitHub profile's display name is the name in the file. That proves the file belongs to that account, not that the account is the researcher it names, so the joint repository is created private, the account is invited, and it goes public only after they accept and say "in". If they never do, you finish alone and publish without their name, citing their work. A repository that already exists is never overwritten.

What you get

Ask your agent:

Load my profile: Vladimir Beskorovainyi, ORCID 0009-0004-7005-6242. Who else is working on this?

25 people are working on what Vladimir Beskorovainyi is working on (personal papers; archives; text classification).
4 can be written to today.

 0. Angelo La Gorga (Universidad Carlos III de Madrid): same problem: personal papers; active 2026-09.           reach: email
 1. Fabian Karl (Universität Ulm): same topic: computational and text analysis, text classification; active 2026-01. reach: email
 2. Lukas Galke (University of Southern Denmark): same topic: text classification; active 2026-01.                reach: email

Start a comparison note with Ada Example (illustration; the names below are made up).

Repository: github.com/you/you-example-text-to-sql
  paper/paper.md     outline; section 1 drafted from both abstracts; table with published numbers
  repro/run.py       both methods, same data, same metric; each side fills its half
  PLAN.md            14 days to a preprint
  CITATION.cff       both names
Send this: three sentences, the link, one yes/no question. To: ada@example.org (from her whoelse card)

Publish my request: a comparison note on text-to-SQL for closed enterprise data, by December.

Your request is published. 2 people are waiting in the network; 1 wants what you want: Ana Example
(illustration), text-to-sql, has a dataset you don't. Joint work can start now.

How it finds people

Three directions at once, then merged into people:

direction source what it catches
papers OpenAlex keywords and topics; arXiv for preprints OpenAlex hasn't indexed yet who published on your exact problem in the last 24 months
code GitHub repository search who is building it
models and data Hugging Face Hub who released weights or a dataset (quantisations and repacks are filtered out)

A GitHub login, a Hugging Face account and an OpenAlex author become one person only when a second signal says so: the same affiliation, a link from their paper to that account, the same website. A shared name alone keeps them apart, flagged as possible namesakes, so one person's email never lands next to another's work. Organisations (a company's GitHub, a lab's Hugging Face) are recognised and left out. Authors who link their own code in an arXiv comment are joined automatically, including you: give whoelse your name and it usually finds your handles itself.

If several people share your name, whoelse does not guess. It shows you the namesakes and asks for an ORCID or an affiliation.

A third reach channel, GitHub user search by full name, is used only when it returns exactly one account whose repositories are about the same subject; otherwise it is ignored. On real data it finds roughly one in three researchers who left nothing on ORCID.

How it reaches them

Only through what the person published about themselves, and every contact says where it came from:

  • ORCID: public email, personal site, GitHub, Scholar, LinkedIn (limited-visibility emails are never read)
  • GitHub profile: public email, website
  • Their own website: a whoelse card, if they have one

arXiv submitter emails are never touched. arXiv's terms forbid using them for unsolicited contact, and we don't need them.

The network

A public GitHub repository, beskvladimir-create/whoelse-network, with one JSON file per person under people/. Your agent opens the pull request (with a GITHUB_TOKEN that has public_repo scope), or writes the file and tells you where to put it. Calling publish_request again renews or updates your file on the same branch. Requests expire after three months. Reading needs no account. There is no server and nothing to sign up for; the repository is the directory. The registry's own CI and README are in registry/ in this repository.

whoelse-watch reads it fresh every pass (the registry is never served from cache), matches your request against everyone else's, and when two people want the same format on the same problem it builds the workspace, creates the repository, invites the other side, and emails both; once per pair, with state saved after every step. Run it from cron or launchd:

0 */6 * * *  whoelse-watch

The card: connected mode without a server

Put this on your own site at /.well-known/whoelse.json:

{
  "name": "Ada Example",
  "working_on": ["text-to-SQL on open-weight models", "schema linking"],
  "open_to": ["co-author", "joint benchmark", "talk together"],
  "contact": "ada@example.org",
  "languages": ["en", "pt"],
  "updated": "2026-11-07"
}

Anyone running whoelse now sees you as connected: reachable, and open to exactly what you said. When both sides have a card, both of you are one joint_work_brief away from the same proposal; sending it to both at once is on the roadmap. No registry, no account, no central anything. The web is the directory. make_card writes yours.

Your people

Once you've decided someone is one of yours (add_peer), whoelse watches what they ship and tells you when there is something to support: a repo to try and star, a paper to cite or argue with, a model to run on your data and report back. It never stars, follows or likes anything for you. GitHub names automated starring and following as rank abuse, and a circle that fakes its own signal is worth nothing to the people in it.

Tools

tool what
load_profile your profile from OpenAlex, arXiv, GitHub, Hugging Face, ORCID
find_overlaps people whose recent work overlaps yours, ranked, with reasons and public contacts
joint_work_brief one person: the evidence, what each side has, formats ranked by fit and effort, venues in common
draft_outreach facts and structure for the first message; your agent writes it, you send it
add_peer, remove_peer, whats_new_from_peers your people and what they shipped this month
find_duplicates before building: what exists, who won, what nobody has
propose_merge a merge plan for a cluster of duplicates and one issue per author (sent only on your yes)
publish_request join the network: what you want to build, with whom, by when
start_joint_work a repository with a third of the work done and both names on it
make_card your /.well-known/whoelse.json
list_known profiles and peers on this machine

Install

pip install whoelse            # or: pip install git+https://github.com/beskvladimir-create/whoelse

Claude Code: claude mcp add whoelse -- whoelse

Claude Desktop, Cursor, Codex and others, in the MCP config:

{ "mcpServers": { "whoelse": { "command": "whoelse" } } }

Optional environment:

variable effect
WHOELSE_OPENALEX_KEY free key from openalex.org/settings/api; without it you share a small per-IP daily budget
WHOELSE_MAILTO your email for OpenAlex's polite pool; sent nowhere else
GITHUB_TOKEN raises GitHub search limits (any scope); public_repo scope is needed for publish_request, start_joint_work and the watcher
WHOELSE_SMTP_HOST, _PORT, _USER, _PASS, _FROM the watcher's email, sent from your own address; without them, notifications land in ~/.whoelse/inbox/
WHOELSE_HOME where profiles, peers and cache live (default ~/.whoelse)

What it will not do

  • Send a letter for you. Drafts are yours to send, from your own address, one person at a time. The only automatic messages are the watcher's: to you, and to a verified stranger, once, with a public repository link, after you joined the network and confirmed what gets published.
  • Use a contact the person did not publish themselves (their ORCID, their GitHub, their own card, their own registry file).
  • Star, follow, like or post on your behalf.
  • Keep anything about you anywhere but your machine, except the registry file you confirmed and the joint repositories you asked for.

First run on your own name

WHOELSE_MAILTO=you@example.org python -m whoelse.scripts.first_run "Your Name" --orcid 0000-0000-0000-0000

Prints the people, the reasons, the best format for each, and how to reach them; saves everything to whoelse-first-run.json. Nothing is sent.

Develop

git clone https://github.com/beskvladimir-create/whoelse && cd whoelse
pip install -e ".[dev]"
pytest                                                      # offline, on recorded fixtures
WHOELSE_FIXTURES=tests/fixtures python -m whoelse.server    # offline demo server

Sources: OpenAlex (CC0), arXiv (CC0 metadata), ORCID public API, GitHub, Hugging Face Hub. All keyless.

MIT.

Metadata

Release files for whoelse 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for whoelse 0.1.0
File Size Uploaded Provenance Actions
whoelse-0.1.0.tar.gz 393.2 kB With provenance Details for whoelse-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for whoelse 0.1.0
File Interpreter ABI Platform Actions
whoelse-0.1.0-py3-none-any.whl Python 3 none any Details for whoelse-0.1.0-py3-none-any.whl

Total release size: 481.8 kB

Release files / whoelse-0.1.0.tar.gz

Download URL whoelse-0.1.0.tar.gz
Size 393.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b0a5d3c2f52fb67d15dfa6ed9928385e28c286edb8f2a65209050dec7adc20b9
BLAKE2b-256 checksum
How to use checksums
88016f48643452697d72c17f2da31a7f8bcc006c60add82740f24f99ad8e07b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Release files / whoelse-0.1.0-py3-none-any.whl

Download URL whoelse-0.1.0-py3-none-any.whl
Size 88.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
290022f4f292e156ddba7d4865eb56e9e3b7016705734b8cacd3d019239acf09
BLAKE2b-256 checksum
How to use checksums
a117d9580ba840c35ed10365993ed19e071acf6f4109d90938f84c4b48350d94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Security for whoelse 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for whoelse-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page