resonate-skills
Health Warn
- License — License: Apache-2.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Warn
- Code scan incomplete — No supported source files were scanned during light audit
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Agent skills for building with Resonate — durable execution for long-running, crash-safe workflows.
Resonate Skills
Agent skills for building with Resonate — a durable execution platform for long-running, crash-safe workflows.
Each skill teaches a coding agent (Claude Code, Cursor, or any skill-aware agent) how to reason about and write Resonate code for a specific task: deploying servers, building HTTP services, implementing sagas, coordinating human-in-the-loop approvals, and more.
What's in this repo today
- 9 foundational (language-agnostic) skills — concepts, mental models, the server-install guides, the CLI reference, the cross-SDK defaults reference, the Temporal and DBOS migration playbooks, and the
resonate-bashMCP tool guide that apply across every Resonate SDK. - 15 TypeScript per-SDK skills — idiomatic usage of the TypeScript SDK.
- 8 Python per-SDK skills — basic usage + debugging + patterns (saga, recursive fan-out, human-in-the-loop, external system of record) + HTTP service design for the Python SDK.
- 8 Rust per-SDK skills — basic usage + debugging + patterns (saga, recursive fan-out, durable-sleep-scheduled-work, human-in-the-loop, external system of record) for the early-development Rust SDK (v0.1.0, not yet on crates.io); every Rust skill carries an explicit v0.1.0 caveat.
- 8 Go per-SDK skills — basic usage (ephemeral + durable) + debugging + patterns (saga, recursive fan-out, durable-sleep, human-in-the-loop, external system of record) for the pre-release Go SDK (no semver tag yet; install
@latestor pin a commit); every Go skill carries a pre-release caveat and notes the two surfaces the Go SDK does not yet expose — a top-levelScheduleAPI and apromisessub-client. - 8 Java per-SDK skills — basic usage (ephemeral + durable) + debugging + patterns (saga, recursive fan-out, durable-sleep-scheduled-work, human-in-the-loop, external system of record) for the Java SDK. Unlike Go, the Java SDK is published on Maven Central (
io.resonatehq:resonate-sdk-java:0.1.1) and ships the fuller surface —r.promisesandr.schedulessub-clients plus a top-levelr.schedule(...)cron API — so the Java skills use those directly rather than documenting a gap. Requires Java 21+ (virtual threads); every Java skill carries a light prerelease note (API may change before1.0) and is compile-verified against0.1.1.
That is 9 foundational + 47 per-SDK = 56 skills (15 TypeScript, 8 Python, 8 Rust, 8 Go, 8 Java).
What is a skill?
A skill is a directory with a SKILL.md file (and optional references/, scripts/, assets/). The frontmatter tells the agent when to load it:
---
name: resonate-saga-pattern-typescript
description: Implement saga patterns for distributed transactions with compensation logic. Use when coordinating multi-step processes that need to maintain consistency across failures by unwinding completed steps.
license: Apache-2.0
---
Skills follow Anthropic's Agent Skills convention and work with Claude Code, the Anthropic SDK, and other skill-aware tools.
Taxonomy
Every skill falls into one of two categories.
Foundational skills are language-agnostic. They teach concepts, mental models, or operational patterns that apply across every Resonate SDK. Their directory names carry no SDK suffix.
Per-SDK skills teach idiomatic usage of a specific Resonate SDK. Their directory names and frontmatter carry an SDK suffix: -typescript, -python, -rust, -go, or -java. When the same concept applies across SDKs (e.g. sagas, HTTP services, debugging), each SDK gets its own skill — the per-SDK version expresses the pattern in the SDK's natural idioms rather than translating mechanically.
Foundational
Start here:
resonate-philosophy— The foundational mindset. Read this first.durable-execution— The core concept and Resonate's approach.resonate-migrate-from-temporal— Coming from Temporal? Port your app pattern by pattern; mapstemporalio/samples-*to Resonate examples across all four SDKs, with per-SDK API notes and honest coverage gaps.resonate-migrate-from-dbos— Coming from DBOS? Port your app pattern by pattern; mapsdbos-incexamples (demo apps + the SDK repos) to Resonate equivalents across all four SDKs, with per-SDK API notes and honest coverage gaps.
Operations:
resonate-cli— Drive the Resonate server from the shell:serve/dev, promise CRUD + search, schedules,invoke,tree, tasks, and the MCP shim. Covers every subcommand and flag as ofresonate 0.9.7, plus the small set of docs-vs-binary deltas an agent will trip on.resonate-server-deployment— Install and configure the Resonate server on Linux with systemd.resonate-server-deployment-cloud-run— Deploy the Resonate server to Google Cloud Run with Cloud SQL Postgres storage.resonate-bash— Run shell scripts as durable, asynchronous tasks via theresonate-bashMCP tool. What it's good at, how to install the local Resonate server + Claude Code MCP wiring, tool reference (params, target addresses, env vars, failure semantics).
Reference:
resonate-defaults— Cross-SDK default values for retry policies,ctx.runoptions, init, env vars, and server flags. Read this when asked "what's the default for X" instead of deflecting to "check the SDK source."
Per-SDK: TypeScript
Core SDK usage:
resonate-basic-ephemeral-world-usage-typescript— Client APIs: initialization, registration, top-level invocations.resonate-basic-durable-world-usage-typescript— Context APIs insidefunction*bodies.resonate-basic-debugging-typescript— Investigating stuck workflows, error codes, unexpected replays.
Reasoning:
resonate-advanced-reasoning-typescript— Mapping the Distributed Async Await spec to TypeScript SDK patterns and verifying correctness/durability/failure semantics.
Patterns:
resonate-saga-pattern-typescript— Distributed transactions with compensation logic.resonate-recursive-fan-out-pattern-typescript— Parallel workflow execution via recursive fan-out.resonate-human-in-the-loop-pattern-typescript— Approval gates and manual review workflows.resonate-external-system-of-record-pattern-typescript— Consistency across systems without distributed transactions.resonate-durable-sleep-scheduled-work-typescript— Timers, countdowns, and delayed execution viactx.sleep().resonate-state-bus-pattern-typescript— Stream durable workflow state to browsers via an external realtime bus (Firestore, Supabase Realtime, Pub/Sub) when the worker is short-lived.
HTTP & authentication:
resonate-http-service-design-typescript— HTTP services with Resonate behind route handlers.resonate-token-authentication-typescript— JWT auth and prefix-based authorization.
Deployments:
resonate-gcp-deployments-typescript— Deploy TypeScript workers to Google Cloud Functions.resonate-supabase-deployments-typescript— Resonate workflows on Supabase Edge Functions.resonate-lovable-usage-prompt-typescript— Building Resonate apps in Lovable.dev (Node.js/React/TypeScript).
Per-SDK: Python
Core SDK usage:
resonate-basic-ephemeral-world-usage-python— Client APIs: initialization (Resonate(url=...)), registration viar.register(fn), top-level invocations (r.run/r.rpc), dependencies (r.with_dependency), external promises.resonate-basic-durable-world-usage-python— Context APIs insideasync defdurable functions (await ctx.run/rpc/sleep/promise), determinism rules, and Python-specific deltas from TypeScript.resonate-basic-debugging-python— Python-specific failure modes: async/await pitfalls, v0.7.0 SDK + Rust server v0.9.x, Python ≥ 3.12 pin, non-determinism regressions.
Patterns:
resonate-saga-pattern-python— Distributed transactions with compensation viatry/exceptand reverse-order cleanup.resonate-recursive-fan-out-pattern-python— Parallel execution via list-comprehension overctx.run/ctx.rpchandles, recursion, bounded parallelism.resonate-human-in-the-loop-pattern-python— Workflow steps that block onctx.promise()until a webhook, UI, or operator resolves.resonate-external-system-of-record-pattern-python— Coordinate writes to an external SoR (Postgres, TigerBeetle, Stripe) with idempotency keys.
HTTP & service design:
resonate-http-service-design-python— FastAPI/Flask/Django route handlers that start or await durable workflows; worker-group separation; webhook-driven promise resolution.
Not yet available for Python: token-based authentication (Python SDK doesn't yet support it — planned for a future release per the docs); GCP Cloud Functions / Supabase Edge deployments (no Python shim; Supabase Edge runtime is Deno-only). Durable-sleep-scheduled-work is not a separate Python skill because ctx.sleep(timedelta(...)) is covered in basic-durable-world; a top-level r.schedule(...) cron API is available in v0.7.0 (see basic-ephemeral-world skill).
Per-SDK: Rust
v0.1.0 caveat: the Rust SDK is in active development and not yet on crates.io. Install via git dependency. APIs may change between releases; every Rust skill carries this caveat at the top.
Core SDK usage:
resonate-basic-ephemeral-world-usage-rust— Client APIs:Resonate::new(ResonateConfig)/Resonate::local(),#[resonate::function]attribute macro, registration,.run()/.rpc()/.schedule(), promises API.resonate-basic-durable-world-usage-rust— Context APIs inside#[resonate::function]-decorated async functions:ctx.run,ctx.rpc,ctx.sleep,.spawn()for parallelism, function kinds (Workflow / Leaf with Info / Pure leaf).resonate-basic-debugging-rust— Rust-specific failure modes: serde derive errors,ctxvsinfoconfusion,.spawn()double-await, tokio runtime mismatches, v0.1.0 server-compat.
Patterns:
resonate-saga-pattern-rust— Distributed transactions withResult<T>+ match-based compensation dispatch via enum; forward path uses?propagation.resonate-recursive-fan-out-pattern-rust— Parallel execution via.spawn().await?double-await pattern; recursion; bounded parallelism via slice.chunks(n).resonate-human-in-the-loop-pattern-rust— Workflow steps that block onctx.promise::<T>()until a webhook, UI, or operator settles viaresonate.promises.resolve/reject/cancel.resonate-external-system-of-record-pattern-rust— Coordinate writes to an external SoR (Postgres, TigerBeetle, Stripe) with idempotency keys; type-dispatched DI viactx.get_dependency::<T>().resonate-durable-sleep-scheduled-work-rust—ctx.sleep(Duration)for in-workflow durable sleep +resonate.schedule()cron-registered ephemeral-world scheduling.
Docs-vs-source note: ctx.promise::<T>(), ctx.get_dependency::<T>(), ctx.info(), and resonate.with_dependency::<T>() all exist in the v0.1.0 SDK source but are not yet covered in docs/develop/rust.mdx. The Rust skills above use these APIs with source-path citations; docs are expected to catch up in a future release.
Not yet written for Rust: HTTP service design + deployment skills. These track SDK stability and will land when the source/docs validate the relevant paths.
Per-SDK: Go
Pre-release caveat: the Go SDK has no semver-tagged release yet. Install with go get github.com/resonatehq/resonate-sdk-go@latest (resolves to a Go pseudo-version) or pin a commit for stability. APIs may change before the first tag is cut; every Go skill carries this caveat at the top, verified against develop/go.mdx and the resonatehq-examples/*-go repos.
Core SDK usage:
resonate-basic-ephemeral-world-usage-go— Client APIs:resonate.New(Config), the package-level genericresonate.Register, top-levelRegisteredFunc.Run,Resonate.RPC/Resonate.Get, typed vs untyped handles,RunOptions, andStopsemantics (don't Stop a worker).resonate-basic-durable-world-usage-go— Context APIs inside durable functions:ctx.Run/ctx.RPC/ctx.Sleep/ctx.Promise/ctx.Detached,Future.Await, option structs, accessors, the bounded 3-attempt default retry, and the replay model.resonate-basic-debugging-go— Go-specific failure modes: thelocalnet+NoopHeartbeat{}requirement,ctx.Run's uncheckedanyleaf signatures, replay double-fires, theSender().PromiseSettlebase64 encoding trap (issue #28), andr.Stop()silently killing a live worker.
Patterns:
resonate-saga-pattern-go— Distributed transactions with explicit(T, error)returns, a trackedcompletedslice, and reverse-order compensation dispatched viatype Step string+switch.resonate-recursive-fan-out-pattern-go— Parallel execution via the dispatch-all-then-await-all[]*resonate.Futurepattern; recursivectx.RPCself-dispatch; worker-group separation.resonate-human-in-the-loop-pattern-go— Workflow steps that park onctx.Promise()until an external actor settles via the CLI, the server HTTP API, or the low-levelSender().PromiseSettle— Go has nopromisessub-client (issue #28).resonate-external-system-of-record-pattern-go— Coordinate writes to an external SoR by wrapping every interaction in its own idempotentctx.Run; idempotency keys derived fromctx.ID().resonate-durable-sleep-scheduled-work-go—ctx.Sleep(time.Duration)for in-workflow durable sleep, countdowns, and long-horizon delays. Go has no top-levelScheduleAPI yet; recurring work uses in-workflowctx.Sleeploops or external cron →RPC.
Not yet written for Go: HTTP service design, token-authentication, and deployment skills. The Go SDK can drive net/http services today (see example-node-drain-orchestrator-go), but the dedicated skill waits on a stable API surface; deployment skills track validated paths. Two SDK surfaces are also absent at pre-release — a top-level Schedule API and a promises sub-client (issue #28) — and the relevant skills note the workarounds rather than inventing the API.
Per-SDK: Java
Prerelease note: the Java SDK is published on Maven Central — pin io.resonatehq:resonate-sdk-java:0.1.1 (the only release; confirmed against maven-metadata.xml, not the lagging search box). The API mirrors the Python SDK and may change before a stable 1.0; every Java skill carries a light prerelease note. Requires Java 21+ (virtual threads). Every code block is compile-verified against 0.1.1 (Java 21 toolchain) and cross-checked against develop/java.mdx (docs PR #230) and the resonatehq-examples/*-java repos.
Core SDK usage:
resonate-basic-ephemeral-world-usage-java— Client APIs: the fluentResonate.builder()(ornew Resonate()for local mode),registervia method references, top-levelr.run/r.rpc/r.get, typed vs untyped handles, thepromisesandschedulessub-clients, per-call options, andstopsemantics (don't stop a worker).resonate-basic-durable-world-usage-java— Context APIs inside durable functions:ctx.run/ctx.rpc/ctx.sleep/ctx.promise/ctx.detached,ResonateFuture.await, the immutableOptsrecord,ctx.infoaccessors, type-keyed DI (ctx.getDependency), the four retry policies, and the replay model.resonate-basic-debugging-java— Java-specific failure modes: the Java 21 requirement, untyped-handleIntegervsLongdecoding (read throughNumber), CLI positional-argument arity (one parameter per--arg), thedetachedby-name-only constraint, rejected-promiseApplicationErrorhandling, andr.stop()silently killing a live worker.
Patterns:
resonate-saga-pattern-java— Distributed transactions with atry/catchforward path, a trackedList<Step>, reverse-order compensation via an exhaustiveenum+switch; retries controlled by the policy (Retry.Never) since Java has no non-retryable error wrapper. CatchException(await sneaky-throws).resonate-recursive-fan-out-pattern-java— Parallel execution via the dispatch-all-then-await-allList<ResonateFuture<T>>pattern; recursivectx.rpcself-dispatch to a named worker group; worker/client builder split withgroup(...).resonate-human-in-the-loop-pattern-java— Workflow steps that park onctx.promise()until an external actor settles. Java has anr.promisessub-client, so resolution is a cleanr.promises.resolve(id, new Value(null, data))— no manual base64 encoding (that's a Go-only workaround).resonate-external-system-of-record-pattern-java— Coordinate writes to an external SoR by wrapping every interaction in its own idempotentctx.run; reach the SoR client via type-keyed DI (r.withDependency/ctx.getDependency); idempotency keys fromctx.info().id().resonate-durable-sleep-scheduled-work-java—ctx.sleep(Duration)for in-workflow durable sleep, countdowns, and long-horizon delays, plus the top-levelr.schedule(...)cron API and ther.schedulessub-client. Java ships a Schedule API; the Go SDK does not yet.
Not yet written for Java: HTTP service design, token-authentication, and deployment skills. The Java SDK supports token auth (builder().token(...)) and can sit behind HTTP route handlers today, but the dedicated skills wait on a stable API surface and validated deployment paths — mirroring the Rust/Go deferral.
Using these skills
With Claude Code
Clone this repo into your project's .claude/skills/ directory (or your user-level ~/.claude/skills/):
cd your-project
mkdir -p .claude/skills
git clone https://github.com/resonatehq/resonate-skills .claude/skills/resonate
Claude Code will automatically discover them. Invoke one explicitly with Use the resonate-saga-pattern-typescript skill to..., or let the agent pick based on the description field.
With the Anthropic SDK
Load SKILL.md files as context when you want the model to apply that skill. See Anthropic's Agent Skills docs for loading patterns.
With other agents
Skills are plain Markdown. Any agent framework that supports prompt injection or context loading can use them.
Contributing
Where does a new skill belong?
Decision tree:
- Is it a concept, mental model, or framework-agnostic principle that applies equally across every Resonate SDK? → Foundational. No SDK suffix. Describe the idea in language-agnostic terms and link to per-SDK skills for concrete syntax.
- Is it idiomatic usage of a specific SDK's API? → Per-SDK. Suffix the directory name and frontmatter
namewith the SDK:-typescript,-python,-rust,-go, or-java. - Is it operational or deployment knowledge? → Per-SDK if the SDK shapes the deployment (e.g. Cloud Functions runtime, worker registration). Foundational if the operation is truly language-independent (e.g. installing the Resonate server binary).
Default to per-SDK. Promote a skill to foundational only when it contains no SDK-specific APIs, syntax, or runtime idioms. Debug skills, for example, are per-SDK: error codes, replay tells, and diagnostic tooling differ enough across SDKs that a single unified debug skill would either read as abstract or balloon past an agent's working context. The concept of replay and durability lives in durable-execution; the SDK-specific tells live in each SDK's debug and advanced-reasoning skills.
Same concept, multiple SDKs
When a pattern translates across SDKs (e.g. saga with compensation), each SDK gets its own skill — written idiomatically for that SDK, not find-and-replaced from another. If the natural expression differs materially (async/await vs generator syntax, Result vs exceptions), the skill reflects that. If the expressions are genuinely identical, consider whether the shared logic belongs in a foundational skill with the per-SDK skills covering only the surface syntax.
Out of scope
- Mirroring SDK reference documentation. Skills are behaviour-oriented ("when would I reach for this?") — the per-SDK guides at docs.resonatehq.io/docs/develop/ are the reference. Skills cite them.
- New deployment targets without SDK validation. A new deployment skill requires the target to have validated SDK support. Currently covered: GCP Cloud Functions, Supabase Edge Functions, and the Linux/systemd server install. Requests for AWS, Cloudflare, Fly, and others are tracked separately and land once an SDK and a benchmark cycle confirm the deployment path.
- Frontmatter changes. The Anthropic Agent Skills spec (
name,description,license) is fixed. Only skill content is up for discussion.
Submitting a skill
- Create
your-skill-name[-typescript|-python|-rust|-go|-java]/SKILL.mdwith the frontmatter block. - Keep the
descriptionspecific — it's what agents use to decide when to load the skill. - Put example snippets inline; put long-form references under
your-skill-name/references/. - Keep prose tight: skills are read by LLMs with finite context.
- One skill per PR unless they're tightly coupled (e.g. the TypeScript and Python variants of the same pattern).
License
Apache License 2.0. See LICENSE.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found