↓Process: transcribe, classify intent, confirm if risky, act
↓Output: action + transcript log
Choose toolsA speech model, an intent classifier (LLM or rules), Home Assistant for actions.
Speech-to-text model (Whisper)LLM or rule-based intent classifierHome Assistant Assist — actions
Build itPaste the brief into OpenCode and run all 30 utterances.
OpenCode · development brief
Build a voice agent for one task: transcribe speech, map it to one of a fixed list of intents, ask for confirmation on risky intents, execute via Home Assistant, and log the transcript and outcome.▎
Understand itTrace one question: retrieve from allowed sources → answer with citations → refuse if no source.
Input: question
↓Process: retrieval over allowed sources, cite-or-refuse
↓Output: answer with citations + 'not a clinical decision tool' banner
Choose toolsRetrieval, an LLM under a cite-or-refuse rule, source checking.
Retrieval — allowed sources onlyLLM — drafts with citationsSource checker — dead-link and licence check
Build itPaste the brief into OpenCode and test five in-scope and five out-of-scope questions.
OpenCode · development brief
Build a knowledge agent over sources.csv: answer only from those sources, cite every sentence, refuse questions with no supporting source, and show a permanent banner that this is a knowledge example, not a clinical deci▎
HealthOS knowledge agentsSource & credit
HealthOS knowledge agents: Trace one question: retrieve from allowed sources → answer with citations → refuse if no source.
Knowledge with sources — not a clinical tool. Owner-supplied illustrative interface; source figures credited below.
Understand itDraw the branches before touching n8n: happy path, missing data, and who gets asked when the workflow cannot decide.
Input: webhook payload (CSV)
↓Process: parse → validate columns and units → branch on missing barcode → ask a human or continue
↓Output: rows in Postgres, an audit row, and a run log a colleague can read
Choose toolsChoose the simplest automation that survives the broken row; add an LLM node only where text must be summarised.
n8n — the workflow runtime (self-hosted; Sustainable Use License)Webhook / IF / Postgres / Slack nodes — the branchesLLM node — drafts a plate-map summary from validated rows only
Build itPaste the brief into OpenCode for the code node, import the workflow, run it with the sample sheet and read the execution log.
OpenCode · development brief
Write the n8n code node that validates a sample-sheet CSV: required columns, unit checks, and a list of rows with missing barcodes. Return valid rows and invalid rows separately so the IF node can branch. Log counts for ▎
n8n workflow automationSource & credit
n8n workflow automation: Draw the branches before touching n8n: happy path, missing data, and who gets asked when the workflow cannot decide.
Trigger → branch → done, with a log. Owner-supplied illustrative interface; source figures credited below.
n8n — Sustainable Use License (screenshots reusable only non-commercially, with notices intact) (https://github.com/n8n-io/n8n/blob/master/LICENSE.md)
Owner-supplied illustrative interface; source figures credited below.
Understand itTrace one replicate: raw → background-subtracted → normalised → plotted as a dot behind the fitted curve.
Input: raw reporter signals with matched controls
↓Process: subtract, normalise to the top plateau, fit a 4PL per condition
↓Output: curves with every replicate visible + a CSV that reproduces one dot by hand
Choose toolsPython for preparation and fitting, browser SVG for the plot; no prediction model.
Python csv + scipy.optimize — background subtraction and 4PL fitHTML + SVG — plot with hover per replicateNo LLM: interpretation of reporter intensity is the scientist's job
Build itPaste the brief into OpenCode and confirm that an exported replicate matches its source row and subtraction.
OpenCode · development brief
Build a local Wnt reporter explorer from dose, replicate, reporter and background columns. Preserve raw values, subtract matched background, plot every replicate behind a fitted curve per condition, allow condition selec▎
Compare Wnt reporter responsesSource & credit
Compare Wnt reporter responses: Trace one replicate: raw → background-subtracted → normalised → plotted as a dot behind the fitted curve.
Keep every replicate behind the curve. Owner-supplied illustrative interface; source figures credited below.
Atkinson et al. 2015, PLoS ONE — TCF/LEF luciferase dose curves (CC BY) (https://journals.plos.org/plosone/article/figure/image?size=large&id=10.1371/journal.pone.0125028.g001)
Zhang et al. 2023, Curr Res Neurobiol — Wnt reporter protocol, Fig. 2 (CC BY) (https://pmc.ncbi.nlm.nih.gov/articles/PMC10329100/figure/fig2/)
COS Cell Signalling group (Acebrón) (https://www.cos.uni-heidelberg.de/en/research-groups/cell-signalling)
Owner-supplied illustrative interface; source figures credited below.
Understand itTrace one cell: place tissue-axis points → place daughter-cell centres → the app computes the acute angle and draws both axes.
Input: image + four learner-placed points
↓Process: vector angle, undirected (0–90°)
↓Output: overlay + coordinate JSON
Choose toolsBrowser SVG and JavaScript maths; Fiji only to prepare images.
JavaScript Math — atan2, acute angleSVG — editable points and axesFiji (optional) — crop and calibrate
Build itPaste the brief into OpenCode and check the parallel and perpendicular test cases give 0° and 90°.
OpenCode · development brief
Build a browser image annotator: place two endpoints for a tissue axis and two daughter-cell centres, compute the acute angle between the undirected axes, draw both axes with the angle label, support undo and keyboard co▎
Review the direction of a cell divisionSource & credit
Review the direction of a cell division: Trace one cell: place tissue-axis points → place daughter-cell centres → the app computes the acute angle and draws both axes.
Four points, two axes, one angle. Owner-supplied illustrative interface; source figures credited below.
Štimac et al. 2022, eLife 11:e83287, Fig. 1A — CC BY 4.0 (https://iiif.elifesciences.org/lax:83287%2Felife-83287-fig1-v2.tif/full/full/0/default.jpg)
Owner-supplied illustrative interface; source figures credited below.
Understand itTrace one marker: curated mapping → aligned values across species → cell shows a value or 'unknown'.
Input: marker tables + orthology
↓Process: join by mapping; unmapped stays unknown
↓Output: linked matrix + comparison notes
Choose toolsPython for joins, HTML/SVG for the matrix; no inference of orthology.
Python csv — joinsHTML + SVG — matrix with hoverNo LLM, no orthology prediction
Build itPaste the brief into OpenCode and verify the missing mapping shows as unknown.
OpenCode · development brief
Build a cross-species marker board: join per-species marker tables through a curated orthology table, show a marker × species matrix with an explicit unknown state for unmapped genes, let the user select a marker to see ▎
Compare cell-type signatures across animalsSource & credit
Compare cell-type signatures across animals: Trace one marker: curated mapping → aligned values across species → cell shows a value or 'unknown'.
Same marker, different animal, honest gaps. Owner-supplied illustrative interface; source figures credited below.
Brunet et al. 2016, eLife 5:e19607, Fig. 2 — CC BY 4.0 (https://iiif.elifesciences.org/lax/19607%2Felife-19607-fig2-v3.tif/full/full/0/default.jpg)
Owner-supplied illustrative interface; source figures credited below.
Build itPaste the brief into OpenCode and check that every displayed edge traces to both input tables.
OpenCode · development brief
Build a ligand–receptor evidence board: join expression.csv and interactions.csv, draw candidate directed edges between cell types, show the ligand row, receptor row and interaction source for the selected edge, and expo▎
Explore signals around a muscle stem cellSource & credit
Explore signals around a muscle stem cell: Trace one edge: ligand expressed in A + receptor expressed in B + curated pair → candidate edge A→B with both rows shown.
Every edge traces to both tables. Owner-supplied illustrative interface; source figures credited below.
Eliazer et al. 2022, eLife 11:e68180, Fig. 1A — CC BY 4.0 (https://iiif.elifesciences.org/lax:68180%2Felife-68180-fig1-v1.tif/full/full/0/default.jpg)
Owner-supplied illustrative interface; source figures credited below.
↓Process: validate links, detect cycles, traverse from a selected cell
↓Output: highlighted path in the tree, linked image region, exportable descendant list
Choose toolsJavaScript Map/Set for lookup, SVG for the tree, an image viewer for the clone; no inference.
JavaScript Map and Set — parent/child lookup and cycle detectionSVG — tree with highlighted pathImage viewer — shows the clone region the tree refers to
Build itPaste the brief into OpenCode and test a missing parent and a cycle before exporting.
OpenCode · development brief
Build a clone-lineage explorer from edges.csv and cells.csv. Validate parent links, refuse cycles, let the user select a cell and highlight all descendants, show unresolved parents as dashed nodes, and export the selecte▎
Follow one stem cell's descendantsSource & credit
Follow one stem cell's descendants: Trace one clone: validate parent links → walk descendants → show the tree beside the image region it came from.
Choose toolsPython for measurement handling, SVG for the dashboard.
Python csv — units and normalisationSVG — trajectories with hoverNo LLM
Build itPaste the brief into OpenCode and check the area/length² calculation on one row.
OpenCode · development brief
Build a growth dashboard: select fish, choose a normalisation, plot organ and body trajectories with age, show the raw rows behind a selected point and export the normalised table. Refuse rows with missing units.▎
Compare organ growth as a fish growsSource & credit
Compare organ growth as a fish grows: Trace one fish: select → choose normalisation (area / length²) → compare trajectories.
Body and organ, on one time axis. Owner-supplied illustrative interface; source figures credited below.
Stolper et al. 2019, eLife 8:e43747, Fig. 1 — CC BY 4.0 (https://iiif.elifesciences.org/lax/43747%2Felife-43747-fig1-v3.tif/full/full/0/default.jpg)
Owner-supplied illustrative interface; source figures credited below.
Understand itTrace one feature: validate coordinates → draw on the track → show provenance on click.
Input: proteins + features
↓Process: validate, project to pixels, style by kind
↓Output: comparable tracks + selection JSON
Choose toolsJavaScript and SVG; InterPro as the data source.
InterPro API — domain coordinates (CC0)JavaScript — validation and projectionSVG — tracks
Build itPaste the brief into OpenCode and confirm the rejection message names the offending row.
OpenCode · development brief
Build a protein-domain track viewer: read proteins.csv and features.csv, validate coordinates against protein length, draw one track per protein with domains styled by evidence kind, show provenance on click and export t▎
Build itPaste the brief into OpenCode and verify rejected puncta are listed, not dropped.
OpenCode · development brief
Build a puncta review workflow in napari: show image, cell labels and candidate points, let the reviewer assign, accept or reject each candidate with a reason, and export per-cell counts for reviewed cells only plus the ▎
Review autophagy puncta under stressSource & credit
Review autophagy puncta under stress: Trace one candidate: overlay → assign to a cell → accept or reject with reason → per-cell count.
Every punctum, assigned or rejected. Owner-supplied illustrative interface; source figures credited below.
Lee et al. 2023, eLife 12:e86030, Fig. 3A — CC BY 4.0 (https://iiif.elifesciences.org/lax:86030%2Felife-86030-fig3-v2.tif/full/full/0/default.jpg)
Owner-supplied illustrative interface; source figures credited below.
Understand itTrace a day: align timestamps to Zeitgeber time → bin → draw one row per day, twice (double plot).
Input: timestamps + light schedule
↓Process: align to ZT, bin, draw rows; gaps stay blank
↓Output: double-plotted actogram SVG + the binned table
Choose toolsPython datetime/csv for bins, SVG for drawing; no periodicity claims without a stated method.
Python datetime + csv — time alignment and binningSVG — rows, light bars, LD→DD markerNo LLM
Build itPaste the brief into OpenCode and check that the recording gap is blank, not interpolated.
OpenCode · development brief
Build an actogram viewer from activity.csv and schedule.csv. Bin activity by the configured size, align to Zeitgeber time, draw a double-plotted actogram with light/dark shading and a marker where the schedule changes, a▎
Turn fish activity into an actogramSource & credit
Turn fish activity into an actogram: Trace a day: align timestamps to Zeitgeber time → bin → draw one row per day, twice (double plot).
When does the fish move? Owner-supplied illustrative interface; source figures credited below.
Cavallari et al. 2011, PLoS Biol 9:e1001142, Fig. 1 — zebrafish vs cavefish actograms (CC BY) (https://journals.plos.org/plosbiology/article/figure/image?size=large&id=10.1371/journal.pbio.1001142.g001)
COS Circadian Clock Biology group (Foulkes) (https://www.cos.uni-heidelberg.de/en/research-groups/circadian-clock-biology)
Owner-supplied illustrative interface; source figures credited below.