feat: replace clawdis skills with tools
This commit is contained in:
@@ -1,33 +0,0 @@
|
||||
---
|
||||
name: clawdis-browser
|
||||
description: Control clawd's dedicated browser (tabs, snapshots, actions) via the clawdis CLI.
|
||||
homepage: https://clawdis.ai
|
||||
metadata: {"clawdis":{"emoji":"🧭","requires":{"config":["browser.enabled"]}}}
|
||||
---
|
||||
|
||||
# Clawdis Browser
|
||||
|
||||
Use the clawd-managed Chrome/Chromium instance through `clawdis browser`.
|
||||
Only available when `browser.enabled` is true.
|
||||
|
||||
Core flow
|
||||
- `clawdis browser status`
|
||||
- `clawdis browser start` (if stopped)
|
||||
- `clawdis browser tabs`
|
||||
- `clawdis browser open <url>`
|
||||
|
||||
Inspection
|
||||
- `clawdis browser snapshot --format ai|aria [--limit N]`
|
||||
- `clawdis browser screenshot [--full-page]`
|
||||
|
||||
Actions
|
||||
- `clawdis browser click <ref>`
|
||||
- `clawdis browser type <ref> "text" --submit`
|
||||
- `clawdis browser press Enter`
|
||||
- `clawdis browser navigate <url>`
|
||||
- `clawdis browser wait --text "Done"`
|
||||
|
||||
Notes
|
||||
- This is a dedicated profile; do not use the user's personal browser.
|
||||
- If disabled, ask the user to enable `browser.enabled` in `~/.clawdis/clawdis.json`.
|
||||
- Canvas UI is full-screen with native overlays. Keep critical controls out of the top-left/top-right/bottom edges (leave explicit gutters ~28px top, ~16px sides, ~20px bottom). Do not rely on safe-area insets.
|
||||
@@ -1,49 +0,0 @@
|
||||
---
|
||||
name: clawdis-canvas
|
||||
description: Drive the Clawdis Canvas panel (present, eval, snapshot, A2UI) via the clawdis CLI, including gateway-hosted A2UI surfaces and action bridging.
|
||||
homepage: https://clawdis.ai
|
||||
metadata: {"clawdis":{"emoji":"🎨","always":true}}
|
||||
---
|
||||
|
||||
# Clawdis Canvas
|
||||
|
||||
Use Canvas to render HTML/JS or A2UI surfaces and capture snapshots.
|
||||
|
||||
Core commands
|
||||
- Present: `clawdis canvas present [--node <id>] [--target <path>]`
|
||||
- Hide: `clawdis canvas hide`
|
||||
- Eval JS: `clawdis canvas eval --js "..."`
|
||||
- Snapshot: `clawdis canvas snapshot`
|
||||
|
||||
A2UI
|
||||
- Push JSONL: `clawdis canvas a2ui push --jsonl /path/to/file.jsonl`
|
||||
- Reset: `clawdis canvas a2ui reset`
|
||||
|
||||
Notes
|
||||
- Keep HTML under `~/clawd/canvas` when targeting remote nodes.
|
||||
- Use snapshot after renders to verify UI state.
|
||||
- Treat A2UI as gateway-hosted at `http(s)://<gateway-host>:18789/__clawdis__/a2ui/`.
|
||||
- Rely on `canvas a2ui push/reset` to auto-navigate the Canvas to the gateway-hosted A2UI page.
|
||||
- Expect A2UI to fail if the Gateway does not advertise `canvasHostUrl` or is unreachable:
|
||||
- `A2UI_HOST_NOT_CONFIGURED`
|
||||
- `A2UI_HOST_UNAVAILABLE`
|
||||
|
||||
A2UI quick flow
|
||||
1. Ensure the Gateway is running and reachable from the node.
|
||||
2. Build JSONL with **v0.8** server→client messages (`beginRendering`, `surfaceUpdate`, `dataModelUpdate`, `deleteSurface`).
|
||||
- Do not use v0.9 `createSurface` (unsupported).
|
||||
3. Push JSONL and (optionally) snapshot the result.
|
||||
|
||||
Example JSONL (v0.8)
|
||||
```bash
|
||||
cat > /tmp/a2ui-v0.8.jsonl <<'EOF'
|
||||
{"surfaceUpdate":{"surfaceId":"main","components":[{"id":"root","component":{"Column":{"children":{"explicitList":["title","content"]}}}},{"id":"title","component":{"Text":{"text":{"literalString":"A2UI (v0.8)"},"usageHint":"h1"}}},{"id":"content","component":{"Text":{"text":{"literalString":"If you can read this, A2UI is live."},"usageHint":"body"}}}]}}
|
||||
{"beginRendering":{"surfaceId":"main","root":"root"}}
|
||||
EOF
|
||||
|
||||
clawdis canvas a2ui push --jsonl /tmp/a2ui-v0.8.jsonl --node <id>
|
||||
```
|
||||
|
||||
Action callbacks (A2UI → agent)
|
||||
- A2UI user actions (buttons, etc.) are bridged from the WebView back to the node via `clawdisCanvasA2UIAction`.
|
||||
- Handle them on the agent side as `CANVAS_A2UI` messages (node → gateway → agent).
|
||||
@@ -1,82 +0,0 @@
|
||||
---
|
||||
name: clawdis-cron
|
||||
description: Schedule jobs and wakeups via Clawdis Gateway cron.* RPC.
|
||||
homepage: https://clawdis.ai
|
||||
metadata: {"clawdis":{"emoji":"⏰","always":true}}
|
||||
---
|
||||
|
||||
# Clawdis Cron
|
||||
|
||||
Cron runs inside the Gateway. Jobs live in `~/.clawdis/cron/jobs.json` and run logs in `~/.clawdis/cron/runs/<jobId>.jsonl`.
|
||||
|
||||
Enable/disable
|
||||
- Enabled by default.
|
||||
- Disable with config `cron.enabled=false` or env `CLAWDIS_SKIP_CRON=1`.
|
||||
- Config: `cron.store`, `cron.maxConcurrentRuns`.
|
||||
|
||||
Job fields
|
||||
- `name` is required (non-empty).
|
||||
- `description` is optional.
|
||||
|
||||
RPC methods (Gateway WS)
|
||||
- `cron.list`, `cron.status`, `cron.add`, `cron.update`, `cron.remove`, `cron.run`, `cron.runs`
|
||||
- `wake` (enqueue system event + optionally trigger immediate heartbeat)
|
||||
|
||||
Payload rules
|
||||
- `sessionTarget: "main"` requires `payload.kind: "systemEvent"`.
|
||||
- `sessionTarget: "isolated"` requires `payload.kind: "agentTurn"`.
|
||||
|
||||
Examples
|
||||
|
||||
One-shot reminder (main session, immediate wake):
|
||||
```json
|
||||
{
|
||||
"method": "cron.add",
|
||||
"params": {
|
||||
"name": "remind-me",
|
||||
"enabled": true,
|
||||
"schedule": { "kind": "at", "atMs": 1734715200000 },
|
||||
"sessionTarget": "main",
|
||||
"wakeMode": "now",
|
||||
"payload": { "kind": "systemEvent", "text": "Remind me in 20 minutes." }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Recurring hourly check (isolated job, no external delivery):
|
||||
```json
|
||||
{
|
||||
"method": "cron.add",
|
||||
"params": {
|
||||
"name": "hourly-check",
|
||||
"enabled": true,
|
||||
"schedule": { "kind": "every", "everyMs": 3600000 },
|
||||
"sessionTarget": "isolated",
|
||||
"wakeMode": "now",
|
||||
"payload": { "kind": "agentTurn", "message": "Check battery; report only if < 20%.", "deliver": false },
|
||||
"isolation": { "postToMainPrefix": "Cron" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Cron expression (weekday 07:30):
|
||||
```json
|
||||
{
|
||||
"method": "cron.add",
|
||||
"params": {
|
||||
"name": "weekday-wakeup",
|
||||
"enabled": true,
|
||||
"schedule": { "kind": "cron", "expr": "30 7 * * 1-5", "tz": "America/Los_Angeles" },
|
||||
"sessionTarget": "isolated",
|
||||
"wakeMode": "now",
|
||||
"payload": { "kind": "agentTurn", "message": "Wake me up and start music.", "deliver": true, "channel": "whatsapp" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Run history
|
||||
- `cron.runs` returns recent JSONL entries for a job.
|
||||
|
||||
Notes
|
||||
- `wakeMode: "now"` triggers an immediate heartbeat for main jobs.
|
||||
- Isolated jobs run in `cron:<jobId>` sessions and post a summary back to main.
|
||||
@@ -1,91 +0,0 @@
|
||||
---
|
||||
name: clawdis-nodes
|
||||
description: Discover, interpret, and target Clawdis nodes (paired devices) via the Gateway/CLI. Use when an agent must find available nodes, choose the best target machine, or reason about presence vs node availability (Tailnet/Tailscale optional).
|
||||
homepage: https://clawdis.ai
|
||||
metadata: {"clawdis":{"emoji":"🛰️"}}
|
||||
---
|
||||
|
||||
# Clawdis Nodes
|
||||
|
||||
Use the node system to target specific devices (macOS node mode, iOS, Android) for canvas/camera/screen/system actions. Use presence to infer which **user machine** is active, then pick the matching node.
|
||||
|
||||
## Quick start
|
||||
|
||||
List known nodes and whether they are paired/connected:
|
||||
```bash
|
||||
clawdis nodes status
|
||||
```
|
||||
|
||||
Inspect a specific node (commands, caps, permissions):
|
||||
```bash
|
||||
clawdis nodes describe --node <idOrNameOrIp>
|
||||
```
|
||||
|
||||
## Node discovery workflow (agent)
|
||||
|
||||
1) **List nodes** with `clawdis nodes status`.
|
||||
2) **Choose a target**:
|
||||
- Prefer `connected` nodes with the capabilities you need.
|
||||
- Use `perms` (permissions map) to avoid asking for actions that will fail.
|
||||
3) **Confirm commands** with `clawdis nodes describe --node …`.
|
||||
4) **Invoke actions** via `clawdis nodes …` (camera, canvas, screen, system).
|
||||
|
||||
If no nodes are connected:
|
||||
- Check pairing: `clawdis nodes pending` / `clawdis nodes list`
|
||||
- Ask the user to open/foreground the node app if the action requires it (canvas/camera/screen on iOS/Android).
|
||||
|
||||
## Presence vs nodes (don’t confuse them)
|
||||
|
||||
**Presence** shows Gateway + connected clients (mac app, WebChat, CLI).
|
||||
**Nodes** are paired devices that expose commands.
|
||||
|
||||
Use presence to infer **where the user is active**, then map that to a node:
|
||||
|
||||
```bash
|
||||
clawdis gateway call system-presence
|
||||
```
|
||||
|
||||
Heuristics:
|
||||
- Pick the presence entry with the smallest `lastInputSeconds` (most active).
|
||||
- Match presence `host` / `deviceFamily` to a node `displayName` / `deviceFamily`.
|
||||
- If multiple matches, ask for clarification or use `nodes describe` to choose.
|
||||
|
||||
Note: CLI connections (`client.mode=cli`) do **not** show up in presence.
|
||||
|
||||
## Tailnet / Tailscale (optional context)
|
||||
|
||||
Node discovery is Gateway‑owned; Tailnet details only matter for reaching the Gateway:
|
||||
- On LAN, the Gateway advertises a Bridge via Bonjour.
|
||||
- Cross‑network, prefer Tailnet MagicDNS or Tailnet IP to reach the Gateway.
|
||||
- Once connected, always target nodes by id/name/IP via the Gateway (not direct).
|
||||
|
||||
## Pairing & approvals
|
||||
|
||||
List pairing requests:
|
||||
```bash
|
||||
clawdis nodes pending
|
||||
```
|
||||
|
||||
Approve/reject:
|
||||
```bash
|
||||
clawdis nodes approve <requestId>
|
||||
clawdis nodes reject <requestId>
|
||||
```
|
||||
|
||||
## Typical agent usages
|
||||
|
||||
Send a notification to a specific Mac node:
|
||||
```bash
|
||||
clawdis nodes notify --node <idOrNameOrIp> --title "Ping" --body "Gateway ready"
|
||||
```
|
||||
|
||||
Capture a node canvas snapshot:
|
||||
```bash
|
||||
clawdis nodes canvas snapshot --node <idOrNameOrIp> --format png
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- `NODE_BACKGROUND_UNAVAILABLE`: the node app must be foregrounded (iOS/Android).
|
||||
- Missing permissions in `nodes status`: ask the user to grant permissions in the node app.
|
||||
- No connected nodes: ensure the Gateway is reachable; check tailnet/SSH config if remote.
|
||||
@@ -1,60 +0,0 @@
|
||||
---
|
||||
name: clawdis-notify
|
||||
description: Send system notifications to specific Clawdis nodes (macOS computers) via the Gateway and CLI. Use when you need to alert a person or confirm a remote action on a particular machine, or when an agent must push a notification to another computer.
|
||||
homepage: https://clawdis.ai
|
||||
metadata: {"clawdis":{"emoji":"🔔"}}
|
||||
---
|
||||
|
||||
# Clawdis Notify
|
||||
|
||||
## Overview
|
||||
|
||||
Send local notifications to a specific Clawdis node (currently macOS only) via the Gateway CLI.
|
||||
|
||||
## Quick start
|
||||
|
||||
1) Find a target node.
|
||||
```bash
|
||||
clawdis nodes status
|
||||
clawdis nodes describe --node <idOrNameOrIp>
|
||||
```
|
||||
|
||||
2) Send the notification.
|
||||
```bash
|
||||
clawdis nodes notify --node <idOrNameOrIp> --title "Ping" --body "Gateway ready"
|
||||
```
|
||||
|
||||
## Core command
|
||||
|
||||
`clawdis nodes notify --node <idOrNameOrIp> [--title <text>] [--body <text>] [--sound <name>] [--priority <passive|active|timeSensitive>] [--delivery <system|overlay|auto>]`
|
||||
|
||||
Notes:
|
||||
- Provide at least one of `--title` or `--body`.
|
||||
- `--delivery` defaults to `system`.
|
||||
- Only macOS nodes expose `system.notify` right now.
|
||||
- Notification permission must be granted in the macOS app or the command fails.
|
||||
|
||||
## Multi‑computer usage
|
||||
|
||||
Pick a specific node by id/name/IP, or iterate across nodes:
|
||||
|
||||
```bash
|
||||
for node in $(clawdis nodes status --json | jq -r '.nodes[].id'); do
|
||||
clawdis nodes notify --node "$node" --title "Heads up" --body "Maintenance in 5 minutes"
|
||||
done
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- `nodes notify failed: ...` usually means the node is offline, not paired, or missing permission.
|
||||
- If the Gateway is down or unreachable, notifications cannot be delivered.
|
||||
|
||||
## Low‑level fallback (rare)
|
||||
|
||||
If needed, use raw invoke:
|
||||
```bash
|
||||
clawdis nodes invoke \
|
||||
--node <idOrNameOrIp> \
|
||||
--command system.notify \
|
||||
--params '{"title":"Ping","body":"Hello","sound":"Glass","priority":"active","delivery":"system"}'
|
||||
```
|
||||
Reference in New Issue
Block a user