iii-architecture-patte…
Use when composing iii primitives into backend architectures: durable workflows, reactive backends, agentic pipelines, event-driven CQRS, effect pipelines, and…
Use when working with iii SDK APIs across Node.js, browser, Python, or Rust: package installation, worker initialization, function/trigger registration, invocation, channels, logging, OpenTelemetry, and language-specific caveats.
$ npx -y skills add iii-hq/iii --skill iii-sdk-reference --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/iii-sdk-referenceContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when working with iii SDK APIs across Node.js, browser, Python, or Rust: package installation, worker initialization, function/trigger registration, invocation, channels, logging, OpenTelemetry, and language-specific caveats.
name: iii-sdk-reference description: >- Use when working with iii SDK APIs across Node.js, browser, Python, or Rust: package installation, worker initialization, function/trigger registration, invocation, channels, logging, OpenTelemetry, and language-specific caveats.
Use this skill for language-specific SDK details. Use `iii-core-primitives` for the common model and `iii-error-handling` for exception handling.
# TypeScript / Node.js npm install iii-sdk # Browser apps npm install iii-browser-sdk # Python pip install iii-sdk # Rust cargo add iii-sdk
| SDK | Package | Best for | Important caveat | | --- | --- | --- | --- | | Node.js | `iii-sdk` | Server-side TypeScript/JavaScript workers | Supports custom headers, Logger, OpenTelemetry, HTTP-invoked functions | | Browser | `iii-browser-sdk` | Web apps and interactive UI callbacks | Connect through an RBAC-protected listener; keep secrets server-side | | Python | `iii-sdk` | Sync or async Python workers | Use `trigger_async` inside async handlers | | Rust | `iii-sdk` | High-performance tokio workers | Handler error type should map into `iii_sdk::Error` |
`Logger`/OpenTelemetry, HTTP request/response types, stream, queue, and worker-connection types live in the helpers package — `@iii-dev/helpers` (Node, with submodules like `/observability` and `/http`) or `iii-helpers` (Python `iii_helpers.*`, Rust `iii_helpers::*`) — installed alongside the SDK.
| Capability | Node | Python | Rust | | --- | --- | --- | --- | | Connect worker | `registerWorker(url, options?)` | `register_worker(address, options?)` | `register_worker(url, InitOptions)` | | Register local function | `registerFunction(id, handler, options?)` | `register_function(id, handler, **options)` | `register_function(RegisterFunction::new(...))` | | Register trigger | `registerTrigger({ type, function_id, config })` | `register_trigger({...})` | `register_trigger(RegisterTriggerInput { ... })` | | Invoke function | `trigger({ function_id, payload })` | `trigger(request)` / `trigger_async(request)` | `trigger(TriggerRequest)` | | Durable enqueue | `TriggerAction.Enqueue({ queue })` | `{"type": "enqueue", "queue": name}` | `TriggerAction::Enqueue { queue }` | | Channels | `createChannel()` | `create_channel()` / `create_channel_async()` | `create_channel(None).await` |
import { registerWorker } from "iii-sdk";
import { Logger } from "@iii-dev/helpers/observability";
const iii = registerWorker("ws://localhost:49134", {
workerName: "node-worker",
invocationTimeoutMs: 30000,
});
iii.registerFunction("users::lookup", async (input) => {
new Logger().info("looking up user", { userId: input.userId });
return { userId: input.userId, name: "Ada" };
});Node supports custom WebSocket headers, `Logger`, OpenTelemetry options, HTTP-invoked function registration, trigger metadata, channels, and custom trigger types.
import { registerWorker, TriggerAction } from "iii-browser-sdk";
const iii = registerWorker("wss://api.example.com/worker?token=session-token");
const result = await iii.trigger({
function_id: "backend::get-user",
payload: { userId: "123" },
});
await iii.trigger({
function_id: "analytics::track",
payload: { event: "page_view" },
action: TriggerAction.Void(),
});Do not expose the private engine worker port to untrusted browsers. Browser workers cannot send custom WebSocket headers and must not hold backend secrets.
from iii import InitOptions, register_worker
from iii_helpers.observability import Logger
iii = register_worker(
address="ws://localhost:49134",
options=InitOptions(worker_name="python-worker"),
)
def lookup_user(data):
Logger().info("looking up user", {"userId": data["userId"]})
return {"userId": data["userId"], "name": "Ada"}
iii.register_function("users::lookup", lookup_user)Python handlers may be sync or async. Use `await iii.trigger_async(request)` inside async handlers, and `iii.trigger(request)` in sync contexts. `HttpResponse` (from `iii_helpers.http`) uses camelCase `statusCode`.
use iii_sdk::{register_worker, InitOptions, RegisterFunction};
use serde_json::json;
let iii = register_worker("ws://127.0.0.1:49134", InitOptions::default());
iii.register_function(
RegisterFunction::new("users::lookup", |input: serde_json::Value| {
Ok(json!({ "userId": input["userId"], "name": "Ada" }))
}).description("Look up a user"),
)?;Rust supports typed handlers and schema extraction when input/output types derive `schemars::JsonSchema`. Add the `otel` feature when using OpenTelemetry helpers.
channel API details, and language-specific syntax.
architecture.
invocation mode decisions, use `iii-core-primitives`.
`iii-engine-config`.
What is iii? · Quick Start · Add Workers · SDKs · Agent Skills · Console · Resources
Repo: iii-hq/iii
Use when composing iii primitives into backend architectures: durable workflows, reactive backends, agentic pipelines, event-driven CQRS, effect pipelines, and…
Use when registering iii functions, binding triggers, selecting sync/void/enqueue invocation, creating workers, inspecting the live worker registry, installing…
Configure a managed iii engine through worker-compose.yaml or a directly supervised engine through config.yaml. Use for engine ports, RBAC listeners, streams,…
Handle iii engine and SDK errors across Node, Python, Rust, and browser workers. Use when interpreting error codes, retryability, RBAC denial, timeouts,…
Install the iii engine, set up your first worker, and get a working backend running. Use when a user wants to start a new iii project, install the SDK, or…
Turn a tech-spec directory into an interactive, marketing-grade web presentation — built so engineers understand the design, the reader is convinced of the…