[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EKHNAEEZPNYY5ST70AXTHV":3,"skill-same:01M6EKHNAEEZPNYY5ST70AXTHV":82},{"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":18,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6EKHNAEEZPNYY5ST70AXTHV","ops-crate",null,"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\".","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\u002F.claude\u002Fskills\u002Fops-crate\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"ops crate","ops","structure","scaffolds","add","name","trigger","service","full","pattern","http","checklist","Wrapper","quality","direct","macro","integration","generate","2026-11-10 10:12:30",false,"---\nname: ops-crate\ndescription: 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\".\nargument-hint: \"\u003Cservice-name> [pattern-a|pattern-b|pattern-c]\"\n---\n\n# ops-crate -- Generate a new Ironflow ops crate\n\n## Arguments\n\n`$ARGUMENTS` -- expected: `\u003Cservice-name>` and optionally a pattern override.\n\nParse the arguments:\n- First word: the service name (e.g. `datadog`, `pagerduty`, `cloudflare`)\n- Second word (optional): `pattern-a`, `pattern-b`, or `pattern-c`\n\nIf no service name is given, ask for one.\n\n## Step 1: Check if the crate already exists\n\n```bash\ntest -d \"ops\u002F$SERVICE\" && echo \"EXISTS\" || echo \"NEW\"\n```\n\nIf EXISTS: warn the user and ask whether to continue (extend) or abort.\n\n## Step 2: Identify the pattern\n\nRead the reference files to understand each pattern:\n- `references\u002Fpattern-a-wrapper.md` -- Pattern A\n- `references\u002Fpattern-b-http.md` -- Pattern B\n- `references\u002Fpattern-c-macro.md` -- Pattern C\n- `references\u002Fcommon-helpers.md` -- Shared helpers\n\n### If a pattern was specified in arguments\n\nUse it directly.\n\n### If no pattern was specified\n\nAsk the user with AskUserQuestion:\n\n| Criterion | Pattern A (Wrapper) | Pattern B (HTTP direct) | Pattern C (Macro) |\n|-----------|---------------------|-------------------------|-------------------|\n| Rust crate exists on crates.io? | Yes, with uniform trait | No | Yes, with typed methods 1:1 |\n| HTTP handled by | Underlying crate | ironflow-ops-common's HttpApiClient | Underlying crate |\n| Operation granularity | Generic `Op\u003CE>` for all endpoints | One struct per endpoint | Macro-generated per method |\n| Boilerplate | Minimal | Medium (one struct per operation) | Minimal (macro generates) |\n| Reference crates | ops\u002Fgitlab, ops\u002Fk8s | ops\u002Fgrafana, ops\u002Floki, ops\u002Ftempo, ops\u002Fmimir | ops\u002Fslack |\n\nRecommend Pattern B if unsure -- it is the most common and self-contained.\n\n## Step 3: Scaffold the crate\n\nFollow the structure from the chosen pattern's reference file.\n\n### 3a. Create directory\n\n```bash\nmkdir -p ops\u002F$SERVICE\u002Fsrc\n```\n\n### 3b. Create Cargo.toml\n\nUse `cargo add` after creating the basic file. The template is in\n`references\u002Fcommon-helpers.md` (Pattern B) or adapt for A\u002FC.\n\n**Pattern B dependencies:**\n- `ironflow-core` (path = \"..\u002F..\u002Fironflow-core\")\n- `ironflow-ops-common` (path = \"..\u002Fcommon\")\n- `async-trait`\n- `reqwest` with features [\"json\", \"query\"]\n- `serde` with features [\"derive\"]\n- `serde_json`\n- Dev: `tokio` with features [\"full\"], `wiremock`\n\n**Pattern A dependencies:**\n- `ironflow-core` (path = \"..\u002F..\u002Fironflow-core\")\n- `async-trait`\n- The underlying Rust crate\n- `serde_json`\n- Dev: `tokio` with features [\"full\"]\n\n**Pattern C dependencies:**\n- `ironflow-core` (path = \"..\u002F..\u002Fironflow-core\")\n- `async-trait`\n- The underlying Rust crate\n- `serde`, `serde_json`\n- Dev: `tokio` with features [\"full\"]\n\n### 3c. Create source files\n\nFollow the exact structure from the reference file for the chosen pattern.\n\n**Pattern B files:**\n1. `src\u002Flib.rs` -- crate-level doc, pub modules, `pub use client::XxxClient`\n2. `src\u002Fclient.rs` -- XxxClient wrapping HttpApiClient (copy structure from reference)\n3. One example module with 1-2 operations to demonstrate the pattern\n4. `tests\u002F` directory with wiremock integration tests\n\n**Pattern A files:**\n1. `src\u002Flib.rs` -- crate-level doc, re-exports, `pub use underlying_crate`\n2. `src\u002Fclient.rs` -- XxxClient with from_context + op()\n3. `src\u002Foperation.rs` -- XxxOp\u003CE> generic Operation wrapper\n\n**Pattern C files:**\n1. `src\u002Flib.rs` -- crate-level doc, re-exports\n2. `src\u002Fclient.rs` -- XxxClient with from_context, session()\n3. `src\u002Ferror.rs` -- error conversion\n4. `src\u002Fmacros.rs` -- xxx_op! macro\n5. One example module using the macro\n\n### 3d. Register in workspace\n\nAdd `\"ops\u002F$SERVICE\"` to the `members` list in the root `Cargo.toml`.\n\n## Step 4: Quality checklist\n\nRun these commands and fix any issues:\n\n```bash\ncargo clippy --all-targets -p ironflow-ops-$SERVICE\ncargo doc --no-deps -p ironflow-ops-$SERVICE\ncargo test -p ironflow-ops-$SERVICE\n```\n\n### Verify no duplication with ops\u002Fcommon\n\nCheck that the new crate does NOT re-implement any of these helpers:\n- `check_response` \u002F `check_response_json`\n- `validate_path_segment`\n- `send_request`\n- `parse_json_body`\n- `to_value` (Pattern B must use `ironflow_ops_common::helpers::to_value`)\n- `reqwest_err`\n\nException: Pattern C's `macros.rs` has its own `to_value` with a\nservice-specific error origin -- this is intentional.\n\n### Mandatory tests (all patterns)\n\nEvery ops crate MUST include at minimum:\n\n**Client tests:**\n- `from_context_fails_when_token_missing` -- fast, no network\n- `new` trims trailing slash on base URL (Pattern B only)\n- `new` rejects empty token\n- `debug_does_not_leak_token` -- format with Debug, assert token absent\n\n**Operation tests (Pattern B with wiremock):**\n- URL constructed correctly (mock matches on `path`)\n- Auth header sent (mock matches on `bearer_token`)\n- Body sent correctly (POST\u002FPUT\u002FPATCH)\n- 4xx\u002F5xx returns OperationError::Http\n- `input()` does NOT contain secrets\n- `kind()` returns the correct service name\n\n**Operation tests (Pattern A -- mostly #[ignore]):**\n- `kind()` returns the correct service name\n- `input()` returns endpoint metadata\n\n**Operation tests (Pattern C):**\n- `to_value` serializes a struct\n- `to_value` serializes unit to null\n\n### Documentation requirements\n\nEvery public item needs rustdoc:\n- `\u002F\u002F!` for crate-level and module-level docs\n- `\u002F\u002F\u002F` for structs, enums, traits, functions, methods\n- `# Examples` with `no_run` for anything needing network\n- `# Errors` for every `Result`-returning function\n\n## Step 5: Suggest next steps\n\nAfter generation, tell the user:\n\n1. Add the actual operations for the target API\n2. Run the full test suite: `cargo test -p ironflow-ops-$SERVICE`\n3. Consider adding the crate to the `ironflow-ops` meta-crate if one exists\n\n## Conventions\n\n- All code follows the project's CLAUDE.md rules (imports at top, no inline paths)\n- Use `?` operator for error propagation, return `OperationError` variants\n- `Debug` implementations MUST redact secrets\n- `input()` implementations MUST NOT include secrets\n- Crate names follow the pattern `ironflow-ops-$SERVICE`\n- Package names use hyphens: `ironflow-ops-xxx`\n- Module names use underscores in Rust: `ironflow_ops_xxx`\n","# ops-crate -- Generate a new Ironflow ops crate\n\n## Arguments\n\n`$ARGUMENTS` -- expected: `\u003Cservice-name>` and optionally a pattern override.\n\nParse the arguments:\n- First word: the service name (e.g. `datadog`, `pagerduty`, `cloudflare`)\n- Second word (optional): `pattern-a`, `pattern-b`, or `pattern-c`\n\nIf no service name is given, ask for one.\n\n## Step 1: Check if the crate already exists\n\n```bash\ntest -d \"ops\u002F$SERVICE\" && echo \"EXISTS\" || echo \"NEW\"\n```\n\nIf EXISTS: warn the user and ask whether to continue (extend) or abort.\n\n## Step 2: Identify the pattern\n\nRead the reference files to understand each pattern:\n- `references\u002Fpattern-a-wrapper.md` -- Pattern A\n- `references\u002Fpattern-b-http.md` -- Pattern B\n- `references\u002Fpattern-c-macro.md` -- Pattern C\n- `references\u002Fcommon-helpers.md` -- Shared helpers\n\n### If a pattern was specified in arguments\n\nUse it directly.\n\n### If no pattern was specified\n\nAsk the user with AskUserQuestion:\n\n| Criterion | Pattern A (Wrapper) | Pattern B (HTTP direct) | Pattern C (Macro) |\n|-----------|---------------------|-------------------------|-------------------|\n| Rust crate exists on crates.io? | Yes, with uniform trait | No | Yes, with typed methods 1:1 |\n| HTTP handled by | Underlying crate | ironflow-ops-common's HttpApiClient | Underlying crate |\n| Operation granularity | Generic `Op\u003CE>` for all endpoints | One struct per endpoint | Macro-generated per method |\n| Boilerplate | Minimal | Medium (one struct per operation) | Minimal (macro generates) |\n| Reference crates | ops\u002Fgitlab, ops\u002Fk8s | ops\u002Fgrafana, ops\u002Floki, ops\u002Ftempo, ops\u002Fmimir | ops\u002Fslack |\n\nRecommend Pattern B if unsure -- it is the most common and self-contained.\n\n## Step 3: Scaffold the crate\n\nFollow the structure from the chosen pattern's reference file.\n\n### 3a. Create directory\n\n```bash\nmkdir -p ops\u002F$SERVICE\u002Fsrc\n```\n\n### 3b. Create Cargo.toml\n\nUse `cargo add` after creating the basic file. The template is in\n`references\u002Fcommon-helpers.md` (Pattern B) or adapt for A\u002FC.\n\n**Pattern B dependencies:**\n- `ironflow-core` (path = \"..\u002F..\u002Fironflow-core\")\n- `ironflow-ops-common` (path = \"..\u002Fcommon\")\n- `async-trait`\n- `reqwest` with features [\"json\", \"query\"]\n- `serde` with features [\"derive\"]\n- `serde_json`\n- Dev: `tokio` with features [\"full\"], `wiremock`\n\n**Pattern A dependencies:**\n- `ironflow-core` (path = \"..\u002F..\u002Fironflow-core\")\n- `async-trait`\n- The underlying Rust crate\n- `serde_json`\n- Dev: `tokio` with features [\"full\"]\n\n**Pattern C dependencies:**\n- `ironflow-core` (path = \"..\u002F..\u002Fironflow-core\")\n- `async-trait`\n- The underlying Rust crate\n- `serde`, `serde_json`\n- Dev: `tokio` with features [\"full\"]\n\n### 3c. Create source files\n\nFollow the exact structure from the reference file for the chosen pattern.\n\n**Pattern B files:**\n1. `src\u002Flib.rs` -- crate-level doc, pub modules, `pub use client::XxxClient`\n2. `src\u002Fclient.rs` -- XxxClient wrapping HttpApiClient (copy structure from reference)\n3. One example module with 1-2 operations to demonstrate the pattern\n4. `tests\u002F` directory with wiremock integration tests\n\n**Pattern A files:**\n1. `src\u002Flib.rs` -- crate-level doc, re-exports, `pub use underlying_crate`\n2. `src\u002Fclient.rs` -- XxxClient with from_context + op()\n3. `src\u002Foperation.rs` -- XxxOp\u003CE> generic Operation wrapper\n\n**Pattern C files:**\n1. `src\u002Flib.rs` -- crate-level doc, re-exports\n2. `src\u002Fclient.rs` -- XxxClient with from_context, session()\n3. `src\u002Ferror.rs` -- error conversion\n4. `src\u002Fmacros.rs` -- xxx_op! macro\n5. One example module using the macro\n\n### 3d. Register in workspace\n\nAdd `\"ops\u002F$SERVICE\"` to the `members` list in the root `Cargo.toml`.\n\n## Step 4: Quality checklist\n\nRun these commands and fix any issues:\n\n```bash\ncargo clippy --all-targets -p ironflow-ops-$SERVICE\ncargo doc --no-deps -p ironflow-ops-$SERVICE\ncargo test -p ironflow-ops-$SERVICE\n```\n\n### Verify no duplication with ops\u002Fcommon\n\nCheck that the new crate does NOT re-implement any of these helpers:\n- `check_response` \u002F `check_response_json`\n- `validate_path_segment`\n- `send_request`\n- `parse_json_body`\n- `to_value` (Pattern B must use `ironflow_ops_common::helpers::to_value`)\n- `reqwest_err`\n\nException: Pattern C's `macros.rs` has its own `to_value` with a\nservice-specific error origin -- this is intentional.\n\n### Mandatory tests (all patterns)\n\nEvery ops crate MUST include at minimum:\n\n**Client tests:**\n- `from_context_fails_when_token_missing` -- fast, no network\n- `new` trims trailing slash on base URL (Pattern B only)\n- `new` rejects empty token\n- `debug_does_not_leak_token` -- format with Debug, assert token absent\n\n**Operation tests (Pattern B with wiremock):**\n- URL constructed correctly (mock matches on `path`)\n- Auth header sent (mock matches on `bearer_token`)\n- Body sent correctly (POST\u002FPUT\u002FPATCH)\n- 4xx\u002F5xx returns OperationError::Http\n- `input()` does NOT contain secrets\n- `kind()` returns the correct service name\n\n**Operation tests (Pattern A -- mostly #[ignore]):**\n- `kind()` returns the correct service name\n- `input()` returns endpoint metadata\n\n**Operation tests (Pattern C):**\n- `to_value` serializes a struct\n- `to_value` serializes unit to null\n\n### Documentation requirements\n\nEvery public item needs rustdoc:\n- `\u002F\u002F!` for crate-level and module-level docs\n- `\u002F\u002F\u002F` for structs, enums, traits, functions, methods\n- `# Examples` with `no_run` for anything needing network\n- `# Errors` for every `Result`-returning function\n\n## Step 5: Suggest next steps\n\nAfter generation, tell the user:\n\n1. Add the actual operations for the target API\n2. Run the full test suite: `cargo test -p ironflow-ops-$SERVICE`\n3. Consider adding the crate to the `ironflow-ops` meta-crate if one exists\n\n## Conventions\n\n- All code follows the project's CLAUDE.md rules (imports at top, no inline paths)\n- Use `?` operator for error propagation, return `OperationError` variants\n- `Debug` implementations MUST redact secrets\n- `input()` implementations MUST NOT include secrets\n- Crate names follow the pattern `ironflow-ops-$SERVICE`\n- Package names use hyphens: `ironflow-ops-xxx`\n- Module names use underscores in Rust: `ironflow_ops_xxx`\n",{"name":5,"description":7,"argument-hint":42},"\u003Cservice-name> [pattern-a|pattern-b|pattern-c]","main","044fff6a01f24beff6afc538268aaf1ab0c95ba0",".claude\u002Fskills\u002Fops-crate",1,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow","https:\u002F\u002Fgithub.com\u002FThomasTartrau","2026-11-04 18:52:31",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add ThomasTartrau\u002Fironflow --skill ops-crate",{"tool":56,"command":57},"bunx","bunx skills add ThomasTartrau\u002Fironflow --skill ops-crate",{"tool":59,"command":60},"pnpm","pnpm dlx skills add ThomasTartrau\u002Fironflow --skill ops-crate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fops-crate\u002FSKILL.md",true,[64,70,74,78],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Fcommon-helpers.md","REFERENCE","参考文档",3662,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fops-crate\u002Freferences\u002Fcommon-helpers.md",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fpattern-a-wrapper.md",4489,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fops-crate\u002Freferences\u002Fpattern-a-wrapper.md",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fpattern-b-http.md",9731,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fops-crate\u002Freferences\u002Fpattern-b-http.md",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fpattern-c-macro.md",6998,"https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fops-crate\u002Freferences\u002Fpattern-c-macro.md",[83,108,136,152,169,181],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":94,"publishedAt":37},"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",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[85,95,96,97,98,99,100,101,102,103,104,105,106,107,29],"parallel","for","ironflow","input","false","human","registration","hub","schema","approval","write","decision","shell",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":119,"publishedAt":37},"01M6EKJ8WSG7KC0M71GSN3N82K","upgrade","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.","https:\u002F\u002Fgithub.com\u002FThomasTartrau\u002Fironflow\u002Fblob\u002Fmain\u002Fplugins\u002Fironflow\u002Fskills\u002Fupgrade\u002FSKILL.md",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[110,102,120,121,122,123,124,125,126,127,128,129,97,130,99,131,132,133,134,135],"migrations","log","diff","migrate","Bash","audit","changelog","code","change","maps","scripts","cargo","project","git log","scan","show",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":146,"publishedAt":37},"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",[142,145],{"categoryNo":143,"categoryName":144,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[138,97,99,147,148,102,105,149,150,151,85],"end","fixtures","engine","run","status",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":159,"publishedAt":37},"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",[158],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[154,97,130,131,160,161,162,147,163,132,102,164,124,165,166,99,167,168,138,85],"server","lib","binary","worker","workspace","api server","api","hello","workflows",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":37},"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",[],[171,166,35,176,29,177,105,178,96,179,97,99,180,102],"gitlab","slack","custom","http api","as",{"skillNo":182,"name":97,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":188,"publishedAt":37},"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",[186,187],{"categoryNo":143,"categoryName":144,"taxonomyType":92,"taxonomyTypeDesc":93},{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[97,189,25,147,163,132,110,190,191,192,193,149,160,125,127,138,85,194,195,196],"en","bump","up","version","use","review","writing","testing"]