---
name: opencti-platform-create-playbook-component
description: "Use when: adding a new playbook automation component, implementing a PlaybookComponent interface, or registering a new playbook step"
license: "NOASSERTION"
metadata:
  decimalai-skill-id: "76c9375e-b6cd-4dc3-8708-ad60a9935a97"
  decimalai-version-id: "c84c6a4d-7d92-4e7b-a168-72853cfe6bff"
  decimalai-version: "1"
  decimalai-body-sha256: "d2f9eea26a5dc2b644831bb2ed80f79c447f209fe6818906e9ffca655b9cbe3d"
  decimalai-name: "opencti-platform/create-playbook-component"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "coding"
  decimalai-source: "https://app.decimal.ai/s/opencti-platform-create-playbook-component@1/SKILL.md"
---
# Create Playbook Component

## Prerequisites
- **Component ID**: Unique uppercase ID (e.g., `PLAYBOOK_MY_COMPONENT`).
- **Configuration**: List of fields required from the user.

## Procedure

### Step 1 — Create Component File
Location: `opencti-platform/opencti-graphql/src/modules/playbook/components/<name>-component.ts`.

### Step 2 — Define Configuration Schema
Define a TypeScript interface for the config and a JSONSchema for validation.

```typescript
export interface MyComponentConfig {
  key: string;
}

const SCHEMA: JSONSchemaType<MyComponentConfig> = {
  type: 'object',
  properties: {
    key: { type: 'string' },
  },
  required: ['key'],
};
```

### Step 3 — Implement Component Interface
Implement `PlaybookComponent<MyComponentConfig>`.

```typescript
export const PLAYBOOK_MY_COMPONENT: PlaybookComponent<MyComponentConfig> = {
  id: 'PLAYBOOK_MY_COMPONENT',
  name: 'My Component',
  description: 'Does something useful',
  icon: 'icon-name',
  is_entry_point: false,
  is_internal: true,
  ports: [{ id: 'out', type: 'out' }],
  configuration_schema: SCHEMA,
  schema: async () => SCHEMA,
  executor: async ({ bundle, playbookNode }) => {
    // Business logic here
    const config = playbookNode.configuration;
    
    return { output_port: 'out', bundle };
  },
};
```

### Step 4 — Register Component
Import and add to `PLAYBOOK_COMPONENTS` in `src/modules/playbook/playbook-components.ts`.
