feat: replace clawdis skills with tools

This commit is contained in:
Peter Steinberger
2025-12-22 23:40:57 +00:00
parent 823195a122
commit c0c20ebf3e
11 changed files with 1524 additions and 453 deletions

View File

@@ -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.

View File

@@ -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).

View File

@@ -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.

View File

@@ -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 (dont 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 Gatewayowned; Tailnet details only matter for reaching the Gateway:
- On LAN, the Gateway advertises a Bridge via Bonjour.
- Crossnetwork, 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.

View File

@@ -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.
## Multicomputer 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.
## Lowlevel 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"}'
```