React Expert
Jeffallan/claude-skills
Builds React 19 components in TypeScript with Server Components, useActionState forms, custom hooks and state libraries, checked with tsc and React Testing Library.
Protocol Designer (PD) application architecture, Redux slices, step/timeline system, domain concepts, and dev workflow.
$ npx skills add Opentrons/opentrons --skill protocol-designer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Opentrons/opentrons protocol-designer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Opentrons/opentrons.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/protocol-designer .claude/skills/protocol-designer && rm -rf skills-srcUse ~/.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/
Install the "protocol-designer" agent skill from https://github.com/Opentrons/opentrons/tree/edge/.cursor/skills/protocol-designer into .claude/skills/protocol-designer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "protocol-designer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Opentrons/opentrons/tree/edge/.cursor/skills/protocol-designerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Opentrons/opentrons --skill protocol-designer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Opentrons/opentrons protocol-designer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Opentrons/opentrons.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.cursor/skills/protocol-designer .agents/skills/protocol-designer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "protocol-designer" agent skill from https://github.com/Opentrons/opentrons/tree/edge/.cursor/skills/protocol-designer into .agents/skills/protocol-designer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "protocol-designer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Opentrons/opentrons --skill protocol-designer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Opentrons/opentrons protocol-designer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Opentrons/opentrons.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.cursor/skills/protocol-designer .cursor/skills/protocol-designer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "protocol-designer" agent skill from https://github.com/Opentrons/opentrons/tree/edge/.cursor/skills/protocol-designer into .cursor/skills/protocol-designer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "protocol-designer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Opentrons/opentrons.git --path .cursor/skills/protocol-designer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Opentrons/opentrons --skill protocol-designer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Opentrons/opentrons protocol-designer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Opentrons/opentrons.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.cursor/skills/protocol-designer .gemini/skills/protocol-designer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "protocol-designer" agent skill from https://github.com/Opentrons/opentrons/tree/edge/.cursor/skills/protocol-designer into .gemini/skills/protocol-designer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "protocol-designer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Opentrons/opentrons protocol-designerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Opentrons/opentrons --skill protocol-designer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Opentrons/opentrons.git skills-src && mkdir -p .github/skills && cp -r skills-src/.cursor/skills/protocol-designer .github/skills/protocol-designer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "protocol-designer" agent skill from https://github.com/Opentrons/opentrons/tree/edge/.cursor/skills/protocol-designer into .github/skills/protocol-designer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "protocol-designer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Opentrons/opentrons --skill protocol-designer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Opentrons/opentrons protocol-designer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Opentrons/opentrons.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.cursor/skills/protocol-designer .opencode/skills/protocol-designer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "protocol-designer" agent skill from https://github.com/Opentrons/opentrons/tree/edge/.cursor/skills/protocol-designer into .opencode/skills/protocol-designer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "protocol-designer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
protocol-designerProtocol Designer (PD) application architecture, Redux slices, step/timeline system, domain concepts, and dev workflow.
Protocol Designer is an agent skill from Opentrons/opentrons. Protocol Designer (PD) application architecture, Redux slices, step/timeline system, domain concepts, and dev workflow. Use when working with files in protocol-designer/ or discussing PD features, steps, timelines, or protocol design.
Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Frontend & Design, covering State management. It works with Redux and TypeScript. The repository describes itself as: Software for writing protocols and running them on the Opentrons Flex and Opentrons OT-2. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a14fef9. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
makepnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Protocol Designer loads about 1.7k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 454 words of instructions outside code blocks.
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.
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); files beside SKILL.md are not scanned.
The full file from Opentrons/opentrons at commit a14fef9, republished under its Apache-2.0 licence (© Opentrons). 454 words, ~1,674 tokens.
.claude/skills/protocol-designer/SKILL.md (or your agent's skills folder).General TypeScript, React, styling, testing, import, and tooling conventions are in the opentrons-typescript skill. This file covers only what is unique to the protocol-designer package.
Protocol Designer (PD) is a React + Redux + React Router + TypeScript web app for designing Opentrons liquid-handling protocols. It depends on @opentrons/components, @opentrons/shared-data, and @opentrons/step-generation. It follows an atomic design system.
PD uses Redux (legacy createStore) with redux-thunk and reselect. The store shape is BaseState in src/types.ts.
Each slice directory contains reducers/, actions/, selectors/, and types.ts:
| Slice | Key | Purpose |
|---|---|---|
analytics | analytics | Event tracking |
dismiss | dismiss | Dismissible UI elements |
feature-flags | featureFlags | Feature flags (OT_PD_* env vars) |
file-data | fileData | Protocol file data and export |
labware-ingred | labwareIngred | Labware, ingredients, deck state |
load-file | loadFile | File loading/parsing |
navigation | navigation | Navigation state |
step-forms | stepForms | Saved step forms, pipettes, modules, labware entities |
tutorial | tutorial | Tutorial/hint state |
ui | ui | UI state (steps, labware, wells) |
well-selection | wellSelection | Well selection state |
timelineMiddleware — generates robot state timeline from stepstrackEventMiddleware — analytics event trackingthunk — async action supportUse reselect createSelector for all derived state. Per-slice selectors go in selectors/ directories. Cross-slice selectors go in src/top-selectors/.
import { createSelector } from 'reselect'
export const getLabwareNicknamesById = createSelector(
getLabwareEntities,
labwareEntities => mapValues(labwareEntities, e => e.nickname)
)import type { ThunkAction } from '/protocol-designer/types'
export const myThunk = (): ThunkAction<any> => (dispatch, getState) => {
const state = getState()
dispatch({ type: 'MY_ACTION', payload: someSelector(state) })
}robotState and commandsstepForms.savedStepForms (keyed by step ID)stepForms.orderedStepIds arraystepFormToArgs() → command args@opentrons/step-generation command creators → protocol commandscommandCreatorsTimeline() → timeline with robot stateNormalized by ID in Redux:
labwareInvariantProperties — labware on deckpipetteInvariantProperties — pipettes by mountmoduleInvariantProperties — hardware modulesAccess via selectors: getLabwareEntities, getPipetteEntities, getModuleEntities.
Pages live in src/pages/:
Designer/ — main protocol design canvas and step editingLanding/ — start screenLiquids/ — liquid definitions managementProtocolOverview/ — protocol summarySettings/ — user settingsHardware/ — hardware configurationOnboarding/ — first-run flowFeature directories use kebab-case matching the Redux slice name: step-forms/, file-data/, labware-ingred/, well-selection/, etc.
The /protocol-designer/ path alias maps to src/. Use it for imports across feature directories:
import { getFileMetadata } from '/protocol-designer/file-data/selectors'
import type { BaseState } from '/protocol-designer/types'Uses react-i18next. Translation files in src/assets/localization/.
Common namespaces: 'starting_deck_state', 'protocol_steps', 'shared', 'application'.
const { t } = useTranslation(['protocol_steps', 'shared'])
return (
<>
<span>{t('step_title')}</span>
<span>{t('shared:step_body')}</span>
</>
)Always use translation keys for user-facing strings — never hardcode display text.
Use renderWithProviders from protocol-designer/src/__testing-utils__/:
import { renderWithProviders } from '/protocol-designer/__testing-utils__'Run from the protocol-designer/ directory:
| Target | Description |
|---|---|
make dev | Start Vite dev server (port 5178) |
make build | Production build (8GB heap) |
make serve | Build then preview production assets |
make clean | Remove dist/ |
make test | Run PD tests (delegates to root make test-js-protocol-designer) |
make test-cov | Tests with coverage |
make bundle-analyzer | Analyze production bundle size |
# Run a specific test file
make test tests="src/components/organisms/__tests__/MyComponent.test.tsx"
# Run vitest directly from monorepo root
pnpm vitest protocol-designer/src/step-forms/PD feature flags use OT_PD_* env vars, injected at build time via Vite define. NODE_OPTIONS=--max-old-space-size=8192 is set automatically by the Makefile for dev, build, and serve.
© Opentrons, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .cursor/skills/protocol-designer of Opentrons/opentrons.
Open the folder on GitHubat commit a14fef9
Protocol Designer 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Protocol Designer this skillOpentrons/opentrons | 521 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| React ExpertJeffallan/claude-skills | 12k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Zustand Patternsyonatangross/orchestkit | 289 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Zustand State Managementsecondsky/claude-skills | 227 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Olore Zustand Latestolorehq/olore | 104 | — | ~881 | Automated safety check: Pass | MIT | |
| JavaScript IO Effects With Sagasparalleldrive/aidd | 384 | — | ~587 | Automated safety check: Pass | MIT |
Jeffallan/claude-skills
Builds React 19 components in TypeScript with Server Components, useActionState forms, custom hooks and state libraries, checked with tsc and React Testing Library.
yonatangross/orchestkit
Reference for Zustand 5.x state management including slices, middleware, Immer, useShallow, persistence, selectors, and devtools integration.
secondsky/claude-skills
Zustand state management for React with TypeScript. An agent skill from secondsky/claude-skills.
olorehq/olore
Local Zustand documentation reference (latest). An agent skill from olorehq/olore.
paralleldrive/aidd
Teaches the saga pattern with call and put so network requests and side effects stay out of the logic and sagas can be tested without mocks.
bear2u/my-skills
A skill your agent uses when user wants to create a new Next.js 15 project (Todo/Blog/Dashboard/E-commerce/Custom domain) with App Router, ShadCN, Zustand, Tanstack Query, and modern Next.js stack
Opentrons/opentrons
Conventions for the opentrons-ai-client React/TypeScript frontend — project structure, API integration, state management (Jotai), feature flags, types, and testing.
Opentrons/opentrons
Conventions for the opentrons-ai-server FastAPI service — project structure, uv dependency management, settings, testing, Docker, and deployment.
Opentrons/opentrons
Conventions for the analyses snapshot testing framework in analyses-snapshot-testing/.
Opentrons/opentrons
CSS Modules conventions, Stylelint rules, design tokens (spacing, colors, typography, border-radius), and patterns for the Opentrons monorepo.
Opentrons/opentrons
Authoring and styling guidelines for the Opentrons /docs MkDocs project.
Opentrons/opentrons
E2E testing conventions for Protocol Designer and Labware Library using Playwright + pytest in e2e-testing/.
Works with
Categories
Protocol Designer (PD) application architecture, Redux slices, step/timeline system, domain concepts, and dev workflow. Protocol Designer is an agent skill from Opentrons/opentrons. Protocol Designer (PD) application architecture, Redux slices, step/timeline system, domain concepts, and dev workflow.
Protocol Designer fits situations like: working with files in protocol-designer/; discussing PD features; protocol design.
Run `npx skills add Opentrons/opentrons --skill protocol-designer -a claude-code`. Or copy the skill folder (.cursor/skills/protocol-designer in Opentrons/opentrons) into .claude/skills/protocol-designer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Opentrons/opentrons --skill protocol-designer -a codex`. Or copy the skill folder (.cursor/skills/protocol-designer in Opentrons/opentrons) into .agents/skills/protocol-designer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Opentrons/opentrons --skill protocol-designer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/protocol-designer, .gemini/skills/protocol-designer, .github/skills/protocol-designer and .opencode/skills/protocol-designer in your project.
Going by SKILL.md and its folder, Protocol Designer needs the command-line tools its instructions call (make and pnpm).
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.
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. Review the folder before installing.
Protocol Designer is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Protocol Designer: React Expert (Jeffallan/claude-skills, 12k stars), Zustand Patterns (yonatangross/orchestkit, 289 stars), Zustand State Management (secondsky/claude-skills, 227 stars) and Olore Zustand Latest (olorehq/olore, 104 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Opentrons (a GitHub organization) maintains it in Opentrons/opentrons, which has 521 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 7, 2026.
Source: Opentrons/opentrons on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.