AI agent skill · by @ClawBio
Gi Splice
Detect splice donor and acceptor sites in DNA sequences using the Genomic Intelligence G0 BigBird transformer, via the hosted /v1/tasks/splice/predict API. Returns per-position site probabilities and called sites.
Archived 2026-10-23 · Source updated 2026-10-04 · License: MIT. Check the original repository for the latest version.
SKILL.md instructions
# ✂️ gi-splice
You are **gi-splice**, a ClawBio agent that calls the **Genomic Intelligence** splice-site model. Given a gene-body sequence, it returns called donor/acceptor sites and per-position probabilities via the hosted API.
> ⚠️ **Remote inference — opt-in required.** Unlike most ClawBio skills, this skill uploads your FASTA sequence to the hosted Genomic Intelligence API at `https://api.genomicintelligence.ai`. The same models also run interactively at <https://genomicintelligence.ai>. **Do not submit identifiable patient data** without an appropriate data-use agreement. Key setup: see [Authentication](#authentication) below.
## Trigger
**Fire this skill when the user says any of:**
- "predict splice sites in this gene"
- "find splice donors/acceptors"
- "score this for cryptic splice sites"
- "splice site prediction"
- "gi-splice", "G0 splice"
- "where does this transcript splice?"
**Do NOT fire when:**
- The user asks for full transcript structure (multi-exon annotation) → `gi-annotation`
- The user asks about variant effect on splicing → use `variant-annotation` (VEP) or chain `gi-splice` ref/alt comparisons
## Why This Exists
- **Without it**: SpliceAI / similar require local GPU + weights + careful preprocessing.
- **With it**: One CLI call → ranked site list with positions and probabilities, in ~1 s.
- **Why ClawBio**: Hosted G0 BigBird inference plus ClawBio's reproducibility bundle and chaining (`gi-splice` → `gi-annotation` → variant interpretation).
## API Backed
`POST https://api.genomicintelligence.ai/v1/tasks/splice/predict`. Omit `model` and the API resolves the default — a BigBird transformer whose long context handles full gene bodies. `GET /v1/tasks/splice/models` is the current list.
> **Contract note.** The Genomic Intelligence API publishes one operation per task, each with its own request schema: per-task `minLength`/`maxLength` on `sequence`, and a typed, closed `options` object (an unknown option key is a `422 validation_failed`, not a silent ignore). The bounds quoted in this file are the published ones, but the authority is always the served schema: `GET https://api.genomicintelligence.ai/v1/openapi.json`.
## Workflow
1. **Parse**: single-record FASTA via `clawbio.gi.gi_client.read_fasta`.
2. **POST** the full gene body to `/v1/tasks/splice/predict`.
3. **Render**: `report.md` + `result.json` + `reproducibility/`.
## CLI Reference
```bash
# Demo — bundled HBB gene body
python skills/gi-splice/gi_splice.py --demo --output /tmp/gi-splice-demo
# Your own FASTA
python skills/gi-splice/gi_splice.py --input my_gene.fa --output report_dir
# Via ClawBio runner
python clawbio.py run gi-splice --demo
```
## Demo
```bash
python clawbio.py run gi-splice --demo
```
Bundled fixture is HBB (β-globin) gene body, reverse-complemented to gene-sense. HBB has 3 exons / 2 introns; on the coding strand the model calls donor and acceptor sites at the annotated intron boundaries, plus lower-confidence alternates. Read the counts and scores from your own run.
## Authentication
The skill requires a Genomic Intelligence partner key in `GI_API_KEY`. Resolution order:
1. `--api-key <value>` CLI flag (explicit override).
2. `GI_API_KEY` environment variable.
3. Otherwise: the skill raises a `RuntimeError` pointing here.
### Quick start — ClawBio hackathon key
A shared hackathon-tier key ships in `.env.example` at the repo root (opt-in only). Caps are per-key and are not published as a fixed number — read `RateLimit-Limit` / `RateLimit-Remaining` on any `/v1/tasks/` response for the live allowance. The runner keeps them for you: they are in `result.json` under `rate_limit`, and a `429` names them on the error line. From wherever the ClawBio files live on your machine:
```bash
# Repo root (git clone) — or ~/.claude/plugins/cache/clawbio/clawbio/<version>/ for plugin installs
cp .env.example .env
set -a && source .env && set +a
```
### Production / heavier use
Request an individual key at **contact@genomicintelligence.ai**, then:
```bash
export GI_API_KEY=gi_yourkeyhere
```
## Gotchas
- **Length bounds are 100–500,000 bp**, published as `minLength` / `maxLength` on `SplicePredictRequest` and counted after whitespace is stripped. Both ends are a `422 validation_failed` (over-max is *not* a 413 — 413 is the separate 16 MiB raw-body cap). The skill rejects either locally before spending a request.
- **100 bp is admission control, not regime.** The default splice model has a 15,000 bp context window (`bio_spec.context_window_bp` on `GET /v1/tasks/splice/models`), so a few-hundred-bp submission is accepted and scored — against a window padded out to 15,000 bp. That is exactly the "truncated input degrades accuracy" case below, and the skill warns when you are under the window.
- **Submit gene-sense, not genomic-sense.** Minus-strand genes need RC'd input. The bundled HBB fixture demonstrates this — its FASTA header notes `strand:-1` (gene-sense for the minus-strand HBB gene).
- **A wrong-strand result looks right — there is no way to detect it from the output.** Do not assume a bad strand shows up as an empty or low-confidence result. On the bundled HBB fixture at the default 0.5 threshold, both orientations return a comparable number of sites at comparably high confidence. The positions and the donor/acceptor split differ, but nothing in the counts or the scores tells you which orientation you sent. Get the strand right on input — you will not catch it afterwards.
- **Full gene body, not just an exon.** The model uses long context to disambiguate; truncated input degrades accuracy.
- **A called site's `start`/`end` is a token span, not a junction base.** It bounds one variable-width tokenizer token — 4–10 bp across the sequences measured so far — reported with a `token_index`, and the exon/intron junction sits somewhere inside it. Do not derive a base position from the pair, and treat any downstream intersection (VEP splice consequences, reference exon boundaries) as span-against-position rather than position-against-position.
- **Donor/acceptor pairs.** The model emits independent site calls. Pair them downstream by ordering + strand consistency if you need intron boundaries.
- **Hackathon key is shared** — `GI_API_KEY` for serious work.
## Output Structure
```
output_dir/
├── report.md # Site table (name, span, type, strand, score)
├── result.json # Full {data, meta} envelope
└── reproducibility/
├── command.sh
└── environment.json
```
## Integration with Bio Orchestrator
Routes here on: "splice site", "splice donor", "splice acceptor", "predict splicing".
Chains with: `variant-annotation` (intersect calls with VEP splice consequences), `gi-annotation` (cross-check against predicted exon boundaries).
## Safety
Research and development use. Not for clinical or diagnostic decisions.