home / skills / yeachan-heo / oh-my-claudecode / configure-openclaw

configure-openclaw skill

/skills/configure-openclaw

This skill configures OpenClaw to wake external automations and AI agents on Claude hook events.

npx playbooks add skill yeachan-heo/oh-my-claudecode --skill configure-openclaw

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
12.5 KB
---
name: configure-openclaw
description: DEPRECATED - Use configure-notifications with Custom Integration instead
triggers:
  - "configure openclaw"
  - "setup openclaw"
  - "openclaw gateway"
  - "openclaw setup"
---

# Configure OpenClaw (DEPRECATED)

> **DEPRECATED**: This skill is deprecated and will be removed in a future version.
> Please use `/oh-my-claudecode:configure-notifications` and select "Custom Integration (OpenClaw, n8n, CLI, etc.)" instead.
> 
> The new approach provides:
> - Same OpenClaw functionality
> - Additional presets (n8n, ClawdBot)
> - Generic webhook and CLI support
> - Migration tool for existing configs

---

## Migration Notice

When this skill is invoked, show the deprecation warning and redirect:

**Message to display:**
```
⚠️  DEPRECATION NOTICE

The /configure-openclaw skill is deprecated and will be removed in a future version.

Please use instead:
  /oh-my-claudecode:configure-notifications

Then select: "Custom Integration (OpenClaw, n8n, CLI, etc.)" → "OpenClaw Gateway"

The new wizard will:
1. Detect your existing OpenClaw config (if any)
2. Offer to migrate it automatically
3. Provide the same functionality with better UX
```

**AskUserQuestion:**

**Question:** "The configure-openclaw skill is deprecated. How would you like to proceed?"

**Options:**
1. **Open the new configure-notifications wizard (Recommended)** - Redirect to the new skill
2. **Continue with legacy setup** - Use this deprecated skill anyway
3. **Learn more about the migration** - Show detailed migration information

If option 1: Redirect to `/oh-my-claudecode:configure-notifications`
If option 2: Continue with legacy instructions below
If option 3: Show detailed migration guide

---

## Legacy Instructions

The following instructions are kept for backward compatibility but will be removed.

---
name: configure-openclaw
description: Configure OpenClaw gateway integration for waking external automations and AI agents on hook events
triggers:
  - "configure openclaw"
  - "setup openclaw"
  - "openclaw gateway"
  - "openclaw setup"
---

# Configure OpenClaw

Set up OpenClaw so OMC can wake external gateways — triggering automations, workflows, or AI agents — when hook events fire during Claude sessions.

OpenClaw is NOT a notification system. It sends structured instruction payloads to programmable HTTPS endpoints. This makes it ideal for triggering n8n workflows, custom AI agents, webhook automations, or any HTTPS-capable system.

---

## How This Skill Works

This is an interactive, natural-language configuration skill. Walk the user through setup by asking questions with AskUserQuestion. Write the result to `~/.claude/omc_config.openclaw.json`.

---

## Step 1: Detect Existing Configuration

```bash
CONFIG_FILE="${OMC_OPENCLAW_CONFIG:-$HOME/.claude/omc_config.openclaw.json}"

if [ -f "$CONFIG_FILE" ]; then
  IS_ENABLED=$(jq -r '.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  GATEWAY_COUNT=$(jq -r '.gateways | keys | length' "$CONFIG_FILE" 2>/dev/null)
  HOOK_COUNT=$(jq -r '[.hooks | to_entries[] | select(.value.enabled == true)] | length' "$CONFIG_FILE" 2>/dev/null)

  if [ "$IS_ENABLED" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "GATEWAY_COUNT=$GATEWAY_COUNT"
    echo "HOOK_COUNT=$HOOK_COUNT"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi
```

If existing config is found, show the user what's currently configured and ask if they want to update or reconfigure.

---

## Step 2: Collect Gateway URL

Use AskUserQuestion:

**Question:** "What is your OpenClaw gateway URL? (Must be HTTPS, e.g. https://my-gateway.example.com/wake)"

The user will type their URL in the "Other" field.

**Validate** the URL:
- Must start with `https://`
- Must be a valid URL
- If invalid, explain the requirement and ask again

---

## Step 3: Collect Auth Header (Optional)

Use AskUserQuestion:

**Question:** "Does your gateway require an Authorization header?"

**Options:**
1. **Yes, Bearer token** - I'll provide a Bearer token (e.g., `Bearer sk-...`)
2. **Yes, custom header value** - I'll type the full header value
3. **No auth required** - The gateway is open or uses a different auth method

If user selects option 1 or 2, ask:

**Question:** "Paste your Authorization header value (e.g., `Bearer sk-mytoken123`)"

The user will type the value in the "Other" field.

---

## Step 4: Configure Hook Events

Use AskUserQuestion with multiSelect:

**Question:** "Which hook events should trigger your OpenClaw gateway?"

**Options (multiSelect: true):**
1. **session-start** - When a new Claude session begins. Variables: `{{sessionId}}`, `{{projectName}}`, `{{projectPath}}`
2. **session-end** - When a session ends. Variables: `{{contextSummary}}`, `{{reason}}`, `{{sessionId}}`
3. **stop** - When Claude stops (idle/completion). Variables: `{{sessionId}}`, `{{projectName}}`
4. **pre-tool-use** - Before each tool call (high frequency). Variables: `{{toolName}}`, `{{sessionId}}`
5. **post-tool-use** - After each tool call (high frequency). Variables: `{{toolName}}`, `{{sessionId}}`
6. **keyword-detector** - On every prompt submission. Variables: `{{prompt}}`, `{{sessionId}}`
7. **ask-user-question** - When Claude needs user input. Variables: `{{question}}`, `{{sessionId}}`

Default selection: session-start, session-end, stop.

**Note:** pre-tool-use, post-tool-use, and keyword-detector fire very frequently. Only enable them if your gateway can handle the volume.

---

## Step 5: Collect Instruction Templates

For each selected event, ask the user for an instruction template. Show the available template variables for that event type.

Use AskUserQuestion for each event:

**Example for session-start:**

**Question:** "Instruction template for `session-start` events. Available variables: `{{sessionId}}`, `{{projectName}}`, `{{projectPath}}`, `{{timestamp}}`"

**Options:**
1. **Use default** - "Session started for project {{projectName}}"
2. **Custom** - Enter my own instruction text

**Example for session-end:**

**Question:** "Instruction template for `session-end` events. Available variables: `{{sessionId}}`, `{{projectName}}`, `{{contextSummary}}`, `{{reason}}`, `{{timestamp}}`"

**Options:**
1. **Use default** - "Session ended. Summary: {{contextSummary}}"
2. **Custom** - Enter my own instruction text

**Example for stop:**

**Question:** "Instruction template for `stop` events. Available variables: `{{sessionId}}`, `{{projectName}}`, `{{projectPath}}`, `{{timestamp}}`"

**Options:**
1. **Use default** - "Session stopping for project {{projectName}}"
2. **Custom** - Enter my own instruction text

**Example for pre-tool-use:**

**Question:** "Instruction template for `pre-tool-use` events. Available variables: `{{toolName}}`, `{{sessionId}}`, `{{projectName}}`, `{{timestamp}}`"

**Options:**
1. **Use default** - "Tool {{toolName}} about to be used"
2. **Custom** - Enter my own instruction text

**Example for post-tool-use:**

**Question:** "Instruction template for `post-tool-use` events. Available variables: `{{toolName}}`, `{{sessionId}}`, `{{projectName}}`, `{{timestamp}}`"

**Options:**
1. **Use default** - "Tool {{toolName}} completed"
2. **Custom** - Enter my own instruction text

**Example for keyword-detector:**

**Question:** "Instruction template for `keyword-detector` events. Available variables: `{{prompt}}`, `{{sessionId}}`, `{{projectName}}`, `{{timestamp}}`"

**Options:**
1. **Use default** - "Keyword detected: {{prompt}}"
2. **Custom** - Enter my own instruction text

**Example for ask-user-question:**

**Question:** "Instruction template for `ask-user-question` events. Available variables: `{{question}}`, `{{sessionId}}`, `{{projectName}}`, `{{timestamp}}`"

**Options:**
1. **Use default** - "User input requested: {{question}}"
2. **Custom** - Enter my own instruction text

---

## Step 6: Write Configuration

Build and write the config to `~/.claude/omc_config.openclaw.json`:

```bash
CONFIG_FILE="${OMC_OPENCLAW_CONFIG:-$HOME/.claude/omc_config.openclaw.json}"
mkdir -p "$(dirname "$CONFIG_FILE")"

# GATEWAY_URL, AUTH_HEADER, and per-event instructions are collected from user
# SELECTED_EVENTS is the list of enabled hook events
# Build the JSON using jq

# Example: session-start and session-end selected, bearer auth
jq -n \
  --arg gateway_url "$GATEWAY_URL" \
  --arg auth_header "$AUTH_HEADER" \
  --arg session_start_instruction "$SESSION_START_INSTRUCTION" \
  --arg session_end_instruction "$SESSION_END_INSTRUCTION" \
  --arg stop_instruction "$STOP_INSTRUCTION" \
  '{
    enabled: true,
    gateways: {
      "my-gateway": {
        url: $gateway_url,
        headers: (if $auth_header != "" then {"Authorization": $auth_header} else {} end),
        method: "POST",
        timeout: 10000
      }
    },
    hooks: {
      "session-start": {gateway: "my-gateway", instruction: $session_start_instruction, enabled: true},
      "session-end": {gateway: "my-gateway", instruction: $session_end_instruction, enabled: true},
      "stop": {gateway: "my-gateway", instruction: $stop_instruction, enabled: true}
    }
  }' > "$CONFIG_FILE"
```

Adjust the hooks object to include only the events the user selected, with their chosen instructions.

---

## Step 7: Test the Gateway

After writing config, offer to send a test wake call:

Use AskUserQuestion:

**Question:** "Send a test wake call to your gateway to verify the connection?"

**Options:**
1. **Yes, test now (Recommended)** - Send a test HTTP POST to the gateway
2. **No, I'll test later** - Skip testing

If testing:

```bash
GATEWAY_URL="USER_PROVIDED_URL"
AUTH_HEADER="USER_PROVIDED_AUTH_HEADER"  # may be empty

# Build auth header arg
AUTH_ARG=""
if [ -n "$AUTH_HEADER" ]; then
  AUTH_ARG="-H \"Authorization: $AUTH_HEADER\""
fi

RESPONSE=$(eval curl -s -w "\n%{http_code}" \
  -H "Content-Type: application/json" \
  $AUTH_ARG \
  -d '{"event":"session-start","instruction":"OpenClaw test wake from OMC configure wizard","timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","context":{}}' \
  "$GATEWAY_URL")

HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -1)

if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "202" ] || [ "$HTTP_CODE" = "204" ]; then
  echo "Test wake succeeded (HTTP $HTTP_CODE)!"
else
  echo "Test wake failed (HTTP $HTTP_CODE):"
  echo "$BODY"
fi
```

Report success or failure. Common issues:
- **401 Unauthorized**: Auth header is missing or incorrect
- **403 Forbidden**: Token does not have permission
- **404 Not Found**: Gateway URL path is incorrect
- **SSL error**: URL must be HTTPS with a valid certificate
- **Connection refused**: Gateway is not running or URL is wrong

---

## Step 8: Confirm

Display the final configuration summary:

```
OpenClaw Gateway Configured!

  Gateway:  https://my-gateway.example.com/wake
  Auth:     Bearer *** (configured)
  Events:   session-start, session-end, stop

Config saved to: ~/.claude/omc_config.openclaw.json

To activate OpenClaw, use one of:
  omc --openclaw                  (per-session flag)
  export OMC_OPENCLAW=1           (environment variable)

Debug logging:
  export OMC_OPENCLAW_DEBUG=1     (logs wake results to stderr)

Custom config path:
  export OMC_OPENCLAW_CONFIG=/path/to/config.json

To reconfigure: /oh-my-claudecode:configure-openclaw
```

---

## Template Variables Reference

| Event | Available Variables |
|-------|-------------------|
| `session-start` | `{{sessionId}}`, `{{projectPath}}`, `{{projectName}}`, `{{timestamp}}`, `{{event}}` |
| `session-end` | `{{sessionId}}`, `{{projectPath}}`, `{{projectName}}`, `{{contextSummary}}`, `{{reason}}`, `{{timestamp}}`, `{{event}}` |
| `pre-tool-use` | `{{sessionId}}`, `{{projectPath}}`, `{{projectName}}`, `{{toolName}}`, `{{timestamp}}`, `{{event}}` |
| `post-tool-use` | `{{sessionId}}`, `{{projectPath}}`, `{{projectName}}`, `{{toolName}}`, `{{timestamp}}`, `{{event}}` |
| `stop` | `{{sessionId}}`, `{{projectPath}}`, `{{projectName}}`, `{{timestamp}}`, `{{event}}` |
| `keyword-detector` | `{{sessionId}}`, `{{projectPath}}`, `{{projectName}}`, `{{prompt}}`, `{{timestamp}}`, `{{event}}` |
| `ask-user-question` | `{{sessionId}}`, `{{projectPath}}`, `{{projectName}}`, `{{question}}`, `{{timestamp}}`, `{{event}}` |

Unresolved variables (e.g., `{{unknown}}`) are left as-is in the instruction text.

---

## Environment Variable Alternative

Users can skip this wizard entirely by setting env vars and writing the config manually:

```bash
# Enable OpenClaw
export OMC_OPENCLAW=1

# Optional: override config file path
export OMC_OPENCLAW_CONFIG="$HOME/.claude/omc_config.openclaw.json"

# Optional: enable debug logging
export OMC_OPENCLAW_DEBUG=1
```

The config file path defaults to `~/.claude/omc_config.openclaw.json`. Use `OMC_OPENCLAW_CONFIG` to override.

Overview

This skill configures an OpenClaw gateway so OMC can wake external automations, workflows, or AI agents when hook events fire during Claude sessions. It walks you through collecting a secure HTTPS gateway URL, optional authorization header, event selections, and instruction templates, then writes a ready-to-use config file.

How this skill works

The skill is an interactive wizard that asks simple questions, validates inputs, and builds ~/.claude/omc_config.openclaw.json. It registers one or more gateways with headers and maps selected hook events to per-event instruction templates. After writing the file it can optionally send a test POST wake call to verify connectivity and authentication.

When to use it

  • Trigger n8n workflows, custom webhooks, or remote AI agents from Claude events
  • Automate external systems when sessions start, end, stop, or on tool usage
  • Integrate Claude sessions with CI, ticketing, or messaging systems via HTTPS
  • Set up lightweight event-driven orchestration without a notification service
  • Quickly test gateway connectivity and auth from your local environment

Best practices

  • Always use an HTTPS gateway URL with a valid certificate; the wizard enforces this
  • Prefer a Bearer token or strong custom Authorization header for security
  • Enable high-frequency hooks (pre/post-tool, keyword) only if your gateway can handle the volume
  • Use clear, minimal instruction templates and include only needed variables
  • Run the provided test wake call after configuring to validate URL, path, and auth

Example use cases

  • Wake an n8n workflow on session-start to provision resources or log metadata
  • Notify a custom AI agent on session-end with a context summary for follow-up processing
  • Trigger monitoring or CI jobs when Claude stops or hits a tool usage pattern
  • Send user-question events to a human-in-the-loop system to request input
  • Detect keywords in prompts and forward them to a realtime alerting webhook

FAQ

What if the gateway returns 401 or 403?

Verify the Authorization header value configured in the wizard and ensure the token has correct permissions.

Can I skip the wizard and configure manually?

Yes. Set OMC_OPENCLAW=1 and write the JSON to the default config path or set OMC_OPENCLAW_CONFIG to a custom path.

Which events fire most often?

pre-tool-use, post-tool-use, and keyword-detector can fire very frequently. Enable them only if your gateway can handle the traffic.