[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EKJ8WSG7KC0M71GSN3N82K":3,"skill-same:01M6EKJ8WSG7KC0M71GSN3N82K":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6EKJ8WSG7KC0M71GSN3N82K","upgrade",null,"Upgrade the Ironflow crates of a project and migrate its code, or audit existing code against the current Ironflow idioms. Reads the changelog between the installed and the target release, maps every change to the project's code, then proposes or applies the migrations. Loaded by the ironflow hub for the upgrade and audit verbs.","ThomasTartrau\u002Fironflow","ThomasTartrau","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F145434513?v=4","01M6EKHJ55CEQZVP23J48EMFQ1","Thomas Tartrau","01M6EKHJ9CJE78ZBQDPQ9M13C2",2,"MIT","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"migrations","ironflow","scripts","false","cargo","project","git log","scan","show","change","maps","hub","log","diff","migrate","Bash","audit","changelog","code","2026-11-10 10:12:30",false,"---\nname: upgrade\ndescription: Upgrade the Ironflow crates of a project and migrate its code, or audit existing code against the current Ironflow idioms. Reads the changelog between the installed and the target release, maps every change to the project's code, then proposes or applies the migrations. Loaded by the ironflow hub for the upgrade and audit verbs.\nuser-invocable: false\nallowed-tools: Bash(cargo:*), Bash(git status:*), Bash(git diff:*), Bash(git log:*), Bash(git show:*), Bash(${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fchanges.sh:*), Bash(${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fscan.sh:*)\n---\n\n# Ironflow upgrade\n\nMoves a project to a newer Ironflow release and brings its code up to the idioms of that\nrelease. Arguments: `$ARGUMENTS`.\n\n| Arguments | Mode |\n|---|---|\n| none | `upgrade` to the latest release |\n| `2.43.0` or `ironflow-core@4.8.0` | `upgrade` to that release (a bare version is `ironflow-engine`) |\n| `--from \u003Cgit-rev>` | the bump is already done: analyse from the `Cargo.lock` of that revision |\n| `audit` | no bump: check the code against the current idioms, whatever its history |\n| `--apply` | apply without asking, except `adopt` entries and anything ambiguous |\n\nSemver does not protect an Ironflow project: author-API breaks ship in minor releases\n(`ironflow-engine` 2.39.0 retyped the whole author API). The compiler, the changelog and\nthe catalogue in `${CLAUDE_SKILL_DIR}\u002Freferences\u002F` are the source of truth.\n\n## 1. Preflight\n\n```bash\ngit status --porcelain                                  # must be empty, or ask\ngrep -rn --include=Cargo.toml '^ironflow-' . | grep -v '\u002Ftarget\u002F'\ncargo check --workspace --all-targets 2>&1 | tail -3    # baseline\n```\n\n- Uncommitted changes: ask before going on. The migration must be one reviewable diff.\n- An ironflow dependency declared with `path =` or `git =`: stop. It follows its checkout,\n  not crates.io.\n- Baseline already broken: note the errors. They are not the upgrade's to fix.\n\n## 2. Bump (upgrade only)\n\nTarget versions: `cargo search \u003Ccrate> --limit 5`, keep the line `\u003Ccrate> = \"\u003Cversion>\"`.\nMove every ironflow crate together, never one alone.\n\n- Each package: `cargo add -p \u003Cpackage> \u003Ccrate>@\u003Cversion>` (`--dev` for a dev-dependency).\n  It keeps the features. A `workspace = true` dependency: edit `[workspace.dependencies]`.\n- Then `cargo update \u003Ccrate> \u003Ccrate> ...` with every ironflow crate, nothing else.\n- Target older than latest: require `=\u003Cversion>` for the named crate, run `cargo update`\n  on the ironflow crates (cargo picks the others compatible with it), then write back the\n  versions `Cargo.lock` resolved, without `=`. No downgrade.\n- `awk '\u002F^name = \"ironflow-\u002F {print $3}' Cargo.lock | sort | uniq -d` must print nothing.\n  Two versions of one crate give errors like `expected ironflow_core::X, found\n  ironflow_core::X`: raise the requirement that holds the old one.\n\n## 3. What changed\n\n```bash\n\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fchanges.sh\"              # HEAD:Cargo.lock vs Cargo.lock\n\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fchanges.sh\" \u003Cgit-rev>    # --from: lock of that revision\n```\n\nIt prints the versions before and after, then every changelog entry in between,\ndeduplicated across crates. Skip it in `audit` mode. Find the revision before a past bump\nwith `git log --oneline -- Cargo.lock`.\n\nKeep the entries that touch the project: handler code, server or worker wiring,\nenvironment, runtime behavior. Most have a catalogue entry (same issue number). For an\nauthor-facing entry without one, read the issue (its Solution and Specs sections):\n\n```bash\ncurl -s https:\u002F\u002Fgitlab.com\u002Fapi\u002Fv4\u002Fprojects\u002FThomasTartrau%2Fironflow\u002Fissues\u002F\u003Cn> | jq -r '.title, .description'\n```\n\n## 4. Where it hits the code\n\n```bash\ncargo check --workspace --all-targets --message-format short 2>&1 | grep -E '^[^ ]+: (error|warning)'\n\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fscan.sh\" .\n```\n\n- Every compiler error and deprecation warning maps to a catalogue entry (`compiler:`\n  line) or to a changelog entry. Neither: read the item in the new crate source,\n  `~\u002F.cargo\u002Fregistry\u002Fsrc\u002F*\u002F\u003Ccrate>-\u003Cversion>\u002Fsrc\u002F`. Its rustdoc names the replacement.\n  Never guess an API.\n- Every `scan.sh` hit is a candidate. Read the code around it before keeping it: some\n  patterns (`json::\u003C`, `ServerConfig::from_env`) also match correct code.\n- Upgrade mode: catalogue entries whose `since` falls in the bumped range apply even\n  without a hit when they are `behavior` (environment, defaults, model aliases).\n- Wiring: compare the project's server and worker `main.rs` with\n  `${CLAUDE_SKILL_DIR}\u002F..\u002Fsetup\u002Fassets\u002F{server,worker}\u002Fsrc\u002Fmain.rs`. Report only a\n  missing piece that changes behavior: a background task, a required variable.\n- `audit` mode also reads every handler for what a line pattern cannot catch: an\n  expression in a string, a `Value` read by key over several lines, a step name copied by\n  hand to reach what that step produced.\n\n## 5. Report, then ask\n\n| Kind | Meaning | Default |\n|---|---|---|\n| `breaking` | does not compile after the bump | apply, required to build |\n| `deprecated` | compiles with a warning | apply |\n| `behavior` | compiles, runs differently (env, defaults, models) | apply the code part, list the ops part |\n| `idiom` | compiles, but not the typed way: a typo would pass in silence | apply |\n| `adopt` | a new feature replaces a workaround | propose one by one |\n\nOne table per kind: entry, `file:line`, the fix in a few words, effort (S\u002FM\u002FL). Then the\nversions before and after, and what needs a human outside the code (secrets to generate,\na decision provider to wire). Ask with one multi-select AskUserQuestion, one option per\nkind present. In `--apply` mode, skip the question for everything but `adopt`.\n\n## 6. Apply\n\n- One catalogue entry at a time, in the order of the table above. After each:\n  `cargo check --workspace --all-targets`. Do not start the next with new errors.\n- The `+` side of each entry and the compiled snippets of\n  `${CLAUDE_SKILL_DIR}\u002F..\u002Fworkflow\u002Freferences\u002Fsteps.md` and `sub-workflows.md` are the\n  target form. Imports go at\n  the top of the file with `use`.\n- **Steps are replay keys.** A run waiting on an approval, a human input or a signal\n  replays its handler by step name and order; a changed sequence fails it with\n  `ReplayDivergence`. Never rename a step during a migration. An entry that adds, removes\n  or reorders steps (most `adopt` ones) bumps the handler's `version()`, and the user\n  drains `ironflow-cli run list --status awaiting_approval` and `--status sleeping` first.\n- Never weaken a test to make it pass. A test that asserted the old behavior is updated to\n  the new one, and the report says so.\n- At the end: `cargo test --workspace`, and `cargo clippy --workspace --all-targets` if\n  the project runs it in CI. Then offer the `ironflow:workflow-reviewer` agent on the\n  handlers that changed.\n\n## 7. Hand over\n\nFive lines at most: versions before and after, entries applied, entries left and why, what\nto do before deploying (secrets, environment, Postgres migrations run at server boot:\nback up first). Suggest the commit, do not make it: `chore: bump ironflow to \u003Cengine version>`.\n","# Ironflow upgrade\n\nMoves a project to a newer Ironflow release and brings its code up to the idioms of that\nrelease. Arguments: `$ARGUMENTS`.\n\n| Arguments | Mode |\n|---|---|\n| none | `upgrade` to the latest release |\n| `2.43.0` or `ironflow-core@4.8.0` | `upgrade` to that release (a bare version is `ironflow-engine`) |\n| `--from \u003Cgit-rev>` | the bump is already done: analyse from the `Cargo.lock` of that revision |\n| `audit` | no bump: check the code against the current idioms, whatever its history |\n| `--apply` | apply without asking, except `adopt` entries and anything ambiguous |\n\nSemver does not protect an Ironflow project: author-API breaks ship in minor releases\n(`ironflow-engine` 2.39.0 retyped the whole author API). The compiler, the changelog and\nthe catalogue in `${CLAUDE_SKILL_DIR}\u002Freferences\u002F` are the source of truth.\n\n## 1. Preflight\n\n```bash\ngit status --porcelain                                  # must be empty, or ask\ngrep -rn --include=Cargo.toml '^ironflow-' . | grep -v '\u002Ftarget\u002F'\ncargo check --workspace --all-targets 2>&1 | tail -3    # baseline\n```\n\n- Uncommitted changes: ask before going on. The migration must be one reviewable diff.\n- An ironflow dependency declared with `path =` or `git =`: stop. It follows its checkout,\n  not crates.io.\n- Baseline already broken: note the errors. They are not the upgrade's to fix.\n\n## 2. Bump (upgrade only)\n\nTarget versions: `cargo search \u003Ccrate> --limit 5`, keep the line `\u003Ccrate> = \"\u003Cversion>\"`.\nMove every ironflow crate together, never one alone.\n\n- Each package: `cargo add -p \u003Cpackage> \u003Ccrate>@\u003Cversion>` (`--dev` for a dev-dependency).\n  It keeps the features. A `workspace = true` dependency: edit `[workspace.dependencies]`.\n- Then `cargo update \u003Ccrate> \u003Ccrate> ...` with every ironflow crate, nothing else.\n- Target older than latest: require `=\u003Cversion>` for the named crate, run `cargo update`\n  on the ironflow crates (cargo picks the others compatible with it), then write back the\n  versions `Cargo.lock` resolved, without `=`. No downgrade.\n- `awk '\u002F^name = \"ironflow-\u002F {print $3}' Cargo.lock | sort | uniq -d` must print nothing.\n  Two versions of one crate give errors like `expected ironflow_core::X, found\n  ironflow_core::X`: raise the requirement that holds the old one.\n\n## 3. What changed\n\n```bash\n\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fchanges.sh\"              # HEAD:Cargo.lock vs Cargo.lock\n\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fchanges.sh\" \u003Cgit-rev>    # --from: lock of that revision\n```\n\nIt prints the versions before and after, then every changelog entry in between,\ndeduplicated across crates. Skip it in `audit` mode. Find the revision before a past bump\nwith `git log --oneline -- Cargo.lock`.\n\nKeep the entries that touch the project: handler code, server or worker wiring,\nenvironment, runtime behavior. Most have a catalogue entry (same issue number). For an\nauthor-facing entry without one, read the issue (its Solution and Specs sections):\n\n```bash\ncurl -s https:\u002F\u002Fgitlab.com\u002Fapi\u002Fv4\u002Fprojects\u002FThomasTartrau%2Fironflow\u002Fissues\u002F\u003Cn> | jq -r '.title, .description'\n```\n\n## 4. Where it hits the code\n\n```bash\ncargo check --workspace --all-targets --message-format short 2>&1 | grep -E '^[^ ]+: (error|warning)'\n\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fscan.sh\" .\n```\n\n- Every compiler error and deprecation warning maps to a catalogue entry (`compiler:`\n  line) or to a changelog entry. Neither: read the item in the new crate source,\n  `~\u002F.cargo\u002Fregistry\u002Fsrc\u002F*\u002F\u003Ccrate>-\u003Cversion>\u002Fsrc\u002F`. Its rustdoc names the replacement.\n  Never guess an API.\n- Every `scan.sh` hit is a candidate. Read the code around it before keeping it: some\n  patterns (`json::\u003C`, `ServerConfig::from_env`) also match correct code.\n- Upgrade mode: catalogue entries whose `since` falls in the bumped range apply even\n  without a hit when they are `behavior` (environment, defaults, model aliases).\n- Wiring: compare the project's server and worker `main.rs` with\n  `${CLAUDE_SKILL_DIR}\u002F..\u002Fsetup\u002Fassets\u002F{server,worker}\u002Fsrc\u002Fmain.rs`. Report only a\n  missing piece that changes behavior: a background task, a required variable.\n- `audit` mode also reads every handler for what a line pattern cannot catch: an\n  expression in a string, a `Value` read by key over several lines, a step name copied by\n  hand to reach what that step produced.\n\n## 5. Report, then ask\n\n| Kind | Meaning | Default |\n|---|---|---|\n| `breaking` | does not compile after the bump | apply, required to build |\n| `deprecated` | compiles with a warning | apply |\n| `behavior` | compiles, runs differently (env, defaults, models) | apply the code part, list the ops part |\n| `idiom` | compiles, but not the typed way: a typo would pass in silence | apply |\n| `adopt` | a new feature replaces a workaround | propose one by one |\n\nOne table per kind: entry, `file:line`, the fix in a few words, effort (S\u002FM\u002FL). Then the\nversions before and after, and what needs a human outside the code (secrets to generate,\na decision provider to wire). Ask with one multi-select AskUserQuestion, one option per\nkind present. In `--apply` mode, skip the question for everything but `adopt`.\n\n## 6. Apply\n\n- One catalogue entry at a time, in the order of the table above. After each:\n  `cargo check --workspace --all-targets`. Do not start the next with new errors.\n- The `+` side of each entry and the compiled snippets of\n  `${CLAUDE_SKILL_DIR}\u002F..\u002Fworkflow\u002Freferences\u002Fsteps.md` and `sub-workflows.md` are the\n  target form. Imports go at\n  the top of the file with `use`.\n- **Steps are replay keys.** A run waiting on an approval, a human input or a signal\n  replays its handler by step name and order; a changed sequence fails it with\n  `ReplayDivergence`. Never rename a step during a migration. An entry that adds, removes\n  or reorders steps (most `adopt` ones) bumps the handler's `version()`, and the user\n  drains `ironflow-cli run list --status awaiting_approval` and `--status sleeping` first.\n- Never weaken a test to make it pass. A test that asserted the old behavior is updated to\n  the new one, and the report says so.\n- At the end: `cargo test --workspace`, and `cargo clippy --workspace --all-targets` if\n  the project runs it in CI. Then offer the `ironflow:workflow-reviewer` agent on the\n  handlers that changed.\n\n## 7. Hand over\n\nFive lines at most: versions before and after, entries applied, entries left and why, what\nto do before deploying (secrets, environment, Postgres migrations run at server boot:\nback up first). Suggest the commit, do not make it: `chore: bump ironflow to \u003Cengine version>`.\n",{"name":5,"description":7,"allowed-tools":48,"user-invocable":44},"Bash(cargo:*), Bash(git status:*), Bash(git diff:*), Bash(git log:*), Bash(git show:*), Bash(${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fchanges.sh:*), Bash(${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fscan.sh:*)","main","044fff6a01f24beff6afc538268aaf1ab0c95ba0","plugins\u002Fironflow\u002Fskills\u002Fupgrade",1,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow","https:\u002F\u002Fgithub.com\u002FThomasTartrau","2026-11-04 18:52:31",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add ThomasTartrau\u002Fironflow --skill upgrade",{"tool":62,"command":63},"bunx","bunx skills add ThomasTartrau\u002Fironflow --skill upgrade",{"tool":65,"command":66},"pnpm","pnpm dlx skills add ThomasTartrau\u002Fironflow --skill upgrade","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002FSKILL.md",true,[70,76,80,84,90],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fadopt.md","REFERENCE","参考文档",26917,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002Freferences\u002Fadopt.md",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fapi.md",25267,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002Freferences\u002Fapi.md",{"path":81,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fwiring.md",12812,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002Freferences\u002Fwiring.md",{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fchanges.sh","SCRIPT","脚本",2036,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002Fscripts\u002Fchanges.sh",{"path":91,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fscan.sh",1718,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002Fscripts\u002Fscan.sh",[95,118,134,151,164,181],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":106,"publishedAt":43},"01M6EKJCDS84KZCE9F8G5D2ZW0","workflow","Write an Ironflow WorkflowHandler - typed input schema, steps (shell, http, agent, approval, human input, signal, decision, sub-workflow, parallel), registration in handlers(). Loaded by the ironflow hub for the workflow verb.","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fworkflow\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[97,107,108,25,109,27,110,111,35,112,113,114,115,116,117],"parallel","for","input","human","registration","schema","approval","write","decision","shell","http",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":128,"publishedAt":43},"01M6EKJ5G6553VH8BES3V9CY5B","test","Write an end-to-end test for an Ironflow workflow handler - real Engine, InMemoryStore, RecordReplayProvider fixtures, assertions on run status and step names. Loaded by the ironflow hub for the test verb.","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Ftest\u002FSKILL.md",[124,127],{"categoryNo":125,"categoryName":126,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},[120,97,129,130,25,27,131,132,35,114,133],"run","status","end","fixtures","engine",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":43},"01M6EKJ0NJYWEPJ9XX55GSYR44","setup","Scaffold a new Ironflow project - a Cargo workspace with a workflows lib, an API server binary, a worker binary, a hello workflow and its end-to-end test. Loaded by the ironflow hub for the setup verb.","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fsetup\u002FSKILL.md",[140],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},[136,26,25,27,28,142,143,131,144,29,35,145,39,146,147,148,149,150,120,97],"lib","binary","worker","workspace","api server","api","server","hello","workflows",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":43},"01M6EKHWQRBXVMK7YXT3DV3XDH","operation","Write a custom Ironflow Operation - an integration (GitLab, Slack, any HTTP API) executed as a tracked step through ctx.operation(). Loaded by the ironflow hub for the operation verb.","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Foperation\u002FSKILL.md",[],[153,158,159,108,25,27,160,35,114,147,161,162,117,163],"http api","slack","as","integration","gitlab","custom",{"skillNo":165,"name":25,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":171,"publishedAt":43},"01M6EKHS2MNPSZ9A0B96HWGHZG","Entry point for building on the Ironflow workflow engine. Use for setting up an Ironflow project (server + worker), writing a WorkflowHandler, writing a custom Operation, testing a workflow end to end, reviewing a handler, upgrading the ironflow crates and migrating the code, or auditing existing code against the current Ironflow idioms. Trigger on \"ironflow\", \"workflow handler\", \"ironflow setup\", \"ctx.shell\", \"ctx.agent\", \"approval gate\", \"upgrade ironflow\", \"bump ironflow\", \"créer un workflow ironflow\", \"mettre en place ironflow\", \"mettre à jour ironflow\", \"migrer ironflow\".","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fironflow\u002FSKILL.md",[169,170],{"categoryNo":125,"categoryName":126,"taxonomyType":104,"taxonomyTypeDesc":105},{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},[25,148,40,42,120,97,172,173,174,133,175,131,144,29,5,176,177,178,179,180],"review","writing","testing","trigger","bump","en","up","version","use",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":187,"publishedAt":43},"01M6EKHNAEEZPNYY5ST70AXTHV","ops-crate","Generate a new ops\u002Fxxx crate for an external service integration. Identifies the right pattern (A=wrapper, B=HTTP direct, C=macro), scaffolds the full structure, and runs the quality checklist. Trigger on \"ops crate\", \"new ops\", \"creer un crate ops\", \"add ops\u002Fxxx\", \"nouveau crate ops\", \"ironflow ops\".","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fops-crate\u002FSKILL.md",[],[188,189,175,190,191,192,193,194,195,196,197,198,199,200,201,161,202,117],"ops crate","ops","scaffolds","add","name","service","full","pattern","structure","checklist","Wrapper","quality","direct","macro","generate"]