G GnOuGo
gnougo-labs/flow-gallery GnOuGo master mascot

flow-gallery

Official LAB Public

A catalog of reusable GnOuGo Flows for planning, validating, observing, and executing agent workflows.

workflowvalidationmcpobservability
gnougo-labs/flow-gallery/workflow-dry-run.gnougo-flow.yaml GnOuGo workflow mascot./workflow-dry-run.gnougo-flow.yaml
v0.1.0
version: 1
name: workflow-dry-run-checklist
skill:
  description: Runs a deterministic checklist and reports the safe command policy.
  tags: [dry-run, validation, commands]
  inputs:
    checks: { type: array, required: false }
  outputs:
    summary: { type: string }
functions: |
  function label(value) { return upper(trim(value)); }

workflows:
  main:
    inputs:
      checks:
        type: array
        items: { type: string }
        required: false
        default: [parse, compile, execute]
    steps:
      - id: discover_command_tools
        type: mcp.list
        input:
          servers: [GnOuGo.Cmd.Mcp]
          include: [tools]

      - id: read_command_policy
        type: mcp.call
        input:
          server: GnOuGo.Cmd.Mcp
          kind: tool
          method: cmd_get_policy
          request: {}

      - id: run_checks
        type: loop.parallel
        input:
          items: "${data.inputs.checks}"
          max_concurrency: 3
        item_var: check
        index_var: check_index
        steps:
          - id: format_check
            type: set
            output_schema:
              type: object
              properties:
                index: { type: integer }
                name: { type: string }
                passed: { type: boolean }
              required: [index, name, passed]
              additionalProperties: false
            input:
              index: "${data.check_index}"
              name: "${functions.label(data.check)}"
              passed: true

      - id: summarize
        type: workflow.call
        input:
          ref: { kind: local, name: summarize_checks }
          args:
            completed: "${data.steps.run_checks.count}"
            tool_count: "${len(data.steps.discover_command_tools.tools)}"

    outputs:
      summary: "${data.steps.summarize.outputs.text}"
      check_results: "${data.steps.run_checks.results}"
      command_policy: "${data.steps.read_command_policy.response}"

  summarize_checks:
    inputs:
      completed: { type: number, required: true }
      tool_count: { type: number, required: true }
    steps:
      - id: render
        type: template.render
        input:
          engine: mustache
          template: "Dry run completed {{completed}} checks with {{tool_count}} safe command tools."
          data:
            completed: "${data.inputs.completed}"
            tool_count: "${data.inputs.tool_count}"
          mode: text
    outputs:
      text: "${data.steps.render.text}"

Semantic view

Workflow graph

Semantically valid

Generated from the validated YAML with GnOuGo.Flow.Mermaid. Emit steps are hidden to keep the execution graph focused.

main

Entrypoint
flowchart TD n0_start(("Start")) n1_end(("End")) n2_inputs[/"Inputs: checks"/] n3_discover_command_tools[("discover_command_tools - mcp.list")] n4_read_command_policy[("read_command_policy - mcp.call")] n5_run_checks{{"run_checks - loop.parallel"}} n6_format_check("format_check - set") n7_loop_exit(("Loop exit")) n8_summarize[["summarize - workflow.call - local: summarize_checks"]] n9_outputs[/"Outputs: check_results, command_policy, summary"/] n0_start --> n2_inputs n3_discover_command_tools --> n4_read_command_policy n5_run_checks -->|loop body| n6_format_check n6_format_check --> n7_loop_exit n4_read_command_policy --> n5_run_checks n7_loop_exit --> n8_summarize n2_inputs --> n3_discover_command_tools n8_summarize --> n9_outputs n9_outputs --> n1_end

summarize_checks

Local sub-workflow
flowchart TD n0_start(("Start")) n1_end(("End")) n2_inputs[/"Inputs: completed, tool_count"/] n3_render[/"render - template.render"/] n4_outputs[/"Outputs: text"/] n0_start --> n2_inputs n2_inputs --> n3_render n3_render --> n4_outputs n4_outputs --> n1_end