Generates production-ready FastGPT workflow JSON from natural language requirements. Uses AI-powered semantic template matching from built-in workflows (document translation, sales training, resume screening, financial news). Performs three-layer validation (format, connections, logic completeness). Supports incremental modifications to add/remove/modify nodes. Activates when user asks to "create FastGPT workflow", "generate workflow JSON", "design FastGPT application", or mentions workflow automation, multi-agent systems, or FastGPT templates.
npx skills add https://github.com/YYH211/Claude-meta-skill --skill fastgpt-workflow-generator
> Automatically generate production-ready FastGPT workflow JSON from natural language requirements
Use this skill when you need to:
Trigger Keywords: FastGPT, workflow, JSON, multi-agent, 工作流, template matching, workflow automation, node configuration, workflow validation
This skill follows a 5-phase process to generate production-ready workflow JSON:
Goal: Extract structured requirements from natural language input
Process:
{
"purpose": "Workflow objective (e.g., 'Travel planning assistance')",
"domain": "Application domain (travel/event/document/data/general)",
"complexity": "simple | medium | complex",
"features": ["aiChat", "knowledgeBase", "httpRequest", "parallel"],
"inputs": ["userChatInput", "city", "date"],
"outputs": ["Complete plan", "Recommendations"],
"externalIntegrations": ["Weather API", "Feishu API"],
"specialRequirements": ["Multi-agent", "Real-time data"]
}
Output: Structured requirements object
Goal: Find the most similar built-in template
Built-in Templates (stored in templates/ directory):
templates/文档翻译助手.json - Simple workflow (document processing)templates/销售陪练大师.json - Medium complexity (conversational AI)templates/简历筛选助手_飞书.json - Complex workflow (data processing + external integration)templates/AI金融日报.json - Scheduled trigger + multi-agent (news aggregation)Matching Strategy:
Step 1: Coarse Filtering (Metadata-based)
Calculate similarity scores:
- Domain match: travel vs travel = 1.0, travel vs event = 0.3
- Complexity match: simple vs simple = 1.0, simple vs complex = 0.3
- Feature overlap: Jaccard similarity of feature sets
- Node count similarity: 1 - |count1 - count2| / max(count1, count2)
Combined score = 0.3 * domain + 0.2 * complexity + 0.3 * features + 0.2 * nodeCount
Select Top 3 candidate templates
Step 2: Fine Filtering (Semantic Similarity)
For Top 3 candidates:
1. Analyze user requirements vs template characteristics
2. Evaluate workflow structure similarity
3. Calculate comprehensive score
Final score = 0.3 * domain + 0.2 * complexity + 0.3 * features + 0.2 * semantic
Step 3: Selection Strategy
- Highest score < 0.5: Start from blank template
- Highest score 0.5-0.7: Use template as reference, major modifications
- Highest score > 0.7: Use template as base, minor adjustments
Output:
Scenario 1: Generate Based on Template
1. Copy template structure
2. Modify nodes
- Keep: structurally similar nodes (workflowStart, userGuide)
- Modify: nodes requiring prompt/parameter adjustments
- Delete: unnecessary nodes
- Add: new requirement nodes
3. Regenerate NodeId
function generateNodeId(nodeType, nodeName, existingIds) {
// Fixed ID mapping
if (nodeType === 'workflowStart') return 'workflowStart';
if (nodeType === 'userGuide' || nodeType === 'systemConfig') return 'userGuide';
// Generate semantic ID (camelCase)
const baseName = nodeName.replace(/[\s\u4e00-\u9fa5]+/g, '');
let nodeId = baseName ? `${baseName}Node` : `${nodeType}Node`;
// Ensure uniqueness
let counter = 1;
while (existingIds.has(nodeId)) {
nodeId = `${baseName}Node_${counter}`;
counter++;
}
return nodeId;
}
4. Update references
- Traverse all inputs, replace old nodeId with new nodeId
- Update edges' source/target
- Handle two reference formats:
- Array: ["nodeId", "key"]
- Template: {{$nodeId.key$}} (Note: double braces with single $)
5. Auto-layout positions (hierarchical layout algorithm)
function autoLayout(nodes, edges) {
// Topological sort to determine layers
const layers = topologicalLayering(nodes, edges);
// Calculate positions for each layer
const LAYER_GAP_X = 350;
const NODE_GAP_Y = 150;
layers.forEach((layer, layerIndex) => {
const x = -200 + layerIndex * LAYER_GAP_X;
const totalHeight = (layer.length - 1) * NODE_GAP_Y;
const startY = -totalHeight / 2;
layer.forEach((nodeId, nodeIndex) => {
positions[nodeId] = {
x: x,
y: startY + nodeIndex * NODE_GAP_Y
};
});
});
// Fixed position for special nodes
positions['userGuide'] = { x: -600, y: -250 };
}
6. Update configuration
- Modify chatConfig.welcomeText
- Update chatConfig.variables
Scenario 2: Create from Scratch
1. Determine node list
- Required: workflowStart, userGuide
- Add based on features: chatNode, datasetSearchNode, httpRequest468, etc.
- Required: answerNode (output node)
2. Generate nodes and connections
- Use standard node templates
- Fill required fields
- Customize inputs/outputs based on requirements
3. Calculate positions and generate configuration
Output: Complete FastGPT workflow JSON
Level 1: JSON Format Validation
✅ JSON is parseable
✅ Top level contains nodes, edges, chatConfig
✅ Each node contains: nodeId, name, flowNodeType, position, inputs, outputs
✅ flowNodeType is in valid type list (40+ types)
✅ position contains x, y numeric coordinates
Level 2: Node Connection Validation
✅ edges' source/target nodes exist
✅ sourceHandle/targetHandle format correct (nodeId-source-right, nodeId-target-left)
✅ Node input references' nodes and output keys exist
✅ Reference types match (string → string)
✅ Template references {{$nodeId.key$}} nodes and keys exist
✅ No self-loops, no duplicate connections
Level 3: Logic Completeness Validation
✅ Required nodes exist (workflowStart, userGuide, at least one output node)
✅ All nodes reachable from workflowStart (connectivity)
✅ No illegal cycles (unless using loop node)
✅ loop nodes correctly configured with parentNodeId and childrenNodeIdList
✅ No dead ends (non-output nodes without outgoing edges)
✅ All required inputs have values
Output: Validation report (containing errors, warnings, fix suggestions)
Use Cases: Add/delete/modify nodes
Processing Steps:
1. Understand modification intent
Use AI to analyze user request, extract:
{
"action": "add" | "delete" | "modify" | "reconnect",
"targetNodes": ["aiChatNode"],
"insertBefore": "aiChatNode",
"newNodes": [{ "type": "datasetSearchNode", "name": "Knowledge Base Search" }],
"modifications": {
"aiChatNode": {
"inputs": { "quoteQA": ["knowledgeBaseSearch", "searchResult"] }
}
}
}
2. Execute modifications
- Add node: generate new node, reconnect, calculate position
- Delete node: remove node, bypass reconnect, clean references
- Modify node: update inputs/outputs, validate references
3. Re-layout and validate
User Request:
"Create a simple AI Q&A workflow where users input questions and AI responds directly"
Skill Processing:
{
"purpose": "AI question answering",
"domain": "general",
"complexity": "simple",
"features": ["aiChat"],
"inputs": ["userChatInput"],
"outputs": ["AI response"]
}
文档翻译助手.json - Score: 0.85 (simple workflow, direct processing)Generated JSON (key parts):
{
"nodes": [
{
"nodeId": "userGuide",
"name": "System Configuration",
"flowNodeType": "userGuide",
"position": {"x": -600, "y": -250}
},
{
"nodeId": "workflowStart",
"name": "Start",
"flowNodeType": "workflowStart",
"position": {"x": -150, "y": 100},
"outputs": [
{"key": "userChatInput", "type": "static", "valueType": "string"}
]
},
{
"nodeId": "aiChatNode",
"name": "AI Response",
"flowNodeType": "chatNode",
"position": {"x": 200, "y": 100},
"inputs": [
{
"key": "model",
"valueType": "string",
"value": "gpt-4"
},
{
"key": "systemPrompt",
"valueType": "string",
"value": "You are a professional AI assistant that can answer various questions. Please provide accurate and helpful answers based on user questions."
},
{
"key": "userChatInput",
"valueType": "string",
"value": ["workflowStart", "userChatInput"]
}
],
"outputs": [
{"key": "answerText", "type": "static", "valueType": "string"}
]
},
{
"nodeId": "outputNode",
"name": "Output Answer",
"flowNodeType": "answerNode",
"position": {"x": 550, "y": 100},
"inputs": [
{
"key": "text",
"valueType": "string",
"value": ["aiChatNode", "answerText"]
}
]
}
],
"edges": [
{
"source": "workflowStart",
"target": "aiChatNode",
"sourceHandle": "workflowStart-source-right",
"targetHandle": "aiChatNode-target-left"
},
{
"source": "aiChatNode",
"target": "outputNode",
"sourceHandle": "aiChatNode-source-right",
"targetHandle": "outputNode-target-left"
}
],
"chatConfig": {
"welcomeText": "Welcome to the AI Q&A assistant! Please enter your question.",
"variables": []
}
}
User Request:
"Create a document translation workflow that translates user-uploaded documents from Chinese to English"
Skill Processing:
{
"purpose": "Document translation",
"domain": "document",
"complexity": "medium",
"features": ["readFiles", "aiChat", "textOutput"],
"inputs": ["userFiles"],
"outputs": ["translated document"]
}
文档翻译助手.json - Score: 0.95 (perfect match!)Generated Workflow Structure:
workflowStart → readFiles → translateNode → outputNode
Key Node Configuration:
User Request:
"I have an existing AI Q&A workflow (simple_qa_workflow.json),
I want to search the knowledge base first before AI answers,
find relevant information then generate response"
Existing Workflow Structure:
workflowStart → aiChatNode → outputNode
Modification Goal:
workflowStart → knowledgeBaseSearch → aiChatNode → outputNode
Skill Processing:
{
"action": "add",
"targetNodes": ["aiChatNode"],
"insertBefore": "aiChatNode",
"newNodes": [
{
"type": "datasetSearchNode",
"name": "Knowledge Base Search"
}
],
"modifications": {
"aiChatNode": {
"inputs": {
"quoteQA": ["knowledgeBaseSearch", "searchResult"]
}
}
}
}
knowledgeBaseSearch nodeworkflowStart → knowledgeBaseSearchknowledgeBaseSearch → aiChatNodeModified JSON (new and modified parts):
{
"nodes": [
{
"nodeId": "knowledgeBaseSearch",
"name": "Knowledge Base Search",
"flowNodeType": "datasetSearchNode",
"position": {"x": 50, "y": 100},
"inputs": [
{
"key": "datasetIds",
"valueType": "selectDataset",
"value": [],
"required": true
},
{
"key": "searchQuery",
"valueType": "string",
"value": ["workflowStart", "userChatInput"],
"required": true
},
{
"key": "similarity",
"valueType": "number",
"value": 0.5
},
{
"key": "limitCount",
"valueType": "number",
"value": 5
}
],
"outputs": [
{
"key": "searchResult",
"type": "static",
"valueType": "datasetQuote"
}
]
},
{
"nodeId": "aiChatNode",
"inputs": [
{
"key": "quoteQA",
"valueType": "datasetQuote",
"value": ["knowledgeBaseSearch", "searchResult"]
}
]
}
],
"edges": [
{
"source": "workflowStart",
"target": "knowledgeBaseSearch"
},
{
"source": "knowledgeBaseSearch",
"target": "aiChatNode"
},
{
"source": "aiChatNode",
"target": "outputNode"
}
]
}
Modification Summary Report:
knowledgeBaseSearch (datasetSearchNode)aiChatNode (added quoteQA input)knowledgeBaseSearch → aiChatNodeworkflowStart → knowledgeBaseSearch (originally workflowStart → aiChatNode)Rules:
workflowStart, userGuide (systemConfig)_1, _2 suffixExamples:
generateNodeId('chatNode', 'Travel Planning Assistant') → TravelPlanningAssistantNodegenerateNodeId('httpRequest468', 'Weather Query') → WeatherQueryNodegenerateNodeId('chatNode', 'Assistant', {TravelPlanningAssistantNode}) → AssistantNode_1Algorithm: Hierarchical Layout
Steps:
Parameters:
Two Reference Formats:
1. Array Format (direct value reference):
"value": ["workflowStart", "userChatInput"]
2. Template Syntax (string concatenation):
"value": "Please create a plan for me.\n\nDestination: {{$workflowStart.userChatInput$}}\n\nWeather: {{$weatherQueryNode.httpRawResponse$}}"
Important: Template syntax is {{$nodeId.key$}} (double braces with single $)
loop Node:
childrenNodeIdList fieldparentNodeId fieldifElse Node:
weatherQueryNode)["nodeId", "key"]{{$nodeId.key$}}{{nodeId.key}} (missing $)Q1: Import to FastGPT reports "Invalid node type"
A: Check the flowNodeType field, ensure using supported types. Reference references/node_types_reference.md. Common errors:
chatNode is correct (not aiChat)httpRequest468) should be retainedQ2: References between nodes not working
A: Check reference format:
["workflowStart", "userChatInput"] or {{$workflowStart.userChatInput$}}{$workflowStart.userChatInput$} (single brace, should be double)Q3: Some nodes not executing at runtime
A: Use built-in validation to check Level 3, ensure all nodes reachable from workflowStart
Q4: Parallel nodes not executing in parallel
A: Ensure multiple nodes' targets are the same aggregation node, and these nodes have no dependencies
Q5: Loop workflow errors
A: Must use flowNodeType: "loop" node, configure parentNodeId and childrenNodeIdList
## Phase 1: JSON Format Check
- [ ] JSON is parseable
- [ ] Contains nodes, edges, chatConfig
- [ ] All strings use double quotes
- [ ] No trailing commas
## Phase 2: Node Check
- [ ] workflowStart node exists
- [ ] At least one output node exists
- [ ] All flowNodeType valid
- [ ] All nodeId unique
- [ ] All position contains x, y
## Phase 3: Connection Check
- [ ] All edges' source and target exist
- [ ] All handle format correct
- [ ] No duplicate edges, no self-loops
## Phase 4: Reference Check
- [ ] All array references' nodes and keys exist
- [ ] All template references' nodes and keys exist
- [ ] Reference types match
## Phase 5: Logic Check
- [ ] All nodes reachable from workflowStart
- [ ] No illegal cycles
- [ ] No dead-end nodes
- [ ] All required inputs have values
## Phase 6: Runtime Test
- [ ] Import to FastGPT without errors
- [ ] Configure necessary parameters
- [ ] Run test cases
- [ ] Check output meets expectations
templates/文档翻译助手.json - Simple workflow, document processingtemplates/销售陪练大师.json - Medium complexity, conversational AItemplates/简历筛选助手_飞书.json - Complex workflow, data + external integrationtemplates/AI金融日报.json - Scheduled trigger, multi-agentreferences/node_types_reference.md - Complete reference of 40+ node typesreferences/validation_rules.md - Detailed three-layer validation rulesreferences/template_matching.md - Template matching algorithmreferences/json_structure_spec.md - Complete FastGPT JSON structure specificationexamples/example1_simple_qa.md - Complete example: Simple Q&A workflowexamples/example2_travel_planning.md - Complete example: Travel planning workflowexamples/example3_incremental_modify.md - Complete example: Incremental modification# Validate workflow JSON
node scripts/validate_workflow.js path/to/workflow.json
# Copy template
cp templates/文档翻译助手.json my_workflow.json
# View template list
ls -lh templates/
Version: 1.0
Last Updated: 2025-01-02
Compatibility: FastGPT v4.8+
Create time-boxed technical spike documents for researching and resolving critical development decisions before implementation.
Automatically convert Confluence specification documents into structured Jira backlogs with Epics and implementation tickets. When an agent needs to: (1) Create Jira tickets from a Confluence page, (2) Generate a backlog from a specification, (3) Break down a spec into implementation tasks, or (4) Convert requirements into Jira issues. Handles reading Confluence pages, analyzing specifications, creating Epics with proper structure, and generating detailed implementation tickets linked to the Epic.
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
Guidelines for clinical decision support (CDS) documents: biomarker-stratified cohort analyses and GRADE-graded treatment reports. Covers structure, executive summaries, evidence grading (1A–2C), stats (HR, CI, survival), and biomarker integration. Use for pharma research docs, clinical guidelines, regulatory submissions.
Generate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
Guides through Trail of Bits' 5-step secure development workflow. Runs Slither scans, checks special features (upgradeability/ERC conformance/token integration), generates visual security diagrams, helps document security properties for fuzzing/verification, and reviews manual security areas.
Document architecture decisions with ADR (Architecture Decision Records). Use when making significant technical decisions, choosing between alternatives, or when onboarding needs context on past decisions.
Plan-approval workflow patterns for user control over AI actions in Claude Code Waypoint Plugin. Use when planning complex changes, need user approval before execution, want to prevent mistakes, or need to document proposed changes. Covers plan creation, approval checkpoints, plan deviation tracking, revision management, and learning from approved/rejected plans.
Take yyh211/fastgpt-workflow-generator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.