New:Microsoft Teams Notifications Are Now Available in Socket.Learn more
Get Started

clawbuttons

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

clawbuttons

Drop-in "Run on OpenClaw", "Run on Hermes", "Run on IronClaw" and more buttons for any website or framework — covering the full OpenClaw-style harness ecosystem

npmnpm
Version
1.0.6
Version published
Weekly downloads
18
260%
Maintainers
1
Weekly downloads
 
Created
Source

clawbuttons

Drop-in buttons for the entire OpenClaw-style harness ecosystemOpenClaw, Hermes, IronClaw, NanoClaw, ZeroClaw, OpenHarness, and ClaudeClaw. Built as framework-agnostic Web Components with zero dependencies.

npm version bundle size license

Supported Harnesses

HarnessTag NameCLI PrefixBrand ColorDescription
OpenClaw<openclaw-button>openclaw -p#E74C3CThe dominant open-source AI agent platform (200k+ stars)
Hermes<hermes-button>hermes -p#9B59B6Persistent personal agent with long-term memory
IronClaw<ironclaw-button>ironclaw agent#5D6D7ERust-based privacy-first AI assistant with WASM sandboxes
NanoClaw<nanoclaw-button>claw#1ABC9CMinimalist container-based agent (~500 lines of TS)
ZeroClaw<zeroclaw-button>zeroclaw agent#E67E22Rust-based with WASM sandbox, 14x faster than OpenClaw
OpenHarness<openharness-button>oh#27AE60Lightweight Python harness (44x lighter than Claude Code)
ClaudeClaw<claudeclaw-button>claudeclaw#D4795CLightweight Claude Code wrapper with daemon mode

Install

npm install clawbuttons

Or use the CDN (no build step):

<script src="https://unpkg.com/clawbuttons"></script>

Quick Start

<openclaw-button command="Deploy the full-stack app" theme="branded"></openclaw-button>
<hermes-button command="/research deep-dive" variant="outline"></hermes-button>
<ironclaw-button command="Audit security vulnerabilities" theme="dark"></ironclaw-button>
<nanoclaw-button command="Run isolated tests" skill-url="https://example.com/skill.zip"></nanoclaw-button>

Framework Integration

Vanilla HTML / CDN

<script src="https://unpkg.com/clawbuttons"></script>

<openclaw-button command="/deploy --prod" theme="branded"></openclaw-button>
<hermes-button command="/research" theme="dark"></hermes-button>

<script>
  document.querySelector('openclaw-button')
    .addEventListener('cb-copy', (e) => console.log('Copied:', e.detail.command));
</script>

React / Next.js

Use the dedicated React wrappers (handles SSR, hydration, and prop forwarding):

import {
  OpenClawButton,
  HermesButton,
  IronClawButton,
  NanoClawButton,
  ZeroClawButton,
  OpenHarnessButton,
  ClaudeClawButton,
} from 'clawbuttons/react';

function App() {
  return (
    <>
      <OpenClawButton
        command="Deploy the full-stack app"
        theme="branded"
        onCopy={(cmd) => console.log('Copied:', cmd)}
      />
      <HermesButton
        command="/research"
        skillUrl="https://example.com/skill.zip"
        variant="outline"
      />
      <IronClawButton
        command="Security audit"
        theme="dark"
      />
    </>
  );
}

The React wrappers:

  • Include 'use client' for Next.js App Router
  • Handle SSR/hydration with suppressHydrationWarning
  • Lazy-load the Web Components to avoid SSR crashes
  • Forward both property callbacks (onCopy) and CustomEvent listeners (onCbCopy)

Vue / Nuxt

Option A: Vue Plugin (recommended)

// main.ts
import { createApp } from 'vue';
import { ClawButtonsPlugin } from 'clawbuttons/vue';
import App from './App.vue';

const app = createApp(App);
app.use(ClawButtonsPlugin);
app.mount('#app');
<template>
  <openclaw-button
    command="/deploy"
    theme="branded"
    @cb-copy="onCopy"
  />
  <hermes-button
    command="/research"
    variant="outline"
  />
</template>

<script setup>
function onCopy(e) {
  console.log('Copied:', e.detail.command);
}
</script>

Option B: Manual setup

// vite.config.ts
import vue from '@vitejs/plugin-vue';

export default {
  plugins: [
    vue({
      template: {
        compilerOptions: {
          isCustomElement: (tag) =>
            tag.endsWith('-button') && ['openclaw', 'hermes', 'ironclaw', 'nanoclaw', 'zeroclaw', 'openharness', 'claudeclaw'].some(h => tag.startsWith(h)),
        },
      },
    }),
  ],
};

Svelte / SvelteKit

<script>
  import 'clawbuttons';

  function handleCopy(e) {
    console.log('Copied:', e.detail.command);
  }
</script>

<openclaw-button
  command="/deploy"
  theme="branded"
  on:cb-copy={handleCopy}
/>
<hermes-button command="/research" variant="ghost" />

Angular

// app.module.ts
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import 'clawbuttons';

@NgModule({
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<openclaw-button
  command="/deploy"
  theme="branded"
  (cb-copy)="onCopy($event)"
></openclaw-button>

<ironclaw-button
  command="Security audit"
  theme="dark"
></ironclaw-button>

Solid

import 'clawbuttons';

function App() {
  return (
    <>
      <openclaw-button
        command="/deploy"
        theme="branded"
        on:cb-copy={(e) => console.log(e.detail.command)}
      />
      <hermes-button command="/research" variant="outline" />
    </>
  );
}

Astro

---
---
<script>
  import 'clawbuttons';
</script>

<openclaw-button command="/deploy" theme="branded" />
<hermes-button command="/research" theme="dark" />

Programmatic JavaScript API

import { createButton } from 'clawbuttons';

const btn = createButton('openclaw', {
  command: '/deploy --prod',
  theme: 'branded',
  onCopy: (cmd) => console.log('Copied:', cmd),
});

document.getElementById('container').appendChild(btn);

Themes

ThemeDescription
brandedUses each harness's brand color (default)
branded-altPurple secondary (#6B5CE7) — great for mixing harnesses
darkDark surface, light text, harness-colored accents
lightWhite surface, dark text, harness-colored accents
systemAuto-switches between light/dark based on prefers-color-scheme

Sizes

SizeHeight
sm2rem (32px at default font size)
md2.5rem (40px) (default)
lg3rem (48px)

Events

All buttons dispatch native CustomEvents with bubbles: true and composed: true (crosses Shadow DOM).

EventDetailFired when
cb-copy{ command: string, harness: string }Command copied to clipboard
cb-open{ command: string, harness: string }Button clicked / popup opens
cb-close{ harness: string }Popup closed
el.addEventListener('cb-copy', (e) => {
  console.log(`Copied ${e.detail.harness} command:`, e.detail.command);
});

API Reference

Common Attributes (all <*-button> elements)

AttributeTypeDefaultDescription
commandstringThe skill/command to run
skill-urlstringURL to downloadable skill package
theme'branded' | 'branded-alt' | 'dark' | 'light' | 'system''branded'Theme variant
size'sm' | 'md' | 'lg''md'Button size
variant'filled' | 'outline' | 'ghost''filled'Visual variant
shape'rounded' | 'pill' | 'square''rounded'Border radius shape
popup'true' | 'false''true'Show popup dialog on click
prompt-flag'true' | 'false''true'Prepend CLI prefix to command
popup-titlestring'Run on {Harness}'Custom popup title
popup-descriptionstringCustom popup description

JavaScript Exports

import {
  createButton,           // Factory: createButton('openclaw', options)
  registerHarnessButton,  // Register one harness
  registerAllButtons,     // Register all harnesses
  register,               // Alias for registerAllButtons
  showPopup,              // Show popup programmatically
  HARNESSES,              // All harness configs
  HARNESS_IDS,            // ['openclaw', 'hermes', ...] 
  getHarness,             // Get config by ID
  getIcon,                // Get SVG icon by harness ID
  resolveTheme,           // Resolve theme tokens
} from 'clawbuttons';

// React wrappers (SSR-safe, includes 'use client')
import {
  OpenClawButton,
  HermesButton,
  IronClawButton,
  NanoClawButton,
  ZeroClawButton,
  OpenHarnessButton,
  ClaudeClawButton,
} from 'clawbuttons/react';

// Vue plugin
import { ClawButtonsPlugin } from 'clawbuttons/vue';

Explicit Registration

Registration happens automatically on import. For frameworks that need timing control:

import { register } from 'clawbuttons';
register();

Or register individual harnesses with custom tag names:

import { registerHarnessButton } from 'clawbuttons';

registerHarnessButton('openclaw');
registerHarnessButton('hermes', 'my-hermes-btn');

Browser Support

Works in all browsers that support Custom Elements v1:

  • Chrome 67+
  • Firefox 63+
  • Safari 10.1+
  • Edge 79+

License

MIT

Keywords

openclaw

FAQs

Package last updated on 05 Apr 2026

Related posts