Agent skill

Pioreactor Calibration Dev

by Pioreactor in Pioreactor/pioreactor

Create, update, debug, or review Pioreactor calibration routines and session flows in core/pioreactor/calibrations, including calibration data types, CLI and UI behavior, step registries, protocol…

MITAuto-check passedBusiness, Finance & HR

Install Pioreactor Calibration Dev

skills CLI
$ npx skills add Pioreactor/pioreactor --skill pioreactor-calibration-dev -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Pioreactor/pioreactor pioreactor-calibration-dev --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Pioreactor/pioreactor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/pioreactor-calibration-dev .claude/skills/pioreactor-calibration-dev && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pioreactor-calibration-dev
GitHub stars
149
Token cost
~2.9k tokens
SKILL.md length
1,123 words
Files
2 (incl. scripts)
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

Create, update, debug, or review Pioreactor calibration routines and session flows in core/pioreactor/calibrations, including calibration data types, CLI and UI behavior, step registries, protocol…

  • Works in 5 steps: A calibration relates two variables… → The calibration relates them via a… → The Pioreactor has many devices that can… → …
  • Tasks that involve Performance reviews
  • SKILL.md covers Goal, High-level terminology, Tools and Registries (authoritative maps), plus 14 more sections
  • Runs Python scripts from its folder; calls pytest

What it does

Pioreactor Calibration Dev is an agent skill from Pioreactor/pioreactor. Create, update, debug, or review Pioreactor calibration routines and session flows in core/pioreactor/calibrations, including calibration data types, CLI and UI behavior, step registries, protocol registration, persistence paths, charts, tables, and Huey-backed hardware actions.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/generate_calibration_flow_graphs.py`).

It sits in Business, Finance & HR, covering Performance reviews. The repository describes itself as: Hardware and software for accessible, extensible, and scalable bioreactors. Built on Raspberry Pi. The licence is MIT.

When your agent uses it

  • Tasks that involve Performance reviews

Example prompts

  • “/pioreactor-calibration-dev”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. A calibration relates two variables together. One variable is what we can vary and the other is the target.
  2. The calibration relates them via a calibration curve, which is a mapping between the variables.
  3. The Pioreactor has many devices that can be calibrated. A device can have multiple calibrations, but only one can be active at a time.
  4. A protocol creates a calibration for a device. Devices can have multiple protocols.
  5. A calibration can apply to multiple devices. Example: the same calibration can be used for waste and media pumps.

What it can do on your machine

Read from SKILL.md and the folder at commit 0ae14c0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • pytest

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pioreactor Calibration Dev loads about 2.9k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 1,123 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~77
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from Pioreactor/pioreactor at commit 0ae14c0, republished under its MIT licence (© Pioreactor). 1,123 words, ~2,891 tokens.

Download SKILL.mdSave it as .claude/skills/pioreactor-calibration-dev/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
pioreactor-calibration-dev
description
Create, update, debug, or review Pioreactor calibration routines and session flows in core/pioreactor/calibrations, including calibration data types, CLI and UI behavior, step registries, protocol registration, persistence paths, charts, tables, and Huey-backed hardware actions.

Pioreactor Calibration Dev

Goal

Help Codex change Pioreactor calibration protocols and session flows without breaking the storage, CLI, UI, or web-task contracts.

High-level terminology

  1. A calibration relates two variables together. One variable is what we can vary and the other is the target.
  2. The calibration relates them via a calibration curve, which is a mapping between the variables.
  3. The Pioreactor has many devices that can be calibrated. A device can have multiple calibrations, but only one can be active at a time.
  4. A protocol creates a calibration for a device. Devices can have multiple protocols.
  5. A calibration can apply to multiple devices. Example: the same calibration can be used for waste and media pumps.

In practice, calibrations are stored as YAML files in ~/.pioreactor/storage/calibrations/<device>/.

Tools

  • Use scripts/generate_calibration_flow_graphs.py to generate protocol directed graphs.

Registries (authoritative maps)

  • calibration_protocols in core/pioreactor/calibrations/registry.py: maps device -> protocol_name -> CalibrationProtocol class. Populated on subclassing.
  • StepRegistry in core/pioreactor/calibrations/session_flow.py: maps step_id -> SessionStep class per protocol.
  • calibration_actions in core/pioreactor/web/tasks.py: maps action_name -> handler that returns a Huey task, label, and normalizer.

Workflow

  1. Confirm target device and protocol name.
  2. Implement calibration routine to return the correct structs.*Calibration type.
  3. Define session steps as SessionStep subclasses with step_id, render(ctx) -> CalibrationStep, and advance(ctx) -> SessionStep | None.
  4. Provide a StepRegistry mapping {step_id: StepClass} for the protocol.
  5. Expose:
    • start_<protocol>_session(...) -> CalibrationSession
  6. Define a CalibrationProtocol subclass with:
    • target_device, protocol_name
    • title, description, requirements for the UI protocol list
    • step_registry and start_session(...)
    • optional on_session_abort(session, executor=None) for cleanup when UI abort is pressed
  7. Register the protocol in core/pioreactor/calibrations/__init__.py and CLI entrypoint if required.
  8. The UI protocol list is served by /api/workers/<unit>/calibration_protocols (task response). There is no static frontend registry anymore. Update the frontend only if new step types are required.

Session Flow (UI + API)

  • Session engine: core/pioreactor/calibrations/session_flow.py.
  • Steps are classes, not functions. Keep each render and advance single-purpose.
  • Use SessionContext for ctx.data and ctx.complete(...) results.
  • Store calibrations via ctx.store_calibration(calibration, device) so UI can link.
  • Store estimators via ctx.store_estimator(estimator, device) so UI can link.
  • ctx.read_voltage() uses the read_aux_voltage action.
  • For UI sessions, hardware actions must run in Huey tasks via SessionContext.executor.
  • _execute_calibration_action uses the calibration_actions registry with a fixed 300s timeout.

Persistence Contract (Critical)

  • Treat persistence from SessionStep.advance() as mode-sensitive:
    • UI mode runs in Flask (www-data context).
    • Huey tasks run as pioreactor and are the correct place for privileged writes.
  • In UI sessions, always persist through SessionContext helpers:
    • calibrations: ctx.store_calibration(calibration, device)
    • estimators: ctx.store_estimator(estimator, device)
  • Do not call save_to_disk_for_device(...) directly from UI SessionStep.advance().
  • Do not call set_as_active_calibration_for_device(...) directly from UI SessionStep.advance().
  • Why: direct writes from UI steps can create ownership drift (www-data-owned YAMLs) and bypass the session executor/action pipeline.
  • Call chain (UI):
    • ctx.store_calibration / ctx.store_estimator
    • unit_calibration_sessions_api._execute_calibration_action(...)
    • core/pioreactor/web/tasks.py registered action (save_calibration / save_estimator)
    • *.save_to_disk_for_device(...) in Huey task context
  • CLI sessions have no executor; direct save/set-active is acceptable there.
  • Recommended branch pattern:
python
if ctx.mode == "ui":
    save_result = ctx.store_estimator(estimator, device)
    saved_path = save_result["path"]
else:
    saved_path = estimator.save_to_disk_for_device(device)
    estimator.set_as_active_calibration_for_device(device)
  • If you introduce a new persisted artifact type, register a calibration action in core/pioreactor/web/tasks.py and route persistence through the executor in UI mode.

Abort Cleanup Hook (on_session_abort)

  • CalibrationProtocol supports optional:

    • @classmethod
    • def on_session_abort(cls, session: CalibrationSession, executor=None) -> None
  • This is invoked by the unit calibration session abort route before the session is marked aborted.

  • Prefer graceful, cooperative shutdown over process killing:

    • publish b"disconnected" to pioreactor/<unit>/<experiment>/<job_name>/$state/set
    • avoid PID-based kill for jobs launched within Huey task workers.
  • If your protocol starts jobs via /unit_api/jobs/run/job_name/..., store the exact experiment used in session.data. Also specify the JOB_SOURCE in the payload:

      experiment = get_testing_experiment_name()
      job_source = f"fir_bias_trim_{session_id}"
    
      payload = {
          "args": [],
          "options": {
              "automation_name": "thermostat",
              "target_temperature": target_temperature,
          },
          "env": {
              "EXPERIMENT": experiment,
              "JOB_SOURCE": job_source,
          },
          "config_overrides": [],
      }
      response = post_into(
          address,
          "/unit_api/jobs/run/job_name/temperature_automation",
          json=payload,
          timeout=8,
      )
  • Aggregate cleanup failures into one ValueError message when multiple resources fail to stop, so the abort route can surface useful diagnostics.

Field builders for forms in SessionStep

Protocol steps build forms using fields.* helpers from session_flow.py. These correspond to SessionInputs.* accessors used in advance() methods.

  • fields.str(name, label=None, default=None) -> ctx.inputs.str(name, default=..., required=...)
    • field_type: string
    • Use for names, labels, and free-form text.
  • fields.choice(name, options, label=None, default=None) -> ctx.inputs.choice(...)
    • field_type: choice
    • Validates input against the provided options.
  • fields.float_list(name, label=None, default=None) -> ctx.inputs.float_list(...)
    • field_type: float_list
    • Accepts a list of numbers or a comma-separated string.
  • fields.bool(name, label=None, default=None) -> ctx.inputs.bool(...)
    • field_type: bool
    • Accepts true/false and common yes/no string inputs.
  • fields.float(name, label=None, minimum=None, maximum=None, default=None) -> ctx.inputs.float(...)
    • field_type: float
    • Enforces numeric bounds when provided.
    • Supports custom bound errors: min_error_msg and max_error_msg (stored on CalibrationStepField).
  • fields.int(name, label=None, minimum=None, maximum=None, default=None) -> ctx.inputs.int(...)
    • field_type: int
    • Enforces integer bounds when provided.
    • Supports custom bound errors: min_error_msg and max_error_msg (stored on CalibrationStepField).
Show full SKILL.md (416 more words)Show less

Terminal Steps

  • Terminal steps are auto-included by get_session_step, advance_session, and run_session_in_cli.
  • Use ctx.complete(...) to finish; CalibrationComplete renders the result.
  • Use ctx.abort(...) or ctx.fail(...) to end early; CalibrationEnded renders the message.

Chart Snapshots

  • Use step.metadata.chart with:
    • title, x_label, y_label
    • series: [{ id, label, points, curve? }] and points: [{x, y}]
    • Optional curve: { type: "poly", coefficients: [...] }
  • UI renders in frontend/src/components/CalibrationSessionChart.jsx.
  • CLI renders via plotext using plot_data in core/pioreactor/calibrations/utils.py.
  • Optional curve: { type: "spline", coefficients: [knots, coeffs] } where knots is the x‑knot list and coeffs is per‑interval cubic coefficients.

Loading animations for calibration steps

  • Any SessionStep.render() can add step.metadata.loading_images as a list of { src, alt, caption? }.
  • The UI (frontend/src/components/CalibrationSessionDialog.jsx) cycles these frames while sessionLoading is true (after a 250 ms delay). Only one of loading_images or image is shown, and charts/tables are hidden during loading.
  • Frame rate is controlled in the dialog via setInterval(...) (ms per frame).
  • SVG frame assets live under core/pioreactor/web/static/svgs/ (and optionally frontend/public/svgs/ if reused by the frontend directly).

CLI UX Rules (Must Follow)

  • Use pioreactor.calibrations.cli_helpers: info, info_heading, action, action_block, green, red.
  • Prompts are green with prompt_suffix=" " and no trailing colon.
  • Physical steps go in action_block with blank lines around them.
  • Keep calibration output unchanged (computed results, data structures).

Field Bound Validation (UI + CLI)

  • Bounds are validated in the session engine before advance() using the step’s fields definitions.
  • Prefer defining minimum/maximum (and error messages) on the field and calling ctx.inputs.float("name") / ctx.inputs.int("name") without repeating bounds in advance(). This keeps a single source of truth.

Metadata Tables (UI)

  • Use step.metadata.table to render small progress tables in the calibration dialog.
  • Shape: { title?: str, columns?: list[str], rows?: list[list|dict], empty_message?: str }
  • Rows can be arrays (positional) or dicts (values are rendered in Object.values order).
  • Tables render in frontend/src/components/CalibrationSessionDialog.jsx and appear above the step body.

Hardware Access (Huey)

  • Web API runs as www-data; hardware access must be in Huey.
  • Register actions in core/pioreactor/web/tasks.py via register_calibration_action.
  • Actions return (task, label, normalizer) and are dispatched via _execute_calibration_action.
  • This same action path is the required persistence path for UI session writes.

Implementation Checklist

  • Guard against running jobs with is_pio_job_running when appropriate.
  • Capture metadata with get_unit_name, get_testing_experiment_name, current_utc_datetime.
  • Use existing helpers in core/pioreactor/calibrations/utils.py for curve fitting.
  • Adding a new Step? Make sure to add it to the StepRegistry associated.
  • In UI step code, never directly call save_to_disk_for_device / set_as_active_calibration_for_device; use ctx.store_calibration / ctx.store_estimator.
  • Use existing helpers in core/pioreactor/calibrations/utils.py for curve fitting and curve_to_callable.
  • For spline fits, use pioreactor.utils.splines.spline_fit and store curve_type="spline" with the [knots, coefficients] payload.

Tests

  • Use pytest with a specific file or directory, e.g. pytest core/tests/web/ (activate venv first).

© Pioreactor, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (scripts) in .agents/skills/pioreactor-calibration-dev of Pioreactor/pioreactor.

  • SKILL.md
  • scripts/generate_calibration_flow_graphs.py

Open the folder on GitHubat commit 0ae14c0

Compare with similar skills

Pioreactor Calibration Dev next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pioreactor Calibration Dev compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pioreactor Calibration Dev this skillPioreactor/pioreactor149—~2.9kAutomated safety check: PassMIT
Wp Performance Reviewelvismdev/claude-wordpress-skills2341 repos~4.5kAutomated safety check: PassMIT
Align Humanagentscope-ai/OpenJudge867—~3.1kAutomated safety check: PassApache-2.0
Performance ReportAffitor/affiliate-skills6981 repos~2.5kAutomated safety check: PassMIT
Run Mv Hoi Reconstructionnvidia-isaac/video_to_data847—~1.5kAutomated safety check: PassCustom licence
Company Analysiszhu1090093659/dsh-trading230—~4.2kAutomated safety check: PassCustom licence

Similar skills

  • Wp Performance Review

    elvismdev/claude-wordpress-skills

    WordPress performance code review and optimization analysis.

    234 GitHub starsUsed in 1 repo~4.5k tokens
    Business, Finance & HRAuto-check passed
  • Align Human

    agentscope-ai/OpenJudge

    A skill your agent uses when the user has a judge/grader and human-labeled data, and wants to measure how well the judge agrees with humans, detect systematic biases, determine whether automatic…

    867 GitHub stars~3.1k tokensUpdated 26 days ago
    Business, Finance & HRAuto-check passed
  • Performance Report

    Affitor/affiliate-skills

    Generate affiliate performance reports with KPIs and recommendations.

    698 GitHub starsUsed in 1 repo~2.5k tokens
    Business, Finance & HRAuto-check passed
  • Run Mv Hoi Reconstruction

    nvidia-isaac/video_to_data

    Run and validate the repository-local multi-view camera calibration and human-object reconstruction pipelines.

    847 GitHub stars~1.5k tokensUpdated yesterday
    Business, Finance & HRAuto-check passed
  • Company Analysis

    zhu1090093659/dsh-trading

    A skill your agent uses when the user wants to analyze a listed company, stock, business, or investment target; challenge or revise an existing company report; compare A/H or primary-listing/ADR…

    230 GitHub stars~4.2k tokensUpdated 4 days ago
    Business, Finance & HRAuto-check passed
  • Slurm Pipeline Manager

    CliMA/EnsembleKalmanProcesses.jl

    Scaffold and maintain a SLURM/HPC job-dependency tree for an EnsembleKalmanProcesses.jl (EKP) calibration pipeline.

    127 GitHub stars~3.4k tokensUpdated yesterday
    Business, Finance & HRAuto-check passed

More from Pioreactor/pioreactor

  • Pioreactor CLI

    Pioreactor/pioreactor

    A skill your agent uses when running, debugging, documenting, or changing Pioreactor command-line workflows with pio or pios, including local job control, logs, MQTT, config, plugins, calibrations…

    149 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Pioreactor Plugin Jobs

    Pioreactor/pioreactor

    Create, update, debug, or review Pioreactor plugin background jobs, including file-based plugin modules, BackgroundJobContrib or LongRunningBackgroundJobContrib classes, pio run command…

    149 GitHub stars~799 tokensUpdated yesterday
    Auto-check passed
  • Pioreactor Automations

    Pioreactor/pioreactor

    Create, update, debug, or review Pioreactor dosing, temperature, and LED automations, including automation families, config sections, UI descriptors, runtime execution strategies, published…

    149 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Pioreactor Experiment Profiles

    Pioreactor/pioreactor

    Write, edit, review, or debug Pioreactor experiment profile YAML, including profile structure, inputs, common jobs, per-Pioreactor jobs, action timing, expressions, MQTT lookups, and repeat or…

    149 GitHub stars~1k tokensUpdated yesterday
    Auto-check passed

Questions about Pioreactor Calibration Dev

What does Pioreactor Calibration Dev do?

Create, update, debug, or review Pioreactor calibration routines and session flows in core/pioreactor/calibrations, including calibration data types, CLI and UI behavior, step registries, protocol…. Pioreactor Calibration Dev is an agent skill from Pioreactor/pioreactor. Create, update, debug, or review Pioreactor calibration routines and session flows in core/pioreactor/calibrations, including calibration data types, CLI and UI behavior, step registries, protocol registration, persistence paths, charts, tables, and Huey-backed hardware actions.

When should I use Pioreactor Calibration Dev?

Pioreactor Calibration Dev fits situations like: tasks that involve Performance reviews.

How do I install Pioreactor Calibration Dev in Claude Code?

Run `npx skills add Pioreactor/pioreactor --skill pioreactor-calibration-dev -a claude-code`. Or copy the skill folder (.agents/skills/pioreactor-calibration-dev in Pioreactor/pioreactor) into .claude/skills/pioreactor-calibration-dev in your project. Claude Code loads it when a task matches its description.

How do I install Pioreactor Calibration Dev in Codex?

Run `npx skills add Pioreactor/pioreactor --skill pioreactor-calibration-dev -a codex`. Or copy the skill folder (.agents/skills/pioreactor-calibration-dev in Pioreactor/pioreactor) into .agents/skills/pioreactor-calibration-dev in your project. Codex loads it when a task matches its description.

Can I use Pioreactor Calibration Dev in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Pioreactor/pioreactor --skill pioreactor-calibration-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pioreactor-calibration-dev, .gemini/skills/pioreactor-calibration-dev, .github/skills/pioreactor-calibration-dev and .opencode/skills/pioreactor-calibration-dev in your project.

What does Pioreactor Calibration Dev need to run?

Going by SKILL.md and its folder, Pioreactor Calibration Dev needs Python for the scripts in its folder and the command-line tools its instructions call (pytest). Our summary lists: Python 3.

Does Pioreactor Calibration Dev access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Pioreactor Calibration Dev safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Pioreactor Calibration Dev use?

Pioreactor Calibration Dev is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pioreactor Calibration Dev use?

About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pioreactor Calibration Dev?

Skills that share tags, products or a category with Pioreactor Calibration Dev: Wp Performance Review (elvismdev/claude-wordpress-skills, 234 stars), Align Human (agentscope-ai/OpenJudge, 867 stars), Performance Report (Affitor/affiliate-skills, 698 stars) and Run Mv Hoi Reconstruction (nvidia-isaac/video_to_data, 847 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pioreactor Calibration Dev?

Pioreactor (a GitHub organization) maintains it in Pioreactor/pioreactor, which has 149 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 6, 2026.

Source: Pioreactor/pioreactor on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.