Install
openclaw skills install @projectreturn/keet-cliSafely operate and improve the Keet CLI project and Keet ↔ OpenClaw bridge. Use for read-only inspection, debugging, documentation, release checks, bridge supervision, and explicitly approved messaging workflows. Requires explicit user confirmation before any outbound message, invite action, chat creation, long-running bridge/daemon start, or Git push.
openclaw skills install @projectreturn/keet-cliUse this skill when operating or improving the keet-cli project for Keet Messenger and Keet ↔ OpenClaw bridge workflows.
Default to read-only inspection. Treat all live Keet profile data and private chat content as sensitive. Do not expose secrets, recovery material, private messages, invite/profile codes, or generated bridge state.
Project source to verify before use: https://github.com/projectreturn/Keet-cli.
Before any external or state-changing action, get explicit user confirmation for:
Never join invites, create chats, route additional chats, print recovery/account material, or push code unless the user explicitly asked for that exact action.
/openclaw/workspace/keet-cli.git remote -v
git status --short --branch
npm run lint
node src/cli.js --help
npm run lint and inspect git diff before reporting completion.Run from the repo root unless the user specifies another checkout.
npm run lint
node src/cli.js --help
node src/cli.js inspect
node src/cli.js rooms
node src/cli.js messages --limit 10
node src/cli.js tui
Override Keet storage only when the user provides or confirms the path:
KEET_APP_STORAGE=/confirmed/path/to/app-storage node src/cli.js inspect
Only run these after explicit confirmation of profile, target chat, and exact action:
node src/cli.js send 'confirmed message text'
node src/cli.js send-file --caption 'confirmed caption' /confirmed/file/path
node src/cli.js bridge
node src/cli.js daemon --socket .keet-cli.sock
node src/cli.js daemon-send --socket .keet-cli.sock current
node src/cli.js watch --interval 2000
For send-file, confirm the file path, target chat, and caption before sending. For watch, daemon, supervisor, or bridge modes, tell the user whether the process will keep running and how to stop it.
Keet Desktop and keet-cli should not use the same live storage concurrently. Keet protects the database with a device-file/FD lock.
If commands fail due to locking:
keet-cli process is already using the profile.daemon --socket .keet-cli.sock and route CLI/bridge actions through daemon-send instead of spawning competing sessions.Use TUI mode for interactive local inspection only after confirming that no other live Keet owner process is using the same storage:
node src/cli.js tui
The TUI can list rooms, select a room, view recent messages, and send messages. Sending is state-changing: confirm the target chat and exact message first.
Use daemon mode only when repeated reads/sends are needed and the user approved a long-running process:
node src/cli.js daemon --room ROOM_ID --socket .keet-cli.sock
Common REPL commands:
/status
/messages 10
/send confirmed message text
/send-md **confirmed** _markdown_
/send-file /confirmed/file/path confirmed caption
/rooms
/current
/use ROOM_ID
/quit
Socket automation uses one JSON command per call:
node src/cli.js daemon-send --socket .keet-cli.sock status
node src/cli.js daemon-send --socket .keet-cli.sock send '{"text":"confirmed message","format":"plain"}'
node src/cli.js daemon-send --socket .keet-cli.sock send-file '{"filePath":"/confirmed/file/path","caption":"confirmed caption"}'
send and send-file try the default daemon socket first when present, then fall back to a direct Core session. Set KEET_CLI_NO_DAEMON=1 to force direct mode, or KEET_CLI_DAEMON_STRICT=1 to fail instead of falling back.
This avoids conflicts between separate watch, send, and send-file processes.
Use watch mode only after the user confirms the profile and chat scope:
node src/cli.js watch --interval 2000
By default it should ignore local/self messages. Use --include-local only when explicitly needed for debugging.
Run the bridge in foreground for debugging first:
node src/cli.js bridge
node src/cli.js bridge --daemon-socket .keet-cli.sock --config bridge.config.json
Use supervisor/container modes only after the user confirms a persistent process is wanted.
Prefer --daemon-socket when a daemon owns the Keet profile. In that mode the bridge reuses the daemon instead of opening its own Core sidecar.
A safe bridge must:
lokal, online, and modell status,Before release or publishing:
npm run lint
git status --short --branch
git diff --stat
git log --oneline -5
Before any Git push, confirm the repository, branch, diff, and credential/identity that will be used. Do not embed private key paths or print private keys in public skill content.