# flowio

Reads and writes flow cytometry FCS 2.0, 3.0 and 3.1 files: metadata, channels, events as NumPy. Useful when you need to look inside an FCS file or feed it to pandas.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 1900 installs · ★ 54652
- Author: K-Dense-AI
- License: LicenseRef-BSD-3-Clause-license · policy=link-only · description only; the file stays with the author
- Source: https://github.com/K-Dense-AI/scientific-agent-skills/tree/HEAD/skills/flowio/SKILL.md
- Updated: 2026-10-19
- HTML: https://affpapa.org/en/nevibecode/skills/flowio

## What it does

The skill gives your agent a working knowledge of FlowIO 1.4.0, a library for Flow Cytometry Standard files. It covers HEADER, TEXT, ANALYSIS and channel metadata, event extraction into a two-dimensional NumPy array, legacy files holding several datasets, and writing a new FCS 3.1.

Metadata-only work comes first: `only_text=True` keeps large or unfamiliar files cheap to open. When you do pull events, pick the semantics on purpose. `as_array(preprocess=True)` applies gain, logarithmic and time scaling taken from the FCS metadata; `preprocess=False` returns decoded values without those steps. Keys in `flow.text` are lowercase with the leading `$` stripped, so look up `date`, not `$DATE`. One catch: FlowIO 1.4.0 strips every `$` character from the decoded TEXT segment, including ones inside values, so keep the original file when exact metadata fidelity matters.

Compensation, logicle/biexponential transforms, gating and FlowJo workspaces are out of scope — FlowKit handles those. You need Python 3.9–3.13, `uv` and FlowIO 1.4.0; NumPy comes with the library, pandas is optional. Parsing runs locally with no credentials or network. Writing through `create_fcs()` takes an already-open binary handle and flattened one-dimensional event data in row-major order, and the required interpretation keywords are generated by FlowIO — metadata cannot override them.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add K-Dense-AI/scientific-agent-skills --skill flowio -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/flowio/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/flowio/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add K-Dense-AI/scientific-agent-skills --skill flowio -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/flowio/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add K-Dense-AI/scientific-agent-skills --skill flowio -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/flowio/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install K-Dense-AI/scientific-agent-skills flowio
```

2. **Manually: put the files in place**
- File: `.github/skills/flowio/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add K-Dense-AI/scientific-agent-skills --skill flowio -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/K-Dense-AI/scientific-agent-skills --path skills/flowio
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/flowio/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add K-Dense-AI/scientific-agent-skills --skill flowio -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/K-Dense-AI/scientific-agent-skills/tree/HEAD/skills/flowio/SKILL.md

## When to use it
- check the version, event count and channels of an FCS file
- pull TEXT metadata without loading events
- get events as a two-dimensional NumPy array
- open a legacy file with multiple datasets
- write a new list-mode FCS 3.1 file

## Example prompts
- Inspect `sample.fcs` with `only_text=True` and show the version, event count and channel labels
- Extract events from `sample.fcs` with `preprocess=True` and verify the array shape against `$TOT` and `$PAR`
- Open `legacy-multi-dataset.fcs` with `read_multiple_data_sets` and print the event count for each dataset

## Similar
- [anysearch](https://affpapa.org/en/nevibecode/skills/anysearch.md) — skill · 38500 installs
- [academic-paper](https://affpapa.org/en/nevibecode/skills/academic-paper.md) — skill · 10800 installs
- [nature-figure](https://affpapa.org/en/nevibecode/skills/nature-figure.md) — skill · 18800 installs
- [academic-paper-reviewer](https://affpapa.org/en/nevibecode/skills/academic-paper-reviewer.md) — skill · 9800 installs
- [nature-polishing](https://affpapa.org/en/nevibecode/skills/nature-polishing.md) — skill · 17500 installs
- [nature-citation](https://affpapa.org/en/nevibecode/skills/nature-citation.md) — skill · 15600 installs

From the same set: [k-dense-ai/scientific-agent-skills](https://affpapa.org/en/nevibecode/by/k-dense-ai/scientific-agent-skills.md) — 159 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
