Citations and evidence
Genie's citations follow one design rule: the tools, not the model, issue citation tokens. When a tool runs, the backend stores a record of what the tool returned and gives the model a token that names that record. If the model copies the token after a claim, the chat draws a numbered chip such as 1, and clicking the chip opens the stored record in the evidence panel.
This makes computed results and search records checkable from the chat. It does not make the agent's sentences correct. Read what a chip guarantees before relying on one.
Tokens
A citation token has the form:
[[cite:<citationId>]]
The id starts with cite_ and contains only letters, digits, underscores and hyphens, for example cite_project_c7bb7f985139_genome_call_peaks_ed3319c2 or cite_project_c7bb7f985139_public_data_ENCFF381NDD. Region and computation ids end in a random suffix, so each call gets a new record. ENCODE file records are named after the project and the file accession, so the same file found again in a project keeps the same id.
A tool returns its token as citationToken, together with citationInstructions such as "To cite this evidence, copy [[cite:...]] exactly after the supported claim." The Genome-mode and Analysis-mode instructions tell the agent to use only returned tokens, to place them right after the claim, never to invent them, and to mark uncited claims as uncited. The Asset import instructions say only to use a returned token for claims grounded in the inspected source and never to invent tokens.
Which tools issue citations
| Source type | Issued by | The record holds | Evidence panel label | Open source opens |
|---|---|---|---|---|
genome-region | genome_get_current_region, genome_navigate, genome_describe_viewport | The locus only; title "Visible genome region (<genome>)" | Genome region | (no link) |
genome-computation | genome_signal_stats, genome_call_peaks, genome_quantify_at_features, genome_correlate_tracks | The tool's result JSON, up to 1,800 characters; title such as "Genome call peaks result" | Evidence | The BED or TSV result file, where one was written |
public-data-search | public_data_search (one per search) | The normalized query, number of candidates, relaxations | Evidence | The ENCODE search page |
public-data-file | public_data_search (one per candidate) | Accession, experiment, assay, target, biosample, assembly, output type; location is the download URL | Evidence | The ENCODE file page |
asset-catalog | project_list_assets | Number of assets and up to 20 asset titles and locations | Asset catalog | (no link) |
asset / remote-source | project_list_assets, project_read_asset | The asset's description or location, or a text preview with its line range | Project asset / Remote source | The asset |
studio-output | project_read_analysis_plan | The plan text, up to 1,800 characters | Evidence | The saved Studio output |
These tools issue no citation: genome_add_track, genome_list_tracks, genome_list_assemblies, create_html_artifact, and the asset update, inspect, import and write tools. The runtime's built-in tools (shell, web search, MCP) never issue Genie citations.
A computation tool that refuses a request (for example over the 5 Mb limit) returns a failure object, and that object still gets a computation citation whose excerpt is the failure. A tool that throws an error (for example "Track '...' was not found.") gets no citation.
Lifecycle of a citation
- The tool runs and the backend builds the record from its result.
- The record is stored in the chat's
citations.json(inprojects/<projectId>/sessions/<sessionId>/, schema version 1), and the token is added to the tool result the model receives. - The model writes the token into its answer, or does not.
- The chat resolves the token. It finds tokens with the pattern
\[\[cite:([a-zA-Z0-9_-]+)\]\]and looks the id up among the chat's stored records and the tool results in the conversation. A known id becomes a numbered chip; an unknown id, such as one the model invented, stays as raw[[cite:...]]text. - Numbering restarts in each message. The first distinct token in a message is [1], the next [2], and a token repeated in the same message keeps its number.
When you reopen a chat, its records are reattached from citations.json, so chips in earlier answers still open.
Hovering over a chip shows the record's title, file name and locus where they exist.
The evidence panel
Clicking a chip opens a modal Citation evidence panel with:
- the source-type label (for example "Genome region" or "Evidence"), the record's title and its location (the locus, result file or download URL);
- tiles for the Token, the Asset id (asset records), the line Range (text previews, for example "Lines 1-40") and the Genome;
- the Evidence Excerpt, or "This citation points to source metadata. Inspect the source for deeper content." when the record has no excerpt;
- an Open source link where the record has a URL, and Close.
Clicking a region chip does not move the browser; the panel only shows the locus.
What a chip guarantees, and what it does not
A chip guarantees that the token resolves to a record a Genie tool created in that chat. It shows which record a claim points to, not that the sentence is correct: a resolving citation is not a supporting citation.
A chip does not guarantee that:
- the sentence is supported by the record. The check confirms only that the agent copied a token a tool issued. The agent can attach a correct token to an incorrect or over-reaching sentence.
- every claim has a token. Uncited text is not blocked. The instructions ask the agent to mark uncited claims, but nothing enforces it.
- the record contains the number in the sentence. Viewport statistics are cited to a region record that holds only the locus. In both demonstration answers, the chip placed after the viewport statistics opened such a record.
So open the chips, compare each with the sentence it follows, and read the tool cards for numbers whose chip points to a region.
Example: the MYC demonstration
The last prompt of the MYC demonstration was "Summarize what we found in a short paragraph, citing each claim, and propose one testable next hypothesis." The answer carried four chips.

The final answer of the MYC demonstration with chips [1] to [4].
| Chip | Follows | Opens |
|---|---|---|
| 1 | "In the 60-kb hg38 region chr8:127,700,000–127,760,000" | A region record holding the locus |
| 2 | The ENCODE file ENCFF381NDD, a K562 H3K27ac fold-change-over-control track | The public-data-file record for ENCFF381NDD |
| 3 | "Signal averaged 1.14 and reached 19.96, with 100% reported coverage" | A region record holding the locus, not the mean or maximum |
| 4 | "7 peaks at a signal cutoff of 8.79 ... exploratory threshold calls" | The peak caller's result JSON |
Chip [2] opens the stored ENCODE record. The excerpt shows the accession, the experiment ENCSR000AKP, the assay, target, biosample, assembly and output type; Open source goes to the ENCODE file page.

Chip [2]: the public-data-file record for ENCFF381NDD.
Chip [4] opens the computation record of genome_call_peaks. The excerpt shows the method, the absolute cutoff in threshold (8.791333735783212), minWidth, the method note, peakCount 7 and the result BED file; Open source opens that file.

Chip [4]: the computation record of the peak call.
The chips check out as records, and the records show what the tools did. They do not settle the interpretation. The "7 peaks" are 7 intervals within about 1.4 kb (one region at 1 kb grouping), and chip [3] holds no numbers. The agent named no gene; the intervals lie on the MYC promoter and 5' end, which makes this promoter H3K27ac, not an enhancer finding. The proposed ATAC-seq hypothesis is the model's own and was not tested in the session.
Known issues
- Region-only citations for viewport statistics. See above. For a citable record of the numbers, ask for
genome_signal_statsover the viewport. - Raw tokens in saved reports. Tokens the agent writes into a Studio output or an HTML artifact are not turned into chips; a saved Report can show raw
[[cite:...]]text. - Coarse records. A computation record holds the whole result JSON, clamped to 1,800 characters, rather than the single value a sentence uses.
See also Measurements, Public data search and Limitations and known issues.