Token导航 LogoToken导航

Agent Skill · 开发

xstate(xstate 命令行)

xstate 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

xstate 是开发类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,第三方扫描已通过,按安装量在开发类的 21,746 个 Skill 里排第 12,578。

总安装 1,223周安装 52GitHub Stars 323下载 428核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:xstate(xstate 命令行)
来源仓库:https://github.com/pedronauck/skills
仓库路径:skills/xstate
安装命令:
npx skills add https://github.com/pedronauck/skills --skill xstate
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/pedronauck/skills --skill xstate

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

xstate 提供有限状态机建模与复杂交互逻辑的可视化辅助工具链。适用于表单流转、游戏状态管理与微服务通信协议设计。可生成状态图与事件流文档,帮助理解状态迁移边界条件。实际代码实现前应绘制草图,避免嵌套过深导致维护困难。xstate 属于开发类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/xstate

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/pedronauck/skills --skill xstate;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

xstate 怎么安装?

在终端执行 npx skills add https://github.com/pedronauck/skills --skill xstate。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

xstate 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

xstate 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

xstate 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

xstate 用的人多吗?

公开数据是累计安装 1,223 次,近一周安装 52 次,下载 428 次,GitHub 323 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

xstate 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
xstate

xstate 命令行 · 本页

1,223323需要联网未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

XState v5 Developer Guide

This skill provides comprehensive guidelines, patterns, and best practices for working with the XState v5 ecosystem in this project, including:

  • XState State Machines - Finite state machines and actors for complex application logic
  • @xstate/store - Simple event-driven stores for lightweight state management
  • XState + TanStack Query - Integration patterns for data fetching orchestration

Quick Reference

Use CaseToolReference
Complex state flows, guards, hierarchical statesXState Machinesreferences/machine-patterns.md
Simple event-driven state, atoms, undo/redo@xstate/storereferences/store-patterns.md
Data fetching with state orchestrationXState + TanStack Queryreferences/query-patterns.md

Core Principles

XState State Machines

  • Explicit States: Model application logic as explicit finite states and events
  • Actor Model: Embrace the actor model for complex orchestration
  • Impossible States: Use statecharts to eliminate impossible states
  • Declarative Thinking: Think declaratively about state transitions
  • Visualization: Use Stately Editor for visual machine creation and debugging

@xstate/store

  • Event-Driven Updates: Use events for all state updates (never direct mutations)
  • Keep Stores Simple: Focus on data management, not complex logic
  • Optimized Subscriptions: Leverage selectors for efficient state access
  • Reactive State: Use atoms for composable, reactive state
  • Upgrade Path: Migrate to XState machines when complexity grows

XState + TanStack Query Integration

  • XState for Orchestration: Use XState machines for workflow orchestration
  • TanStack Query for Data: Use TanStack Query for data fetching and caching
  • Actors as Bridges: Wrap Query operations as XState actors
  • Cache Updates in Mutations: Keep query cache updates in mutation callbacks

XState State Machines

Creating a Machine with setup() API

Always use the setup() API for type-safe machines:

import { setup, createActor } from 'xstate';

export enum CounterEventType {
  INCREMENT = 'increment',
  DECREMENT = 'decrement',
}

const counterMachineSetup = setup({
  types: {
    context: {} as { count: number },
    events: {} as
      | { type: CounterEventType.INCREMENT }
      | { type: CounterEventType.DECREMENT },
    input: {} as { initialCount: number },
  },
  guards: {
    isPositive: ({ context }) => context.count > 0,
  },
});

// Define actions OUTSIDE setup using type-bound helpers
const incrementCount = counterMachineSetup.assign({
  count: ({ context }) => context.count + 1,
});

export const counterMachine = counterMachineSetup.createMachine({
  id: 'counter',
  context: ({ input }) => ({ count: input.initialCount }),
  initial: 'active',
  states: {
    active: {
      on: {
        [CounterEventType.INCREMENT]: {
          actions: incrementCount,
        },
      },
    },
  },
});

React Integration

Use useMachine() for component-scoped machines and .provide() for action overrides:

import { useMachine } from '@xstate/react';
import { useMemo } from 'react';

function Counter({ onExternalAction }) {
  const machine = useMemo(
    () =>
      counterMachine.provide({
        actions: {
          logEvent: () => onExternalAction(),
        },
      }),
    [onExternalAction]
  );

  const [state, send] = useMachine(machine);

  return (
    <button onClick={() => send({ type: CounterEventType.INCREMENT })}>
      Count: {state.context.count}
    </button>
  );
}

For detailed patterns: See references/machine-patterns.md


@xstate/store

Creating a Store

Define stores with clear initial context and event-based transitions:

import { createStore } from '@xstate/store';

const userStore = createStore({
  context: {
    user: null as { id: string; name: string } | null,
    isLoading: false,
    error: null as string | null,
  },
  on: {
    setUser: (context, event: { user: { id: string; name: string } }) => ({
      ...context, // Always spread to preserve other properties
      user: event.user,
      error: null,
    }),
    setLoading: (context, event: { isLoading: boolean }) => ({
      ...context,
      isLoading: event.isLoading,
    }),
  },
});

// Use the trigger API for type-safe event sending
userStore.trigger.setUser({ user: { id: '1', name: 'John' } });

React Integration

import { useSelector, useStore } from '@xstate/store/react';

function Counter() {
  const store = useStore({
    context: { count: 0 },
    on: {
      increment: (context, event: { by: number }) => ({
        ...context,
        count: context.count + event.by,
      }),
    },
  });
  const count = useSelector(store, (state) => state.context.count);
  return <button onClick={() => store.trigger.increment({ by: 1 })}>{count}</button>;
}

Undo/Redo Pattern

import { createStore } from '@xstate/store';
import { undoRedo } from '@xstate/store/undo';

const editorStore = createStore(
  undoRedo({
    context: { text: '' },
    on: {
      insertText: (context, event: { text: string }) => ({
        ...context,
        text: context.text + event.text,
      }),
    },
  })
);

editorStore.trigger.undo();
editorStore.trigger.redo();

For detailed patterns: See references/store-patterns.md


XState + TanStack Query Integration

Query Subscriptions with QueryObserver

Use fromCallback with QueryObserver for reactive subscriptions:

import { fromCallback } from "xstate";
import { QueryObserver, type QueryClient } from "@tanstack/react-query";

const subscribeToQuery = fromCallback(({ input, sendBack }) => {
  const { queryClient, entityId } = input as {
    queryClient: QueryClient;
    entityId: string;
  };

  const observer = new QueryObserver(queryClient, {
    queryKey: ["data", entityId],
    queryFn: async () => { /* fetch logic */ },
  });

  const unsubscribe = observer.subscribe((result) => {
    if (result.data) {
      sendBack({ type: "REMOTE_UPDATE", data: result.data });
    }
  });

  // Emit current result immediately
  const currentResult = observer.getCurrentResult();
  if (currentResult.data) {
    sendBack({ type: "REMOTE_UPDATE", data: currentResult.data });
  }

  return () => unsubscribe();
});

Mutations with useMutation

Wrap useMutation hooks as fromPromise actors and provide via .provide():

const machine = useMemo(
  () =>
    createDataMachine().provide({
      actors: {
        saveData: fromPromise(async ({ input }) => {
          return await saveMutation.mutateAsync(input.data);
        }),
      },
    }),
  [saveMutation]
);

For detailed patterns: See references/query-patterns.md


Essential Patterns (All Tools)

  1. Use setup() for all machines - provides superior type inference
  2. Use enums for event types - UPPER_SNAKE_CASE convention
  3. Define actions outside setup() - use type-bound helpers like setup().assign()
  4. Use enqueueActions() for sequential actions - group related actions together
  5. Use .provide() for React integration - override actions with external methods
  6. Initialize context from input - use function form for dynamic initialization
  7. Always spread ...context in stores - preserve other properties
  8. Clean up subscriptions - return cleanup functions from callback actors

When to Use Each Tool

Use XState State Machines When:

  • Need finite states with specific transitions
  • Need guards and conditional transition logic
  • Need invoked actors for async orchestration
  • Need hierarchical or parallel states
  • Building complex multi-step workflows

Use @xstate/store When:

  • Simple global or local state management
  • Event-driven state updates without complex flows
  • Need undo/redo functionality
  • Want a lightweight alternative with upgrade path to XState

Use XState + TanStack Query When:

  • Need to orchestrate data fetching with UI state
  • Building real-time features with cache synchronization
  • Managing complex async workflows with server state

Common Pitfalls to Avoid

All XState Tools

  • Don't use generic parameters; use setup() instead
  • Don't define actions inside setup(); define them outside using type-bound helpers
  • Don't use string literals for event types; use enums instead
  • Don't mutate context directly; always use assign() or return new objects
  • Don't make guards impure or with side effects
  • Don't use deprecated v4 APIs (interpret(), cond, etc.)
  • Don't forget to .start() actors

@xstate/store Specific

  • Never forget to spread ...context in returns
  • Never subscribe without cleanup
  • Never use stores for complex state machines (migrate to XState)

TanStack Query Integration

  • Don't create QueryObserver outside callback actors
  • Don't update query cache inside machine actions
  • Don't pass mutation hooks directly to actors (wrap in fromPromise)
  • Don't access QueryClient from closure; pass through context

Validation Checklist

Before finishing any task involving XState ecosystem:

For State Machines

  • Machine uses setup() API for type safety
  • Event types are defined using enums
  • Actions are defined outside setup() using type-bound helpers
  • Context is initialized from input using function form
  • Guards are pure functions without side effects
  • React components use useMachine() or useActorRef()

For @xstate/store

  • Always spread ...context in transition return values
  • Use trigger API for type-safe event sending
  • Create selectors for optimized subscriptions
  • Clean up subscriptions in React components

For TanStack Query Integration

  • QueryObserver subscriptions are wrapped in fromCallback
  • Mutations are wrapped in fromPromise and provided via .provide()
  • Query cache updates happen in mutation callbacks, not machine actions
  • Cleanup functions are returned from callback actors
  • QueryClient is passed through machine input/context

Always

  • Run type checks (pnpm run typecheck)
  • Run tests (pnpm run test)

Detailed Reference Documentation

For comprehensive patterns, examples, and in-depth guidance, consult these reference files:

  • references/machine-patterns.md - Complete XState machine patterns including hierarchical states, parallel states, actors, testing, and migration from v4
  • references/store-patterns.md - Full @xstate/store patterns including selectors, atoms, effects, undo/redo, and when to migrate to machines
  • references/query-patterns.md - Complete TanStack Query integration patterns with QueryObserver, mutations, and full machine examples

平台分布

Codex

36.09%
按下载量换算154

Claude

31.91%
按下载量换算137

Cursor

18.91%
按下载量换算81

Gemini CLI

9.09%
按下载量换算39

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills