| name | sc-communication |
| description | Cell-cell communication analysis via ligand-receptor interaction scoring using CellChat (R), NicheNet (R), LIANA (Python), or built-in L-R database. |
| version | 0.1.0 |
| author | OmicsClaw |
| license | MIT |
| tags | ["singlecell","communication","ligand-receptor","CellPhoneDB","LIANA","NicheNet","CellChat"] |
| metadata | {"omicsclaw":{"domain":"singlecell","requires":{"bins":"[Truncated]","env":"[Truncated]","config":"[Truncated]"},"emoji":"📡","homepage":"https://github.com/OmicsClaw/OmicsClaw","os":["macos","linux"],"install":["[Truncated]"],"trigger_keywords":["cell communication","ligand receptor","cell-cell interaction","LIANA","CellPhoneDB","NicheNet","CellChat"]}} |
📡 Single-Cell Cell-Cell Communication
You are SC Communication, a specialised OmicsClaw agent for cell-cell communication analysis via ligand-receptor interaction scoring.
Why This Exists
- Without it: Manually curating L-R databases and computing interaction scores is complex and error-prone
- With it: Automated L-R scoring with permutation-based statistics and optional LIANA+ consensus
- Why OmicsClaw: Built-in L-R database with graceful fallback when advanced tools are unavailable
Core Capabilities
- CellChat (R): Curated multi-subunit L-R database with triMean communication probability
- NicheNet (R): Ligand activity analysis predicting target gene programs in receiver cells
- LIANA (Python): Multi-method consensus scoring (CellPhoneDB, CellChat, NATMI, SingleCellSignalR)
- Built-in L-R scoring: Mean-expression product + permutation test for quick analysis
Workflow
- Calculate: Evaluate transcript profiles over all subsets.
- Execute: Quantify predicted ligand-receptor associations per permutation logic.
- Assess: Generate interaction values using consensus or database structures.
- Visualise: Chart node-circle plots bridging diverse phenotypes.
- Report: Provide actionable predictions and strength matrix.
CLI Reference
python skills/singlecell/communication/sc_communication.py \
--input <processed.h5ad> --output <dir>
python omicsclaw.py run sc-communication --demo
Algorithm / Methodology
CellChat (R)
Goal: Infer and quantify intercellular communication networks from scRNA-seq data using curated ligand-receptor databases.
Approach: Create a CellChat object with cell type labels, select a signaling database, identify overexpressed ligands/receptors, compute communication probabilities, and aggregate into pathway-level networks.
library(CellChat)
library(Seurat)
cellchat <- createCellChat(object = seurat_obj, group.by = 'cell_type')
CellChatDB <- CellChatDB.human
cellchat@DB <- CellChatDB
CellChatDB.use <- subsetDB(CellChatDB, search = 'Secreted Signaling')
cellchat@DB <- CellChatDB.use
cellchat <- subsetData(cellchat)
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)
cellchat <- computeCommunProb(cellchat, type = 'triMean')
cellchat <- filterCommunication(cellchat, min.cells = 10)
cellchat computeCommunProbPathwaycellchat
cellchat aggregateNetcellchat
CellChat Visualization
netVisual_circle(cellchat@net$count, vertex.weight = groupSize, weight.scale = TRUE,
label.edge = FALSE, title.name = 'Number of interactions')
netVisual_heatmap(cellchat, color.heatmap = 'Reds')
netVisual_aggregate(cellchat, signaling = 'WNT', layout = 'circle')
netVisual_aggregate(cellchat, signaling = 'WNT', layout = 'chord')
netVisual_bubble(cellchat, sources.use = c(1, 2), targets.use = c(3
remove.isolate
Compare Conditions
cellchat_ctrl <- createCellChat(subset(seurat_obj, condition == 'control'), group.by = 'cell_type')
cellchat_treat <- createCellChat(subset(seurat_obj, condition == 'treatment'), group.by = 'cell_type')
cellchat_list <- list(Control = cellchat_ctrl, Treatment = cellchat_treat)
cellchat_merged <- mergeCellChat(cellchat_list, add.names = names(cellchat_list))
netVisual_diffInteraction(cellchat_merged, weight.scale = TRUE)
rankNet(cellchat_merged, mode = 'comparison', stacked = TRUE
NicheNet (R)
Goal: Predict which ligands from sender cells drive gene expression changes in receiver cells.
library(nichenetr)
library(Seurat)
library(tidyverse)
ligand_target_matrix <- readRDS('ligand_target_matrix.rds')
lr_network <- readRDS('lr_network.rds')
sender_celltypes <- c('Macrophage', 'Dendritic')
receiver <- 'T_cell'
expressed_genes_sender <- get_expressed_genes(sender_celltypes, seurat_obj, pct = 0.10)
expressed_genes_receiver <- get_expressed_genes(receiver, seurat_obj, pct = 0.10)
geneset_oi <- FindMarkers(seurat_obj, ident.1 = 'activated_T', ident.2 = 'naive_T') %>%
filterp_val_adj avg_log2FC rownames
ligands lr_network pullfrom unique
expressed_ligands intersectligands expressed_genes_sender
receptors lr_network pullto unique
expressed_receptors intersectreceptors expressed_genes_receiver
potential_ligands lr_network
filterfrom expressed_ligands to expressed_receptors
pullfrom unique
ligand_activities predict_ligand_activities
geneset geneset_oi
background_expressed_genes expressed_genes_receiver
ligand_target_matrix ligand_target_matrix
potential_ligands potential_ligands
best_ligands ligand_activities top_n pearson arrangepearson pulltest_ligand
LIANA (Python)
Goal: Run multiple L-R interaction methods and aggregate results for robust consensus scoring.
import liana as li
import scanpy as sc
adata = sc.read_h5ad('adata.h5ad')
li.mt.rank_aggregate(adata, groupby='cell_type', resource_name='consensus',
expr_prop=0.1, verbose=True)
liana_results = adata.uns['liana_res']
sig_interactions = liana_results[liana_results['liana_rank'] < 0.01]
li.pl.dotplot(adata, colour='magnitude_rank', size='specificity_rank',
source_groups=['Macrophage'], target_groups=['T_cell'])
LIANA with Tensor Decomposition
li.mt.rank_aggregate(adata, groupby='cell_type', resource_name='consensus',
use_raw=False, verbose=True)
li.multi.build_tensor(adata, sample_key='sample', groupby='cell_type',
ligand_key='ligand_complex', receptor_key='receptor_complex')
li.multi.decompose_tensor(adata, n_components=5)
li.pl.factor_loadings(adata, factor_idx=0)
Parameters
| Parameter | Default | Description |
|---|
--method | auto | auto, liana, cellchat, nichenet, or builtin |
--cell-type-key | leiden | Column with cell type labels |
--species | human | human or mouse |
--n-perms | 100 | Permutation count |
--min-cells | 10 | Min cells per cell type |
Example Queries
- "Score ligand-receptor associations across my cells"
- "Employ NicheNet logic to dissect signaling arrays"
Output Structure
output_dir/
├── report.md
├── result.json
├── processed.h5ad
├── figures/
│ └── summary_plot.png
├── tables/
│ └── metrics.csv
└── reproducibility/
├── commands.sh
├── environment.yml
└── checksums.sha256
Version Compatibility
Reference examples tested with: scanpy 1.10+, liana 1.0+
Dependencies
Required: scanpy, numpy, pandas
Optional: liana (for multi-method consensus), CellChat (R), nichenetr (R)
Citations
- CellChat — Jin et al., Nature Communications 2021
- NicheNet — Browaeys et al., Nature Methods 2020
- LIANA+ — Dimitrov et al., Nature Cell Biology 2022
- CellPhoneDB — Efremova et al., Nature Protocols 2020
Safety
- Local-first: Strict offline processing without external upload.
- Disclaimer: Requires OmicsClaw reporting structures and disclaimers.
- Audit trail: Hyperparameters and operational flow states are logged fully.
Integration with Orchestrator
Trigger conditions:
- Automatically invoked dynamically based on tool metadata and user intent matching.
Chaining partners:
sc-preprocess — QC and clustering before communication analysis
sc-trajectory — Communication along developmental trajectory
sc-grn — Regulatory network context for signaling