core/actions

Creates Themis action creators with createAction and createAsyncAction for Redux slices.

6|6|Updated Jun 29, 2026
One-click install
npx skills add https://github.com/intent-hq/cloudlands-fe --skill core-actions-intent-hq
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: core/actions
Source: https://github.com/intent-hq/cloudlands-fe/tree/main/.agents/skills/themis/core/actions
Command: npx skills add https://github.com/intent-hq/cloudlands-fe --skill core-actions-intent-hq

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? It guides developers in defining Redux action creators correctly with the Themis library, preventing duplicate action-type ownership, payload shape drift, and miswired async request/success/failure flows. ## Core Features & Use Cases - Action Creator Patterns: Covers createAction with tuple payload typing, payload modifiers, and namespaced action types like sliceName/actionName. - Async Action Triplets: Explains createAsyncAction request creators with static .success and .failure creators, plus per-instance creators on dispatched requests. - Saga and Reducer Integration: Shows how reducers consume actions via .with() handlers and how sagas watch request creators directly with takeEvery/takeLatest. - Use Case: When adding a todos/rename action, search for existing owners first, define one canonical creator with a tuple payload, and wire it to reducers and sagas without duplicating the type string. ## Quick Start Ask the AI to create a Themis async action for loading a todo by ID, including the request, success, and failure creators wired to a saga watcher.

Frequently Asked Questions about core/actions

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a typed Redux action creator with createAction?▼

Use createAction with a tuple payload type, such as createAction<[id: string]>("todos/rename"), so callers pass positional arguments with full type safety. Namespace the action type as sliceName/actionName and search first to ensure no other module owns that type string.

How to handle async request success failure actions in redux-saga?▼

createAsyncAction generates a request creator plus static .success and .failure creators. Sagas should watch the request creator directly with takeLatest or takeEvery, since the creator's toString() exposes the action type; never pass the .type string.

When should I use a payload modifier in createAction?▼

Use a payload modifier when callers should pass positional arguments but reducers or sagas need a shaped object payload, such as converting (id, title, requestedAtMs) into { id, title, requestedAtMs }. Avoid object payload types for one-argument actions unless an existing contract requires it.

Why is duplicating an action type string across modules a problem?▼

Two modules claiming the same action type string break canonical ownership and cause reducers and sagas to respond to unintended dispatches. The state-integrity protocol requires one action type string to have exactly one canonical owner, found by searching before creating.

Can reducers generate timestamps or IDs for actions?▼

No, reducers must stay pure, so generated timestamps and IDs belong in the action creator or dispatch site, not in reducer logic. Create them before dispatch, for example by passing Date.now() through a payload modifier.