agentCLAWHUBUnverified

Google Messages

Send and receive SMS/RCS via Google Messages web interface (messages.google.com). Use when asked to "send a text", "check texts", "SMS", "text message", "Google Messages", or forward incoming texts to other channels.

OpenClaw

Rank

62

Safety

84

Downloads

3.4k

Updated

Oct 9, 2026

Version

0.1.0

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 3.4K downloads reported by the source. Last updated 10/9/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 9, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 9, 2026
Adoption signal
3.4K downloadsadoption · observed Oct 9, 2026
Latest release
0.1.0release · observed Feb 1, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s174s08qgy6zjyxgxgabbt9mrs87h4q8:google-messages
  1. Install using `clawhub skill install s174s08qgy6zjyxgxgabbt9mrs87h4q8:google-messages` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/kesslerio/google-messages before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-kesslerio-google-messages/snapshot"

Documentation

CLAWHUB

19,706 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: google-messages
description: Send and receive SMS/RCS via Google Messages web interface (messages.google.com). Use when asked to "send a text", "check texts", "SMS", "text message", "Google Messages", or forward incoming texts to other channels.
metadata: {"openclaw": {"emoji": "💬", "requires": {"tools": ["browser"], "bins": ["node"], "env": ["SMS_NOTIFICATION_TARGET", "SMS_NOTIFICATION_CHANNEL"]}}}
---

# Google Messages Browser Skill

Automate SMS/RCS messaging via messages.google.com using the `browser` tool.

## Overview

Google Messages for Web allows you to send/receive texts from your Android phone via browser. This skill automates that interface.

**Requirements:**
- Android phone with Google Messages app
- Phone and computer on same network (for initial QR pairing)
- Browser profile with persistent session (use `openclaw` or your preferred profile)

**Note:** Replace `profile=openclaw` in examples with your preferred browser profile if different.

---

## Quick Reference

| Action | Command |
|--------|---------|
| Open pairing page | `browser action=open profile=openclaw targetUrl="https://messages.google.com/web/authentication"` |
| Check session | `browser action=snapshot profile=openclaw` — look for conversation list vs QR code |
| Take screenshot | `browser action=screenshot profile=openclaw` |

---

## Initial Setup (QR Pairing)

First-time setup requires scanning a QR code:

1. **Open Google Messages Web**
   ```
   browser action=open profile=openclaw targetUrl="https://messages.google.com/web/authentication"
   ```

2. **Screenshot the QR code** and share with user
   ```
   browser action=screenshot profile=openclaw
   ```

3. **User scans with phone:**
   - Open Google Messages app on Android
   - Tap ⋮ menu → "Device pairing" → "QR code scanner"
   - Scan the QR code

4. **Verify connection** — snapshot should show conversation list, not QR code

**Important:** Enable "Remember this computer" to persist the session.

---

## Sending Messages

1. **Navigate to conversations**
   ```
   browser action=navigate profile=openclaw targetUrl="https://messages.google.com/web/conversations"
   ```

2. **Take snapshot and find conversation**
   ```
   browser action=snapshot profile=openclaw
   ```
   Look for the contact in the conversation list, note the `ref`.

3. **Click conversation**
   ```
   browser action=act profile=openclaw request={"kind": "click", "ref": "<ref>"}
   ```

4. **Type message** (find textarea ref from snapshot)
   ```
   browser action=act profile=openclaw request={"kind": "type", "ref": "<input_ref>", "text": "Your message"}
   ```

5. **Click send** (find send button ref)
   ```
   browser action=act profile=openclaw request={"kind": "click", "ref": "<send_ref>"}
   ```

---

## Receiving Messages (Real-time Notifications)

This skill includes a webhook system for real-time incoming SMS notifications.

### Components

1. **sms-webhook-server.js** — receives notifications, forwards to OpenClaw chan

README.md

# Google Messages Skill for OpenClaw

Send and receive SMS/RCS messages via Google Messages web interface using browser automation.

## Features

- 📤 **Send SMS** — Compose and send text messages
- 📥 **Receive notifications** — Real-time alerts when new messages arrive
- 🔍 **Read conversations** — Query recent messages and conversation history
- 🔗 **OpenClaw integration** — Forward incoming SMS to Telegram, WhatsApp, or other channels

## Requirements

- [OpenClaw](https://github.com/openclaw/openclaw) with browser automation
- Android phone with Google Messages app
- Node.js 18+

## Quick Start

### 1. Install the skill

```bash
# Clone to your skills directory
git clone https://github.com/kesslerio/google-messages-openclaw-skill.git ~/.openclaw/skills/google-messages
```

### 2. Pair with your phone

Ask your OpenClaw agent:
```
"Open Google Messages and show me the QR code"
```

Or manually:
1. Go to https://messages.google.com/web
2. Open Google Messages on your phone
3. Tap ⋮ → Device pairing → QR code scanner
4. Scan the code

### 3. Enable notifications (optional)

Start the webhook server to receive incoming message alerts:

```bash
# Set your notification target
export SMS_NOTIFICATION_TARGET="telegram:YOUR_CHAT_ID"
export SMS_NOTIFICATION_CHANNEL="telegram"

# Start the server
node ~/.openclaw/skills/google-messages/sms-webhook-server.js
```

Then inject the observer into the browser tab. See `references/observer-injection.md` for details.

## Usage

### Sending messages

Ask your OpenClaw agent:
- "Text John that I'm running late"
- "Send an SMS to 555-1234 saying hello"
- "Message Mom on Google Messages"

### Checking messages

- "Check my texts"
- "Any new SMS messages?"
- "What did John text me?"

## Configuration

### Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `SMS_WEBHOOK_PORT` | Port for webhook server | `19888` |
| `SMS_NOTIFICATION_TARGET` | OpenClaw target (e.g., `telegram:123456`) | _(none)_ |
| `SMS_NOTIFICATION_CHANNEL` | Channel type | `telegram` |

### Systemd Service

For persistent notifications, install as a user service:

```bash
cp systemd/google-messages-webhook.service ~/.config/systemd/user/
# Edit service file: uncomment and set Environment= lines
systemctl --user daemon-reload
systemctl --user enable --now google-messages-webhook
```

## How It Works

1. **Browser automation** — Uses OpenClaw's browser tool to control messages.google.com
2. **MutationObserver** — Injects a script that watches the DOM for new messages
3. **Webhook** — When new messages arrive, POSTs to a local server
4. **Forwarding** — Webhook server uses `openclaw message send` to forward to your preferred channel

## Files

```
google-messages-skill/
├── SKILL.md                    # OpenClaw skill definition
├── sms-webhook-server.js       # Webhook server for notifications
├── sms-observer.js             # Browser injection script (full version)
├── references/
│   ├── snippets.md  

_meta.json

{
  "ownerId": "kn7fmw4ybcy50qzp1d2dvb1h517znaes",
  "slug": "google-messages",
  "version": "0.1.0",
  "publishedAt": 1769928644580
}

references/observer-injection.md

# Injecting the SMS Observer

The SMS observer watches for incoming messages and forwards them to the webhook server.

## Prerequisites

1. Webhook server running: `node <skill>/sms-webhook-server.js`
2. Google Messages page loaded and paired
3. Browser tab open at messages.google.com

## Injection Command

Use the browser tool to inject the observer script:

```
browser action=act profile=openclaw request={"kind": "evaluate", "fn": "<minified_observer>"}
```

## Minified Observer Script

Copy this entire script for the `fn` parameter:

```javascript
(function(){var WEBHOOK_URL='http://127.0.0.1:19888/sms-inbound',CHECK_INTERVAL=2000,lastSeenMessages=new Map,initialized=false,observerAttached=false;function logAlways(){console.log.apply(console,['[SMS Observer]'].concat(Array.prototype.slice.call(arguments)))}function getConversations(){var convos=[],items=document.querySelectorAll('mws-conversation-list-item,[data-e2e-conversation],[role="option"]');items.forEach(function(item,i){var nameEl=item.querySelector('h2,[data-e2e-conversation-name],.name'),previewEl=item.querySelector('[data-e2e-conversation-snippet],.snippet'),timeEl=item.querySelector('[data-e2e-conversation-timestamp],.timestamp,time'),preview='';if(previewEl)preview=previewEl.innerText||'';if(!preview){var divs=item.querySelectorAll('div');for(var j=0;j<divs.length;j++){var t=divs[j].innerText;if(t&&t.trim().length>5&&t.trim().length<200){preview=t.trim();break}}}convos.push({contact:nameEl?nameEl.innerText.trim():'Unknown',preview:preview.substring(0,150),time:timeEl?timeEl.innerText.trim():''})});return convos}function checkForNewMessages(){var conversations=getConversations();if(!initialized){conversations.forEach(function(c){lastSeenMessages.set(c.contact,{preview:c.preview,time:c.time})});initialized=true;logAlways('Initialized with',conversations.length,'conversations');return}conversations.forEach(function(c){var lastSeen=lastSeenMessages.get(c.contact);var isNew=!lastSeen||(lastSeen.preview!==c.preview&&c.preview);var isIncoming=c.preview&&!c.preview.startsWith('You:');if(isNew&&isIncoming){logAlways('New message:',c.contact,'-',c.preview.substring(0,50));fetch(WEBHOOK_URL,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({contact:c.contact,preview:c.preview,time:c.time,timestamp:Date.now()})}).then(function(r){if(!r.ok)logAlways('Webhook error',r.status)}).catch(function(e){logAlways('Webhook error:',e.message)})}lastSeenMessages.set(c.contact,{preview:c.preview,time:c.time})})}function setupObserver(){if(observerAttached)return;var target=document.querySelector('mws-conversations-list,[data-e2e-conversation-list],nav,main');if(!target){setTimeout(setupObserver,2000);return}var observer=new MutationObserver(function(){clearTimeout(window._smsTO);window._smsTO=setTimeout(checkForNewMessages,500)});observer.observe(target,{childList:true,subtree:true,characterData:true});observerAttached=true;logAlways('Observer attached to',target.tagName);check

references/snippets.md

# JavaScript Snippets for Google Messages

Use with `browser action=act request={"kind": "evaluate", "fn": "..."}`.

## Check Session Status

```javascript
(() => {
  if (document.querySelector('mw-qr-code, [data-e2e-qr-code]')) return 'QR_REQUIRED';
  if (document.querySelector('mws-conversations-list, [data-e2e-conversation-list]')) return 'SESSION_ACTIVE';
  if (document.querySelector('mat-spinner, .loading')) return 'LOADING';
  return 'UNKNOWN';
})()
```

## Get Recent Conversations

```javascript
(() => {
  const convos = document.querySelectorAll('mws-conversation-list-item');
  const results = [];
  
  for (let i = 0; i < Math.min(convos.length, 10); i++) {
    const name = convos[i].querySelector('h2')?.innerText || 'Unknown';
    const preview = convos[i].querySelector('[data-e2e-conversation-snippet]')?.innerText || '';
    const time = convos[i].querySelector('[data-e2e-conversation-timestamp]')?.innerText || '';
    
    results.push({ 
      name: name.trim(), 
      preview: preview.trim().substring(0, 50), 
      time: time.trim() 
    });
  }
  
  return JSON.stringify(results, null, 2);
})()
```

## Get Messages in Current Conversation

```javascript
(() => {
  const messages = document.querySelectorAll('mws-message-wrapper');
  const results = [];
  const start = Math.max(0, messages.length - 10);
  
  for (let i = start; i < messages.length; i++) {
    const msg = messages[i];
    const text = msg.querySelector('[data-e2e-message-text]')?.innerText || '';
    const time = msg.querySelector('[data-e2e-message-timestamp]')?.innerText || '';
    const isOutgoing = msg.classList.contains('outgoing');
    
    if (text) {
      results.push({ 
        text: text.trim(), 
        time: time.trim(), 
        direction: isOutgoing ? 'sent' : 'received' 
      });
    }
  }
  
  return JSON.stringify(results, null, 2);
})()
```

## Open Conversation by Contact Name

```javascript
(async () => {
  const CONTACT = 'John Doe';  // Change this
  const sleep = ms => new Promise(r => setTimeout(r, ms));
  
  const convos = document.querySelectorAll('mws-conversation-list-item');
  
  for (const convo of convos) {
    const name = convo.querySelector('h2')?.innerText || '';
    if (name.toLowerCase().includes(CONTACT.toLowerCase())) {
      convo.click();
      await sleep(500);
      return 'OPENED: ' + name;
    }
  }
  
  return 'NOT_FOUND: ' + CONTACT;
})()
```
Github ReposUpdated 3h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/kesslerio/skills/google-messages",
      "sourceUrl": "https://clawhub.ai/kesslerio/skills/google-messages",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-09T08:10:08.809Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-kesslerio-google-messages/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-kesslerio-google-messages/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-09T08:10:08.809Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "3.4K downloads",
      "href": "https://clawhub.ai/kesslerio/google-messages",
      "sourceUrl": "https://clawhub.ai/kesslerio/google-messages",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-09T08:10:08.809Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "0.1.0",
      "href": "https://clawhub.ai/kesslerio/google-messages",
      "sourceUrl": "https://clawhub.ai/kesslerio/google-messages",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-02-01T06:50:44.580Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-kesslerio-google-messages/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-kesslerio-google-messages/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 0.1.0",
      "description": "Initial release of google-messages-openclaw-skill. - Enables sending and receiving SMS/RCS via Google Messages web interface. - Automates message workflow: pairing, sending, and receiving texts using the browser tool. - Provides real-time incoming SMS notifications via webhook forwarding. - Includes setup instructions for QR pairing, persistent session, and systemd service. - Details command references, selectors, troubleshooting, and security practices.",
      "href": "https://clawhub.ai/kesslerio/google-messages",
      "sourceUrl": "https://clawhub.ai/kesslerio/google-messages",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-02-01T06:50:44.580Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 9, 2026.

Sponsored

Ads related to Google Messages and adjacent AI workflows.