ring-a-ding-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,129 @@
1
+ ---
2
+ name: ring-a-ding
3
+ description: Use the rad CLI to place outbound phone calls with an AI voice agent, then check status, wait for completion, or end calls.
4
+ metadata: {"openclaw":{"requires":{"bins":["rad"],"env":["RAD_API_KEY","OPENAI_API_KEY"]},"primaryEnv":"RAD_API_KEY","install":[{"id":"node","kind":"node","package":"ring-a-ding-cli","bins":["rad"],"label":"Install Ring-a-Ding CLI (npm)"}]}}
5
+ ---
6
+
7
+ # Ring-a-Ding
8
+
9
+ Use `rad` when you need an AI agent to call a person or business, hold a natural
10
+ voice conversation, and report back with the outcome.
11
+
12
+ ## Requirements
13
+
14
+ - The shell tool must be allowed to run `rad`.
15
+ - `RAD_API_KEY` and `OPENAI_API_KEY` must be available for the agent run.
16
+
17
+ OpenClaw config example:
18
+
19
+ ```json5
20
+ {
21
+ skills: {
22
+ entries: {
23
+ "ring-a-ding": {
24
+ apiKey: "rad_live_...",
25
+ env: {
26
+ OPENAI_API_KEY: "sk-..."
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ Outside OpenClaw, `rad init` can store both keys in
35
+ `~/.config/ring-a-ding/config.json`.
36
+
37
+ ## Recommended Workflow
38
+
39
+ Prefer non-blocking calls so you can continue other work while the phone call runs.
40
+
41
+ 1. Start the call with `rad call`.
42
+ 2. Save the returned `callId`.
43
+ 3. Continue other work.
44
+ 4. Check progress with `rad status <call_id>` after 30 to 60 seconds.
45
+ 5. Repeat until the call reaches a terminal status.
46
+ 6. Use `rad end <call_id>` if you need to cancel or hang up.
47
+
48
+ Use `rad wait` only when blocking the session is acceptable.
49
+
50
+ ## Commands
51
+
52
+ ### Start a call
53
+
54
+ ```bash
55
+ rad call "+15551234567" "Call Sunrise Dental to schedule a cleaning for next week. Ask about Tuesday or Wednesday morning availability."
56
+ ```
57
+
58
+ The call runs in the background and returns JSON with `callId` and the initial status.
59
+
60
+ ### Start a call with complex options
61
+
62
+ Use stdin mode for long context or structured extraction:
63
+
64
+ ```bash
65
+ echo '{"to":"+15551234567","purpose":"Schedule appointment","context":"Patient: Jane Smith","personality":"Warm and professional","outputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Appointment date"},"cost":{"type":"number","description":"Quoted price"}}}}' | rad call --stdin
66
+ ```
67
+
68
+ ### Check status
69
+
70
+ ```bash
71
+ rad status <call_id>
72
+ ```
73
+
74
+ Returns status, transcript, summary, extracted data, and cost information when available.
75
+
76
+ ### Wait for completion
77
+
78
+ ```bash
79
+ rad wait <call_id> --timeout 300
80
+ ```
81
+
82
+ This blocks until the call completes or times out. Prefer polling with `rad status`.
83
+
84
+ ### End a call
85
+
86
+ ```bash
87
+ rad end <call_id>
88
+ ```
89
+
90
+ ### Print this skill
91
+
92
+ ```bash
93
+ rad skill
94
+ ```
95
+
96
+ ## Call Options
97
+
98
+ | Option | Description |
99
+ | --- | --- |
100
+ | `--voice <name>` | Voice: alloy, ash, ballad, cedar, coral, echo, marin, sage, shimmer, verse |
101
+ | `--caller-name <name>` | Name the AI uses to introduce itself |
102
+ | `--personality <text>` | Tone and behavior instructions |
103
+ | `--context <text>` | Background facts the AI may need |
104
+ | `--max-duration <min>` | Maximum call length in minutes, 1 to 30 |
105
+ | `--opening-line <text>` | First sentence when someone picks up |
106
+ | `--voicemail-action <action>` | `leave_message` or `hang_up` |
107
+ | `--output-schema <json>` | JSON Schema for structured extraction, or `@file.json` |
108
+ | `--wait` | Block until the call completes |
109
+ | `--timeout <sec>` | Timeout for `--wait` |
110
+ | `--stdin` | Read call parameters as JSON from stdin |
111
+
112
+ ## Usage Guidance
113
+
114
+ - Be specific about who to call, what outcome you need, and any constraints.
115
+ - Put private reference details in `--context`, not in the main purpose.
116
+ - Use `--output-schema` when you need structured results such as times, prices, or confirmations.
117
+ - Use `--personality` to control the tone of the caller.
118
+
119
+ ## Terminal Statuses
120
+
121
+ | Status | Meaning |
122
+ | --- | --- |
123
+ | `completed` | Call finished normally |
124
+ | `failed` | Call failed |
125
+ | `no-answer` | Nobody picked up |
126
+ | `busy` | Line was busy |
127
+ | `canceled` | Call was canceled by the user |
128
+
129
+ Non-terminal statuses: `initiated`, `ringing`, `in-progress`.
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "ring-a-ding-cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI for Ring-a-Ding — give AI agents the ability to make phone calls",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "rad": "dist/index.js"
9
+ },
10
+ "files": ["dist"],
11
+ "scripts": {
12
+ "build": "rm -rf dist && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --banner:js='#!/usr/bin/env node' --external:commander && mkdir -p dist/skills && cp -r skills/. dist/skills",
13
+ "dev": "tsx src/index.ts",
14
+ "typecheck": "tsc --noEmit",
15
+ "test": "vitest run"
16
+ },
17
+ "dependencies": {
18
+ "commander": "^13.0.0"
19
+ },
20
+ "devDependencies": {
21
+ "@rad/shared": "workspace:*",
22
+ "esbuild": "^0.27.4",
23
+ "tsx": "^4.19.0",
24
+ "vitest": "^3.0.0"
25
+ }
26
+ }