Skip to content
Development
Skill

/workfly

Discover a procedure and build its saved workflow — dynamic discovery, drafted script, adversarial verification, landed in the catalog.

From plugin
genie
35321 skills1 command1 MCP

Claude Code

$ npx -y skills add automagik-si/genie --skill workfly --agent claude-code

SKILL.md

workfly.SKILL.md
name: workfly
description: "Discover a procedure and build its saved workflow — dynamic discovery, drafted script, adversarial verification, landed in the catalog."
category: authoring
mutates: repo

Workfly

Use workfly when a procedure worth repeating — a skill, a runbook, a review ritual, a migration sweep — should become a saved workflow that any body runs unmodified. A procedure that needs the user in the middle of the run stays a skill; workfly encodes the part that can run on its own.

Workfly is a saved workflow, not a procedure this skill performs inline. The single source of truth is `.claude/workflows/workfly.js` in the genie repository's canonical workflow catalog (see `.claude/workflows/README.md` there); this skill is its front door. On a runtime that runs saved workflows, run the script at `<repository root>/.claude/workflows/workfly.js` when that file exists, otherwise `~/.claude/workflows/workfly.js` (delivered by `genie install` / `genie update`); give the runtime that explicit script path, never a bare name — both scopes now carry these names and the order a name resolves in is undocumented. The orchestrator — the session model — specifies the objective and relays the result; the script is written by the workflow's own author agent, never drafted inline in the session.

Invoke

Pass `{objective, sources?, name?, catalogDir?, model?, maxRepairs?, timestamp?}` through args. Sources are repository-relative paths to whatever already describes the procedure — a runbook, a workflow README, or the review skill's own SKILL.md as it sits in this repository. `name` is kebab and the workflow checks it against every name already taken; `catalogDir` defaults to `.claude/workflows` and is the only directory the contract suite covers, so any other value comes back as a recorded coverage gap rather than a pass; `maxRepairs` is the repair budget — 2 when unset or not an integer, otherwise clamped to 0-3, so a larger value buys nothing; `timestamp` is the provenance stamp for the drafted script's header comment, and the workflow has no clock, so the caller is its only source. Everything else keeps its default.

args: {
  objective: "turn the nightly release-ledger sweep into a saved workflow",
  sources:   ["docs/_internal/release-ledger.md"],
  name:      "ledger-sweep",
  model:     "opus",
  timestamp: "2026-09-15T10:00:00Z"
}

Relay

A run that reached verification returns `{ok, name, path, spec, readmeRow, frontDoor, parityGuard, verification, repairs, notConvened}`. Relay `verification` unchanged: the static result, both refuters with their blocking and advisory findings intact, and `ran`, which names the lenses that answered — `ok` is never true while one of the three is silent. List `notConvened` — it holds exactly one kind of entry, an agent that returned nothing, counted as unverified and never as a pass; every other stop is reported through `error`.

A finding naming any file other than the drafted script — the catalog README row, the fronting skill, the parity test — always arrives as advisory, because those are the landing steps below and the repairer may edit only the script, so `ok: false` always names a defect in the script itself.

Read `ok: false` twice, because two shapes carry it. A run that stopped early returns `{ok: false, error}` and no `verification`: the objective was missing, a required reading did not answer or came back empty (no existing name reported is read as a failed reading, never as "every name is free"), the designer returned nothing or a SPEC with no name or a name that is not a single kebab slug, the author returned nothing, or the name was already taken. When the author returned nothing the error names the target path — check it for a partial write before re-running; every other early stop drafted nothing. Restate the objective, free the name, or re-run. A verified `ok: false` carries every surviving blocking finding in `verification.blocking` — including one the workflow synthesizes when a refuter answered `refuted: true` without naming a defect, so a bare refutation is never silent — and the static gate's own `problems`, which is where a non-default `catalogDir` reports that the contract suite never opened the drafted file. Read them, then decide whether to raise `maxRepairs`, change the objective, or land the fixes by hand.

Land it

Once `ok` is true and the returned path holds a script:

1. Append `readmeRow` verbatim to the Entries table of `.claude/workflows/README.md`, and check the result: that table names the new script on its own row. 2. Run the catalog's own contract suite yourself and read its output: it exits zero and its summary reports `0 fail` before the work is called done — in the genie repository that suite is `bun test scripts/workflows-meta.test.ts`, and a runner that names failing cases only leaves no per-case pass line to look for. 3. When the objective converts an existing skill, rewrite that skill into a thin front door the way the council skill fronts its workflow: it states the script-path rule — the project file when the repository carries it, the `~/.claude/workflows/` copy otherwise, passed as the explicit script path either way — says what it relays unchanged and what stays with the user, keeps a by-hand fallback for a runtime with no workflow surface, and carries no roster of its own. Add a static parity test that pins that single-source roster, the way the council parity test pins council's. 4. Report what the SPEC left open and every advisory finding nobody fixed. Silence there reads as "nothing was found", which is a different claim.

Without a workflow surface

Run the same five stages — Discover, Design, Draft, Verify, Repair — as subagents through the runtime's native delegation surface, with the briefs the script carries: three independent readers in parallel (source stages, catalog contract, token economy), one designer that merges the three readings into the SPEC, one auth

Read more
@automagik-dev
Ships withgenie

Wishes in, PRs out. CLI agent that interviews you, plans the work, dispatches parallel agents in isolated worktrees, and reviews code before you see it.

35321 skills1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
353
Star history of automagik-dev/genie on GitHub, a chart by star-history.com

Other skills on genie.

automagik-brand

automagik-brand

The Automagik brand (Automagik, Genie, Omni) as files in this repository's brand folder (docs/brand, unless SOURCE.json beside…

@automagik-dev@automagik-devInstall Skill
microagent-create

microagent-create

PROPOSE-ONLY — mine this host's recent Claude Code transcripts for work that keeps recurring and keeps returning bulk into…

@automagik-dev@automagik-devInstall Skill
offload-guidance

offload-guidance

ROUTING RULE — when the question asks where something lives, how something works, what handles X, or how Y flows through a…

@automagik-dev@automagik-devInstall Skill
authoring

authoring

Write or revise a Genie skill so it survives the shipped contract — frontmatter, house size, starter card, and runtime-neutral…

@automagik-dev@automagik-devInstall Skill
brainstorm

brainstorm

Explore an ambiguous idea with the user, settle scope and success criteria, and produce an independently reviewed design for wish.

@automagik-dev@automagik-devInstall Skill
council

council

Assess a proposal through independent technical, product, risk, and dissenting lenses, then synthesize a decision without…

@automagik-dev@automagik-devInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about workfly.

Which coding agents can use workfly?
workfly installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.