dev.cds-mobile

dev.cds-mobile — eine installierbare Fähigkeit für KI-Agenten, veröffentlicht von coinbase/cds.

npx skills add https://github.com/coinbase/cds --skill dev.cds-mobile

CDS Mobile Package Guidelines

Mobile-specific patterns for @coinbase/cds-mobile.

Component Config Adoption (Mobile)

Use this guidance when adding ComponentConfigProvider defaults for the specific component you are editing.

Required implementation pattern

  1. Register the component in packages/mobile/src/core/componentConfig.ts using its *BaseProps:
import type { MyComponentBaseProps } from '../category/MyComponent';

export type ComponentConfig = {
  MyComponent?: ConfigResolver<MyComponentBaseProps>;
};
  1. Adopt useComponentConfig in the component and destructure from merged props:
import { useComponentConfig } from '../hooks/useComponentConfig';

export const MyComponent = memo((_props: MyComponentProps) => {
  const mergedProps = useComponentConfig('MyComponent', _props);
  const { style, ...props } = mergedProps;

  return <Pressable style={style} {...props} />;
});

Rules to preserve behavior

  • Provider config supplies defaults only; local props must continue to win.
  • Use _props as the input variable and mergedProps as the configured output.
  • Type resolver entries with *BaseProps (not full *Props).
  • Keep scope to prop-level theming defaults; do not alter component behavior or control flow.
  • When practical during the same change, prefer arrow-function component declarations.

Styling with StyleSheet

Use StyleSheet.create for static styles and useTheme() for dynamic values:

import { StyleSheet, type StyleProp, type ViewStyle } from 'react-native';

const styles = StyleSheet.create({
  container: { position: 'relative', width: '100%' },
});

// Dynamic styles via theme hook
const theme = useTheme();
const dynamicStyle = {
  backgroundColor: theme.color.bgPrimary,
  padding: theme.space[2],
};

<View style={[styles.container, dynamicStyle, style]} />;

Inline styles

  • Mobile components should all expose a style and styles object props for overriding default styles.
  • As styling is a concern of that specific component, the style and styles props should never be on the *BaseProps type.
  • styles can be used for granular overrides on child elements within the component.
  • Always merge styles into a react-native style array with useMemo in the correct order (default styles => style prop => styles[ELEMENT_NAME] prop).

Example:

type ComponentProps = ComponentBaseProps & {
  style?: StyleProp<ViewStyle>;
  styles?: {
    root?: StyleProp<ViewStyle>;
    label?: StyleProp<TextStyle>;
  };
};

const theme = useTheme();
const containerStyles = useMemo(
  () => [
    { backgroundColor: theme.color.bgPrimary }, // default styles
    style, // from props
    styles.root, // from props
  ],
  [theme.color.bgPrimary, animatedStyles, style]
);

// Apply to component
<Box style={containerStyles}>

Animation

React Native Reanimated

import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';

const opacity = useSharedValue(0);
const animatedStyle = useAnimatedStyle(() => ({
  opacity: opacity.value,
  transform: [{ translateY: withTiming(opacity.value * -8) }],
}));

<Animated.View style={animatedStyle} />;

We DO NOT use React-Spring anymore for animations on mobile.

Gesture Handling

Use react-native-gesture-handler:

import { Gesture, GestureDetector } from 'react-native-gesture-handler';

const panGesture = useMemo(
  () =>
    Gesture.Pan()
      .onStart(() => {
        /* ... */
      })
      .onUpdate(({ translationX }) => {
        /* ... */
      })
      .onEnd(({ translationX, velocityX }) => {
        /* ... */
      })
      .withTestId(testID)
      .runOnJS(true),
  [dependencies],
);

<GestureDetector gesture={panGesture}>
  <Animated.View>{/* ... */}</Animated.View>
</GestureDetector>;

Layout Measurement

Use onLayout callback instead of ResizeObserver:

const [size, onLayout] = useLayout();
<View onLayout={onLayout} />

// Or inline
<View onLayout={(e) => setHeight(e.nativeEvent.layout.height)} />

Accessibility

  • Use appropriate accessibilityLabel, accessibilityHint, and accessibilityRole, accessibilityState props
  • Support screen readers (VoiceOver and TalkBack)
  • Ensure touch targets meet minimum size requirements (44x44 points)

Example: Use React Native accessibility props:

<View
  accessible
  accessibilityRole="adjustable"
  accessibilityLabel="Product carousel"
  accessibilityLiveRegion="polite"
>
  <Pressable
    accessibilityState={{ selected: isActive, disabled }}
    accessibilityActions={[{ name: 'activate' }]}
    onAccessibilityAction={handleAccessibilityAction}
  />
</View>

Screen Reader Content

// Hide visual content from screen readers
<View accessibilityElementsHidden importantForAccessibility="no-hide-descendants">
  {/* Animated/visual content */}
</View>

// Provide accessible alternative
<Text
  importantForAccessibility="yes"
  accessibilityLiveRegion="polite"
  style={{ color: 'transparent', position: 'absolute' }}
>
  {accessibleLabel}
</Text>

Reference Components

  • SlideButton: gesture handling, spring animations, accessibility actions
  • RollingNumber: Reanimated, measurement patterns, screen reader content
  • Select (alpha/): controlled/uncontrolled, Drawer integration
  • Stepper: direction-based defaults, shared logic from cds-common
  • Tour: animations, complexity
  • DatePicker: complexity

Mehr Skills von coinbase

git.repo-manager
coinbase
git.repo-manager — eine installierbare Fähigkeit für KI-Agenten, veröffentlicht von coinbase/cds.
official
agentic-wallet
coinbase
Krypto-Wallet-Operationen über die awal CLI — Anmelden, Kontostände prüfen, USDC/ETH/POL/SOL senden, Token handeln, das Wallet aufladen und das x402-Zahlungsprotokoll nutzen, um…
official
authenticate-wallet
coinbase
E-Mail-OTP-basierte Wallet-Authentifizierung mit Validierung und Statusprüfung. Zwei-Schritte-Anmeldeablauf: Einleitung per E-Mail, um einen 6-stelligen OTP zu erhalten, dann Verifizierung mit der flowId und dem Code zur Vervollständigung der Authentifizierung. Enthält Eingabevalidierungsregeln für E-Mail, flowId und OTP, um Shell-Injection vor der Ausführung von Befehlen zu verhindern. Bietet Statusprüfung, Kontostandsabfragen, Adressabruf und Wallet-Fensterzugriff über begleitende CLI-Befehle. Alle Befehle unterstützen --json-Ausgabe für maschinenlesbare...
official
fund
coinbase
Zahlen Sie USDC über Coinbase Onramp oder direkte Überweisung auf die Wallet ein. Öffnet eine begleitende Benutzeroberfläche, in der Nutzer voreingestellte Beträge (10 $, 20 $, 50 $) oder individuelle Werte auswählen und zwischen Apple Pay, Debitkarte, Banküberweisung oder Coinbase-Konto-Finanzierung wählen können. Unterstützt mehrere Zahlungsmethoden mit unterschiedlichen Abwicklungszeiten: sofort für Karte und Apple Pay, 1–3 Tage für ACH-Banküberweisungen. Zahlt Gelder als USDC im Base-Netzwerk ein; alternativ können Nutzer USDC direkt an die Wallet-Adresse senden über npx awal@2.0.3...
official
monetize-service
coinbase
Stelle einen kostenpflichtigen API-Endpunkt bereit, den andere Agents über das x402-Protokoll entdecken und bezahlen können. Verlangt USDC pro Anfrage auf Base mittels HTTP-402-Zahlungsprotokoll; Clients zahlen mit signierten Transaktionen, keine API-Schlüssel oder Konten erforderlich. Registriert Endpunkte automatisch im x402 Bazaar zur Agentenentdeckung, wenn Sie Discovery-Erweiterungen deklarieren. Unterstützt mehrere Preisstufen, Wildcard-Routen und mehrere Zahlungsoptionen pro Endpunkt mittels Express-Middleware. Basiert auf @x402/express und @x402/core...
official
pay-for-service
coinbase
Rufe kostenpflichtige APIs auf Base mit automatischer USDC-Zahlung über das x402-Protokoll auf. Führt HTTP-Anfragen (GET, POST usw.) an x402-fähige Endpunkte aus, wobei atomare USDC-Zahlungen automatisch abgewickelt werden. Unterstützt Anpassung von Anfragen durch Methode, JSON-Body, Abfrageparameter und benutzerdefinierte Header. Enthält Zahlungssteuerung: Festlegen des maximalen USDC-Betrags pro Anfrage und Gruppieren verwandter Vorgänge mit Korrelations-IDs. Erfordert Wallet-Authentifizierung und ausreichendes USDC-Guthaben; validiert alle Benutzereingaben, um Shell...
official
query-blockchain-data
coinbase
Fragen Sie On-Chain-Blockchain-Daten auf Base mit der CDP SQL API über x402 ab. Verwenden Sie dies, wenn Sie oder Ihr Benutzer On-Chain-Informationen über decodierte Blöcke anzeigen möchten,…
official
query-onchain-data
coinbase
Fragen Sie Onchain-Daten auf Base mit SQL ab, mit x402-Zahlungen pro Abfrage. Greifen Sie auf decodierte Events, Transaktionen und Blöcke über CoinbaseQL zu, einen ClickHouse-basierten SQL-Dialekt, der Joins, CTEs, Unterabfragen und Standardfunktionen unterstützt. Drei Haupttabellen verfügbar: base.events (decodierte Smart-Contract-Logs), base.transactions (vollständige Transaktionsdaten) und base.blocks (Block-Metadaten). Erfordert Filterung auf indizierte Felder (event_signature, address, block_timestamp) in Event-Abfragen, um vollständige Tabellen...
official