Token导航 LogoToken导航TokenDH.com
效率敏感数据clawhub未标认证来源可访问clear审计通过

clackclack 命令行

Agent Skill

clack 用于辅助部署、云资源、容器和基础设施运维,适合在 OpenClaw 中需要检查配置、整理部署步骤或排查环境问题时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

11,901

周安装

506

GitHub Stars

公开资料未说明

下载量

4,169
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:clack(clack 命令行)
来源仓库:https://github.com/fbn3799/clack
安装命令:
openclaw skills install clack
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install clack

简介

clack 是 OpenClaw 的语音中继服务器管理工具,支持 STT 到 TTS 的实时语音桥接转换。

  • 适用于需要语音输入输出的 Agent 部署与运维场景。
  • 通过 clawhub 安装后可通过 WebSocket 协议对接语音服务,具体配置见源码仓库。
  • 部署时需开放相应端口并确保防火墙允许 WebSocket 通信。
  • 建议在非生产环境先行验证稳定性,防止影响主服务可用性。

SKILL.md

name
clack
version
1.5.3
description
Deploy and manage Clack, a voice relay server for OpenClaw. Bridges voice input (WebSocket) through STT → OpenClaw agent → TTS, enabling real-time voice conversations with your agent. Supports ElevenLabs, OpenAI, and Deepgram for STT/TTS. Per-session provider selection — users can independently choose STT and TTS providers (including on-device) from the app settings. Encrypted connections via Domain (SSL) or Tailscale. Supports local speech mode where STT/TTS run on-device and only LLM calls go through the server. Use when a user wants to set up voice chat, voice relay, voice interface, Clack, or talk to their agent by voice.
metadata
openclaw
requires
env
bins
primaryEnv
OPENCLAW_GATEWAY_TOKEN
os
emoji
🎙️
homepage
https://github.com/fbn3799/clack-skill

Clack

WebSocket relay server that enables real-time voice conversations with an OpenClaw agent.

Flow: Client audio (PCM 16kHz/16-bit/mono) → STT → OpenClaw Gateway → TTS → PCM audio back to client.

Per-session provider selection: The client can independently choose STT and TTS providers per call — any combination of on-device (Apple speech frameworks) and server-side providers (ElevenLabs, OpenAI, Deepgram). The server auto-detects all available providers based on configured API keys and exposes them via /info.

Prerequisites

  • Python 3.10+
  • API key for at least one provider (ElevenLabs, OpenAI, or Deepgram) — not needed for local speech mode
  • OpenClaw Gateway with chatCompletions endpoint enabled
  • Root/sudo access (for systemd)
  • Secure connection: Domain with SSL (recommended) or Tailscale

Setup

Run the setup script. It creates a venv, installs deps, prompts for API keys, configures a systemd service, and optionally sets up SSL.

sudo bash scripts/setup.sh

The script auto-detects your OpenClaw gateway config and interactively prompts for provider API keys (ElevenLabs, OpenAI, Deepgram — all optional). On re-runs, existing keys can be kept, updated, or deleted.

Options

bash scripts/setup.sh [--port 9878] [--domain clack.example.com]
FlagDefaultDescription
--port9878Relay server port
--domain*(none)*Domain for SSL setup (enables WSS)

Connection modes

All connections are encrypted. The app supports two modes:

Domain with SSL (recommended):

bash scripts/setup.sh --domain clack.yourdomain.com
# → wss://clack.yourdomain.com/voice

Requires a DNS A record pointing the domain to your server IP. The setup script auto-configures SSL via Caddy. You can use a free domain from DuckDNS or your own.

Tailscale:

# Install Tailscale on your server, then connect from the app using your Tailscale IP
# → ws://100.x.x.x:9878/voice (encrypted at network level)

No domain or SSL setup needed. Tailscale encrypts all traffic at the network layer. Install Tailscale on both your server and phone, then use the server's Tailscale IP in the app.

Security note: Port 9878 should be firewalled from the public internet. Only allow access via localhost (for Caddy reverse proxy) and Tailscale. The app does not support unencrypted public connections.

Enable OpenClaw Gateway endpoint

The gateway must have chatCompletions enabled. Apply this config patch:

{"http": {"endpoints": {"chatCompletions": {"enabled": true}}}}

Management

clack status     # Check service status
clack restart    # Restart the server
clack logs       # Tail logs
clack pair       # Generate a new pairing code
clack update     # Pull latest code and restart
clack setup      # Re-run interactive setup (add SSL later, update keys, etc.)
clack uninstall  # Remove service and venv

Client App

📱 iOS — Available on the App Store (or build from source at github.com/fbn3799/clack-app) 🤖 Android — Coming soon!

Security

Authentication

All endpoints except GET /health and POST /pair require a valid auth token (RELAY_AUTH_TOKEN). Tokens are verified using constant-time HMAC comparison to prevent timing attacks.

Pairing System

  • 6-character alphanumeric one-time codes (~2.1 billion combinations)
  • Codes expire after 5 minutes (TTL) and are single-use
  • Rate limited: 5 attempts per IP per 5 minutes — returns HTTP 429 after
  • 2-second delay on failed attempts to slow brute force
  • Generating a code requires the admin auth token (GET /pair)
  • Redeeming a code is public but rate-limited (POST /pair)

Encrypted Connections

  • Domain mode: WSS (WebSocket Secure) via Caddy with automatic SSL certificates
  • Tailscale mode: WireGuard encryption at the network layer
  • The app enforces encrypted connections — no unencrypted public access
  • Port 9878 should be firewalled; only accessible via localhost and Tailscale

Input Sanitization

All user-facing text inputs are sanitized before processing:

  • Voice transcripts: Capped at 300 characters (CLACK_MAX_INPUT_CHARS), echo detection filters feedback loops, hallucination detection discards nonsense STT output
  • User context: Stripped to natural-language characters only (letters, numbers, common punctuation, whitespace). Control characters, escape sequences, and non-printable characters are removed. Capped at 1000 characters. Context is wrapped in explicit delimiters before injection into the system prompt.
  • No shell execution: All external communication uses structured HTTP/WebSocket APIs. No user input is ever passed to a shell.

Data Privacy

  • No analytics, tracking, or telemetry
  • Voice audio goes to your server and only to the providers you choose
  • The iOS app stores only settings locally (server address, token, preferences)
  • Third-party API usage depends on your provider config (ElevenLabs, OpenAI, Deepgram)

Session Routing

Each voice call creates a clack:<uuid> session in OpenClaw. These are small, isolated sessions — one per call — so voice conversations don't pollute your main agent context.

Session Picker

The session picker in the iOS app provides context injection only. When you select a session key, it is added as text context to the LLM prompt — it does not change routing. All voice calls still create their own clack:<uuid> session.

User Context

Users can provide persistent context that gets injected into the system prompt for every voice call. This lets the AI know about the user's preferences, notes, or any background information.

How to set context

  • App text field: In the Clack app under Settings → Context, enter free-form text
  • Session picker: Select an OpenClaw session to inject its content as context
  • WebSocket message: Send {"type": "set_context", "text": "..."} during a voice session
  • HTTP API: PUT /context?token=...&text=... or POST /context with JSON body {"text": "..."}

Context is sanitized before saving — only natural-language characters are kept (letters, numbers, common punctuation). IP addresses and domains are stripped. The server returns the sanitized text in the response so the app can show the user exactly what will be sent as context.

Context persists across calls and server restarts. Clear it via DELETE /context or by sending an empty set_context message.

Conversation History

The relay maintains a shared history file across calls for continuity. History is stored as JSON in CLACK_HISTORY_DIR (default: /var/lib/clack/history).

  • Max messages: 50 (configurable via CLACK_MAX_HISTORY)
  • History persists across calls and server restarts
  • Viewable via GET /history, clearable via DELETE /history

Echo Test Mode

For testing audio round-trips without using LLM credits:

  • Server-wide: Set CLACK_ECHO_MODE=true environment variable
  • Per-session: Send {"type":"start","config":{"echo":true}} from the client

In echo mode, transcribed text is echoed back through TTS instead of being sent to the LLM. Audio is peak-normalized with capped gain to ensure consistent playback volume.

Provider Selection

STT and TTS providers can be configured independently per session. The server auto-detects all available providers at startup based on which API keys are set (ELEVENLABS_API_KEY, OPENAI_API_KEY, DEEPGRAM_API_KEY).

Available modes per direction (STT / TTS):

  • On-device (local): Uses Apple's built-in speech frameworks. Zero API costs.
  • Server provider: ElevenLabs, OpenAI, or Deepgram — whichever keys are configured.

How it works:

  1. App fetches GET /info to discover available providers
  2. User picks STT and TTS providers independently in Settings → Voice
  3. On call start, the app sends sttProvider and ttsProvider in the session config
  4. Server creates the appropriate provider instances per session

Example combinations:

STTTTSUse case
ElevenLabsElevenLabsFull cloud — best quality
On-deviceElevenLabsSave STT costs, keep premium voices
On-deviceOn-deviceFully local — zero API usage, works offline
OpenAIDeepgramMix providers freely

Cost optimization: Use on-device STT (free, unlimited) with a premium cloud TTS voice — get great output quality while eliminating transcription costs entirely. Or go fully on-device for zero API spend.

Text input mode

When STT is set to on-device, the client sends transcribed text instead of audio:

{"type": "text_input", "text": "What's the weather like?"}

When TTS is set to on-device, the server returns response_text only and skips audio synthesis.

AI Response Rules

  • Responses are enforced to 1–3 sentences for natural voice conversation
  • Server-side max_tokens: 150 to prevent runaway responses
  • Server-side max input: 300 characters (CLACK_MAX_INPUT_CHARS) — transcripts exceeding this are truncated

HTTP Endpoints

EndpointMethodAuthDescription
GET /healthGETNoHealth check — returns service status
POST /pairPOSTNoRedeem pairing code → get auth token (rate-limited)
GET /pairGETYesGenerate one-time pairing code
GET /infoGETYesServer info: agent name, available STT/TTS providers
GET /voicesGETYesList available TTS voices
GET /sessionsGETYesList active sessions
GET /historyGETYesGet conversation history
DELETE /historyDELETEYesClear conversation history
GET /contextGETYesGet current user context
PUT /contextPUTYesSet user context (query param text)
POST /contextPOSTYesSet user context (JSON body {"text": "..."})
DELETE /contextDELETEYesClear user context
WebSocket /voiceWSYesVoice relay connection

WebSocket Protocol

Endpoint: ws://<host>:<port>/voice?token=<RELAY_AUTH_TOKEN>

Client → Server

MessageFormatDescription
{"type":"start","config":{...}}JSONStart session. Config: voice, systemPrompt, echo, sttProvider, ttsProvider
Binary framesbytesRaw PCM audio (16kHz, 16-bit, mono)
{"type":"text_input","text":"..."}JSONLocal speech mode — send text directly
{"type":"end_speech"}JSONSignal end of speech, triggers processing
{"type":"interrupt"}JSONCancel current TTS playback
{"type":"ping"}JSONKeepalive
{"type":"set_context","text":"..."}JSONSet user context (sanitized before saving)
{"type":"auth","token":"..."}JSONAuthenticate (alternative to query param)

Server → Client

MessageFormatDescription
{"type":"ready"}JSONSession ready
{"type":"auth_ok"} / {"type":"auth_failed"}JSONAuth result
{"type":"processing","stage":"..."}JSONStage: transcribing, thinking, speaking, filtered
{"type":"transcript","text":"...","final":true}JSONSTT result
{"type":"response_text","text":"..."}JSONLLM text response
{"type":"response_start","format":"pcm_16000"}JSONAudio stream starting
Binary framesbytesTTS audio (PCM 16kHz, 16-bit, mono)
{"type":"response_end"}JSONAudio stream done
{"type":"tts_cancelled"}JSONTTS playback was interrupted
{"type":"context_updated","text":"..."}JSONContext saved — text contains the sanitized version
{"type":"context_cleared"}JSONContext was cleared

Features

  • Multi-provider STT/TTS: ElevenLabs, OpenAI, and Deepgram support
  • Independent voice input/output configuration: Choose STT and TTS providers separately — full control over how your voice is transcribed and how the AI speaks back
  • On-device speech: Apple speech frameworks for STT and/or TTS — zero API costs, mix with cloud providers freely
  • Cost optimization: Use free on-device transcription with premium cloud voices, or go fully local for zero spend
  • Voice response rules: AI responses enforced short (1-3 sentences, max_tokens 150)
  • Input length limiting: Configurable max transcript length (default 300 chars)
  • Confidence filtering: Low-confidence STT results are discarded
  • Echo detection: Prevents feedback loops (TTS → mic → STT)
  • Echo test mode: Test audio pipeline without LLM (server-wide or per-session)
  • Audio normalization: Peak normalization with capped gain for echo mode playback
  • Audio chunking: Long recordings auto-split for reliable transcription
  • Hallucination detection: Filters repetitive/nonsense STT output
  • Interrupt/TTS cancellation: Cancel in-progress TTS for all providers
  • Pairing system: Rate-limited one-time codes for secure device pairing
  • Session isolation: Each call gets its own clack:<uuid> session
  • Conversation history: Shared across calls, 50 messages max, persistent
  • Token auth: Constant-time HMAC verification
  • Keepalive pings: Prevents client timeout during long LLM responses
  • Silence detection: Default threshold 220, configurable range 20–1000
  • Auto-restart: systemd restarts on crash

Voice Configuration

20 built-in ElevenLabs voices available. Default: Will. Pass voice name or ID in session config:

{"type": "start", "config": {"voice": "aria"}}

Available aliases: will, aria, roger, sarah, laura, charlie, george, callum, river, liam, charlotte, alice, matilda, jessica, eric, chris, brian, daniel, lily, bill.

Environment Variables

VariableDefaultDescription
RELAY_AUTH_TOKENRequired. Client auth token (32-char)
OPENCLAW_GATEWAY_URLhttp://127.0.0.1:18789OpenClaw Gateway URL
OPENCLAW_GATEWAY_TOKENGateway bearer token
STT_PROVIDERelevenlabsSTT provider (elevenlabs, openai, deepgram)
TTS_PROVIDERelevenlabsTTS provider (elevenlabs, openai, deepgram)
TTS_VOICEWillDefault voice (name or ID)
VOICE_RELAY_PORT9878Server port
CLACK_ECHO_MODEfalseEnable echo test mode server-wide
CLACK_MAX_INPUT_CHARS300Max transcript length (chars)
CLACK_HISTORY_DIR/var/lib/clack/historyHistory file storage directory
CLACK_MAX_HISTORY50Max conversation history messages
CLACK_AGENT_NAMEStormAgent name shown in the iOS app

Provider API keys (ELEVENLABS_API_KEY, OPENAI_API_KEY, DEEPGRAM_API_KEY) are stored in config.json with restricted file permissions, not as environment variables. The setup script manages these interactively.

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

93.43%
按下载量换算3,895

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

未展示

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills