Native Data Fetching
CherryHQ/cherry-studio-app
A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.
A skill your agent uses when implementing or reviewing code on interaction, render, event, polling, synchronization, list-processing, store-selector, cache, indexing, or high-volume data paths; when…
$ npx skills add openchamber/openchamber --skill performance-engineering -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install openchamber/openchamber performance-engineering --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/openchamber/openchamber.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/performance-engineering .claude/skills/performance-engineering && 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 "performance-engineering" agent skill from https://github.com/openchamber/openchamber/tree/main/.agents/skills/performance-engineering into .claude/skills/performance-engineering/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "performance-engineering", 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/openchamber/openchamber/tree/main/.agents/skills/performance-engineeringType 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 openchamber/openchamber --skill performance-engineering -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install openchamber/openchamber performance-engineering --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openchamber/openchamber.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/performance-engineering .agents/skills/performance-engineering && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "performance-engineering" agent skill from https://github.com/openchamber/openchamber/tree/main/.agents/skills/performance-engineering into .agents/skills/performance-engineering/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "performance-engineering", 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 openchamber/openchamber --skill performance-engineering -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install openchamber/openchamber performance-engineering --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openchamber/openchamber.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/performance-engineering .cursor/skills/performance-engineering && 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 "performance-engineering" agent skill from https://github.com/openchamber/openchamber/tree/main/.agents/skills/performance-engineering into .cursor/skills/performance-engineering/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "performance-engineering", 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/openchamber/openchamber.git --path .agents/skills/performance-engineering--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 openchamber/openchamber --skill performance-engineering -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install openchamber/openchamber performance-engineering --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openchamber/openchamber.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/performance-engineering .gemini/skills/performance-engineering && 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 "performance-engineering" agent skill from https://github.com/openchamber/openchamber/tree/main/.agents/skills/performance-engineering into .gemini/skills/performance-engineering/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "performance-engineering", 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 openchamber/openchamber performance-engineeringInstalls 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 openchamber/openchamber --skill performance-engineering -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/openchamber/openchamber.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/performance-engineering .github/skills/performance-engineering && 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 "performance-engineering" agent skill from https://github.com/openchamber/openchamber/tree/main/.agents/skills/performance-engineering into .github/skills/performance-engineering/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "performance-engineering", 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 openchamber/openchamber --skill performance-engineering -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install openchamber/openchamber performance-engineering --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openchamber/openchamber.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/performance-engineering .opencode/skills/performance-engineering && 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 "performance-engineering" agent skill from https://github.com/openchamber/openchamber/tree/main/.agents/skills/performance-engineering into .opencode/skills/performance-engineering/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "performance-engineering", 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.
performance-engineeringA skill your agent uses when implementing or reviewing code on interaction, render, event, polling, synchronization, list-processing, store-selector, cache, indexing, or high-volume data paths; when…
Performance Engineering is an agent skill from openchamber/openchamber. Use when implementing or reviewing code on interaction, render, event, polling, synchronization, list-processing, store-selector, cache, indexing, or high-volume data paths; when users report lag, freezes, jank, high CPU, memory growth, slow startup, or performance regressions; and before accepting memoization or caching as a fix for repeated work.
Its SKILL.md is about 4.9k 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 Backend & APIs, covering Caching and Mobile performance. The repository describes itself as: Agentic Development Environment based on OpenCode AI agent. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit eabe419. 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:
bungitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, 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.
Performance Engineering loads about 4.9k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 2,576 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 openchamber/openchamber at commit eabe419, republished under its MIT licence (© openchamber). 2,576 words, ~4,929 tokens.
.claude/skills/performance-engineering/SKILL.md (or your agent's skills folder).Optimize the amount and frequency of work before optimizing individual operations.
Core principle: Make expensive work structurally unnecessary. A fast inner function still freezes the app when called millions of times on the main thread.
Load sync-state-invariants when an optimization changes state authority, reconciliation, optimistic data, event ordering, cache lifecycle, or destructive cleanup. This skill owns measured cost; sync-state-invariants owns state correctness.
Define before editing:
| Dimension | Required answer |
|---|---|
| Interaction | Which user action or event must remain responsive? |
| Scale | Realistic and worst-known entity counts |
| Budget | Target latency, frame time, CPU, memory, or operation count |
| Path | Main thread, worker, server, network, disk, or mixed |
| Semantics | Ordering, ownership, freshness, failure, and partial-data invariants |
Do not optimize against a toy fixture when the report provides production scale.
Complete the numbered workflow in order. An optimization is complete only when the exact measured scenario meets its budget and separate correctness checks preserve every applicable state, identity, layout, and lifecycle transition.
A measurement setup that is wrong produces clean, confident, wrong numbers, and a clean number ends an investigation. Establish validity first.
Prove the environment is not throttled. Chrome stops producing frames and throttles timers for windows it considers backgrounded or occluded, headless or not. A capture taken that way reports near-zero rendering work no matter what the page does. Disable background/occlusion throttling at launch and measure frame liveness inside the capture. The same applies to any environment that idles when unobserved.
Prove zero is a measurement. A metric reading zero, absent, or perfectly
quiet is a claim that requires evidence, because a disabled instrument reports
exactly the same thing. RunTask only appears under the disabled-by-default
timeline category; a scenario opened for the wrong directory renders nothing at
all. Before believing a quiet result, confirm the instrument fired and the
workload actually ran: assert on an independent signal, such as DOM growth
alongside the application's own render counters.
Prove the workload is comparable. When the stimulus varies in size between runs, per-second and total figures are not comparable. Normalise by units of work delivered, and check run-to-run spread on an unchanged build before attributing any difference to a change.
Do not report a number whose validity you have not established. State which validity checks ran.
Do not infer a bottleneck from code appearance when a trace or counter can identify it.
Treat every proposed optimization as a hypothesis. Memoization, caches, indexes, workers, scheduling, retries, and lifecycle machinery must address an observed cost or failure in the measured path; “could be slow” or “might race” is not evidence. Keep only the smallest mechanism that meets the contract, except where an inherent security, data-loss, destructive-operation, or concurrency invariant requires proactive protection.
Never accept an "after" without a "before" on the identical scenario and build. Measuring a fixed build against a remembered number, a different scenario, or a nearby baseline proves nothing: the mechanism you changed may not even execute in the path you measured. Re-run the unchanged build through the same scenario, however inconvenient the rebuild. Expect to discover that a plausible fix changes nothing.
A sampling profiler cannot explain native work. Self time attributed to
(program) says only that the time was not in interpreted JavaScript. Use the
timeline trace, which names parsing, style recalculation, layout, layerization,
paint, and raster, and reserve the sampler for attributing application code.
Reproduction may require production scale you do not have. A threshold effect is invisible below its threshold, and a development workspace is usually below it. When a report will not reproduce, compare the reporter's scale against yours on the specific dimension the code keys on before concluding the bug is absent.
Profiling identifies where time is spent; it does not prove behavioral equivalence. Separately verify the applicable state, identity, layout, and lifecycle transitions for every structural optimization.
Name every multiplying dimension:
consumers × events × projects × sessions × candidate pathsFor each factor, record:
Treat hidden fanout as real work. Equality checks may prevent renders while selectors, aggregation, sorting, and allocation still execute.
Classify each input:
Define invalidation before adding a cache. Prefer a stronger source of truth over inference.
For destructive consumers, represent completeness explicitly. An incomplete empty bucket means "unknown", not "delete everything".
Track completeness at the smallest destructive scope. One failed project/entity blocks cleanup for itself, not for unrelated complete scopes.
Do not jump to a worker to hide avoidable work. Do not add a global store when a local shared index has the correct lifetime.
Replace repeated questions with maintained answers:
// Bad: every consumer asks every item about every owner.
for (const project of projects) {
const items = sessions.filter((session) => belongsTo(project, session, topology));
}
// Good: resolve ownership once, then read direct buckets.
const sessionsByProject = new Map<string, Session[]>();
for (const session of sessions) {
const projectId = ownership.resolve(session.directory);
if (projectId) append(sessionsByProject, projectId, session);
}Prefer indexes keyed by stable IDs. Keep high-frequency runtime state out of metadata indexes unless it changes membership.
React.memo, useMemo, or Zustand equality to prevent selector execution upstream.useLayoutEffect; do not wait visible frames before compensation.Virtualization changes layout, mounting, measurement, focus, and scroll semantics. It is not behaviorally equivalent merely because steady-state visible rows look the same.
Before virtualizing a collection, define:
Lists here use @tanstack/react-virtual; the chat transcript uses LegendList (components/chat/lib/scroll/DOCUMENTATION.md). Known traps: a virtualizer enabled before its scroll element exists caches offset 0 and scrolls the scroller to the top on attach, so enable it only once the element is known; row margins collapse in plain flow but not across virtual wrappers, so spacing doubles when virtualization kicks in; getVirtualItems()[0] is the overscan boundary, not the first visible row; a scroller hosting a virtualizer sets overflow-anchor: none. bun-patches/@tanstack+virtual-core+*.patch clamps the render range to real scroll bounds inside a shared scroller: carry it over when bumping the dependency.
When activation is threshold-based, test threshold minus one, threshold, and threshold plus one. Also test applicable collapsed/expanded, hidden/visible, filtered/unfiltered, and short/long transitions. If the current DOM or scroll topology cannot expose the virtual tail reliably, correct that topology or retain normal rendering rather than virtualizing solely by item count.
Add a cache only when all are explicit:
Do not introduce a cache merely to make an abstraction reusable or prepare for future consumers. First prove repeated work in the real path; then place the cache with the narrowest owner and lifetime that can invalidate it correctly.
A cache inside an O(consumers × entities × candidates) loop is a mitigation, not automatically a complete fix.
useOnDemandComponent (hooks/useOnDemandComponent.ts): import first, then render. A React.lazy component behind Suspense holds its real content at least 300 ms after the fallback shows (React's fallback throttle), whatever the CPU.lib/background-network.ts gate (a cap, not priority: 'low', which changes nothing), and slow third-party reads get a cap and a timeout.ls-remote, fetch) where local refs answer. Batch into one read (git remote -v, not get-url per remote), keep a fallback when the batched read fails, prove the output matches the old method, and parse with /\r?\n/: Git for Windows may print CRLF, and spawns cost more there.scripts/perf/DOCUMENTATION.md is the entry point: it covers every capture
command, how to stand up a production build to measure against, how to read the
artifacts, and the validity guarantees these scripts enforce. Read it before
measuring.
Five unattended capture commands exist; prefer them over ad-hoc timing code, and extend them when a scenario is missing rather than measuring by hand.
| Command | Answers |
|---|---|
bun run profile:idle | What the app does while nobody interacts with it. Supports --session, --tab, --then-tab, --panel, --expand-projects to reach a specific mounted state, plus --baseline and --budget-* for regression gating. |
bun run profile:session | What a streaming assistant response costs. Creates a session, dispatches a prompt through the openchamber session CLI, and records until the session reports idle. Reports the long-task distribution, a timeline-trace breakdown, running animations, and output-normalised metrics. |
bun run profile:animation | What a CSS animation costs, isolated from the app. Animate only transform and opacity; everything else recalculates style every frame. |
bun run profile:switch | How long switching sessions from the sidebar takes: ack (the clicked row highlights) and content (the target session's messages are on screen), cold and warm, plus the requests each switch fires. Use it as the regression gate for any change in the sidebar, header, chat container, or markdown first paint. |
bun run profile:browser | A manually driven capture when the interaction cannot be scripted. |
Both automated commands fail loudly rather than reporting a clean result when the renderer was throttled, the trace collected no tasks, or the scenario never rendered. Keep that property when extending them.
Measure a production build. A development build's render and bundle behaviour does not represent what users run.
Require both correctness and performance guards:
State what was not measured. Never claim a freeze is fixed from type-check and unit tests alone.
A change that does not move its target metric is not a small win, a safety improvement, or a cleanup. It is unvalidated complexity, and shipping it under a performance rationale makes the next investigation harder by implying the path was already optimised. Revert it and record the hypothesis as rejected.
This applies to a change whose benefit appears only in reasoning, one measured against the wrong baseline, and one whose measured scenario turns out to behave identically without it.
Report negative results explicitly. "Disabling this removed 40% of the layerization, and the fix that preserved the visuals did not" is a finding, and the next person needs it.
Compare the remaining cost against the user-facing budget, not against zero. When the interaction already sits far inside budget, further optimisation of that path trades real regression risk for an invisible gain, and it displaces work on the path the user actually reported. Say so and move on.
Cost that comes from intentional, user-visible behaviour is not waste. Removing it is a product decision, not a performance fix, and it needs the owner's agreement rather than a quiet commit.
Ship a bounded cache-only or local mitigation under deadline pressure only when:
If the interaction remains above budget, do not call the mitigation the completed performance fix.
© openchamber, MIT. 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 .agents/skills/performance-engineering of openchamber/openchamber.
Open the folder on GitHubat commit eabe419
Performance Engineering 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 |
|---|---|---|---|---|---|---|
| Performance Engineering this skillopenchamber/openchamber | 11k | — | ~4.9k | Automated safety check: Pass | MIT | |
| Native Data FetchingCherryHQ/cherry-studio-app | 4k | 6 repos | ~2.9k | Automated safety check: Notes | MIT | |
| Stripe Projectsfossasia/eventyay | 1.7k | 5 repos | ~2k | Automated safety check: Notes | Apache-2.0 | |
| FoundatioFoundatioFx/Foundatio | 2.1k | — | ~3.9k | Automated safety check: Pass | Apache-2.0 | |
| Wp Block Themesgambitph/Stackable | 350 | 3 repos | ~985 | Automated safety check: Pass | GPL-3.0 | |
| Wp Performancegambitph/Stackable | 350 | 3 repos | ~1.5k | Automated safety check: Pass | GPL-3.0 |
CherryHQ/cherry-studio-app
A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.
fossasia/eventyay
A skill your agent uses when the user wants to provision infrastructure or third-party services using Stripe Projects.
FoundatioFx/Foundatio
A skill your agent uses when working with Foundatio infrastructure abstractions for .NET -- caching, queuing, messaging, file storage, distributed locking, or background jobs.
gambitph/Stackable
A skill your agent uses when developing WordPress block themes: theme.json (global settings/styles), templates and template parts, patterns, style variations, and Site Editor troubleshooting (style…
gambitph/Stackable
A skill your agent uses when investigating or improving WordPress performance (backend-only agent): profiling and measurement (WP-CLI profile/doctor, Server-Timing, Query Monitor via REST headers)…
millionco/expect
Portable Effect patterns for robust promise execution. An agent skill from millionco/expect.
openchamber/openchamber
A skill your agent uses when creating or modifying OpenChamber UI components, styling, colors, buttons, visual states, themes, or icons.
openchamber/openchamber
A skill your agent uses when creating or modifying OpenChamber shared UI data access, OpenCode SDK calls, RuntimeAPIs, runtime fetch/auth/URLs, authenticated browser assets, bridges/proxies, runtime…
openchamber/openchamber
A skill your agent uses when implementing or modifying OpenChamber sortable or drag-to-reorder behavior, especially @dnd-kit, touch/mobile interactions, variable-width items, or wrapping layouts.
openchamber/openchamber
A skill your agent uses when creating or modifying OpenChamber UI text, labels, buttons, placeholders, aria labels, empty states, toasts, dialogs, settings copy, navigation labels, or any…
openchamber/openchamber
A skill your agent uses when working with the OpenChamber iOS Simulator app without opening Xcode - boot/install/launch the Capacitor iOS app, start a browser stream, tap/type/gesture/rotate…
openchamber/openchamber
A skill your agent uses when creating or modifying OpenChamber CLI commands, prompts, terminal output, non-TTY behavior, --quiet, or --json behavior.
Categories
A skill your agent uses when implementing or reviewing code on interaction, render, event, polling, synchronization, list-processing, store-selector, cache, indexing, or high-volume data paths; when…. Performance Engineering is an agent skill from openchamber/openchamber. Use when implementing or reviewing code on interaction, render, event, polling, synchronization, list-processing, store-selector, cache, indexing, or high-volume data paths; when users report lag, freezes, jank, high CPU, memory growth, slow startup, or performance regressions; and before accepting memoization or caching as a fix for repeated work.
Performance Engineering fits situations like: reviewing code on interaction; synchronization; list-processing; high-volume data paths.
Run `npx skills add openchamber/openchamber --skill performance-engineering -a claude-code`. Or copy the skill folder (.agents/skills/performance-engineering in openchamber/openchamber) into .claude/skills/performance-engineering in your project. Claude Code loads it when a task matches its description.
Run `npx skills add openchamber/openchamber --skill performance-engineering -a codex`. Or copy the skill folder (.agents/skills/performance-engineering in openchamber/openchamber) into .agents/skills/performance-engineering 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 openchamber/openchamber --skill performance-engineering -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/performance-engineering, .gemini/skills/performance-engineering, .github/skills/performance-engineering and .opencode/skills/performance-engineering in your project.
Going by SKILL.md and its folder, Performance Engineering needs the command-line tools its instructions call (bun and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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.
Performance Engineering is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 20k 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 Performance Engineering: Native Data Fetching (CherryHQ/cherry-studio-app, 4k stars), Stripe Projects (fossasia/eventyay, 1.7k stars), Foundatio (FoundatioFx/Foundatio, 2.1k stars) and Wp Block Themes (gambitph/Stackable, 350 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
openchamber (a GitHub organization) maintains it in openchamber/openchamber, which has 11,259 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 8, 2026.
Source: openchamber/openchamber on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.