Agent skill

Wrdn Effect Promise Exit

by UsefulSoftwareCo in UsefulSoftwareCo/executor

Replace React/effect-atom mutation handlers that use promise-mode plus try/catch with promiseExit and explicit Exit handling.

MITAuto-check: notesDevelopment

Install Wrdn Effect Promise Exit

skills CLI
$ npx skills add UsefulSoftwareCo/executor --skill wrdn-effect-promise-exit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install UsefulSoftwareCo/executor wrdn-effect-promise-exit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/UsefulSoftwareCo/executor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/wrdn-effect-promise-exit .claude/skills/wrdn-effect-promise-exit && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
wrdn-effect-promise-exit
GitHub stars
4.1k
Token cost
~1.2k tokens
SKILL.md length
454 words
Files
1
Skills in repo
21
Repo updated
First seen
Licence
MIT

At a glance

Replace React/effect-atom mutation handlers that use promise-mode plus try/catch with promiseExit and explicit Exit handling.

  • Works in 5 steps: Find the mutation setter. Look for const… → Confirm it is an effect-atom mutation… → Find thrown-control handling. The same… → …
  • Review flags try/catch around useAtomSet mutation calls
  • SKILL.md covers Trace before changing, Fix shape, Bad and Good, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Wrdn Effect Promise Exit is an agent skill from UsefulSoftwareCo/executor. Replace React/effect-atom mutation handlers that use promise-mode plus try/catch with promiseExit and explicit Exit handling. Use when lint or review flags try/catch around useAtomSet mutation calls, especially UI handlers that set error/busy state after a failed mutation.

Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Linting and formatting. It works with React. The repository describes itself as: The missing integration layer for AI agents. Let them call any OpenAPI / MCP / GraphQL / custom js functions in secure environment. The licence is MIT.

When your agent uses it

  • Review flags try/catch around useAtomSet mutation calls
  • Especially UI handlers that set error/busy state after a failed mutation

Example prompts

  • “/wrdn-effect-promise-exit”

Requirements

  • Pre-approved tools (allowed-tools): Read, Grep, Glob, Bash

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Find the mutation setter. Look for const doX = useAtomSet(, { mode: "promise" }).
  2. Confirm it is an effect-atom mutation boundary. The setter should come from @effect/atom-react and a mutation atom from ./atoms…
  3. Find thrown-control handling. The same handler has try { await doX(...) } catch (e) { ... }, usually setting error text, resetting…
  4. Check for non-mutation async work in the same block. If the block also awaits follow-up mutations, convert those to promiseExit too or…
  5. Do not rewrite unrelated local async code. Probe requests, OAuth popup helpers, fetch, and browser APIs may need a different skill unless…

What it can do on your machine

Read from SKILL.md and the folder at commit 71620ce. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Grep
    • Glob
    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wrdn Effect Promise Exit loads about 1.2k tokens when it runs. Until then it costs about 75 tokens; SKILL.md has 454 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~75
When it runs · the whole SKILL.md, loaded when a task matches
~1.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Grep, Glob, Bash

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from UsefulSoftwareCo/executor at commit 71620ce, republished under its MIT licence (© UsefulSoftwareCo). 454 words, ~1,210 tokens.

Download SKILL.mdSave it as .claude/skills/wrdn-effect-promise-exit/SKILL.md (or your agent's skills folder).
name
wrdn-effect-promise-exit
description
Replace React/effect-atom mutation handlers that use promise-mode plus try/catch with promiseExit and explicit Exit handling. Use when lint or review flags try/catch around useAtomSet mutation calls, especially UI handlers that set error/busy state after a failed mutation.
allowed-tools
Read, Grep, Glob, Bash

You fix one pattern: a React handler awaits an effect-atom mutation in mode: "promise" and catches failures with try/catch.

The preferred UI boundary is mode: "promiseExit" plus Exit.isFailure. This keeps mutation failures as values, matches Effect's error model, and prevents optimistic mutation cleanup from depending on thrown exceptions.

Trace before changing

  1. Find the mutation setter. Look for const doX = useAtomSet(<mutationAtom>, { mode: "promise" }).
  2. Confirm it is an effect-atom mutation boundary. The setter should come from @effect/atom-react and a mutation atom from ./atoms, ../api/atoms, or plugin React atoms.
  3. Find thrown-control handling. The same handler has try { await doX(...) } catch (e) { ... }, usually setting error text, resetting adding/saving, or showing a toast.
  4. Check for non-mutation async work in the same block. If the block also awaits follow-up mutations, convert those to promiseExit too or keep a narrow boundary only around truly non-effect APIs.
  5. Do not rewrite unrelated local async code. Probe requests, OAuth popup helpers, fetch, and browser APIs may need a different skill unless the lint finding specifically points at the mutation call.

Fix shape

  • Change the setter to { mode: "promiseExit" }.
  • Import * as Exit from "effect/Exit" if missing.
  • Import * as Option from "effect/Option" only when extracting an optional error.
  • Replace try/catch around the mutation with:
    • const exit = await doX(args);
    • if (Exit.isFailure(exit)) { ...; return; }
    • success work after the failure branch.
  • Use Exit.findErrorOption(exit) when preserving an existing error message or typed error branch.
  • Keep existing typed error handling when present, e.g. SecretInUseError, ConnectionInUseError.

Bad

tsx
const doAdd = useAtomSet(addGraphqlSource, { mode: "promise" });

const handleAdd = async () => {
  setAdding(true);
  setAddError(null);
  try {
    await doAdd({
      params: { scopeId },
      payload,
      reactivityKeys: sourceWriteKeys,
    });
    props.onComplete();
  } catch (e) {
    setAddError(e instanceof Error ? e.message : "Failed to add source");
    setAdding(false);
  }
};

Good

tsx
import * as Exit from "effect/Exit";
import * as Option from "effect/Option";

const doAdd = useAtomSet(addGraphqlSource, { mode: "promiseExit" });

const handleAdd = async () => {
  setAdding(true);
  setAddError(null);
  const exit = await doAdd({
    params: { scopeId },
    payload,
    reactivityKeys: sourceWriteKeys,
  });
  if (Exit.isFailure(exit)) {
    const error = Exit.findErrorOption(exit);
    setAddError(
      Option.isSome(error) && error.value instanceof Error
        ? error.value.message
        : "Failed to add source",
    );
    setAdding(false);
    return;
  }
  props.onComplete();
};
Show full SKILL.md (210 more words)Show less

Follow-up mutation chains

If success work depends on the mutation result, read it after the failure branch:

tsx
const exit = await doAdd(args);
if (Exit.isFailure(exit)) {
  setAdding(false);
  return;
}

const sourceId = exit.value.namespace;

If a follow-up effect-atom mutation can fail and the UI treats that as add failure, make that setter promiseExit too and branch the same way. Do not put the follow-up mutation in try/catch just because the first mutation now returns Exit.

What not to report

  • try/catch around non-effect APIs such as new URL, JSON.parse, raw fetch, or browser popup code. Those may be real lint findings, but they need a different remediation skill.
  • useAtomSet(..., { mode: "promise" }) with no local failure handling and no lint finding. Some call sites intentionally let callers decide the boundary.
  • Tests or SDK/server Effect code. This skill is for React/effect-atom UI mutation handlers.
  • Manual optimistic placeholder cleanup. Use wrdn-effect-atom-optimistic for that; if both patterns appear together, fix optimistic plumbing first, then use promiseExit for the remaining mutation boundary.

Output requirements

When reviewing, report:

  • File and line of the useAtomSet(..., { mode: "promise" }) or try/catch.
  • Mutation being called.
  • Why it should return Exit at this UI boundary.
  • Fix: the exact setter mode and the failure branch to add.

When editing, keep changes local to the handler and imports unless a follow-up mutation in the same success path must also become promiseExit.

© UsefulSoftwareCo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/wrdn-effect-promise-exit of UsefulSoftwareCo/executor.

Open the folder on GitHubat commit 71620ce

Compare with similar skills

Wrdn Effect Promise Exit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Wrdn Effect Promise Exit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wrdn Effect Promise Exit this skillUsefulSoftwareCo/executor4.1k—~1.2kAutomated safety check: NotesMIT
Ultraciteagustinusnathaniel/nextarter-tailwind1252 repos~1.2kAutomated safety check: PassMIT
Code Reviewnteract/semiotic2.7k—~1.5kAutomated safety check: PassApache-2.0
React Render Types SetupHorusGoul/eslint-plugin-react-render-types111—~1.8kAutomated safety check: PassMIT
React Vendoringvercel/next.js143k—~987Automated safety check: PassMIT
Typescript Tooling MigrationArize-ai/phoenix12k—~2.8kAutomated safety check: PassApache-2.0

Similar skills

  • Ultracite

    agustinusnathaniel/nextarter-tailwind

    Ultracite is a zero-config linting and formatting preset for JavaScript/TypeScript projects.

    125 GitHub starsUsed in 2 repos~1.2k tokens
    DevelopmentAuto-check passed
  • Code Review

    nteract/semiotic

    Review Semiotic pull requests for behavioral bugs, regressions, contract drift, and missing evidence.

    2.7k GitHub stars~1.5k tokensUpdated today
    DevelopmentAuto-check passed
  • React Render Types Setup

    HorusGoul/eslint-plugin-react-render-types

    Install and configure eslint-plugin-react-render-types in a TypeScript React project.

    111 GitHub stars~1.8k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • React Vendoring

    vercel/next.js

    Official

    React vendoring and react-server layer boundaries. An agent skill from vercel/next.js.

    143k GitHub stars~987 tokensUpdated today
    DevelopmentAuto-check passed
  • Migrate or upgrade TypeScript tooling in the Phoenix monorepo.

    12k GitHub stars~2.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Dev Workflow Checker

    shenjingnan/xiaozhi-client

    开发流程检查技能,确保代码修改后执行必要的质量检查

    341 GitHub stars~464 tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from UsefulSoftwareCo/executor

All 21 skills in this repo
  • Effect Client Wrapper

    UsefulSoftwareCo/executor

    Pattern for wrapping third-party SDK clients (Stripe, Resend, AWS, etc.) with Effect.

    4.1k GitHub starsUsed in 1 repo~1.4k tokens
    Auto-check passed
  • CLI Release

    UsefulSoftwareCo/executor

    Runbook for releasing the executor CLI package (stable and beta).

    4.1k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Effect Atom Optimistic Updates

    UsefulSoftwareCo/executor

    Pattern for implementing optimistic UI updates with effect-atom in this codebase.

    4.1k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Effect HTTP Testing

    UsefulSoftwareCo/executor

    Testing Effect HttpApi services end-to-end. An agent skill from UsefulSoftwareCo/executor.

    4.1k GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Emulate

    UsefulSoftwareCo/executor

    Use the @executor-js/emulate service emulators (GitHub, Google, Stripe, Resend, WorkOS, …) to test integrations for real — full OpenAPI specs, working OAuth flows, mintable credentials, and a…

    4.1k GitHub stars~2.2k tokensUpdated today
    Auto-check: notes
  • Prod Telemetry

    UsefulSoftwareCo/executor

    Query Executor's production telemetry — Axiom traces (executor-cloud dataset), prod Postgres via PlanetScale, PostHog product analytics — through the Executor MCP.

    4.1k GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Wrdn Effect Promise Exit

What does Wrdn Effect Promise Exit do?

Replace React/effect-atom mutation handlers that use promise-mode plus try/catch with promiseExit and explicit Exit handling. Wrdn Effect Promise Exit is an agent skill from UsefulSoftwareCo/executor. Replace React/effect-atom mutation handlers that use promise-mode plus try/catch with promiseExit and explicit Exit handling.

When should I use Wrdn Effect Promise Exit?

Wrdn Effect Promise Exit fits situations like: review flags try/catch around useAtomSet mutation calls; especially UI handlers that set error/busy state after a failed mutation.

How do I install Wrdn Effect Promise Exit in Claude Code?

Run `npx skills add UsefulSoftwareCo/executor --skill wrdn-effect-promise-exit -a claude-code`. Or copy the skill folder (.agents/skills/wrdn-effect-promise-exit in UsefulSoftwareCo/executor) into .claude/skills/wrdn-effect-promise-exit in your project. Claude Code loads it when a task matches its description.

How do I install Wrdn Effect Promise Exit in Codex?

Run `npx skills add UsefulSoftwareCo/executor --skill wrdn-effect-promise-exit -a codex`. Or copy the skill folder (.agents/skills/wrdn-effect-promise-exit in UsefulSoftwareCo/executor) into .agents/skills/wrdn-effect-promise-exit in your project. Codex loads it when a task matches its description.

Can I use Wrdn Effect Promise Exit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add UsefulSoftwareCo/executor --skill wrdn-effect-promise-exit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wrdn-effect-promise-exit, .gemini/skills/wrdn-effect-promise-exit, .github/skills/wrdn-effect-promise-exit and .opencode/skills/wrdn-effect-promise-exit in your project.

What does Wrdn Effect Promise Exit need to run?

SKILL.md names no scripts, command-line tools or credentials: Wrdn Effect Promise Exit is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Grep, Glob, Bash.

Does Wrdn Effect Promise Exit access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Wrdn Effect Promise Exit safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Wrdn Effect Promise Exit use?

Wrdn Effect Promise Exit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wrdn Effect Promise Exit use?

About 1.2k tokens (SKILL.md is roughly 4.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Wrdn Effect Promise Exit?

Skills that share tags, products or a category with Wrdn Effect Promise Exit: Ultracite (agustinusnathaniel/nextarter-tailwind, 125 stars), Code Review (nteract/semiotic, 2.7k stars), React Render Types Setup (HorusGoul/eslint-plugin-react-render-types, 111 stars) and React Vendoring (vercel/next.js, 143k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wrdn Effect Promise Exit?

UsefulSoftwareCo (a GitHub organization) maintains it in UsefulSoftwareCo/executor, which has 4,129 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 10, 2026.

Source: UsefulSoftwareCo/executor on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.