docs: refine skills

This commit is contained in:
Peter Steinberger
2025-12-20 12:54:15 +01:00
parent 0e2993a6c8
commit 2d8e11b78b
24 changed files with 363 additions and 189 deletions

View File

@@ -1,15 +0,0 @@
---
name: agent-tools
description: Utility toolkit for automations and MCP-friendly scripts.
metadata: {"clawdis":{"requires":{"bins":["agent-tools"]}}}
---
# agent-tools
Use `agent-tools` for helper utilities and automations. Start with:
```bash
agent-tools --help
```
Prefer small, composable commands.

View File

@@ -1,19 +1,24 @@
---
name: bird
description: X/Twitter CLI to tweet, reply, read threads, and search.
description: X/Twitter CLI for reading, searching, and posting via cookies or Sweetistics.
metadata: {"clawdis":{"requires":{"bins":["bird"]}}}
---
# bird
Use `bird` to interact with X/Twitter.
Use `bird` to read/search X and post tweets/replies.
- Tweet: `bird tweet "..."`
- Reply: `bird reply <tweet-id> "..."`
- Read: `bird read <tweet-id>`
- Thread: `bird thread <tweet-id>`
- Search: `bird search "query"`
- Mentions: `bird mentions`
- Whoami: `bird whoami`
Quick start
- `bird whoami`
- `bird read <url-or-id>`
- `bird thread <url-or-id>`
- `bird search "query" -n 5`
Confirm before posting publicly.
Posting (confirm with user first)
- `bird tweet "text"`
- `bird reply <id-or-url> "text"`
Auth sources
- Browser cookies (default: Firefox/Chrome)
- Sweetistics API: set `SWEETISTICS_API_KEY` or use `--engine sweetistics`
- Check sources: `bird check`

View File

@@ -1,15 +1,26 @@
---
name: blucli
description: Control BluOS players from the CLI.
metadata: {"clawdis":{"requires":{"bins":["blucli"]}}}
description: BluOS CLI (blu) for discovery, playback, grouping, and volume.
metadata: {"clawdis":{"requires":{"bins":["blu"]}}}
---
# blucli
# blucli (blu)
Use `blucli` to control BluOS players. Start with:
Use `blu` to control Bluesound/NAD players.
```bash
blucli --help
```
Quick start
- `blu devices` (pick target)
- `blu --device <id> status`
- `blu play|pause|stop`
- `blu volume set 15`
Confirm target player before changing playback.
Target selection (in priority order)
- `--device <id|name|alias>`
- `BLU_DEVICE`
- config default (if set)
Common tasks
- Grouping: `blu group status|add|remove`
- TuneIn search/play: `blu tunein search "query"`, `blu tunein play "query"`
Prefer `--json` for scripts. Confirm the target device before changing playback.

View File

@@ -0,0 +1,21 @@
---
name: brave-search
description: Headless web search and content extraction via Brave Search scripts.
metadata: {"clawdis":{"requires":{"bins":["search.js","content.js"]}}}
---
# brave-search
Use `search.js` and `content.js` from `~/agent-tools/brave-search` (PATH).
Search
- `search.js "query"`
- `search.js "query" -n 10`
- `search.js "query" --content`
Extract content
- `content.js https://example.com/article`
Notes
- No browser required; results come from Brave Search HTML.
- If commands are missing, add `~/agent-tools/brave-search` to PATH and install deps.

View File

@@ -6,10 +6,19 @@ metadata: {"clawdis":{"requires":{"bins":["camsnap"]}}}
# camsnap
Use `camsnap` to grab frames or clips from configured cameras. Start with:
Use `camsnap` to grab snapshots, clips, or motion events from configured cameras.
```bash
camsnap --help
```
Setup
- Config file: `~/.config/camsnap/config.yaml`
- Add camera: `camsnap add --name kitchen --host 192.168.0.10 --user user --pass pass`
Prefer small test captures before longer clips.
Common commands
- Discover: `camsnap discover --info`
- Snapshot: `camsnap snap kitchen --out shot.jpg`
- Clip: `camsnap clip kitchen --dur 5s --out clip.mp4`
- Motion watch: `camsnap watch kitchen --threshold 0.2 --action '...'`
- Doctor: `camsnap doctor --probe`
Notes
- Requires `ffmpeg` on PATH.
- Prefer a short test capture before longer clips.

View File

@@ -6,13 +6,26 @@ metadata: {"clawdis":{"requires":{"config":["browser.enabled"]}}}
# Clawdis Browser
Use the clawd-managed Chrome/Chromium instance through `clawdis browser` commands.
Use the clawd-managed Chrome/Chromium instance through `clawdis browser`.
Only available when `browser.enabled` is true.
## Common commands
Core flow
- `clawdis browser status`
- `clawdis browser start` (if stopped)
- `clawdis browser tabs`
- `clawdis browser open <url>`
- Status/start/stop: `clawdis browser status|start|stop`
- Tabs: `clawdis browser tabs|open <url>|focus <id>|close <id>`
- Snapshot/screenshot: `clawdis browser snapshot --format ai|aria`, `clawdis browser screenshot [--full-page]`
- Actions: `clawdis browser click|type|hover|drag|select|upload|press|wait|navigate|back|evaluate|run`
Inspection
- `clawdis browser snapshot --format ai|aria [--limit N]`
- `clawdis browser screenshot [--full-page]`
If disabled, ask the user to enable `browser.enabled` in `~/.clawdis/clawdis.json`.
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`.

View File

@@ -8,15 +8,16 @@ metadata: {"clawdis":{"always":true}}
Use Canvas to render HTML/JS or A2UI surfaces and capture snapshots.
## Core commands
- Show/hide: `clawdis canvas present [--node <id>] [--target <path>]`, `clawdis canvas hide`
- JS eval: `clawdis canvas eval --js "..."`
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
A2UI
- Push JSONL: `clawdis canvas a2ui push --jsonl /path/to/file.jsonl`
- Reset: `clawdis canvas a2ui reset`
If targeting remote nodes, use the canvas host (LAN/tailnet) and keep HTML under `~/clawd/canvas`.
Notes
- Keep HTML under `~/clawd/canvas` when targeting remote nodes.
- Use snapshot after renders to verify UI state.

View File

@@ -1,15 +1,28 @@
---
name: eightctl
description: Control sleep workflows with eightctl.
description: Control Eight Sleep pods (status, temperature, alarms, schedules).
metadata: {"clawdis":{"requires":{"bins":["eightctl"]}}}
---
# eightctl
Use `eightctl` for sleep/wake automation. Start with:
Use `eightctl` for Eight Sleep pod control. Requires auth.
```bash
eightctl --help
```
Auth
- Config: `~/.config/eightctl/config.yaml`
- Env: `EIGHTCTL_EMAIL`, `EIGHTCTL_PASSWORD`
Confirm before scheduling disruptive actions.
Quick start
- `eightctl status`
- `eightctl on|off`
- `eightctl temp 20`
Common tasks
- Alarms: `eightctl alarm list|create|dismiss`
- Schedules: `eightctl schedule list|create|update`
- Audio: `eightctl audio state|play|pause`
- Base: `eightctl base info|angle`
Notes
- API is unofficial and rate-limited; avoid repeated logins.
- Confirm before changing temperature or alarms.

View File

@@ -1,15 +0,0 @@
---
name: gemini-cli
description: Use the Gemini CLI for fast Q&A and generation.
metadata: {"clawdis":{"requires":{"bins":["gemini"]}}}
---
# Gemini CLI
Use `gemini` for quick prompts. Start with:
```bash
gemini --help
```
If auth is required, set the provider's API key in the environment.

View File

@@ -1,21 +1,22 @@
---
name: gemini
description: Use Gemini CLI for coding assistance and Google search lookups.
description: Gemini CLI for one-shot Q&A, summaries, and generation.
metadata: {"clawdis":{"requires":{"bins":["gemini"]}}}
---
# Gemini
# Gemini CLI
Use `gemini` in **one-shot mode** via the positional prompt (avoid interactive mode).
Use Gemini in one-shot mode with a positional prompt (avoid interactive mode).
Good for:
- Coding agent Q&A and fixes.
- Google search style lookups (ask for sources, dates, and summaries).
Quick start
- `gemini "Answer this question..."`
- `gemini --model <name> "Prompt..."`
- `gemini --output-format json "Return JSON"`
Examples:
Extensions
- List: `gemini --list-extensions`
- Manage: `gemini extensions <command>`
```bash
gemini "Search Google for the latest X. Return top 5 results with title, URL, date, and 1-line summary."
```
If you need structured output, add `--output-format json`.
Notes
- If auth is required, run `gemini` once interactively and follow the login flow.
- Avoid `--yolo` for safety.

View File

@@ -1,15 +1,25 @@
---
name: gog
description: Google Suite CLI for Gmail, Calendar, Drive, and Contacts.
description: Google Workspace CLI for Gmail, Calendar, Drive, and Contacts.
metadata: {"clawdis":{"requires":{"bins":["gog"]}}}
---
# gog
Use `gog` for Gmail/Calendar/Drive/Contacts. Start with:
Use `gog` for Gmail/Calendar/Drive/Contacts. Requires OAuth setup.
```bash
gog --help
```
Setup (once)
- `gog auth credentials /path/to/client_secret.json`
- `gog auth add you@gmail.com --services gmail,calendar,drive,contacts`
- `gog auth list`
Ask for confirmation before sending emails or creating events.
Common commands
- Gmail search: `gog gmail search 'newer_than:7d' --max 10`
- Gmail send: `gog gmail send --to a@b.com --subject "Hi" --body "Hello"`
- Calendar: `gog calendar events <calendarId> --from <iso> --to <iso>`
- Drive: `gog drive search "query" --max 10`
- Contacts: `gog contacts list --max 20`
Notes
- Set `GOG_ACCOUNT=you@gmail.com` to avoid repeating `--account`.
- Confirm before sending mail or creating events.

View File

@@ -1,15 +1,24 @@
---
name: imsg
description: Send or read iMessage/SMS using the imsg CLI.
description: iMessage/SMS CLI for listing chats, history, watch, and sending.
metadata: {"clawdis":{"requires":{"bins":["imsg"]}}}
---
# imsg
Use `imsg` for iMessage/SMS. Start with:
Use `imsg` to read and send Messages.app iMessage/SMS on macOS.
```bash
imsg --help
```
Requirements
- Messages.app signed in
- Full Disk Access for your terminal
- Automation permission to control Messages.app (for sending)
Confirm recipients and message text before sending.
Common commands
- List chats: `imsg chats --limit 10`
- History: `imsg history --chat-id 1 --limit 20 --attachments --json`
- Watch: `imsg watch --chat-id 1 --attachments`
- Send: `imsg send --to "+14155551212" --text "hi" --file /path/pic.jpg`
Notes
- `--service imessage|sms|auto` controls delivery.
- Confirm recipient + message before sending.

View File

@@ -1,15 +1,26 @@
---
name: mcporter
description: Manage MCP servers (install, list, sync) with mcporter.
description: Manage and call MCP servers (list, call, auth, daemon).
metadata: {"clawdis":{"requires":{"bins":["mcporter"]}}}
---
# mcporter
Use the `mcporter` CLI to install, list, and sync MCP servers. Start with:
Use `mcporter` to list MCP servers and call tools.
```bash
mcporter --help
```
Quick start
- `mcporter list`
- `mcporter list <server> --schema`
- `mcporter call <server.tool> arg=value`
If the tool is missing, ask the user to install it from the Tools tab.
Auth + lifecycle
- OAuth: `mcporter auth <server>`
- Daemon: `mcporter daemon status|start|stop`
Ad-hoc servers
- HTTP: `mcporter list --http-url https://host/mcp --name <name>`
- STDIO: `mcporter call --stdio "bun run ./server.ts" --name <name>`
Notes
- Config sources: `~/.mcporter/mcporter.json[c]` and `config/mcporter.json`.
- Prefer `--json` when you need machine-readable output.

View File

@@ -1,42 +1,28 @@
---
name: nano-banana-pro
description: Generate or edit images via Gemini 3 Pro Image (Nano Banana Pro).
metadata: {"clawdis":{"requires":{"env":["GEMINI_API_KEY"]},"primaryEnv":"GEMINI_API_KEY"}}
metadata: {"clawdis":{"requires":{"bins":["uv"],"env":["GEMINI_API_KEY"]},"primaryEnv":"GEMINI_API_KEY"}}
---
# Nano Banana Pro Image Generation & Editing
# Nano Banana Pro (Gemini 3 Pro Image)
Generate new images or edit existing ones using Google's Nano Banana Pro API.
Use the bundled script to generate or edit images.
## Usage (always run from the current working directory)
**Generate new image:**
Generate
```bash
uv run {baseDir}/scripts/generate_image.py --prompt "your image description" --filename "output-name.png" [--resolution 1K|2K|4K]
uv run {baseDir}/scripts/generate_image.py --prompt "your image description" --filename "output.png" --resolution 1K
```
**Edit existing image:**
Edit
```bash
uv run {baseDir}/scripts/generate_image.py --prompt "editing instructions" --filename "output-name.png" --input-image "path/to/input.png" [--resolution 1K|2K|4K]
uv run {baseDir}/scripts/generate_image.py --prompt "edit instructions" --filename "output.png" --input-image "/path/in.png" --resolution 2K
```
## API key
API key
- `GEMINI_API_KEY` env var
- Or set `skills."nano-banana-pro".apiKey` / `skills."nano-banana-pro".env.GEMINI_API_KEY` in `~/.clawdis/clawdis.json`
The script uses:
1) `GEMINI_API_KEY` environment variable
2) `--api-key` argument (optional)
If the key is missing, check `skills."nano-banana-pro".apiKey` or `skills."nano-banana-pro".env.GEMINI_API_KEY` in `~/.clawdis/clawdis.json`, or ask the user to provide one.
## Resolution
- `1K` (default), `2K`, `4K`
- Map user intent: low/1080 → `1K`, medium/2K → `2K`, high/ultra/4K → `4K`
## Filename
Use `{timestamp}-{short-name}.png` (yyyy-mm-dd-hh-mm-ss, lowercase, hyphens).
## Output
Do **not** read the image back; just report the saved path.
Notes
- Resolutions: `1K` (default), `2K`, `4K`.
- Use timestamps in filenames: `yyyy-mm-dd-hh-mm-ss-name.png`.
- Do not read the image back; report the saved path only.

View File

@@ -0,0 +1,36 @@
---
name: openai-image-gen
description: Batch-generate images via OpenAI Images API. Random prompt sampler + `index.html` gallery.
metadata: {"clawdis":{"requires":{"bins":["python3"],"env":["OPENAI_API_KEY"]},"primaryEnv":"OPENAI_API_KEY"}}
---
# OpenAI Image Gen
Generate a handful of "random but structured" prompts and render them via OpenAI Images API.
## Setup
- Needs env: `OPENAI_API_KEY`
## Run
From any directory (outputs to `~/Projects/tmp/...` when present; else `./tmp/...`):
```bash
python3 ~/Projects/agent-scripts/skills/openai-image-gen/scripts/gen.py
open ~/Projects/tmp/openai-image-gen-*/index.html
```
Useful flags:
```bash
python3 ~/Projects/agent-scripts/skills/openai-image-gen/scripts/gen.py --count 16 --model gpt-image-1.5
python3 ~/Projects/agent-scripts/skills/openai-image-gen/scripts/gen.py --prompt "ultra-detailed studio photo of a lobster astronaut" --count 4
python3 ~/Projects/agent-scripts/skills/openai-image-gen/scripts/gen.py --size 1536x1024 --quality high --out-dir ./out/images
```
## Output
- `*.png` images
- `prompts.json` (prompt to file mapping)
- `index.html` (thumbnail gallery)

View File

@@ -1,15 +1,18 @@
---
name: openai-whisper
description: Local speech-to-text using OpenAI Whisper CLI.
description: Local speech-to-text with the Whisper CLI (no API key).
metadata: {"clawdis":{"requires":{"bins":["whisper"]}}}
---
# OpenAI Whisper (CLI)
# Whisper (CLI)
Use `whisper` for local speech-to-text. Start with:
Use `whisper` to transcribe audio locally.
```bash
whisper --help
```
Quick start
- `whisper /path/audio.mp3 --model medium --output_format txt --output_dir .`
- `whisper /path/audio.m4a --task translate --output_format srt`
Prefer small files first; keep outputs in the current working directory.
Notes
- Models download to `~/.cache/whisper` on first run.
- `--model` defaults to `turbo` on this install.
- Use smaller models for speed, larger for accuracy.

View File

@@ -1,15 +1,29 @@
---
name: openhue
description: Control Philips Hue lights and scenes via CLI.
description: Control Philips Hue lights/scenes via the OpenHue CLI.
metadata: {"clawdis":{"requires":{"bins":["openhue"]}}}
---
# OpenHue CLI
Use `openhue` to control Hue lights/scenes. Start with:
Use `openhue` to control Hue lights and scenes via a Hue Bridge.
```bash
openhue --help
```
Setup
- Discover bridges: `openhue discover`
- Guided setup: `openhue setup`
Prefer listing lights/scenes before toggling.
Read
- `openhue get light --json`
- `openhue get room --json`
- `openhue get scene --json`
Write
- Turn on: `openhue set light <id-or-name> --on`
- Turn off: `openhue set light <id-or-name> --off`
- Brightness: `openhue set light <id> --on --brightness 50`
- Color: `openhue set light <id> --on --rgb #3399FF`
- Scene: `openhue set scene <scene-id>`
Notes
- You may need to press the Hue Bridge button during setup.
- Use `--room "Room Name"` when light names are ambiguous.

View File

@@ -6,10 +6,17 @@ metadata: {"clawdis":{"requires":{"bins":["oracle"]}}}
# oracle
Use `oracle` to run a second-model review or debugging pass.
Use `oracle` to bundle prompts + files for a second model.
```bash
oracle --help
```
Quick start
- `oracle --help`
- `oracle -p "Review this" --file "src/**/*.ts"`
- `oracle --render --copy -p "Summarize" --file docs/README.md`
If the binary is missing, use `npx -y @steipete/oracle --help`.
Engines
- API: requires `OPENAI_API_KEY` (plus `GEMINI_API_KEY` / `ANTHROPIC_API_KEY` for those models)
- Browser: `oracle --engine browser ...` (uses logged-in Chrome)
Notes
- If missing, run `npx -y @steipete/oracle --help`.
- For long runs, add `--wait` to block until done.

View File

@@ -1,20 +1,21 @@
---
name: peekaboo
description: Capture and inspect macOS UI via the Peekaboo CLI.
description: Capture and automate macOS UI with the Peekaboo CLI.
metadata: {"clawdis":{"requires":{"bins":["peekaboo"]}}}
---
# Peekaboo
Fast UI capture and inspection.
## Common commands
Use `peekaboo` to capture, inspect, and interact with macOS UI.
Core commands
- Capture: `peekaboo capture`
- Inspect: `peekaboo see`
- Click: `peekaboo click`
- Inspect: `peekaboo see --annotate`
- Click: `peekaboo click --target "..."`
- List windows: `peekaboo list`
- Tool info: `peekaboo tools`
- Permissions: `peekaboo permissions status`
Requires Screen Recording + Accessibility permissions.
Notes
- Requires Screen Recording + Accessibility permissions.
- Use `peekaboo see --annotate` to identify targets before clicking.

View File

@@ -1,15 +1,25 @@
---
name: qmd
description: Search notes/content with qmd (BM25 + vectors + rerank).
description: Local search/indexing CLI (BM25 + vectors + rerank) with MCP mode.
metadata: {"clawdis":{"requires":{"bins":["qmd"]}}}
---
# qmd
Use `qmd` to search local content. Start with:
Use `qmd` to index local files and search them.
```bash
qmd --help
```
Indexing
- Add collection: `qmd collection add /path --name docs --mask "**/*.md"`
- Update index: `qmd update`
- Status: `qmd status`
Use concise queries and refine with filters if available.
Search
- BM25: `qmd search "query"`
- Vector: `qmd vsearch "query"`
- Hybrid: `qmd query "query"`
- Get doc: `qmd get docs/path.md:10 -l 40`
Notes
- Embeddings/rerank use Ollama at `OLLAMA_URL` (default `http://localhost:11434`).
- Index lives under `~/.cache/qmd` by default.
- MCP mode: `qmd mcp`.

View File

@@ -1,15 +1,29 @@
---
name: sag
description: ElevenLabs text-to-speech with mac-style say UX.
metadata: {"clawdis":{"requires":{"bins":["sag"]}}}
metadata: {"clawdis":{"requires":{"bins":["sag"],"env":["ELEVENLABS_API_KEY"]},"primaryEnv":"ELEVENLABS_API_KEY"}}
---
# sag
Use `sag` to speak or stream text to speakers. Start with:
Use `sag` for ElevenLabs TTS with local playback.
```bash
sag --help
```
API key (required)
- `ELEVENLABS_API_KEY` (preferred)
- `SAG_API_KEY` also supported by the CLI
Confirm the voice/speaker before long output.
Quick start
- `sag "Hello there"`
- `sag speak -v "Roger" "Hello"`
- `sag voices`
- `sag prompting` (model-specific tips)
Model notes
- Default: `eleven_v3` (expressive)
- Stable: `eleven_multilingual_v2`
- Fast: `eleven_flash_v2_5`
Voice defaults
- `ELEVENLABS_VOICE_ID` or `SAG_VOICE_ID`
Confirm voice + speaker before long output.

View File

@@ -6,12 +6,20 @@ metadata: {"clawdis":{"requires":{"bins":["sonos"]}}}
# Sonos CLI
Use `sonos` to control Sonos speakers.
Use `sonos` to control Sonos speakers on the local network.
- Discover: `sonos discover`
- Status: `sonos status`
- Playback: `sonos play|pause|stop`
- Volume: `sonos volume set <0-100>`
- Group: `sonos group <leader> <member>`
Quick start
- `sonos discover`
- `sonos status --name "Kitchen"`
- `sonos play|pause|stop --name "Kitchen"`
- `sonos volume set 15 --name "Kitchen"`
If SSDP fails, specify `--ip <speaker-ip>`.
Common tasks
- Grouping: `sonos group status|join|unjoin|party|solo`
- Favorites: `sonos favorites list|open`
- Queue: `sonos queue list|play|clear`
- Spotify search (via SMAPI): `sonos smapi search --service "Spotify" --category tracks "query"`
Notes
- If SSDP fails, specify `--ip <speaker-ip>`.
- Spotify Web API search is optional and requires `SPOTIFY_CLIENT_ID/SECRET`.

View File

@@ -1,15 +1,24 @@
---
name: spotify-player
description: Control Spotify playback from the terminal.
metadata: {"clawdis":{"requires":{"bins":["spotify-player"]}}}
description: Terminal Spotify client (TUI + CLI commands) for playback and search.
metadata: {"clawdis":{"requires":{"bins":["spotify_player"]}}}
---
# spotify-player
# spotify_player
Use `spotify-player` to search, queue, and control playback.
Use `spotify_player` for Spotify playback/search in the terminal.
```bash
spotify-player --help
```
Requirements
- Spotify Premium account.
- First-time auth: `spotify_player authenticate`.
Confirm the device/target if multiple are available.
Common CLI commands
- Search: `spotify_player search "query"`
- Playback: `spotify_player playback play|pause|next|previous`
- Connect device: `spotify_player connect`
- Like track: `spotify_player like`
Notes
- Config folder: `~/.config/spotify-player` (e.g., `app.toml`).
- For Spotify Connect integration, set a user `client_id` in config.
- TUI shortcuts are available via `?` in the app.

View File

@@ -1,15 +1,27 @@
---
name: wacli
description: WhatsApp CLI for syncing, searching, and sending messages.
description: WhatsApp CLI for sync, search, and sending messages.
metadata: {"clawdis":{"requires":{"bins":["wacli"]}}}
---
# wacli
Use `wacli` to sync/search/send WhatsApp messages. Start with:
Use `wacli` for WhatsApp sync/search/send via WhatsApp Web protocol.
```bash
wacli --help
```
Auth + sync
- `wacli auth` (QR login + initial sync)
- `wacli sync --follow` (continuous sync)
- `wacli doctor`
Confirm before sending messages.
Search + history
- `wacli messages search "query"`
- `wacli history backfill --chat <jid> --requests 5 --count 50`
Send
- Text: `wacli send text --to 1234567890 --message "hello"`
- File: `wacli send file --to 1234567890 --file /path/pic.jpg --caption "hi"`
Notes
- Store dir: `~/.wacli` (override with `--store`).
- Backfill requires your phone online; results are best-effort.
- Confirm recipient + message before sending.