Agent skill

Smithers Durable Flow Driver

by smithersai in smithersai/smithers

Runs or authors Smithers TypeScript flows for ordered agent stages with retries, approvals, bounded loops and crash-safe recovery, built from Flow.make, Action.make and Effect.

MITAuto-check passedAgent Workflows

Install Smithers Durable Flow Driver

skills CLI
$ npx skills add smithersai/smithers --skill smithers -a claude-code

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

GitHub CLI
$ gh skill install smithersai/smithers smithers --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/smithersai/smithers.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/smithers/skills/smithers .claude/skills/smithers && 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
smithers
GitHub stars
430
Token cost
~3k tokens
SKILL.md length
1,583 words
Files
1
Skills in repo
9
Repo updated
First seen
Licence
MIT

At a glance

Runs or authors Smithers TypeScript flows for ordered agent stages with retries, approvals, bounded loops and crash-safe recovery, built from Flow.make, Action.make and Effect.

  • Works in 4 steps: Clarify missing acceptance criteria… → Handle one clear goal directly, however… → Use a flow for ordered stages with real… → …
  • Writing a durable, retryable multi-stage agent workflow in TypeScript
  • SKILL.md covers Rule 0: if you are already…, Route first: not every ask…, The mental model and Sixty seconds to the aha, plus 6 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

The skill's first rule is to check SMITHERS_INSIDE_RUN before doing anything: if it is set, the agent is a worker executing one assigned step with its ordinary tools, and must never launch, steer or poll another run from inside that step, declaring a HumanTask in the flow instead of improvising orchestration when a person must decide. Otherwise it routes the request: clarify missing acceptance criteria, handle a single clear goal directly however large, reach for a flow only when there are ordered stages with real gates, durability, approvals, bounded loops or reusable work, and prefer running an existing flow over writing a new one.

The mental model separates a Flow (a tagged durable program with payload, success and error schemas, whose body plans while actual effects live in actions), an Action (a named recorded side effect declared with Action.make), a Node (the plan-time graph composed with helpers like Node.map and Node.branch) and a Plan (the compiled graph and approval envelope, which executes authoring callbacks but does not sandbox untrusted JavaScript). Completed actions are recorded so recovery resumes at the frontier rather than from the start.

A file flow lives at flows/name/flow.ts with a literal default export so discovery can read its metadata without executing the module, and the smthrs CLI lists, plans and starts flows, with the run's actual result checked rather than assuming the start receipt means success. Only Effect 4.0.0-rc.115 and the Smithers 1.0 API are used, never JSX or 0.x APIs.

When your agent uses it

  • Writing a durable, retryable multi-stage agent workflow in TypeScript
  • Running an existing Smithers flow instead of writing a new one
  • Adding a human-approval gate to a multi-step agent process
  • Executing one assigned step correctly when already running inside a flow

Example prompts

  • “List the existing Smithers flows and run the deploy one with this payload.”
  • “Author a new flow that processes an upload, waits for human approval, then publishes it.”
  • “I'm inside a Smithers run; just do my assigned step, don't start another run.”

Requirements

  • Effect 4.0.0-rc.115
  • The smthrs CLI and the Smithers 1.0 APIs

Workflow steps

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

  1. Clarify missing acceptance criteria before building.
  2. Handle one clear goal directly, however large.
  3. Use a flow for ordered stages with real gates, durability, approvals,
  4. Run an existing flow before writing another.

What it can do on your machine

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

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    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 bash).

    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

Smithers Durable Flow Driver loads about 3k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 1,583 words of instructions outside code blocks.

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

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 passed

The automated check found no risky patterns in SKILL.md.

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 smithersai/smithers at commit b7f0898, republished under its MIT licence (© smithersai). 1,583 words, ~2,991 tokens.

Download SKILL.mdSave it as .claude/skills/smithers/SKILL.md (or your agent's skills folder).
name
smithers
description
Drive Smithers durable flows for ordered agent stages, retries, approvals, bounded loops, and crash-safe work. Run existing flows or author TypeScript flows with Flow.make, Action.make, and Effect v4. If SMITHERS_INSIDE_RUN is set, do the assigned step directly; never launch or steer another run.

Smithers

A flow is ordinary TypeScript built from Flow.make, Action.make, and Effect. Completed actions are recorded; recovery resumes at the frontier. Use Effect 4.0.0-rc.115 and the Smithers 1.0 APIs. Read the owning package's README and docs before authoring. Never use JSX or 0.x APIs.

Rule 0: if you are already inside a run, do not use Smithers

Check SMITHERS_INSIDE_RUN before routing. If set, you are a worker executing one step. Do the assigned work with your ordinary tools and finish your turn. Never launch, steer, or poll another run from inside that step. Declare a HumanTask in the flow when a person must decide; do not improvise orchestration from inside an agent.

Route first: not every ask needs a flow

  1. Clarify missing acceptance criteria before building.
  2. Handle one clear goal directly, however large.
  3. Use a flow for ordered stages with real gates, durability, approvals, bounded loops, or reusable work.
  4. Run an existing flow before writing another.

The mental model

Flow. A tagged durable program with payload, success, and error schemas. Its body builds a plan; effects belong in action implementations.

Action. A named recorded side effect. Declare it with Action.make and attach its implementation with Declared.toLayer.

Node. The plan-time graph from @smthrs/plan. Compose nodes with Node.map, Node.andThen, Node.bindPlanned, Node.branch, and Node.all.

Plan. The compiled graph and approval envelope. Planning executes authoring callbacks; it does not sandbox untrusted JavaScript.

Step key. Persisted identity derived from declarations, dependencies, and callback captures. Change meaning deliberately; keep secrets out of payloads and captures.

Sixty seconds to the aha

sh
smthrs flow list
smthrs flow plan hello --data '{"name":"world"}'
smthrs flow start hello --data '{"name":"world"}' --json
smthrs runs show <run-id>
smthrs runs logs <run-id> --follow

Read the run ID from the receipt. Admission is not completion. Check the run's actual result before reporting success. Use smthrs <command> --help or --schema for the installed command contract.

The flow directory

Put a file flow at flows/<name>/flow.ts. Default-export a literal tagged Flow.make("<name>", { description, capabilities, effects, payload, success, error?, body }) from @smthrs/flow. Discovery reads metadata without executing that module. Keep metadata literal; helpers and computed metadata can hide an entry from discovery.

Export action implementations as the optional named layer: use Declared.toLayer, AgentAction.layer, or Layer.mergeAll. The local CLI/TUI host composes that layer with FileSystem, Path, ChildProcessSpawner, HttpClient, and agent services (#2923). Export implementations directly; the host owns Action.Implementations. Acquire extra dependencies during layer construction so missing services are refused at load.

Authoring checklist (learned from real flows)

  • Wire system actions explicitly. Sleep.action, WaitFor.action, and HumanTask.action carry no compile-time implementation requirement. Merge the corresponding Sleep.layer, WaitFor.layer, and HumanTask.layer into your implementations unless your host already provides them. A missing handler is refused as unresolved_action: Action "system/sleep" has no implementation.
  • Export the implementation layer. A discovered flow.ts may export const layer = Layer.mergeAll(...). Include declared action layers and AgentAction.layer; use the host services above rather than rebuilding the host (#2923).
  • Separate admission from completion. On the durable engine, Flow.start and Flow.ensure return after admission and scheduling; the child runs detached (#2932). Give each logical launch a stable ensure key that includes its round or execution component. Reuse it only for retries of the same payload; different payloads raise ExecutionIdentityConflict. Fan out with Effect.forEach(items, launch, { concurrency }); wrap each launch in Effect.exit so one refusal does not fail the batch. Retain exits and execution IDs; inspect completion separately.
  • Declare the real capability envelope. Grant only what the flow uses, for example ["fs:read:**", "fs:write:**", "proc:spawn:*", "net:get:*", "net:post:*", "model:call:*"]. smthrs flow start refuses to auto-approve ["*"].
  • Capture callback meaning. Wrap bodies, branch predicates, Node.bindPlanned builders, and other persisted callbacks in Node.capture. Declare every semantic closed-over value and an explicit version for imported behavior. Bump the version when topology or meaning changes; plan a new run. Captures must be inert data, not service or function objects.
  • Type recursive handoffs. Give a flow that hands off to itself through .to an explicit Flow.Flow<...> annotation to break recursive inference. For discovery, put the typed loop beside a literal export default Flow.make( entry that hands off to it. Keep the entry's description, capabilities, effects, payload, and success literal. Register the loop's interpreter in the exported layer.
  • Pin subscription seats. Use <seat>@<account>, such as claude-code:opus@claude-9 or sol@codex-3. Check the selected login; never accidentally send subscription work through a paid API route. Unpinned Claude aliases select the API when an Anthropic key is available; explicit claude-code: seats refuse an unavailable subscription rather than falling back to a key.
  • Treat unavailable observations as unavailable. A 429 from a usage read is not evidence that execution quota is exhausted. Keep the last good reading with its original age; distinguish stale or unknown capacity from measured exhaustion. Retry observations without turning a throttled read into a hard stop or authorizing new work from unknown capacity.
  • Size local heartbeats for load. CommandSandbox defaults to 15 seconds; each probe times out after twice that interval, and two silent probes fail the command. Loaded hosts can delay probes and kill healthy commands. Configure heartbeat for local placements; prefer remote placement for fleets.
  • Freeze a long-lived host's source. Run it from a frozen checkout, such as a tarball of main plus fixed overlays, never a shared checkout agents edit. In a source checkout smthrs loads source even if dist exists; half-written modules can fail startup or body loading, and source drift is refused. Keep the host source fixed for its lifetime.

Durability, retries, and waits

Keep clocks, filesystem reads, network calls, and other effects inside actions. Use Sleep.action for a planned timer, WaitFor.action for a durable wait, and HumanTask.action for a person's decision. Register their layers. Use @smthrs/patterns before hand-rolling familiar topology. Give irreversible work an idempotency strategy before retrying it; no retry rolls effects back.

Show full SKILL.md (659 more words)Show less

Operating a run

Read state before acting. On failure, inspect smthrs runs show <run-id>, then the events if needed. Fix the cause before retrying. Preserve failed launch receipts, cancellation, and completion evidence. Report the result, the run ID, and the next action in a few words; never call an accepted launch completed.

Use smthrs environment for persistent local, SSH, or Cloud locations. Tools manage their own login in the selected home; profiles describe locations.

Recovery and completion gates

  • Track admission, running, READY, verified and landed as separate receipts. READY work is pending until its queue drains; filtered or claimed open work is not completed. Require current evidence for final classifications.
  • Retain assignment, result, claim owner and failure evidence across quarantine and restart. Repair uses a new execution identity without stealing claims.
  • Unknown quota is not exhausted quota. Retry unavailable observations without authorizing launches beyond computed account ceilings.
  • Unknown worker status preserves running work and held claims; only a verified missing execution permits recovery. Reject malformed recovery identities at admission.
  • Resolve compatible helpers from immutable host source or explicit configuration.
  • Verify before rebase and verify the final candidate again. Parse structured final reports rather than incidental tool text. Preserve meaningful errors and cancellation receipts through every recovery transition.

Commands

  • smthrs agent — run. Configure an agent
  • smthrs agent edit — confirm; waits for the person's confirmation. Propose an instruction change
  • smthrs agents — run. The factory's agents
  • smthrs branch show — run. Open a branch's card
  • smthrs branch add-to-stack — confirm; waits for the person's confirmation. Add a scratch branch as a TODO
  • smthrs branch archive — confirm; waits for the person's confirmation. Archive a scratch branch
  • smthrs branch fork — run. Fork a scratch branch
  • smthrs branch rebase — run. Rebase this branch now
  • smthrs branches — run. List branches with presence
  • smthrs diff — run. Show a branch's changes
  • smthrs file — run. Open and co-edit a file
  • smthrs files — run. Browse a branch's files
  • smthrs flow show — run. Show a flow's steps and versions
  • smthrs flow edit — confirm; waits for the person's confirmation. Propose a change to a flow
  • smthrs flow new — confirm; waits for the person's confirmation. Create a new flow
  • smthrs flow plan — run. See what a flow would run
  • smthrs flow run — run. Run a flow with typed input
  • smthrs flow source — run. Co-edit a flow's source
  • smthrs flows — run. List the repository's flows
  • smthrs github — run. Show sync status and retry
  • smthrs issue show — run. Open an issue's card
  • smthrs issue comment — confirm; waits for the person's confirmation. Comment on an issue
  • smthrs issue new — confirm; waits for the person's confirmation. Open a GitHub issue
  • smthrs issues — run. List the repository's issues
  • smthrs merge — confirm; waits for the person's confirmation. Review and merge the next item
  • smthrs monitor — run. Every run, with its debug view
  • smthrs pr — run. Open a pull request's card
  • smthrs review — confirm; waits for the person's confirmation. Review a change, return findings
  • smthrs runs show — run. Open a run's card
  • smthrs run inspect — run. Open a run's monitor
  • smthrs runs list — run. Active and attention-needing runs
  • smthrs search — run. Search code, wiki and runs
  • smthrs stack — run. Show the stack and background runs
  • smthrs stack move — run. Reorder an item
  • smthrs todo show — run. Open a TODO
  • smthrs todo amend — confirm; waits for the person's confirmation. Change an unmerged TODO's prompt
  • smthrs todo answer — run. Answer the agent's question
  • smthrs todo drop — confirm; waits for the person's confirmation. Abandon an unmerged TODO
  • smthrs todo from-issue — confirm; waits for the person's confirmation. Draft a TODO from an issue
  • smthrs todo new — confirm; waits for the person's confirmation. Write and place a TODO
  • smthrs todo resume — run. Resume a paused TODO
  • smthrs todo retry — run. Retry a failed TODO
  • smthrs todo steer — run. Send the agent a correction
  • smthrs todo stop — run. Pause a working TODO
  • smthrs wiki show — run. Open the wiki
  • smthrs wiki page — run. Open or create a page
  • smthrs wiki save — run. Save this answer as a page

© smithersai, 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 packages/smithers/skills/smithers of smithersai/smithers.

Open the folder on GitHubat commit b7f0898

Compare with similar skills

Smithers Durable Flow Driver 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.

Smithers Durable Flow Driver compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Smithers Durable Flow Driver this skillsmithersai/smithers430—~3kAutomated safety check: PassMIT
Trigger.dev Agent Patternspapermark/papermark9.2k—~2kAutomated safety check: PassCustom licence
Sol and Luna Worker Routermajiayu000/spellbook287—~3.3kAutomated safety check: PassMIT
Fleet Manager for Agent Sessionsasgeirtj/system_prompts_leaks69k—~2.5kAutomated safety check: PassCC0-1.0
Codewhale Fleet Managercodewhale-hq/Codewhale41k—~1.2kAutomated safety check: PassMIT
Ultraapp InterviewEnderfga/claw-orchestrator589—~1.7kAutomated safety check: PassMIT

Similar skills

  • Trigger.dev Agent Patterns

    papermark/papermark

    Patterns for building LLM agents on Trigger.dev tasks: prompt chaining, routing, parallel workers, orchestrator-workers, evaluator loops and human approval gates.

    9.2k GitHub stars~2k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Sol and Luna Worker Router

    majiayu000/spellbook

    Splits substantial coding or repository-review work between a Sol commander that decides and verifies and a separate Luna Max worker that implements, with an auditable run log.

    287 GitHub stars~3.3k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Fleet Manager for Agent Sessions

    asgeirtj/system_prompts_leaks

    Shows one digest of coding-agent sessions across your connected machines and lets you open, read, steer, approve, stop and close them, over Herdr, tmux or MSP.

    69k GitHub stars~2.5k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Codewhale Fleet Manager

    codewhale-hq/Codewhale

    Triages and manages Codewhale fleet runs and workers with typed commands, classifying failures and choosing a safe restart, resume or escalation.

    41k GitHub stars~1.2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Ultraapp Interview

    Enderfga/claw-orchestrator

    A skill your agent uses when the user opens a Forge tab in the claw-orchestrator dashboard to start building a new ultraapp.

    589 GitHub stars~1.7k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Adk Agent Builder

    google/adk-python

    Official

    Builds ADK (Agent Development Kit) Python agents: LLM agents with tools, graph workflows of function and agent nodes, conditional routing, fan-out and join, schema-validated delegation between…

    22k GitHub stars~879 tokensUpdated today
    Agent WorkflowsAuto-check passed

More from smithersai/smithers

All 9 skills in this repo
  • Smithers Agent Runtime

    smithersai/smithers

    Guides changes to the Smithers agent loop's host wiring: credentialed model seats, budget accounting, sandbox limits and flow-call authorization.

    430 GitHub stars~765 tokensUpdated today
    Auto-check passed
  • Documents how Smithers discovers and registers workflow flow files, so catalog listings stay metadata-only while running a flow loads its full body and action layers.

    430 GitHub stars~432 tokensUpdated today
    Auto-check passed
  • Points agents to the right sources when changing the Smithers workspace graph, generated docs, benchmark and eval evidence, or durable flows in the Smithers repository.

    430 GitHub stars~2.3k tokensUpdated today
    Auto-check passed
  • flows-jj ABI Maintenance

    smithersai/smithers

    Procedure for changing or verifying the flows-jj native and WASM ABI, its committed artifact and its reproducibility campaign in the Smithers repository.

    430 GitHub stars~299 tokensUpdated today
    Auto-check passed
  • Smithers Chain

    smithersai/smithers

    Maintain the existing @smthrs/chain runner, journal replay, catalog handlers, or sandbox boundary.

    430 GitHub stars~299 tokensUpdated today
    Auto-check passed
  • Smithers Harness Detect

    smithersai/smithers

    Change local coding-harness discovery, account status, model flag detection, or version probes.

    430 GitHub stars~260 tokensUpdated today
    Auto-check passed

Works with

Questions about Smithers Durable Flow Driver

What does Smithers Durable Flow Driver do?

Runs or authors Smithers TypeScript flows for ordered agent stages with retries, approvals, bounded loops and crash-safe recovery, built from Flow.make, Action.make and Effect. The skill's first rule is to check SMITHERS_INSIDE_RUN before doing anything: if it is set, the agent is a worker executing one assigned step with its ordinary tools, and must never launch, steer or poll another run from inside that step, declaring a HumanTask in the flow instead of improvising orchestration when a person must decide. Otherwise it routes the request: clarify missing acceptance criteria, handle a single clear goal directly however large, reach for a flow only when there are ordered stages with real gates, durability, approvals, bounded loops or reusable work, and prefer running an existing flow over writing a new one.

When should I use Smithers Durable Flow Driver?

Smithers Durable Flow Driver fits situations like: writing a durable, retryable multi-stage agent workflow in TypeScript; running an existing Smithers flow instead of writing a new one; adding a human-approval gate to a multi-step agent process; executing one assigned step correctly when already running inside a flow.

How do I install Smithers Durable Flow Driver in Claude Code?

Run `npx skills add smithersai/smithers --skill smithers -a claude-code`. Or copy the skill folder (packages/smithers/skills/smithers in smithersai/smithers) into .claude/skills/smithers in your project. Claude Code loads it when a task matches its description.

How do I install Smithers Durable Flow Driver in Codex?

Run `npx skills add smithersai/smithers --skill smithers -a codex`. Or copy the skill folder (packages/smithers/skills/smithers in smithersai/smithers) into .agents/skills/smithers in your project. Codex loads it when a task matches its description.

Can I use Smithers Durable Flow Driver 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 smithersai/smithers --skill smithers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/smithers, .gemini/skills/smithers, .github/skills/smithers and .opencode/skills/smithers in your project.

What does Smithers Durable Flow Driver need to run?

SKILL.md names no scripts, command-line tools or credentials: Smithers Durable Flow Driver is instructions for the agent only. Our summary lists: Effect 4.0.0-rc.115; The smthrs CLI and the Smithers 1.0 APIs.

Does Smithers Durable Flow Driver 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 Smithers Durable Flow Driver safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Smithers Durable Flow Driver use?

Smithers Durable Flow Driver 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 Smithers Durable Flow Driver use?

About 3k tokens (SKILL.md is roughly 12k 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 Smithers Durable Flow Driver?

Skills that share tags, products or a category with Smithers Durable Flow Driver: Trigger.dev Agent Patterns (papermark/papermark, 9.2k stars), Sol and Luna Worker Router (majiayu000/spellbook, 287 stars), Fleet Manager for Agent Sessions (asgeirtj/system_prompts_leaks, 69k stars) and Codewhale Fleet Manager (codewhale-hq/Codewhale, 41k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Smithers Durable Flow Driver?

smithersai (a GitHub organization) maintains it in smithersai/smithers, which has 430 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 10, 2026.

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