원클릭으로
xstate
XState v5 state machines and statecharts for JavaScript/TypeScript
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
XState v5 state machines and statecharts for JavaScript/TypeScript
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Prepend session handoff to DaysActivity.md
Initialize session with context briefing
File production feedback about a zgent's behavior. Routes to CSO for diagnosis and artifact tuning. Usage: /zgent-feedback <zgent> <description>
Run A/B tests comparing convention variants to measure compliance improvements
Archive yesterday's DaysActivity and create fresh file for today
DaysActivity.md formatting conventions. Use when writing handoff entries, hourly summaries, or any content destined for DaysActivity.md.
| name | xstate |
| description | XState v5 state machines and statecharts for JavaScript/TypeScript |
| context | fork |
| allowed-tools | Read, Bash, Glob, Grep |
Actor-based state management & orchestration for complex app logic.
Repository: statelyai/xstate Language: TypeScript Stars: 29,364 License: MIT License
import { createMachine, createActor, assign } from 'xstate';
const toggleMachine = createMachine({
id: 'toggle',
initial: 'inactive',
context: { count: 0 },
states: {
inactive: {
on: { TOGGLE: { target: 'active' } }
},
active: {
entry: assign({ count: ({ context }) => context.count + 1 }),
on: { TOGGLE: { target: 'inactive' } }
}
}
});
const actor = createActor(toggleMachine);
actor.subscribe((state) => console.log(state.value, state.context));
actor.start();
actor.send({ type: 'TOGGLE' });
import { setup, assign } from 'xstate';
const machine = setup({
types: {
context: {} as { count: number },
events: {} as { type: 'INCREMENT' } | { type: 'DECREMENT' }
},
actions: {
increment: assign({ count: ({ context }) => context.count + 1 }),
decrement: assign({ count: ({ context }) => context.count - 1 })
}
}).createMachine({
initial: 'active',
context: { count: 0 },
states: {
active: {
on: {
INCREMENT: { actions: 'increment' },
DECREMENT: { actions: 'decrement' }
}
}
}
});
const lightMachine = createMachine({
id: 'light',
initial: 'green',
states: {
green: { on: { TIMER: 'yellow' } },
yellow: { on: { TIMER: 'red' } },
red: {
on: { TIMER: 'green' },
initial: 'walk',
states: {
walk: { on: { PED_TIMER: 'wait' } },
wait: { on: { PED_TIMER: 'stop' } },
stop: {}
}
}
}
});
const wordMachine = createMachine({
id: 'word',
type: 'parallel',
states: {
bold: {
initial: 'off',
states: {
on: { on: { TOGGLE_BOLD: 'off' } },
off: { on: { TOGGLE_BOLD: 'on' } }
}
},
italics: {
initial: 'off',
states: {
on: { on: { TOGGLE_ITALICS: 'off' } },
off: { on: { TOGGLE_ITALICS: 'on' } }
}
}
}
});
import { useActor } from '@xstate/react';
function ToggleComponent() {
const [state, send] = useActor(toggleMachine);
return (
<div>
<p>State: {state.value}</p>
<p>Count: {state.context.count}</p>
<button onClick={() => send({ type: 'TOGGLE' })}>
Toggle
</button>
</div>
);
}
import { createStore } from '@xstate/store';
const store = createStore({
context: { count: 0 },
on: {
inc: (ctx) => ({ count: ctx.count + 1 }),
dec: (ctx) => ({ count: ctx.count - 1 })
}
});
store.subscribe((snapshot) => {
console.log(snapshot.context.count);
});
store.trigger.inc(); // count = 1
import { useSelector } from '@xstate/store-react';
function Counter() {
const count = useSelector(store, (state) => state.context.count);
return (
<div>
<span>{count}</span>
<button onClick={() => store.trigger.inc()}>+</button>
<button onClick={() => store.trigger.dec()}>-</button>
</div>
);
}
const machine = setup({
guards: {
isPositive: ({ context }) => context.count > 0,
canIncrement: ({ context }) => context.count < 10
},
actions: {
logCount: ({ context }) => console.log('Count:', context.count)
}
}).createMachine({
context: { count: 0 },
states: {
active: {
on: {
INCREMENT: {
guard: 'canIncrement',
actions: ['increment', 'logCount']
},
DECREMENT: {
guard: 'isPositive',
actions: ['decrement', 'logCount']
}
}
}
}
});
const machine = createMachine({
id: 'app',
initial: 'home',
states: {
home: { id: 'home', route: {} },
dashboard: {
initial: 'overview',
states: {
overview: { id: 'overview', route: {} },
settings: {
id: 'settings',
route: {
guard: ({ context }) => context.role === 'admin'
}
}
}
}
}
});
// Route directly to deeply nested state
actor.send({ type: 'xstate.route', to: '#settings' });
references/README.md - Complete documentation with examples, templates, and getting started guidereferences/issues.md - Recent GitHub issues including bugs, feature requests, and known problemsreferences/releases.md - Detailed release notes with new features and fixesreferences/file_structure.md - Repository structure showing packages, examples, and source organizationreferences/README.md for core functions and methodsreferences/issues.md for known problems and workaroundsreferences/releases.md for version upgrade guidancexstate - Core state machine library@xstate/react - React hooks and utilities@xstate/vue - Vue composition functions@xstate/svelte - Svelte utilities@xstate/store - Simple state management@statelyai/inspect - Development tools