tackl-performance

tackl-performance is a skill for Claude Code, Codex from 12-Studio/Tackl. It costs 50 tokens per session (632 once invoked), scanned A, original, MIT.

A performance guide for Tackl apps that covers loading speed, layout stability, animation preferences, images, and scrolling. Web Vitals are measurements used to judge how quickly and steadily a page works for visitors.

In plain words
What is it for?
Use it to improve LCP and CLS scores, add reduced-motion behavior, lazy-load images, reduce scroll stutter, and use the app's PerformanceContext.
Why use it?
It helps reduce slow loading, unexpected layout movement, animation issues for people who prefer less motion, and inefficient scrolling or rendering. It also supports using lower image or canvas resolution when appropriate.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/12-studio/tackl/tackl-performance
Any agent
npx skills add 12-Studio/Tackl --skill tackl-performance
Clone the repo
git clone --depth 1 https://github.com/12-Studio/Tackl

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for tackl-performance

README.md
[![agentmods](https://agentmods.dev/badge/skills/12-studio/tackl/tackl-performance.svg)](https://agentmods.dev/skills/12-studio/tackl/tackl-performance)
Your own site
<a href="https://agentmods.dev/skills/12-studio/tackl/tackl-performance"><img src="https://agentmods.dev/badge/skills/12-studio/tackl/tackl-performance.svg" alt="Measured on agentmods" height="20"></a>
Per session 50 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 632 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00050 $0.00632
Opus 5 $0.00025 $0.00316
Sonnet 5 $0.00010 $0.00126
Haiku 4.5 $0.00005 $0.00063

Measured 5d ago against content hash 1814a3f70580, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-05, from the pricing page.

Security

Grade A, and why

tackl-performance scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/performance/tackl-performance/SKILL.md · 80 lines

How it starts

The opening of the file, as written. The whole thing — 80 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Performance (Tackl)

PerformanceContext

Provided by PerformanceProvider in src/components/Contexts/Performance.tsx, available app-wide via Contexts.

Value Type Use
isReducedMotion boolean prefers-reduced-motion: reduce — disable/skip animations
devicePixelRatio number Choose image resolution / canvas DPR
'use client';

import { use } from 'react';
import { PerformanceContext } from '@parts/Contexts/Performance';

const MyComponent = () => {
	const { isReducedMotion } = use(PerformanceContext);

	if (isReducedMotion) return <StaticFallback />;

	return <AnimatedContent />;
};

Built-in consumer: SmoothScroll skips Lenis entirely when isReducedMotion is true — native scrolling takes over and no rAF loop starts.

Animation gating

Before any GSAP/Lenis/canvas work:

if (isReducedMotion) return;

Prefer instant state changes over tweens when isReducedMotion is true. Scale canvas/WebGL resolution by devicePixelRatio rather than always rendering at full DPR.

Images

  • Always set width, height, and sizes
  • next.config.js already configures AVIF/WebP output; add your CMS's image CDN hostname to images.remotePatterns before using it

Next.js patterns

  • Server Components for data fetching; client components only when needed
  • dynamic() for non-critical client bundles
  • Suspense with lightweight fallbacks for async client trees
  • reactStrictMode: true — GSAP cleanup must be correct (duplicate effect runs in dev)

Web Vitals checklist

Metric Focus
LCP Priority images, avoid blocking fonts, minimize client JS above fold
CLS Explicit image dimensions, reserve space for async content
INP Debounce scroll handlers, avoid long main-thread tasks

Lenis + GSAP cost

Smooth scroll runs on every page via SmoothScroll. Do not add second scroll libraries. Keep ScrollTrigger counts reasonable — batch refreshes; cleanup is automatic via useAnimation/useGSAP context (never .kill() by hand).

Read the full file on GitHub · 80 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 80 lines · 50 tokens per session scan A 1814a3f70580

Subscribe to this mod's changes

tackl-performance is a skill published in the GitHub repository 12-Studio/Tackl (10 stars, last pushed 9d ago), licensed MIT. It adds 50 tokens to every session and 632 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

react-doctor

Use when finishing a feature, fixing a bug, before committing React code, or when the user types /doctor, asks to scan, triage, or clean up React diagnostics. Covers lint, accessibility, bundle size, architecture. Includes a regression check and a full local-triage workflow that fetches the canonical playbook.

darkroomengineering/satus · 70 tokens

migrate-radix-to-base

Migrates React projects and components from Radix UI to Base UI. Use when asked to migrate from radix, move to base-ui, convert radix primitives, or switch a shadcn project's base library. Handles single components ("migrate accordion") and whole projects.

shadcn-ui/ui · 61 tokens

copilotkit-develop

Use when building AI-powered features with CopilotKit v2 -- adding chat interfaces, registering frontend tools, sharing application context with agents, handling agent interrupts, and working with the CopilotKit runtime.

CopilotKit/CopilotKit · 46 tokens

copilotkit-upgrade

Use when migrating a CopilotKit v1 application to v2 -- updating package imports, replacing deprecated hooks and components, switching from GraphQL runtime to AG-UI protocol runtime, and resolving breaking API changes.

CopilotKit/CopilotKit · 48 tokens

non-json-content-types

Handle FormData, file uploads, Blob, Uint8Array, and ReadableStream inputs in tRPC mutations. Use octetInputParser from @trpc/server/http for binary data. Route non-JSON requests with splitLink and isNonJsonSerializable() from @trpc/client. FormData and binary inputs only work with mutations (POST).

trpc/trpc · 75 tokens

fuzzy-ranking

Rank fuzzy matches with rankItem, filter with RankingInfo.passed, compare saved ranking metadata with compareItems, and configure rankings, thresholds, accessors, min/max bounds, or diacritics. Load for @tanstack/match-sorter-utils itself or fuzzy Table filterMeta wiring.

TanStack/table · 62 tokens