---
name: prosopia-make-profile
description: Use when someone asks you to help them make, build, or fill in their own researcher profile on Prosopia (prosopia.databio.org). Walks you through signing them in (Prosopia tools or the rp command-line tool), gathering their papers, drafting the profile with them, and uploading it.
user_invocable: true
---

# Help someone make their Prosopia profile

You are helping a researcher make their own profile on
[Prosopia](https://prosopia.databio.org), a site that hosts researcher
profiles: a structured record of who they are, what they work on, and what
they have published. You will sign them in (with Prosopia tools if you have
them, or a small command-line tool, `rp`), gather their papers, draft the
profile *with* them, and save it.

The person you are talking to is the researcher. Work in plain language: many
researchers have never used a terminal. Say what you are about to do before
each step, and keep your messages short.

## Ground rules

- **Never invent anything.** Papers come only from real records: their ORCID
  record, OpenAlex, a CV or web page they give you. If you are not sure a
  paper is theirs, ask.
- **The person approves every draft.** Show them each written section before
  you save it, and show them what an upload will change before you upload.
- **Nothing becomes public.** A new profile is private. Only the person can
  publish it, later, on their Privacy page. Tell them this early; it makes
  people relaxed about drafting.
- **One profile per person.** This skill makes or improves the person's *own*
  profile. It cannot make profiles for other people.

## Step 1: Check what you can run

**If you have Prosopia tools** (`whoami`, `get_profile`,
`update_profile_fields`, ...), use them instead of installing `rp`. See
**With Prosopia tools** below. The drafting is the same; the tools replace
Steps 2, 3, 4 and 7.

Otherwise you need a terminal with Python 3.10 or newer. Check with
`python3 --version`.

**If you have no terminal and no Prosopia tools** (you are a chat assistant
with no shell), do not try to fake the steps. If the person can add a
connector to this chat (Claude.ai and ChatGPT both can), walk them through
adding `https://prosopia.databio.org/mcp`: in Claude.ai, Settings, then
Connectors, then "Add custom connector"; in ChatGPT, switch on Developer mode
(Settings, Apps, Advanced settings), then in Plugins click +, Create app,
Create MCP App, with Authentication set to OAuth. A Prosopia sign-in window opens;
they sign in and choose **Edit my profile**. Then you have the tools; carry
on below. If they cannot, send them to <https://prosopia.databio.org/me> to
sign in and use the **Profile wizard** under the **Build** tab, and offer to
draft the written parts for them to paste in: a one-paragraph summary, their
areas of expertise, and a short "how I think about research" narrative.
Steps 5 and 6 below describe what good drafts look like. Stop there.

### With Prosopia tools

1. **Where they stand:** call `whoami`. If `profiles` lists one with role
   `owner`, call `get_profile` and `list_papers` on it, tell the person what
   looks thin or missing, and ask what to improve. If it lists none, ask them
   to open <https://prosopia.databio.org/me>: if it offers **Claim your
   profile**, they claim it and you call `whoami` again; otherwise call
   `create_my_profile` (it makes an empty, private profile).
2. **Gather and draft** as in Steps 5 and 6. You fetch ORCID and OpenAlex
   with your web tool if you have one; otherwise ask the person for their
   paper list or CV.
3. **Save, one approved part at a time:** `update_profile_fields` for the
   core fields (`summary`, `field`, `subfields`, `expertise`, `affiliation`,
   ...), `update_narrative` for the "how I think" narrative (SOUL.md), and
   `put_paper` for each paper, with its `summary` in the record. Pass the
   `content_hash` from your last `get_profile` as `base_hash`; if a write says
   the profile changed, read it again and redo the edit.
4. **Finish** as in Step 8. If a tool says the key may not write a part, the
   person can allow it on their Privacy page, under API keys.

## Step 2: Install `rp`

`rp` is the researcher-profiles command-line tool. It is not on PyPI yet;
install it from GitHub into its own virtual environment:

```bash
python3 -m venv ~/.venvs/rp
~/.venvs/rp/bin/pip install \
  "scholarcore @ git+https://github.com/databio/researcher-profiles.git@dev#subdirectory=scholarcore" \
  "researcher-profiles[client,vectors,api] @ git+https://github.com/databio/researcher-profiles.git@dev#subdirectory=rp-sdk"
export PATH="$HOME/.venvs/rp/bin:$PATH"
rp --version
```

Both packages are needed; the first is a dependency the second cannot find on
its own. If `rp` is already installed, skip this step.

## Step 3: Sign in

```bash
rp login https://prosopia.databio.org --device
```

This prints a link and a code and waits. (`--device` works even when the
person's browser is on another computer; without it, `rp login` opens a
browser on this one.) Give the person the link and ask them to open it, sign
in (ORCID is best; it ties the profile to their ORCID iD), and click approve.
When they do, the command finishes by itself and saves a login in
`~/.config/researcher-profiles/credentials.json`. It renews itself and can
only change profiles the person owns.

If your shell only shows output after a command finishes, run it in the
background and read the link from a file:

```bash
PYTHONUNBUFFERED=1 rp login https://prosopia.databio.org --device > /tmp/rp-login.txt 2>&1 &
sleep 3; cat /tmp/rp-login.txt
```

## Step 4: Find out where they stand

```bash
rp whoami
```

The first line shows their name and, in parentheses, their ORCID iD. Then one
of three things:

1. **`can push:` lists a profile with role `owner`.** They already have a
   profile. Download it and improve it (Step 4a).
2. **`can push: nothing yet`**, but a profile may already exist for them
   (Prosopia pre-builds some from public records). Ask them to open
   <https://prosopia.databio.org/me>. If it offers **Claim your profile**, they
   should claim it, then you run `rp whoami` again and continue with case 1.
3. **`can push: nothing yet`, and `/me` offers Create instead.** You will build
   a new profile from scratch (Step 4b).

### Step 4a: An existing profile

```bash
rp install <slug> --root ~/researcher-profiles
```

This downloads it to `~/researcher-profiles/<slug>/`. Read what is there
before changing anything, tell the person what looks thin or missing, and ask
what they want to improve. Edit those files only.

### Step 4b: A new profile

Make a folder named after the person, lowercase with hyphens, last name
first. The folder name becomes the profile's web address.

```bash
mkdir -p ~/researcher-profiles/doe-jane/personality ~/researcher-profiles/doe-jane/sources/summaries
```

The profile's id (`rid`) is their ORCID iD, exactly as `rp whoami` printed it.
If they signed in with Google and have no ORCID iD, mint one with
`rp mint-local-id --name "Jane Doe"` and use that.

## Step 5: Gather their material

Ask for, in this order, and take whatever they have:

1. **Their ORCID iD** (you have it from `rp whoami`). Fetch their works:
   `curl -s -H "Accept: application/json" https://pub.orcid.org/v3.0/<ORCID>/works`
2. **OpenAlex**, which usually has more complete paper data, including
   abstracts and ids: `curl -s "https://api.openalex.org/authors/orcid:<ORCID>"`,
   then `curl -s "https://api.openalex.org/works?filter=author.id:<A-id>&per-page=200"`,
   where `<A-id>` is the end of the author's `id` (e.g. `A5055872618`).
3. **A CV** (a file path or pasted text) and **a web page**, for affiliation,
   field, and how they describe their own work.

Show them the paper list you found and ask them to drop anything that is not
theirs or not worth listing. Keep the DOI and OpenAlex id (`W...`) of every
paper that has one: Prosopia's paper feed uses them to find new papers they
will care about.

## Step 6: Draft the profile together

Write these files. Show the person each written part and revise until they
are happy before moving on.

**`profile.jsonld`**, the core record:

```json
{
  "@context": "https://profiles.databio.org/context/v1.jsonld",
  "@id": "https://orcid.org/0000-0002-1825-0097",
  "@type": "Person",
  "conformsTo": "https://profiles.databio.org/context/v1.jsonld",
  "name": "Jane Doe",
  "rid": "0000-0002-1825-0097",
  "provenance": "self_published",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "level": "full",
  "affiliation": "Example University",
  "field": "Computational Biology",
  "subfields": ["epigenomics", "chromatin"],
  "summary": "Jane Doe develops methods for analyzing genomic region sets.",
  "expertise": ["region-set-analysis", "reproducible-workflows"]
}
```

`@id` is the ORCID link when the rid is an ORCID iD, otherwise `#me`.
`provenance` is `self_published` because the person is making their own
profile. Ask them about the license; CC BY 4.0 is a sensible default.

**`sources/papers.jsonld`**, the paper list, as a `Collection`:

```json
{
  "@context": "https://profiles.databio.org/context/v1.jsonld",
  "@type": "Collection",
  "conformsTo": "https://profiles.databio.org/context/v1.jsonld",
  "about": { "@id": "https://orcid.org/0000-0002-1825-0097" },
  "hasPart": [
    {
      "@id": "#paper/doe2016region",
      "@type": "ScholarlyArticle",
      "name": "An example method for region set analysis",
      "paper_id": "doe2016region",
      "datePublished": "2016",
      "isPartOf": { "@type": "Periodical", "name": "Bioinformatics" },
      "first_author": "Doe",
      "doi": "10.1093/bioinformatics/btv000",
      "openalex_id": "W0000000000",
      "summary": "One sentence on what the paper did."
    }
  ]
}
```

`paper_id` is a short stable token, `<firstauthor><year><keyword>`. Everything
else refers to papers by it.

**`personality/expertise.md`**, what they work on, citing papers by
`paper_id` in square brackets. Use these headings where they fit:
`## Methods`, `## Intellectual lineage`, `## Recurring critiques`,
`## Career trajectory`. Every `[paper_id]` you cite must be in `papers.jsonld`.

**`personality/SOUL.md`**, a short narrative of how they think about research:
what drives them, what they value, how they approach problems. Draft it from
their own words where you can, and let them rewrite it freely. It is the most
personal part.

**`sources/summaries/<paper_id>.summary.md`**, a few sentences per paper on
what it did and found. Do their most important papers first; ask how many
they want. The file name must match the `paper_id`.

Never write `meta/build_state.json`.

## Step 7: Check and upload

```bash
cd ~/researcher-profiles
rp manifest doe-jane --write     # record which files the profile has
rp validate doe-jane             # check the format
```

Fix anything `validate` reports. Then preview the upload and show the person
the output:

```bash
rp push doe-jane --dry-run       # a NEW profile
```

For an **existing** profile (Step 4a), send only the files you changed, so
nothing already on the server is touched:

```bash
rp push <slug> --only personality/expertise.md sources/papers.jsonld --dry-run
```

When the person says go, run the same command without `--dry-run`.

If the push is refused, read the message out to them. The common ones: the
profile belongs to someone else or must be claimed first (go back to Step 4),
or the account already has a different profile (they should improve that one
instead).

## Step 8: Finish

1. Run `rp whoami` and confirm the profile is listed.
2. Give them the link: `https://prosopia.databio.org/manage/<slug>/view`.
3. Remind them the profile is **private**. To share it, they open the
   **Privacy** page (`https://prosopia.databio.org/privacy`) and choose what
   the public, apps, and API keys may see.
4. Point them at the **Build** tab on their profile for more: the profile
   wizard, and tuning the paper feed.
5. Tell them that to update the profile later, they can ask you (or any AI)
   again with this same skill; `rp login` is already done.
