Celloras helps plant researchers name the cell groups in their single-cell data, with evidence. Upload a dataset, and an agent maps the cells, suggests cell types from measured expression and published markers, and remembers each decision the researcher makes. Soybean comes first.
Live app · Video · Pitch deck · How it works
- Fastest: open celloras.com, choose Use demo credentials on the sign-in page, then open the soybean root demo. Every request's trace is under Agent activity.
- Local, without Zetaris or Nightshift: the defaults in
.env.examplealready run without them.CELLORAS_REFERENCE_PROVIDER=publishedreads the bundled copy of the published marker list, andCELLORAS_INVESTIGATION_ENABLED=falseturns off the Nightshift investigation. Follow Setup. - The chat agent needs a Codex login (
codex login); there is no offline model mode.
- Upload an
.h5addataset (up to 4 GiB) or a marker CSV. Use the built-in soybean root example if you have none. - Explore the cell map, gene expression and dot plots for any group.
- Annotate: the agent suggests a cell type per group, shows supporting and contrary evidence, and says "unresolved" when the evidence is weak.
- Investigate an unclear group: a deeper comparison of competing cell types.
- Decide and recall: accept, correct or reject each suggestion with a reason. Celloras recalls those decisions in later conversations.
Real requests on the live app, using the soybean root dataset (7,496 cells, 12 groups). Sign in to open a saved request.
| Input | Output |
|---|---|
| Annotate all groups after importing the root H5AD | Map of all 7,496 cells. 7 groups suggested, 1 ambiguous, 4 unresolved. Zetaris supplied 42 published marker associations. Open |
Compare Glyma.01G224900 and Glyma.17G030700 across groups |
Measured two-gene dot plot. Group 6 is a provisional root hair candidate. Open |
| "What did we decide for group 6?" after saving a review | H-MEM recalls the saved review and links its source. The annotation itself is unchanged. Open |
| Investigate this group on group 3 | Nightshift (NVIDIA Nemotron) compares the competing cell types using measured marker co-detection. Completed 3 times on 27 October. |
| Technology | Role in Celloras | Proof it works |
|---|---|---|
| Zetaris | The annotation tool queries a versioned soybean marker table (42 associations, 41 genes, 9 cell types) through Zetaris's SQL API with a read-only account. It checks the table's content hash and shows the query receipt on every annotation. If access fails or the content changes, the run stops instead of falling back to a local copy. Adapter | All 9 Zetaris checks passed. A live annotation retrieved all 42 associations with query receipt (request). |
| Meterless H-MEM Engine | Meterless's official H-MEM reference (vendored with license) runs in the worker. It stores each researcher's saved reviews per project and recalls the relevant ones, with sources, when a new question starts. A correction replaces only the review it targets. Adapter | All 13 upstream conformance checks passed. Live recall found a saved review past 31 newer notes. Example: request. |
| Meterless Nightshift + NVIDIA Nemotron | Investigate this group sends measured marker co-detection for an unclear group to Nightshift, which runs NVIDIA Nemotron 3 Ultra (nemotron-3-ultra-550b-a55b) to compare the competing cell types. The researcher still makes the final call. Gateway · Server setup |
3 investigations of group 3 completed on the live app on 27 October (receipt). |
| NVIDIA OpenShell | The chat agent (Codex CLI) runs inside an OpenShell sandbox on our Linux server. | Real model turns verified on the production server. |
What's unique: published evidence (Zetaris), measured data and each researcher's own decisions (H-MEM) are kept apart. A remembered opinion can never pass as published evidence, and every step is visible in Agent activity. Development used Codex; Cursor was not used.
All Celloras code in this repository was written during the hackathon, from 23 October 2026 (first commit 9efffb2). It builds on these existing components:
| Component | What it is | How Celloras uses it |
|---|---|---|
| Meterless H-MEM Engine | Meterless's official reference engine, Apache-2.0, pinned revision 1742dec |
Vendored unmodified in third_party/meterless-hmem. Our adapter is app/adapters/research-memory.mjs. |
| Meterless Nightshift 1.5.1 | Meterless's runtime, downloaded and checksum-verified at build time | Runs on our server. Deployment files are in infra/nightshift; no vendor files are in Git. |
| Zetaris platform 2.4.3 | Zetaris's hackathon release | Self-hosted next to Celloras. We load our marker table into it. |
| NVIDIA OpenShell and Codex CLI | Agent sandbox and command-line agent | Run the chat agent. |
| NVIDIA Nemotron 3 Ultra | Model on the NVIDIA API | Answers Nightshift investigation jobs. |
| Soybean root atlas (GSE270392, Table S2) | Public data from Zhang et al., Cell 2024 | Demo dataset and published marker reference. Large source files stay outside Git. |
| Open-source libraries and services | Next.js, React, PostgreSQL, Keycloak and others | Pinned in package.json and the Compose files. |
| Data | Source |
|---|---|
| Soybean root counts, 7,496 nuclei × 40,127 genes, 12 groups | GSE270392 (Zhang et al., Cell 2025). The 29 MB demo H5AD is our lossless conversion of the published RDS: raw counts, groups and UMAP unchanged. |
| Root marker panel: 42 associations, 41 genes, 9 cell types | Table S2 of the same paper (Wm82v4 gene IDs), served through Zetaris. |
| Literature: 3 papers | Short factual summaries only, as their licenses allow. |
Method: for each group, the engine compares measured expression of the panel's marker genes with the rest of the cells. It suggests a cell type only when fixed evidence rules are met, shows supporting and contrary genes, and otherwise says "unresolved". Species, tissue and genome build must match exactly. Suggestions are not validated identities and need researcher review. Large source files stay out of Git.
Next.js app (UI and API) → PostgreSQL (projects, reviews, agent queue) → worker. The worker runs the Codex agent in an NVIDIA OpenShell sandbox together with Celloras's tools: dataset analysis, Zetaris marker lookup, H-MEM recall and Nightshift investigation. Keycloak handles login. Every request checks project ownership before touching data.
Dependencies: Node 22.22.0 (.nvmrc) and npm, Docker Compose 28+, Codex CLI. Libraries are pinned in package.json. Compose pins PostgreSQL, Keycloak, OpenShell and the Python H5AD importer.
git clone https://github.com/mpckkk/2026_GenAI.git
cd 2026_GenAI
npm ci
npm run setup # creates .env with generated secrets
docker compose up -d --build h5ad-importer appOpen localhost:3100 and register an account.
Agent:
codex login
npm run agent:setup
npm run agent:verify # makes one real model call
docker compose up -d --build agent-worker appSoybean root data:
mkdir -p .artifacts/datasets/GSE270392
curl -fL -o .artifacts/datasets/GSE270392/GSE270392_Gm_atlas_Root.rna.seurat.obj.rds.gz \
https://ftp.ncbi.nlm.nih.gov/geo/series/GSE270nnn/GSE270392/suppl/GSE270392_Gm_atlas_Root.rna.seurat.obj.rds.gz
npm run data:import # checks the file's checksum, then converts itSponsor services (set in .env, never in Git):
| Service | Settings | Check |
|---|---|---|
| Zetaris | ZETARIS_API_URL, ZETARIS_API_TOKEN, ZETARIS_ORG_ID, ZETARIS_REFERENCE_TABLE, then CELLORAS_REFERENCE_PROVIDER=zetaris. Load the table from node scripts/prepare-zetaris-reference.mjs. |
node --env-file=.env scripts/verify-sponsors.mjs zetaris |
| H-MEM | none, bundled in the worker | runs with the agent |
| Nightshift | NIGHTSHIFT_API_URL, NIGHTSHIFT_API_TOKEN, NIGHTSHIFT_MODEL, then CELLORAS_INVESTIGATION_ENABLED=true. Server image in infra/nightshift/. |
node --env-file=.env scripts/verify-sponsors.mjs nightshift |
Checks: npm run lint, npm run typecheck, npm run build, npm run test:e2e.
- Sign in, then choose Add dataset and upload an
.h5adfile, or Download soybean root for the example. - Pick the raw count matrix, gene IDs, cell groups and UMAP, then confirm tissue and genome build.
- Open the experiment and choose Annotate all groups.
- Open a group's evidence, then accept, correct, reject or leave it unresolved with your reason. Use Investigate this group for unclear ones.
- Ask follow-up questions in chat. Agent activity in the sidebar shows every step the agent took.
Marker CSV (Upload markers in an experiment): one gene per row with a group column, up to 4,000 rows and 20 groups. Example file.
cluster,gene,tissue,genome_version
Group A,Glyma.01G224900,root,Wm82v4The first implementation commit is 694d1a8 (23 October 2026). The public deployment runs on Dokploy from main with compose.yaml + compose.prod.yaml, and each push deploys automatically.









