# Skill MCP tools

> Tool descriptions and complete input schemas for skill operations.

Source: https://docs.graph8.com/developers/mcp-reference/skill/

Use this reference to find a tool and its inputs. [Connect an MCP client](https://docs.graph8.com/developers/mcp/) before calling tools. Tool visibility depends on discovery and permissions.

For actions that send messages, spend credits, delete data, or start execution, review the intended records and confirm the action before proceeding. Obtain IDs from a prior result; do not invent them. A registered tool does not guarantee that its supporting service is available in every organization.

## g8_skill_create_api

> Create an API-runtime skill. Persists a new skill in the org; call with ``dry_run=True`` first to confirm, then ``dry_run=False``. Args: name: Display name. endpoint: Full URL. May contain ``&#123;variable&#125;`` path placeholders (e.g. ``https://api.x.com/v1/&#123;id&#125;``). method: HTTP method (default ``"POST"``). One of ``GET\|POST\|PUT\|PATCH\|DELETE``. description: Optional human-readable summary. category: Optional grouping. object_type: Optional entity target - ``"Company"\|"Contact"\|"Deal"\|"Campaign"``. headers: Static request headers. Values may use ``&#123;var&#125;``. body_template: Request body template; ``&#123;var&#125;`` substituted at runtime. query_params: Static query params dict. Values may use ``&#123;var&#125;``. body_type: ``json``, ``form-urlencoded``, ``form-data``, ``raw``, or ``graphql``. Defaults to ``json``. content_type: Custom Content-Type header. Auto-detected from ``body_type`` if omitted. requires_approval: Force manual approval before execution. dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `name` | Yes | string | See the schema below for constraints and defaults. |
| `endpoint` | Yes | string | See the schema below for constraints and defaults. |
| `method` | No | string | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `headers` | No | object / null | See the schema below for constraints and defaults. |
| `body_template` | No | string / null | See the schema below for constraints and defaults. |
| `query_params` | No | object / null | See the schema below for constraints and defaults. |
| `body_type` | No | string / null | See the schema below for constraints and defaults. |
| `content_type` | No | string / null | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "name": {
      "title": "Name",
      "type": "string"
    },
    "endpoint": {
      "title": "Endpoint",
      "type": "string"
    },
    "method": {
      "default": "POST",
      "title": "Method",
      "type": "string"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "headers": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Headers"
    },
    "body_template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Template"
    },
    "query_params": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Query Params"
    },
    "body_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Type"
    },
    "content_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Content Type"
    },
    "requires_approval": {
      "default": false,
      "title": "Requires Approval",
      "type": "boolean"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "name",
    "endpoint"
  ],
  "title": "create_api_skillArguments",
  "type": "object"
}
```

</details>

## g8_skill_create_from_node

> Lift a workflow action node into a standalone skill (a copy; the workflow is NOT modified). Persists a new skill; confirm with ``dry_run=True`` before calling with ``dry_run=False``. To make the node reference the new skill, update it afterward with ``g8_workflow_update_node`` to set ``config.action_id``. Args: workflow_id: Workflow UUID. node_id: Node id inside the workflow's graph. name: Optional new name; defaults to ``"&lt;source name&gt; (Copy)"``. dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `workflow_id` | Yes | string | See the schema below for constraints and defaults. |
| `node_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | No | string / null | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "workflow_id": {
      "title": "Workflow Id",
      "type": "string"
    },
    "node_id": {
      "title": "Node Id",
      "type": "string"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Name"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "workflow_id",
    "node_id"
  ],
  "title": "create_from_nodeArguments",
  "type": "object"
}
```

</details>

## g8_skill_create_from_template

> Clone a skill template into the org. Persists a new skill; confirm with ``dry_run=True`` before calling with ``dry_run=False``. Only llm/api templates can be cloned (workflow/script runtimes are refused). Args: template_id: Template UUID from ``g8_skill_list_templates``. name: Display name for the new skill. overrides: Optional dict of fields to override on the clone. dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `template_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | Yes | string | See the schema below for constraints and defaults. |
| `overrides` | No | object / null | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "template_id": {
      "title": "Template Id",
      "type": "string"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "overrides": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Overrides"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "template_id",
    "name"
  ],
  "title": "create_from_templateArguments",
  "type": "object"
}
```

</details>

## g8_skill_create_llm

> Create an LLM-runtime skill. Persists a new skill in the org; call with ``dry_run=True`` first to render a confirmation preview, then again with ``dry_run=False`` after the user confirms. Args: name: Display name. model: Model id from ``g8_skill_list_models`` (e.g. ``"gpt-4o"``). prompt_template: Prompt template. Use ``&#123;variable&#125;`` for inputs; they become the skill's input surface (see ``g8_skill_extract_variables``). description: Optional human-readable summary. category: Optional grouping (e.g. ``"Research"``, ``"Sales"``). object_type: Optional entity target - ``"Company"\|"Contact"\|"Deal"\|"Campaign"``. None (default) is global. temperature: LLM temperature (default 0.7). max_tokens: Max output tokens (default 1000). requires_approval: Force manual approval before execution (default False). dry_run: When True, return a confirmation preview instead of persisting.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `name` | Yes | string | See the schema below for constraints and defaults. |
| `model` | Yes | string | See the schema below for constraints and defaults. |
| `prompt_template` | Yes | string | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `temperature` | No | number | See the schema below for constraints and defaults. |
| `max_tokens` | No | integer | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "name": {
      "title": "Name",
      "type": "string"
    },
    "model": {
      "title": "Model",
      "type": "string"
    },
    "prompt_template": {
      "title": "Prompt Template",
      "type": "string"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "temperature": {
      "default": 0.7,
      "title": "Temperature",
      "type": "number"
    },
    "max_tokens": {
      "default": 1000,
      "title": "Max Tokens",
      "type": "integer"
    },
    "requires_approval": {
      "default": false,
      "title": "Requires Approval",
      "type": "boolean"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "name",
    "model",
    "prompt_template"
  ],
  "title": "create_llm_skillArguments",
  "type": "object"
}
```

</details>

## g8_skill_delete

> Delete a skill (with reference check). Scans every workflow in the org; if ANY node references the skill the delete is refused and the offending workflows are listed, otherwise it hard-deletes. IMPORTANT: hard-delete is final - there is no restore. Call with ``dry_run=True`` to see the reference report + confirmation, then again with ``dry_run=False`` once the user confirms. Args: action_id: Skill UUID. dry_run: When True, return a confirmation preview (including any reference list) instead of deleting.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "delete_skillArguments",
  "type": "object"
}
```

</details>

## g8_skill_execute

> Run a skill once and return the execution result. Triggers a real execution (LLM call or HTTP request) and may consume credits; confirm with ``dry_run=True`` before calling with ``dry_run=False``. ``input_data`` keys should match the ``&#123;variable&#125;`` placeholders from ``g8_skill_extract_variables``; other keys pass through but won't substitute. Args: action_id: Skill UUID. input_data: Dict of input field values for placeholder substitution (e.g. ``&#123;"company_name": "Acme"&#125;``). dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `input_data` | No | object / null | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "input_data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Input Data"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "execute_skillArguments",
  "type": "object"
}
```

</details>

## g8_skill_extract_variables

> Extract single-brace ``&#123;variable&#125;`` placeholders from a skill's templates (deduplicated, first-seen order). Double-brace ``&#123;&#123;var&#125;&#125;`` is ignored. LLM skills scan ``prompt_template``; API skills scan ``endpoint``, ``body_template``, header values, and query param values. Use BEFORE wiring the skill into a workflow Action node so you know which input mappings to declare upstream. Args: action_id: Skill UUID.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "extract_variablesArguments",
  "type": "object"
}
```

</details>

## g8_skill_get

> Get a skill's full configuration (metadata + llm_config or api_config). Returns 404 if the action_id is a workflow or script; use ``g8_workflow_get`` for workflow rows. Args: action_id: Skill UUID.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "get_skillArguments",
  "type": "object"
}
```

</details>

## g8_skill_list

> List skills (LLM + API runtimes) owned by the caller's org. Workflows (use ``g8_workflow_list``) and script-runtime actions are not shown. Args: runtime_type: Filter to ``"llm"`` or ``"api"``. Omit to see both. enabled: Filter by enabled flag. category: Filter by free-text category (e.g. ``"Sales"``). object_type: Filter by entity target - ``"Company"\|"Contact"\|"Deal"\|"Campaign"``. Omit for global. include_system: When True (default), merge in shared system-default skills alongside org-owned ones.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `runtime_type` | No | string / null | See the schema below for constraints and defaults. |
| `enabled` | No | boolean / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `include_system` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "runtime_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Runtime Type"
    },
    "enabled": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Enabled"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "include_system": {
      "default": true,
      "title": "Include System",
      "type": "boolean"
    }
  },
  "title": "list_skillsArguments",
  "type": "object"
}
```

</details>

## g8_skill_list_models

> List supported LLM model identifiers for the ``model`` field of ``g8_skill_create_llm`` / ``g8_skill_update_llm``. Returns ``&#123;models: [&#123;id, provider, label&#125;], total: N&#125;``. Curated list; the create/update endpoints accept any string.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| None | No | — | No user-supplied inputs. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {},
  "title": "list_modelsArguments",
  "type": "object"
}
```

</details>

## g8_skill_list_templates

> List skill templates available in the caller's org (plus shared system templates). Workflow templates are excluded. Pass the returned ``action_id`` to ``g8_skill_create_from_template`` to clone one. Args: category: Optional category filter.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `category` | No | string / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    }
  },
  "title": "list_templatesArguments",
  "type": "object"
}
```

</details>

## g8_skill_update_api

> Update an API-runtime skill. Pass only the fields you want to change. Returns 404 if the action is not an API skill (runtime cannot switch). Args: action_id: Skill UUID. name, description, category, object_type, enabled: Top-level metadata. endpoint, method, headers, body_template, query_params, body_type, content_type: API config. If ANY one is passed, all are sent (update replaces the full api_config block), so fetch current values via ``g8_skill_get`` first for a partial change. requires_approval: Approval gate toggle.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | No | string / null | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `enabled` | No | boolean / null | See the schema below for constraints and defaults. |
| `endpoint` | No | string / null | See the schema below for constraints and defaults. |
| `method` | No | string / null | See the schema below for constraints and defaults. |
| `headers` | No | object / null | See the schema below for constraints and defaults. |
| `body_template` | No | string / null | See the schema below for constraints and defaults. |
| `query_params` | No | object / null | See the schema below for constraints and defaults. |
| `body_type` | No | string / null | See the schema below for constraints and defaults. |
| `content_type` | No | string / null | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Name"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "enabled": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Enabled"
    },
    "endpoint": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Endpoint"
    },
    "method": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Method"
    },
    "headers": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Headers"
    },
    "body_template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Template"
    },
    "query_params": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Query Params"
    },
    "body_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Type"
    },
    "content_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Content Type"
    },
    "requires_approval": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Requires Approval"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "update_api_skillArguments",
  "type": "object"
}
```

</details>

## g8_skill_update_llm

> Update an LLM-runtime skill. Pass only the fields you want to change. Returns 404 if the action is not an LLM skill (runtime cannot switch). Args: action_id: Skill UUID. name, description, category, object_type, enabled: Top-level metadata. model, prompt_template, temperature, max_tokens: LLM config. If ANY one is passed, all four are sent (update replaces the full llm_config block), so fetch current values via ``g8_skill_get`` first for a partial change. requires_approval: Approval gate toggle.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | No | string / null | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `enabled` | No | boolean / null | See the schema below for constraints and defaults. |
| `model` | No | string / null | See the schema below for constraints and defaults. |
| `prompt_template` | No | string / null | See the schema below for constraints and defaults. |
| `temperature` | No | number / null | See the schema below for constraints and defaults. |
| `max_tokens` | No | integer / null | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Name"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "enabled": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Enabled"
    },
    "model": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Model"
    },
    "prompt_template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Prompt Template"
    },
    "temperature": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Temperature"
    },
    "max_tokens": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Max Tokens"
    },
    "requires_approval": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Requires Approval"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "update_llm_skillArguments",
  "type": "object"
}
```

</details>

## g8_skill_validate_template

> Dry-run a skill template through the variable extractor and warn-only validator. Two call shapes: pass a single ``template`` string, OR pass ``runtime_type`` + a matching ``llm_config``/``api_config`` to scan every template field the runtime would use. Warn-only: ``valid`` is always True for parseable templates; warnings list soft issues (double-brace usage, unmatched braces) to repair before saving. Args: template: Single template string. runtime_type: ``"llm"`` or ``"api"`` (when passing a full skill shape). llm_config: Full LLM config dict. api_config: Full API config dict.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `template` | No | string / null | See the schema below for constraints and defaults. |
| `runtime_type` | No | string / null | See the schema below for constraints and defaults. |
| `llm_config` | No | object / null | See the schema below for constraints and defaults. |
| `api_config` | No | object / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Template"
    },
    "runtime_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Runtime Type"
    },
    "llm_config": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Llm Config"
    },
    "api_config": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Api Config"
    }
  },
  "title": "validate_templateArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_create_api

> Create an API-runtime skill. Persists a new skill in the org; call with ``dry_run=True`` first to confirm, then ``dry_run=False``. Args: name: Display name. endpoint: Full URL. May contain ``&#123;variable&#125;`` path placeholders (e.g. ``https://api.x.com/v1/&#123;id&#125;``). method: HTTP method (default ``"POST"``). One of ``GET\|POST\|PUT\|PATCH\|DELETE``. description: Optional human-readable summary. category: Optional grouping. object_type: Optional entity target - ``"Company"\|"Contact"\|"Deal"\|"Campaign"``. headers: Static request headers. Values may use ``&#123;var&#125;``. body_template: Request body template; ``&#123;var&#125;`` substituted at runtime. query_params: Static query params dict. Values may use ``&#123;var&#125;``. body_type: ``json``, ``form-urlencoded``, ``form-data``, ``raw``, or ``graphql``. Defaults to ``json``. content_type: Custom Content-Type header. Auto-detected from ``body_type`` if omitted. requires_approval: Force manual approval before execution. dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `name` | Yes | string | See the schema below for constraints and defaults. |
| `endpoint` | Yes | string | See the schema below for constraints and defaults. |
| `method` | No | string | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `headers` | No | object / null | See the schema below for constraints and defaults. |
| `body_template` | No | string / null | See the schema below for constraints and defaults. |
| `query_params` | No | object / null | See the schema below for constraints and defaults. |
| `body_type` | No | string / null | See the schema below for constraints and defaults. |
| `content_type` | No | string / null | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "name": {
      "title": "Name",
      "type": "string"
    },
    "endpoint": {
      "title": "Endpoint",
      "type": "string"
    },
    "method": {
      "default": "POST",
      "title": "Method",
      "type": "string"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "headers": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Headers"
    },
    "body_template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Template"
    },
    "query_params": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Query Params"
    },
    "body_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Type"
    },
    "content_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Content Type"
    },
    "requires_approval": {
      "default": false,
      "title": "Requires Approval",
      "type": "boolean"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "name",
    "endpoint"
  ],
  "title": "create_api_skillArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_create_from_node

> Lift a workflow action node into a standalone skill (a copy; the workflow is NOT modified). Persists a new skill; confirm with ``dry_run=True`` before calling with ``dry_run=False``. To make the node reference the new skill, update it afterward with ``g8_workflow_update_node`` to set ``config.action_id``. Args: workflow_id: Workflow UUID. node_id: Node id inside the workflow's graph. name: Optional new name; defaults to ``"&lt;source name&gt; (Copy)"``. dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `workflow_id` | Yes | string | See the schema below for constraints and defaults. |
| `node_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | No | string / null | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "workflow_id": {
      "title": "Workflow Id",
      "type": "string"
    },
    "node_id": {
      "title": "Node Id",
      "type": "string"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Name"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "workflow_id",
    "node_id"
  ],
  "title": "create_from_nodeArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_create_from_template

> Clone a skill template into the org. Persists a new skill; confirm with ``dry_run=True`` before calling with ``dry_run=False``. Only llm/api templates can be cloned (workflow/script runtimes are refused). Args: template_id: Template UUID from ``g8_skill_list_templates``. name: Display name for the new skill. overrides: Optional dict of fields to override on the clone. dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `template_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | Yes | string | See the schema below for constraints and defaults. |
| `overrides` | No | object / null | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "template_id": {
      "title": "Template Id",
      "type": "string"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "overrides": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Overrides"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "template_id",
    "name"
  ],
  "title": "create_from_templateArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_create_llm

> Create an LLM-runtime skill. Persists a new skill in the org; call with ``dry_run=True`` first to render a confirmation preview, then again with ``dry_run=False`` after the user confirms. Args: name: Display name. model: Model id from ``g8_skill_list_models`` (e.g. ``"gpt-4o"``). prompt_template: Prompt template. Use ``&#123;variable&#125;`` for inputs; they become the skill's input surface (see ``g8_skill_extract_variables``). description: Optional human-readable summary. category: Optional grouping (e.g. ``"Research"``, ``"Sales"``). object_type: Optional entity target - ``"Company"\|"Contact"\|"Deal"\|"Campaign"``. None (default) is global. temperature: LLM temperature (default 0.7). max_tokens: Max output tokens (default 1000). requires_approval: Force manual approval before execution (default False). dry_run: When True, return a confirmation preview instead of persisting.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `name` | Yes | string | See the schema below for constraints and defaults. |
| `model` | Yes | string | See the schema below for constraints and defaults. |
| `prompt_template` | Yes | string | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `temperature` | No | number | See the schema below for constraints and defaults. |
| `max_tokens` | No | integer | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "name": {
      "title": "Name",
      "type": "string"
    },
    "model": {
      "title": "Model",
      "type": "string"
    },
    "prompt_template": {
      "title": "Prompt Template",
      "type": "string"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "temperature": {
      "default": 0.7,
      "title": "Temperature",
      "type": "number"
    },
    "max_tokens": {
      "default": 1000,
      "title": "Max Tokens",
      "type": "integer"
    },
    "requires_approval": {
      "default": false,
      "title": "Requires Approval",
      "type": "boolean"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "name",
    "model",
    "prompt_template"
  ],
  "title": "create_llm_skillArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_delete

> Delete a skill (with reference check). Scans every workflow in the org; if ANY node references the skill the delete is refused and the offending workflows are listed, otherwise it hard-deletes. IMPORTANT: hard-delete is final - there is no restore. Call with ``dry_run=True`` to see the reference report + confirmation, then again with ``dry_run=False`` once the user confirms. Args: action_id: Skill UUID. dry_run: When True, return a confirmation preview (including any reference list) instead of deleting.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "delete_skillArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_execute

> Run a skill once and return the execution result. Triggers a real execution (LLM call or HTTP request) and may consume credits; confirm with ``dry_run=True`` before calling with ``dry_run=False``. ``input_data`` keys should match the ``&#123;variable&#125;`` placeholders from ``g8_skill_extract_variables``; other keys pass through but won't substitute. Args: action_id: Skill UUID. input_data: Dict of input field values for placeholder substitution (e.g. ``&#123;"company_name": "Acme"&#125;``). dry_run: When True, return a confirmation preview.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `input_data` | No | object / null | See the schema below for constraints and defaults. |
| `dry_run` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "input_data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Input Data"
    },
    "dry_run": {
      "default": false,
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "execute_skillArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_extract_variables

> Extract single-brace ``&#123;variable&#125;`` placeholders from a skill's templates (deduplicated, first-seen order). Double-brace ``&#123;&#123;var&#125;&#125;`` is ignored. LLM skills scan ``prompt_template``; API skills scan ``endpoint``, ``body_template``, header values, and query param values. Use BEFORE wiring the skill into a workflow Action node so you know which input mappings to declare upstream. Args: action_id: Skill UUID.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "extract_variablesArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_get

> Get a skill's full configuration (metadata + llm_config or api_config). Returns 404 if the action_id is a workflow or script; use ``g8_workflow_get`` for workflow rows. Args: action_id: Skill UUID.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "get_skillArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_list

> List skills (LLM + API runtimes) owned by the caller's org. Workflows (use ``g8_workflow_list``) and script-runtime actions are not shown. Args: runtime_type: Filter to ``"llm"`` or ``"api"``. Omit to see both. enabled: Filter by enabled flag. category: Filter by free-text category (e.g. ``"Sales"``). object_type: Filter by entity target - ``"Company"\|"Contact"\|"Deal"\|"Campaign"``. Omit for global. include_system: When True (default), merge in shared system-default skills alongside org-owned ones.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `runtime_type` | No | string / null | See the schema below for constraints and defaults. |
| `enabled` | No | boolean / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `include_system` | No | boolean | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "runtime_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Runtime Type"
    },
    "enabled": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Enabled"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "include_system": {
      "default": true,
      "title": "Include System",
      "type": "boolean"
    }
  },
  "title": "list_skillsArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_list_models

> List supported LLM model identifiers for the ``model`` field of ``g8_skill_create_llm`` / ``g8_skill_update_llm``. Returns ``&#123;models: [&#123;id, provider, label&#125;], total: N&#125;``. Curated list; the create/update endpoints accept any string.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| None | No | — | No user-supplied inputs. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {},
  "title": "list_modelsArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_list_templates

> List skill templates available in the caller's org (plus shared system templates). Workflow templates are excluded. Pass the returned ``action_id`` to ``g8_skill_create_from_template`` to clone one. Args: category: Optional category filter.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `category` | No | string / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    }
  },
  "title": "list_templatesArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_update_api

> Update an API-runtime skill. Pass only the fields you want to change. Returns 404 if the action is not an API skill (runtime cannot switch). Args: action_id: Skill UUID. name, description, category, object_type, enabled: Top-level metadata. endpoint, method, headers, body_template, query_params, body_type, content_type: API config. If ANY one is passed, all are sent (update replaces the full api_config block), so fetch current values via ``g8_skill_get`` first for a partial change. requires_approval: Approval gate toggle.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | No | string / null | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `enabled` | No | boolean / null | See the schema below for constraints and defaults. |
| `endpoint` | No | string / null | See the schema below for constraints and defaults. |
| `method` | No | string / null | See the schema below for constraints and defaults. |
| `headers` | No | object / null | See the schema below for constraints and defaults. |
| `body_template` | No | string / null | See the schema below for constraints and defaults. |
| `query_params` | No | object / null | See the schema below for constraints and defaults. |
| `body_type` | No | string / null | See the schema below for constraints and defaults. |
| `content_type` | No | string / null | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Name"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "enabled": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Enabled"
    },
    "endpoint": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Endpoint"
    },
    "method": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Method"
    },
    "headers": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Headers"
    },
    "body_template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Template"
    },
    "query_params": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Query Params"
    },
    "body_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Body Type"
    },
    "content_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Content Type"
    },
    "requires_approval": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Requires Approval"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "update_api_skillArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_update_llm

> Update an LLM-runtime skill. Pass only the fields you want to change. Returns 404 if the action is not an LLM skill (runtime cannot switch). Args: action_id: Skill UUID. name, description, category, object_type, enabled: Top-level metadata. model, prompt_template, temperature, max_tokens: LLM config. If ANY one is passed, all four are sent (update replaces the full llm_config block), so fetch current values via ``g8_skill_get`` first for a partial change. requires_approval: Approval gate toggle.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `action_id` | Yes | string | See the schema below for constraints and defaults. |
| `name` | No | string / null | See the schema below for constraints and defaults. |
| `description` | No | string / null | See the schema below for constraints and defaults. |
| `category` | No | string / null | See the schema below for constraints and defaults. |
| `object_type` | No | string / null | See the schema below for constraints and defaults. |
| `enabled` | No | boolean / null | See the schema below for constraints and defaults. |
| `model` | No | string / null | See the schema below for constraints and defaults. |
| `prompt_template` | No | string / null | See the schema below for constraints and defaults. |
| `temperature` | No | number / null | See the schema below for constraints and defaults. |
| `max_tokens` | No | integer / null | See the schema below for constraints and defaults. |
| `requires_approval` | No | boolean / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "action_id": {
      "title": "Action Id",
      "type": "string"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Name"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "object_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Object Type"
    },
    "enabled": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Enabled"
    },
    "model": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Model"
    },
    "prompt_template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Prompt Template"
    },
    "temperature": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Temperature"
    },
    "max_tokens": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Max Tokens"
    },
    "requires_approval": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Requires Approval"
    }
  },
  "required": [
    "action_id"
  ],
  "title": "update_llm_skillArguments",
  "type": "object"
}
```

</details>

## g8_workflow_skill_validate_template

> Dry-run a skill template through the variable extractor and warn-only validator. Two call shapes: pass a single ``template`` string, OR pass ``runtime_type`` + a matching ``llm_config``/``api_config`` to scan every template field the runtime would use. Warn-only: ``valid`` is always True for parseable templates; warnings list soft issues (double-brace usage, unmatched braces) to repair before saving. Args: template: Single template string. runtime_type: ``"llm"`` or ``"api"`` (when passing a full skill shape). llm_config: Full LLM config dict. api_config: Full API config dict.

### Inputs

| Input | Required | Type | Description |
|---|---|---|---|
| `template` | No | string / null | See the schema below for constraints and defaults. |
| `runtime_type` | No | string / null | See the schema below for constraints and defaults. |
| `llm_config` | No | object / null | See the schema below for constraints and defaults. |
| `api_config` | No | object / null | See the schema below for constraints and defaults. |

<details>
<summary>Complete input schema</summary>

```json
{
  "properties": {
    "template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Template"
    },
    "runtime_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Runtime Type"
    },
    "llm_config": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Llm Config"
    },
    "api_config": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Api Config"
    }
  },
  "title": "validate_templateArguments",
  "type": "object"
}
```

</details>
