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.

  1. Type /connect. The wizard lists the supported providers.
  2. Move to a provider with the arrow keys and press Enter.
  3. 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.
  4. 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.
  5. 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
  • Google
  • 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 typeIt 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 areWhat 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:

  1. It checks that biocontext is on the PATH and that the platform is macOS.
  2. It starts one biocontext session on an allocated PTY and keeps it open for the whole task.
  3. It sends a package-scoped question such as @bioc:DESeq2, then sends the Enter key as a separate write.
  4. It polls until the output reports run /copy to copy message to clipboard, then runs /copy and reads the exchange with pbpaste.
  5. 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.