Steroid Kit logo

Steroid_Kit

Steroid Flows›LLM Nodes

LLM Nodes

LLM nodes are the reasoning steps inside a flow. They are the only place where a language model is invoked — other steps have explicit orchestration. External integrations can still have variable results or invoke their own models; do not infer that the whole workflow is deterministic or side-effect-free.

What Is an LLM Node?

An LLM node sends a prompt to a language model, waits for the response, and makes the output available to downstream steps under its actual internal name. For an action named step_1, {{step_1}} is the complete wrapper and{{step_1.output}} is its FCC response body. Inspect that body before selecting deeper fields.

Unlike a Cursor skill — where the LLM controls tool selection and can call multiple tools in a single turn — these actions dispatch a prompt to an installed coding-agent CLI. Use explicit MCP blocks for intended integration actions; do not assume the underlying agent CLI has no other capabilities.

NOTE

Critical difference from skills: In a Cursor conversation the LLM decides which tools to call. In a Flow, the flow definition decides the execution path. The LLM node only transforms data while explicit flow steps define orchestration. Agent/provider execution can still fail or vary.

Model Selection

Each LLM node selects its own model. This lets you use a fast, cheap model for classification steps and a more capable model for generation steps in the same flow.

Capability-driven setup

1. Configure/authenticate a supported coding-agent CLI.
2. Connect the Steroid client and check daemon liveness.
3. Select an advertised IDE, then one of its advertised models.
4. Provide prompt; for structured generation also provide jsonSchema.

Both IDE and model are required dynamic dropdowns. FCC uses daemon-advertised capabilities and routes to an eligible alive client; with multiple machines it selects the oldest eligible poller. Adding provider keys to the Vault does not enable these models. Existing provider authentication, subscriptions and quotas apply; inference is not guaranteed free or unlimited.

LLM node — model selection

Prompt Input

The prompt field supports the same {{variable}} template syntax used everywhere in Steroid Flows. You can reference the trigger body, previous step outputs, or static strings. The final prompt sent to the model is the fully-resolved string after variable substitution.

Example prompt with template variables

You are a senior code reviewer. Your job is to assess pull request risk.

Repository: {{trigger.body.repo}}
PR title:   {{trigger.body.pr_title}}
Author:     {{trigger.body.author}}

Diff:
{{trigger.body.diff}}

Linear ticket (if any):
{{step_1.full_result}}

Assess the risk of this PR. Consider: blast radius, test coverage signals
in the diff, and whether the change is additive or destructive.

Structured Output Mode

Choose the separate Invoke Structured LLM action (invokeStructuredLlm) and supply jsonSchema. Plain invoke_llm has no universal structured-output switch. Parse/validation failures are errors, not proof that every invocation succeeds.

TIP

Use structured output whenever an MCP block consumes the LLM output. Blocks expect typed fields — if the LLM returns freeform prose, variable substitution will inject the raw string into every field. Structured output provides a schema-directed path, but you must inspect the FCC response inside the action wrapper and bind its actual fields. Do not guess a universal summary/labels path.

Structured output schema — PR risk assessment

{
  "type": "object",
  "properties": {
    "risk_level": {
      "type": "string",
      "enum": ["low", "medium", "high", "critical"]
    },
    "summary": {
      "type": "string",
      "description": "One-paragraph human-readable assessment"
    },
    "labels": {
      "type": "array",
      "items": { "type": "string" },
      "description": "GitHub labels to apply"
    },
    "requires_security_review": {
      "type": "boolean"
    }
  },
  "required": ["risk_level", "summary", "labels", "requires_security_review"]
}

Inspect the wrapper before binding nested fields

{{step_1}}         # complete action result
{{step_1.success}} # action success flag on successful return
{{step_1.output}}  # FCC/agent response body

Use a real test result and the data picker for deeper fields.
Single-token references preserve native objects/arrays;
mixed text references serialize non-string substitutions.

Chaining LLM Nodes

You can chain multiple LLM nodes in a single flow, with each node consuming outputs from the previous one. This is useful for multi-stage reasoning: extract → assess → format → summarise. Keep each node focused on a single transformation — small prompts are more reliable than large ones.

4-step LLM pipeline

Step 1 — LLM Node: Extract entities from raw ticket text
          Output: { entities: [...], intent: "..." }

Step 2 — Linear Block: Fetch related tickets using extracted entities

Step 3 — LLM Node: Assess priority given ticket + related context
          Input:  inspect the actual earlier step outputs in the data picker
          Output: { priority: "high", rationale: "..." }

Step 4 — Linear Block: Update ticket priority
          Input:  priority = the tested structured-response field
ApproachToken costReliabilityDebuggability
Single skill (monolithic prompt)High — all context in one callLower — model juggles multiple tasksHard — failure point unclear
Steroid Flows (chained nodes)Measure actual prompt/result/retry usageExplicit orchestration; provider/integration failures remain possibleInspect step outputs and real test failures

WARNING

Dispatch can return 503 when no eligible client is available, 400 for an unadvertised IDE/model and 504 on timeout. Invoke LLM requests use 590 seconds within the configured 600-second AP flow budget; provider/agent-specific retry behavior is not a universal three-attempt guarantee.

On this page