К основному содержанию
скилл CX Codex

extension-qr-code — скилл для Claude Code: сканер QR-кодов

Добавляет в React-приложение сканирование QR-кодов через камеру устройства. Пригодится, когда нужно считать код прямо в браузере.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add caffeinelabs/skills --skill extension-qr-code -a claude-code
Открыть на GitHub

Что делает extension-qr-code

Скилл даёт готовый React-хук useQRScanner из пакета @caffeinelabs/qr-code. Он построен поверх компонента камеры и декодирует код через jsQR. Хук отдаёт список найденных кодов, состояние камеры и методы запуска, остановки и переключения камеры.

Хук менять нельзя, он поставляется готовым. Настроек немного: scanInterval задаёт частоту сканирования в миллисекундах, maxResults ограничивает историю результатов, jsQRUrl указывает адрес загрузки библиотеки jsQR. По умолчанию jsQR подтягивается с CDN jsdelivr, так что приложение зависит от внешней сети — это повод проверить, как поведёт себя сканер без доступа к CDN.

Внутри два пакета: @caffeineai/qr-code версии ~0.1.2 и @caffeineai/camera версии ~0.1.1. К видеоэлементу цепляется videoRef, для обработки нужен скрытый canvasRef. Ошибки камеры приходят в поле error, их стоит показывать в интерфейсе.

Какие задачи решает

  • считать QR-код камерой телефона прямо в браузере
  • показать историю отсканированных кодов с метками времени
  • переключаться между фронтальной и тыловой камерой
  • обработать случай, когда камера недоступна или не поддерживается
  • очистить список результатов перед новым сканированием

Примеры запросов агенту

  • подключи useQRScanner из @caffeineai/qr-code и сделай компонент сканера QR
  • добавь кнопку переключения камеры, показывай её только на мобильных
  • выведи ошибку камеры на экран, если error не пустой

Как установить extension-qr-code

1Через Skills CLI (Vercel)

npx skills add caffeinelabs/skills --skill extension-qr-code -a claude-code

2Вручную: положить файлы

~/.claude/skills/extension-qr-code/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/extension-qr-code/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о extension-qr-code

Как установить extension-qr-code в Claude?

Выполните npx skills add caffeinelabs/skills --skill extension-qr-code -a claude-code. Скилл появится в ~/.claude/skills/extension-qr-code/SKILL.md.

Что делает extension-qr-code?

Добавляет сканирование QR-кодов через камеру устройства. В основе готовый React-хук useQRScanner и декодирование через jsQR.

Какие пакеты нужны для работы?

@caffeineai/qr-code версии ~0.1.2 и @caffeineai/camera версии ~0.1.1. Хук импортируется из @caffeinelabs/qr-code и изменению не подлежит.

Исходный текст

SKILL.md · Apache-2.0
---
name: extension-qr-code
description: QR code scanner using the camera.
version: 0.1.5
compatibility:
  npm:
    "@caffeineai/qr-code": "~0.1.2"
    "@caffeineai/camera": "~0.1.1"
caffeineai-subscription: [none]
---

# QR Code Scanner
QR code scanner extension for [Caffeine AI](https://caffeine.ai?utm_source=caffeine-skill&utm_medium=referral).

## Overview

This skill adds QR code scanning using the device camera. Built on top of the camera component with jsQR for decoding.

# Frontend

For QR code scanner support:

There is a prefabricated React hook imported from `@caffeinelabs/qr-code` that cannot be modified.

```typescript filepath=@caffeinelabs/qr-code/src/hooks/useQRScanner.ts
import { RefObject } from 'react';
import { CameraConfig, CameraError } from '@caffeineai/camera';

export interface QRResult {
  // The decoded QR code data
  data: string;
  // Timestamp when the QR code was scanned
  timestamp: number;
}

export interface QRScannerConfig extends CameraConfig {
  // How often to scan for QR codes in milliseconds (default: 100)
  scanInterval?: number;
  // Maximum number of results to keep in history (default: 10)
  maxResults?: number;
  // URL to load jsQR library from (default: jsdelivr CDN)
  jsQRUrl?: string;
}

export interface UseQRScannerReturn {
  // Array of scanned QR codes (newest first)
  qrResults: QRResult[];
  // Whether currently scanning for QR codes
  isScanning: boolean;
  // Whether jsQR library has been loaded
  jsQRLoaded: boolean;
  
  // Camera state (pass-through from useCamera)
  isActive: boolean;
  isSupported: boolean | null;
  error: CameraError | null;
  isLoading: boolean;
  currentFacingMode: 'user' | 'environment';
  
  // Start camera and begin scanning - returns true on success
  startScanning: () => Promise<boolean>;
  // Stop scanning and camera
  stopScanning: () => Promise<void>;
  // Switch camera facing mode - returns true on success
  switchCamera: () => Promise<boolean>;
  // Clear all scan results
  clearResults: () => void;
  // Reset scanner state (stop scanning and clear results)
  reset: () => void;
  // Retry camera initialization after error - returns true on success
  retry: () => Promise<boolean>;
  
  // Ref to attach to video element for camera preview
  videoRef: RefObject<HTMLVideoElement>;
  // Ref to attach to canvas element used for QR processing (can be hidden)
  canvasRef: RefObject<HTMLCanvasElement>;
  
  // Computed state
  // Whether scanner is ready to use (jsQR loaded and camera supported)
  isReady: boolean;
  // Whether scanning can be started (ready + not loading)
  canStartScanning: boolean;
}

export declare function useQRScanner(config?: QRScannerConfig): UseQRScannerReturn;
```

Usage example:

```typescript filepath=example.ts
import { useQRScanner } from '@caffeineai/qr-code';

function QRScannerComponent() {
    const { 
        qrResults,
        isScanning,
        isActive,
        isSupported,
        error,
        isLoading,
        canStartScanning,
        startScanning,
        stopScanning,
        switchCamera,
        clearResults,
        videoRef,
        canvasRef 
    } = useQRScanner({ 
        facingMode: 'environment',
        scanInterval: 100,
        maxResults: 5
    });

    if (isSupported === false) {
        return <div>Camera not supported</div>;
    }

    return (
        <div>
            <video 
                ref={videoRef} 
                style={{ width: '100%', height: 'auto' }}
                playsInline
                muted
            />
            <canvas ref={canvasRef} style={{ display: 'none' }} />
            
            {error && <div>Error: {error.message}</div>}
            
            <div>
                <button onClick={startScanning} disabled={!canStartScanning}>
                    Start Scanning
                </button>
                <button onClick={stopScanning} disabled={isLoading || !isActive}>
                    Stop Scanning
                </button>
                {/* Only show switch camera on mobile */}
                {/Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) && (
                    <button onClick={switchCamera} disabled={isLoading || !isActive}>
                        Switch Camera
                    </button>
                )}
            </div>
            
            <div>
                <h3>Results {qrResults.length > 0 && <button onClick={clearResults}>Clear</button>}</h3>
                {qrResults.map(result => (
                    <div key={result.timestamp}>
                        <small>{new Date(result.timestamp).toLocaleTimeString()}</small>
                        <p>{result.data}</p>
                    </div>
                ))}
            </div>
        </div>
    );
}
```

Properly display QR scanner error messages in the app.

© caffeinelabs · Apache-2.0 · caffeinelabs/skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
webflow-cli:designer-extension webflow Скилл ведёт агента по всему циклу работы с Designer Extensions в Webflow: выбор шаблона, инициализация проекта, локальный сервер и сборка бандла. CX Codex +1 1 000установок chrome-extension-development Mindrally Ведёт агента по сборке расширений Chrome на Manifest V3: манифест, service worker, content scripts, попап, публикация в Chrome Web Store. CX Codex +1 2 800установок chrome-extension pproenca Скилл с 67 правилами по Chrome Extensions на Manifest V3. Пригодится, когда пишете service worker, content script или мигрируете с MV2. CX Codex +1 717установок extension-to-functions-codebase Google LLC Переносит Firebase Extension в локальную кодовую базу Cloud Functions или в отдельный npm-пакет. Помогает перевести триггеры с V1 на V2 и настроить декларативный доступ к IAM и API. CX Codex +1 56 400установок chrome-extension-dev-js-typescript-cursorrules-pro PatrickJS Правило для Cursor, которое настраивает агента писать код расширений Chrome на JavaScript и TypeScript по единому своду соглашений. ★ 41 011звёзд репо payment-assistant Binance Обрабатывает криптоплатежи через QR-коды: отправляет средства и создаёт ссылки или QR-коды для приёма. Нужен при оплате или сборе платежа. CX Codex +1 3 400установок

Из того же набора25

extension-email-calendar-events Скилл добавляет в приложение календарные события и рассылку iCalendar-приглашений по почте. Пригодится, если нужны встречи с гостями без ручной сборки ICS. CX Codex +1 28 400установок extension-email-marketing Добавляет в приложение на Caffeine AI маркетинговые письма по темам: подписчики, токены отписки и страница /unsubscribe на своём фронтенде. CX Codex +1 28 100установок extension-camera Добавляет в агент правила работы с веб-камерой через React-хук useCamera. Пригодится для съёмки фото и видеопревью в браузере. CX Codex +1 28 100установок extension-stripe Добавляет в проект на Caffeine AI оплату картами через Stripe: создание checkout-сессии и проверку её статуса. Пригодится, когда нужен приём платежей внутри канистры. CX Codex +1 28 200установок extension-posting-to-x Скилл для сборок Caffeine, которые публикуют твиты в X. Задаёт единственный поддерживаемый путь через пакет x-client и OAuth 2.0 PKCE. CX Codex +1 28 100установок extension-openai Задаёт правила интеграции OpenAI в канистры Motoko через пакет openai-client. Защищает API-ключ от утечки при реплицированных вызовах. CX Codex +1 28 100установок extension-email-raw Скилл добавляет в проект отправку одного письма сразу нескольким получателям через to, cc и bcc. Пригодится, когда нужно разослать уведомление участникам встречи. CX Codex +1 28 100установок extension-invite-links Скилл добавляет в проект систему приглашений и сбор ответов RSVP. Гости отправляют подтверждения по кодам без авторизации, а администратор видит сводку через вход в систему. CX Codex +1 28 100установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой