Agent skill

Palot Performance

by ItsWendell in ItsWendell/palot

Measure and improve Palot desktop runtime performance. An agent skill from ItsWendell/palot.

MITAuto-check passedFrontend & Design

Install Palot Performance

skills CLI
$ npx skills add ItsWendell/palot --skill palot-performance -a claude-code

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

GitHub CLI
$ gh skill install ItsWendell/palot palot-performance --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/ItsWendell/palot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/palot-performance .claude/skills/palot-performance && 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
palot-performance
GitHub stars
191
Token cost
~3.1k tokens
SKILL.md length
1,541 words
Files
5 (incl. references)
Skills in repo
9
Repo updated
First seen
Licence
MIT

At a glance

Measure and improve Palot desktop runtime performance. An agent skill from ItsWendell/palot.

  • Works in 8 steps: Use a document-visible window for frame… → Compare the same scenario, window size,… → Warm the flow before recording. Report… → …
  • Reported slowness
  • SKILL.md covers Choose The Loop, Measurement Contract, Read The Report and Diagnose In Order, plus 2 more sections
  • Calls bun

What it does

Palot Performance is an agent skill from ItsWendell/palot. Measure and improve Palot desktop runtime performance. Use for reported slowness or regressions; profiling CPU, memory, long tasks, React commits, style/layout/paint cost, GPU compositing, frame pacing, or streaming latency; changing the performance harness; React Scan or Compiler experiments; or performance budgets. Use test-palot-desktop for non-performance UI QA.

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `agents/openai.yaml`, `references/main-thread-budget.md` and `references/poll-driven-renders.md`).

It sits in Frontend & Design, covering Web performance. It works with React. The repository describes itself as: Just another desktop client for OpenCode 2. Manage projects, sessions, parallel agents, requests, and changes on Linux and macOS. The licence is MIT.

When your agent uses it

  • Reported slowness
  • Style/layout/paint cost
  • GPU compositing
  • Streaming latency

Example prompts

  • “/palot-performance”

Workflow steps

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

  1. Use a document-visible window for frame data. Performance runs show it inactive by default so they do not steal keyboard focus; use…
  2. Compare the same scenario, window size, display scale, power state, hardware, build mode, and glass setting.
  3. Warm the flow before recording. Report medians across repeated runs when proposing a budget or claiming an improvement.
  4. Keep React Scan, DevTools overlays, paint flashing, and verbose logging off during benchmark runs. They are investigation tools, not…
  5. Keep Palot's own diagnostics dashboard and overlay off during benchmark runs. Their collector is demand-driven, but active sampling still…
  6. Keep traces and screenshots under the primary checkout's .local/ directory. Treat them as private because traces can contain rendered text…
  7. Change one rendering variable at a time. For blur work, compare the normal tier and PALOT_DISABLE_GLASS=1, then isolate individual CSS…
  8. State build mode with every result. Development, production, and React profiling builds have different overhead.

What it can do on your machine

Read from SKILL.md and the folder at commit 5b71bf9. 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

    Shell commands in SKILL.md call:

    • bun

    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

Palot Performance loads about 3.1k tokens when it runs, and up to ~7.1k if it reads all its reference files. Until then it costs about 97 tokens; SKILL.md has 1,541 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~97
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.1k

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from ItsWendell/palot at commit 5b71bf9, republished under its MIT licence (© ItsWendell). 1,541 words, ~3,134 tokens.

Download SKILL.mdSave it as .claude/skills/palot-performance/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
palot-performance
description
Measure and improve Palot desktop runtime performance. Use for reported slowness or regressions; profiling CPU, memory, long tasks, React commits, style/layout/paint cost, GPU compositing, frame pacing, or streaming latency; changing the performance harness; React Scan or Compiler experiments; or performance budgets. Use test-palot-desktop for non-performance UI QA.

Palot Performance

Use the smallest loop that can prove or disprove the suspected cost. Preserve UX, motion, and native/CSS material unless measurements show a concrete problem and the cheaper rendering path still looks right.

Read repository-root ../../../docs/desktop-testing.md for harness commands and measurement contracts. Read references/main-thread-budget.md for current main-thread investigation rules; historical measurements are not evidence for the current checkout.

Choose The Loop

  • Static React health: run bun run perf:doctor for changed code and bun run perf:react-check for React Compiler compatibility diagnostics.
  • Full static baseline: run bun run perf:doctor:full. Treat it as advisory until the documented baseline has been paid down.
  • Deterministic native measurement: run bun run perf:e2e. It builds an isolated Electron app, warms a long transcript switch, records frame intervals, long tasks, CDP metrics, Electron process CPU/memory, and streaming latency, then retains private artifacts.
  • Input contention: run bun run perf:input. It types a real draft while the visible session and background sessions stream. Use it to evaluate responsiveness, not only throughput.
  • Batch-size contention: bun run perf:batch:steady and bun run perf:batch:burst use identical numbered text with different provider arrival clustering. Inspect actual renderer batch sizes and synchronous callback durations alongside typing, freshness, and throughput; the transport timer is not a processing budget. These are different workloads, not a product A/B comparison.
  • Navigation/cancellation contention: run bun run perf:interactions. It checks trusted session switches, wheel-up, a stable visible reading anchor, return to latest, and Stop under four continuous streams. Per-action DOM milestones include existing fades and are not compositor presentation.
  • Visual recording: bun run perf:input:video or add --video to a matching E2E command. Requires ffmpeg; retains renderer-only video.mp4 and capture metadata. Recording adds observer overhead, is not presented-frame/FPS evidence, and must not be compared to unrecorded benchmarks.
  • Streaming geometry: bun run perf:stability (or perf:stability:video) adds bounded active-turn/composer/scroll geometry sampling. Use it for bottom-follow jumps, not as a clean input benchmark. Inspect rAF and resize-observer phases separately; transient DOM measurements are not presented-frame proof.
  • Streaming throughput and scroll correctness: run bun run perf:parallel; use bun run perf:parallel:trace for whole-app attribution. bun run perf:parallel:memory repeats accumulating workloads with forced GC to investigate retention, not independent latency samples.
  • Style attribution: run bun run perf:selectors. Phase-separated React render attribution: run bun run perf:scan:render. Both add observer overhead and are not neutral benchmarks.
  • Repeated comparison: bun run perf:compare <baseline.json...> -- <candidate.json...> checks matched report metadata and summarizes run-level medians/ranges. It requires at least two independent runs per group (five recommended), rejects legacy/memory-cycle reports, and does not launch tests or declare regression budgets.
  • Attribution trace: run bun run perf:trace. It repeats the deterministic scenario with React's profiling build and writes performance-trace.json beside performance.json.
  • Render overlay: enable React Scan in Settings > Diagnostics or run bun run dev:scan. The dev client starts hidden; use PALOT_REACT_SCAN=1 bun run dev:visible for visible inspection without taking focus, and PALOT_REACT_SCAN=1 bun run dev:focus only when focus behavior matters. Palot reloads so React Scan can install before React. Use it to find candidate rerenders, then disable it before measuring.
  • Compiler experiment: run bun run perf:compiler for whole-renderer infer mode or bun run perf:compiler:annotation to validate opt-in mode. The normal build does not enable React Compiler.

The deterministic harness is the default. Load test-palot-desktop before live native inspection or screenshots.

Measurement Contract

  1. Use a document-visible window for frame data. Performance runs show it inactive by default so they do not steal keyboard focus; use --focus only when focus behavior is part of the test. Hidden or fully occluded Electron windows are throttled and cannot provide a valid FPS baseline.
  2. Compare the same scenario, window size, display scale, power state, hardware, build mode, and glass setting.
  3. Warm the flow before recording. Report medians across repeated runs when proposing a budget or claiming an improvement.
  4. Keep React Scan, DevTools overlays, paint flashing, and verbose logging off during benchmark runs. They are investigation tools, not neutral observers.
  5. Keep Palot's own diagnostics dashboard and overlay off during benchmark runs. Their collector is demand-driven, but active sampling still adds observer cost.
  6. Keep traces and screenshots under the primary checkout's .local/ directory. Treat them as private because traces can contain rendered text and source paths.
  7. Change one rendering variable at a time. For blur work, compare the normal tier and PALOT_DISABLE_GLASS=1, then isolate individual CSS backdrop surfaces.
  8. State build mode with every result. Development, production, and React profiling builds have different overhead.

Read The Report

performance.json contains:

  • sessionSwitch.targetVisibleAtMs: click to useful target transcript.
  • interaction.page: document visibility and Chromium's internal document.hasFocus() state.
  • interaction.runIdentity: revision/dirty state, host hardware/load context, declared versions, runner versions, scenario, and explicit build/trace/material controls. Power, refresh rate, and occlusion still require controlled manual recording.
  • interaction.measurementWindow: renderer monotonic start/end and time origin, correlated with palot:measurement:start / palot:measurement:end trace marks.
  • interaction.collectors and interaction.droppedEntries: distinguish observing, disabled, unsupported, or failed collectors and truncated samples. Missing instrumentation never means zero work.
  • interaction.inputTimings: Event Timing stages and per-interaction duration summaries. Entries are thresholded at 16 ms, quantized, and limited to supported discrete interactions; these are not page-level INP or a distribution of every keystroke.
  • interaction.longAnimationFrames: optional rendering/script attribution without React Scan; enabled by the input scenario. Entries and script attribution are bounded.
  • interaction.frames: p50, p95, maximum frame interval, and counts over 25/50/100 ms.
  • interaction.longTasks: count, total duration, maximum, and the 20 longest entries.
  • interaction.reactCommits: profiling-build React commit count and actual/base render durations.
  • interaction.browserMetrics.delta: CDP task, script, layout, style, heap, node, document, frame, and listener deltas.
  • interaction.batchProcessing: opt-in (captureBatchProcessing) synchronous event-subscriber timing, event counts, and text-delta UTF-16 lengths. Only active in harness builds during measurement. The first 2,048 numeric samples are retained; complete counts/total/max continue after truncation. disabled/unavailable is not zero work. This excludes later React rendering, asynchronous request completion, and paint.
  • interaction.appMetrics: on-demand Electron app.getAppMetrics() snapshots, host-window focus/visibility, interval CPU, working set, GPU feature status, and hardware acceleration state.
  • interaction.streamingLatency: commit-cursor-scoped receive-to-React-commit samples, owner identity, applied batch count, oldest pending age, and retention loss. Latest-batch stage timings alone can hide an older pending batch. Top-level streamingLatency in older scenario reports remains a run-wide buffer.

CPU percentages from Electron are interval values since the prior snapshot. Memory values from Electron are KiB. CDP duration metrics are seconds, so convert deltas to milliseconds when presenting them.

Use interaction.appMetrics.*.window.focused for OS window focus. interaction.page.documentHasFocus is Chromium renderer state and can remain true for a non-focusable Electron window.

Show full SKILL.md (496 more words)Show less

Diagnose In Order

  1. Reproduce with the deterministic scenario and keep its report.
  2. Decide whether the failure is React work, JavaScript computation, style/layout, paint/compositing, GPU material, memory retention, or OpenCode transport latency.
  3. Use perf:trace only when the aggregate report cannot attribute the cost.
  4. Use React Scan or React DevTools to identify component-level candidates after the trace points at React rendering.
  5. Inspect source subscriptions, identity preservation, virtualization boundaries, observers, animation loops, and backdrop-filter bounds before adding memoization.
  6. Make the smallest change that attacks the measured cause.
  7. Repeat the same run without diagnostic overlays and compare against the retained baseline.

Read references/poll-driven-renders.md when polling appears to trigger expensive React work. Read references/react-compiler.md before changing compiler configuration or adopting compiled components.

Main-Thread Budget

  1. Eliminate irrelevant computation before scheduling it differently: inspect whole-store scans, subscription fan-out, settled Markdown prefixes, and disabled diagnostics.
  2. Measure input response, streaming freshness, throughput, and CPU together. Fewer commits or IPC batches alone do not prove an improvement.
  3. Keep batching bounded in size and age. Only split at safe boundaries that preserve ordering and atomic publication; prefer time budgets over fixed item counts when item costs vary.
  4. await Promise.resolve() is a microtask, not a rendering yield. rAF runs before rendering; it is not a general background-work queue. React transitions do not make arbitrary synchronous computation interruptible.
  5. Defer presentation, not authoritative correctness. Never drop OpenCode deltas, permissions, or lifecycle events to hide backpressure.
  6. Workers need an end-to-end cost model including serialization, cancellation, stale results, and applying the result. Moving blocking work into Electron's main process is not a free optimization.
  7. Preserve motion and material. Transform/opacity can avoid layout but do not guarantee cheap raster/compositing; avoid blanket will-change. Virtualization does not automatically stop offscreen parsing, subscriptions, or animation preparation.
  8. Keep measurement cheaper than the workload. Use stable marker references instead of per-frame descendant scans; separate detailed geometry assertions from low-overhead input measurement. Zero 50 ms long tasks or healthy rAF cadence does not prove good 120 Hz presentation.
  9. For streaming scroll defects, verify visual stability separately from input throughput. Coordinate measured virtual geometry and bottom-follow correction; do not hide a delayed correction with a fixed status overlay, smooth scrolling, or a longer polling loop. Preserve explicit scroll-up and history anchors.
  10. Summary cards should not subscribe to whole transcripts just to show status or elapsed time. Use lifecycle/tool timestamps, isolate clock subscriptions to timer leaves, and share a demand-driven visible-document clock. Verify that timer ticks do not rerender the card and that unrelated message deltas do not invalidate it. subagent-card-stability --visible --keep checks the native summary/timer behavior; it is a correctness scenario, not a latency benchmark.

Completion Gate

A performance change is complete when the exact scenario and build mode are recorded, before/after artifacts exist, UX and visual behavior are unchanged or explicitly approved, the smallest relevant correctness checks pass, and the result identifies remaining uncertainty without claiming more than the data proves.

© ItsWendell, 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 4 other files (references) in .agents/skills/palot-performance of ItsWendell/palot.

  • SKILL.md
  • agents/openai.yaml
  • references/main-thread-budget.md
  • references/poll-driven-renders.md
  • references/react-compiler.md

Open the folder on GitHubat commit 5b71bf9

Compare with similar skills

Palot Performance 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.

Palot Performance compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Palot Performance this skillItsWendell/palot191—~3.1kAutomated safety check: PassMIT
React Doctormakeplane/plane61k12 repos~657Automated safety check: PassAGPL-3.0
React Frontend Development Guidelinesdiet103/claude-code-infrastructure-showcase10k2 repos~2.9kAutomated safety check: PassMIT
Core Web VitalsvmDeshpande/ai-agent-automation1784 repos~3.6kAutomated safety check: PassMIT
Reduce Bundle Sizekcsujeet/ilamy-calendar351—~2.9kAutomated safety check: PassMIT
Shader for Interfacesv2space-labs/shader-for-interfaces115—~3.1kAutomated safety check: PassMIT

Similar skills

  • React Doctor

    makeplane/plane

    Scans React code for lint, accessibility, bundle size and architecture issues, reports a health score and checks that changes do not lower it.

    61k GitHub starsUsed in 12 repos~657 tokens
    Frontend & DesignAuto-check passed
  • React Frontend Development Guidelines

    diet103/claude-code-infrastructure-showcase

    Guidelines for React 18 and TypeScript apps covering Suspense data fetching, lazy loading, feature folders, MUI v7 styling, TanStack Router and performance.

    10k GitHub starsUsed in 2 repos~2.9k tokens
    Frontend & DesignAuto-check passed
  • Core Web Vitals

    vmDeshpande/ai-agent-automation

    Optimize Core Web Vitals (LCP, INP, CLS) for better page experience and search ranking.

    178 GitHub starsUsed in 4 repos~3.6k tokens
    Frontend & DesignAuto-check passed
  • Reduce Bundle Size

    kcsujeet/ilamy-calendar

    Systematically reduce the shipped bundle size of a JS/TS library without sacrificing code readability or breaking consumer APIs.

    351 GitHub stars~2.9k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Shader for Interfaces

    v2space-labs/shader-for-interfaces

    Decides whether an interface effect belongs in CSS, SVG, Canvas 2D, WebGL or WebGPU, then builds, debugs and visually verifies focused GPU effects inside product UIs.

    115 GitHub stars~3.1k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check passed
  • Ssr Boost Migrate

    Lomray-Software/vite-ssr-boost

    Migrate an existing Vite and React Router SPA to vite-ssr-boost SSR in Data mode, preserving route objects and checking streaming, hydration, bundle size, and deployment readiness.

    118 GitHub stars~2.3k tokensUpdated 16 days ago
    Frontend & DesignAuto-check passed

More from ItsWendell/palot

All 9 skills in this repo
  • Diffs

    ItsWendell/palot

    A skill your agent uses when changing Palot code, file, or diff rendering built on @pierre/diffs, including the Changes tab, file views, CodeView, parsing, selection, annotations, workers, or Shiki…

    191 GitHub stars~841 tokensUpdated yesterday
    Auto-check passed
  • Trees

    ItsWendell/palot

    A skill your agent uses when changing Palot file-tree behavior built on @pierre/trees, especially the Changes tab tree, selection, search, rename, drag and drop, Git status, or theme integration.

    191 GitHub stars~540 tokensUpdated yesterday
    Auto-check passed
  • Shadcn

    ItsWendell/palot

    A skill your agent uses when adding, updating, composing, or debugging source components managed by shadcn; changing apps/desktop/components.json, registries, or presets; or running the shadcn CLI.

    191 GitHub stars~795 tokensUpdated yesterday
    Auto-check passed
  • Opencode Runtime

    ItsWendell/palot

    Check or update Palot's OpenCode CLI, client, protocol/schema and runtime contract.

    191 GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed
  • Test Palot Desktop

    ItsWendell/palot

    Test Palot's native Electron renderer with preload, IPC, and OpenCode integration.

    191 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Opencode Coverage

    ItsWendell/palot

    Audit Palot's OpenCode 2 operation and event coverage, analyzer or baseline regressions, published contract-surface deltas, or reviewed baseline updates.

    191 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Palot Performance

What does Palot Performance do?

Measure and improve Palot desktop runtime performance. An agent skill from ItsWendell/palot. Palot Performance is an agent skill from ItsWendell/palot. Measure and improve Palot desktop runtime performance.

When should I use Palot Performance?

Palot Performance fits situations like: reported slowness; style/layout/paint cost; GPU compositing; streaming latency.

How do I install Palot Performance in Claude Code?

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

How do I install Palot Performance in Codex?

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

Can I use Palot Performance 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 ItsWendell/palot --skill palot-performance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/palot-performance, .gemini/skills/palot-performance, .github/skills/palot-performance and .opencode/skills/palot-performance in your project.

What does Palot Performance need to run?

Going by SKILL.md and its folder, Palot Performance needs the command-line tools its instructions call (bun).

Does Palot Performance 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 Palot Performance 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. Review the folder before installing.

What licence does Palot Performance use?

Palot Performance 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 Palot Performance use?

About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.9k tokens, read only when the agent opens those files.

What are the alternatives to Palot Performance?

Skills that share tags, products or a category with Palot Performance: React Doctor (makeplane/plane, 61k stars), React Frontend Development Guidelines (diet103/claude-code-infrastructure-showcase, 10k stars), Core Web Vitals (vmDeshpande/ai-agent-automation, 178 stars) and Reduce Bundle Size (kcsujeet/ilamy-calendar, 351 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Palot Performance?

ItsWendell (a GitHub user) maintains it in ItsWendell/palot, which has 191 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 7, 2026.

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