mcpField
I
iii-state-management

iii-state-management

github.com/iii-hqData & databases220 installs
Repository

About iii-state-management

A state-management skill for iii engine developers, covering shared, scoped key-value data. It shows how to set, read, partially update, list, and delete entries.

Key features

  1. 01Read and write scoped key-value state
  2. 02List keys within a scope
  3. 03Delete state entries
  4. 04Apply partial updates with ops
  5. 05Use file-based or Redis adapters

Use cases

  1. 01Share persistent state across functions
  2. 02Maintain session or order data
  3. 03Save results after asynchronous jobs

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/iii-hq/skills --skill iii-state-management

After installing, type/iii-state-managementin Claude Code to confirm it loaded.

Details

From the project README

State Management

Comparable to: Redis, DynamoDB, Memcached

Key Concepts

Use the concepts below when they fit the task. Not every state operation needs all of them.

  • State is a scoped key-value store accessed via built-in trigger functions
  • state::set writes a value; state::get reads it (returns null for missing keys)
  • state::list retrieves all keys in a scope; state::delete removes a key
  • state::update performs a partial merge using an ops array for fine-grained changes
  • Payloads use scope, key, and value to address state entries
  • State is shared across all functions — use meaningful scope names to avoid collisions

Architecture

Function
  → trigger('state::set', { scope, key, value })
  → trigger('state::get', { scope, key })
  → trigger('state::update', { scope, key, ops })
  → trigger('state::delete', { scope, key })
  → trigger('state::list', { scope })
    → StateModule → KvStore / Redis adapter

iii Primitives Used

PrimitivePurpose
trigger({ function_id: 'state::set', payload })Write a value to state
trigger({ function_id: 'state::get', payload })Read a value from state
trigger({ function_id: 'state::list', payload })List all keys in a scope
trigger({ function_id: 'state::delete', payload })Remove a key from state
trigger({ function_id: 'state::update', payload: { ops } })Partial merge with operations array

Reference Implementation

See ../references/state-management.js for the full working example — functions that read, write, update, and delete state entries across a shared scope.

Also available in Python: ../references/state-management.py

Also available in Rust: ../references/state-management.rs

Common Patterns

Code using this pattern commonly includes, when relevant:

  • registerWorker(url, { workerName }) — worker initialization
  • trigger({ function_id: 'state::set', payload: { scope, key, value } }) — write state
  • trigger({ function_id: 'state::get', payload: { scope, key } }) — read state (returns null if missing)
  • trigger({ function_id: 'state::update', payload: { scope, key, ops } }) — partial merge
  • trigger({ function_id: 'state::list', payload: { scope } }) — enumerate keys
  • trigger({ function_id: 'state::delete', payload: { scope, key } }) — remove entry
  • const logger = new Logger() — structured logging

Adapting This Pattern

Use the adaptations below when they apply to the task.

  • Name scopes after your domain (e.g. user-sessions, order-data, config)
  • Use state::get with a null check to handle missing keys gracefully
  • Use state::update with ops for partial updates instead of read-modify-write cycles
  • Combine with iii-queue-processing to persist results after async job completion

Engine Configuration

StateModule must be enabled in iii-config.yaml with a KvStore adapter (file-based or Redis). See ../references/iii-config.yaml for the full annotated config reference.

Pattern Boundaries

  • If the task needs reactive side effects when state changes, prefer iii-state-reactions.
  • If the task needs real-time client push when data updates, prefer iii-realtime-streams.
  • Stay with iii-state-management when the primary need is reading and writing persistent key-value data.

When to Use

  • Use this skill when the task is primarily about iii-state-management in the iii engine.
  • Triggers when the request directly asks for this pattern or an equivalent implementation.

Boundaries

  • Never use this skill as a generic fallback for unrelated tasks.
  • You must not apply this skill when a more specific iii skill is a better fit.
  • Always verify environment and safety constraints before applying examples from this skill.

Comments

Markdown supported