🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

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.3
Version published
Weekly downloads
16
-54.29%
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 03 Apr 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts