Docs
- Platform
- macOS, Apple Silicon or Intel
- Requires
- Bun and a model provider
- Network
- Provider, GitHub, bioconductor.org
01
Install
The package and the command it installs are both named biocontext.
Or run from a checkout:
$ git clone https://github.com/ZohebKhan1/bioc-context
$ cd bioc-context && bun install
$ bun link --cwd apps/tui bun link requires ~/.bun/bin on your PATH. Start the
app with biocontext.
The first launch writes a config file and a data directory. It then downloads eleven common
packages in the background. Each one appears under @ when it finishes.
02
Connect a model
biocontext sends your question and the passages it retrieves to a model provider. Run
/connect once to choose the provider and the model.
- Type
/connect. The wizard lists the supported providers. - Move to a provider with the arrow keys and press Enter.
-
Authenticate. The step depends on the provider you chose:
- A provider that uses OAuth opens your browser. Approve the request there, then return to the terminal.
- A provider that uses an API key prompts for the key in the terminal.
- OpenAI-compatible asks for a base URL, a provider name, a model ID, and an optional key.
-
Select a model. The OpenAI picker lists GPT-5.6 Luna at low, medium, and high reasoning.
Choose
Custom model ID...to type an ID the picker does not list. -
Press Enter. biocontext writes the provider, model, and reasoning level to
~/.config/bioc-context/bioc-context.config.jsonc.
A new installation defaults to GPT-5.6 Luna at medium reasoning through OpenAI.
- OpenAI
- Anthropic
- OpenRouter
- GitHub Copilot
- MiniMax
- OpenCode
- OpenAI-compatible
Run /connect again to change provider or model. To set it in a file instead:
{
"provider": "openai",
"model": "gpt-5.6-luna",
"providerOptions": {
"openai": { "reasoningEffort": "medium" }
}
}
The reasoning level is a request parameter, so it belongs under
providerOptions rather than in the model ID. Luna access depends on your
account. If it is unavailable, /connect reports the error and you can select
another model.
The provider adapter holds your credentials. biocontext does not write them into the config file or the documentation corpus, and it reports no analytics or telemetry.
03
Ask
Type the question. A new thread starts with the bundled Bioconductor corpus in scope.
› What design formula should I use for a paired DESeq2 experiment? The answer lists every document it read. Each path links to its page on bioconductor.org.
Scope
A mention sets which documentation biocontext searches. Each mention replaces the current scope.
| You type | It searches |
|---|---|
@DESeq2 | That package alone. |
@DESeq2 @apeglm | Those two packages. |
| (no mention) | The packages the last mention selected. |
@Bioconductor | Every configured resource and installed package cache. |
@bioc:DESeq2 | The package cache, when a resource shares the name. |
The @ palette lists only the packages already on disk, so a keystroke never
starts a download. biocontext reads pasted code as text, so a Roxygen tag such as
@import stays part of the question.
Add a package
/add searches names, titles, and biocViews across the four Bioconductor
repositories. Press Enter to install the package and add it to @.
An install downloads every published document type and a filtered source checkout. Press ^S to skip the source clone.
/add also accepts a CRAN package, a Git repository, or a local folder.
Package contents
DESeq2/
README.md index, versions, citation
vignettes/*.md published vignettes as Markdown
vignettes/*.R runnable chunks from those vignettes
reference-manual.md Rd help pages
NEWS.md when published
source/ filtered R/, man/, src/, vignettes/
biocontext drops plots, stylesheets, and test fixtures. Most packages publish HTML vignettes, and
about a quarter publish PDF. PDF text loses some spacing, so read the .R scripts
when you need exact code.
An install tracks the current Bioconductor release. biocontext caches the catalog for a week.
Use cases
Bioconductor documents its packages well, but it spreads the answer across a vignette, an Rd page, and a NEWS entry. Finding it means leaving the terminal for a browser and returning with a paraphrase.
biocontext puts that corpus in the terminal where you work. It serves the R user in the middle of an analysis, where the question is specific, the package is installed, and a guess produces a wrong result rather than an error.
| When you are | What biocontext does |
|---|---|
| You are writing a design formula | Returns the design-formula sections of the DESeq2, edgeR, and limma vignettes together, so a batch or paired design comes from the manual. |
| You meet an unfamiliar S4 class | Answers from the reference manual for that class, and reports which accessors the package exports. |
| Code that ran last release now fails | Reads the NEWS file for the installed version and names the function that was renamed, deprecated, or moved. |
| You do not know which package to use | Searches names, titles, and biocViews across the four Bioconductor repositories for the assay or organism you name. |
| You are reproducing a published workflow | Returns the runnable .R chunks from the vignette, which are the code the authors ran. |
A question, its scope, and the paths the answer came from:
› @DESeq2 Is it valid to add a batch term when the batches are nested in donor?
Nested batches are not identifiable in the same design as donor. The
vignette handles this by collapsing to within-donor contrasts.
read DESeq2/vignettes/DESeq2.md § Group-specific condition effects
read DESeq2/reference-manual.md § collapseReplicates Every claim ends at a file you can open. Each path links to its page on bioconductor.org, so you can check the section the answer used.
biocontext searches only what is on disk. If a package is not installed, biocontext reports that instead of answering from the model’s memory of the name.
Agent skill
Coding agents write fluent R that is one release out of date: an argument that moved, an accessor the package no longer exports, a workflow that was correct in the paper the model read. The code runs, so the error is quiet.
The BioContext skill gives an agent the same corpus you query. Claude Code and Codex can
check the installed version before they write against an API, without leaving the session.
Install the skill under ~/.agents/skills/biocontext/.
The skill runs this loop:
-
It checks that
biocontextis on thePATHand that the platform is macOS. -
It starts one
biocontextsession on an allocated PTY and keeps it open for the whole task. -
It sends a package-scoped question such as
@bioc:DESeq2, then sends the Enter key as a separate write. -
It polls until the output reports
run /copy to copy message to clipboard, then runs/copyand reads the exchange withpbpaste. - It keeps the returned package version and source citations, and writes the smallest change the evidence justifies.
The TUI and the agent read the same documents, so the answer does not change with who asked for it.
The skill grounds an API contract in the installed documentation. It does not run your R. Test the code it writes before you trust a scientific result.
Commands
/connect | Set the provider and model |
/add | Search the catalog and install a package resource |
/remove | Delete an installed package resource |
/clear /new | Clear the thread |
/resume | Open a previous thread |
/copy | Copy the last question and answer |
/copy-all | Copy the whole thread |
Files
~/.config/biocontext/bioctx.config.jsonc- Provider, model, and resources, in JSONC.
./bioctx.config.jsonc- Optional per-project overrides. biocontext merges resources by name.
~/.local/share/bioc-context/- Bundled corpus, package caches, and thread history.
The bundled corpus is a snapshot. If a scientific or clinical decision depends on the answer, check the current release, the package source, or the primary literature.