@clawcard/cli 2.1.6 → 2.1.8

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawcard/cli",
3
- "version": "2.1.6",
3
+ "version": "2.1.8",
4
4
  "description": "The ClawCard CLI — manage your agent keys, billing, and setup from the terminal",
5
5
  "bin": {
6
6
  "clawcard": "./bin/clawcard.mjs"
package/skill/SKILL.md CHANGED
@@ -46,9 +46,13 @@ clawcard agent sms send --to "+15551234567" --body "Message" --json
46
46
 
47
47
  IMPORTANT: Always list cards first. Reuse open merchant_locked cards for the same merchant.
48
48
 
49
+ ⚠️ SUBSCRIPTION WARNING: ClawCard cards cannot be topped up after creation. If you are about to pay for a recurring subscription (monthly SaaS, hosting, etc.), STOP and tell the user:
50
+ "This looks like a subscription. ClawCard cards have a fixed budget and can't be topped up — the renewal will fail when the budget runs out. Consider using a personal card for subscriptions, or create a merchant_locked card with enough budget to cover several months."
51
+ Only proceed if the user explicitly confirms.
52
+
49
53
  Card types (REQUIRED — you must specify one):
50
- - single_use: auto-closes after one charge. Use for one-time purchases (domains, invoices).
51
- - merchant_locked: locks to first merchant, allows repeat charges. Use for subscriptions (hosting, SaaS).
54
+ - single_use: auto-closes after one charge. Use for one-time purchases (domains, invoices, one-off payments). THIS IS THE DEFAULT — use this unless the user specifically asks for a recurring card.
55
+ - merchant_locked: locks to first merchant, allows repeat charges. Use ONLY when the user explicitly needs to make multiple purchases at the same merchant. NOT recommended for subscriptions since the card budget cannot be refilled.
52
56
 
53
57
  List cards:
54
58
  ```
@@ -142,6 +146,7 @@ When you reach a payment form:
142
146
 
143
147
  - Always run `clawcard agent info --json` first to verify your identity.
144
148
  - Check budget before creating cards: `clawcard agent budget --json`
145
- - Reuse merchant_locked cards for repeat purchases at the same merchant.
146
- - Use single_use cards for one-time purchases they auto-close after one charge.
149
+ - Default to single_use cards for everything. They auto-close after one charge.
150
+ - Only use merchant_locked if the user explicitly needs repeat charges at the same merchant.
151
+ - NEVER silently pay for a subscription. Always warn the user that card budgets are fixed and renewals will fail.
147
152
  - Store credentials in the vault with consistent naming so you can find them later.
@@ -72,28 +72,41 @@ export async function signupCommand() {
72
72
  message: "Payment complete?",
73
73
  });
74
74
 
75
- if (p.isCancel(ready) || !ready) return;
75
+ if (!p.isCancel(ready) && ready) {
76
+ // Step 2: Create key
77
+ const createKey = await p.confirm({
78
+ message: "Create your agent key now?",
79
+ });
76
80
 
77
- // Step 2: Create key
78
- const createKey = await p.confirm({
79
- message: "Create your agent key now?",
80
- });
81
+ if (!p.isCancel(createKey) && createKey) {
82
+ const { keysCreateCommand } = await import("./keys.js");
83
+ await keysCreateCommand();
81
84
 
82
- if (!p.isCancel(createKey) && createKey) {
83
- const { keysCreateCommand } = await import("./keys.js");
84
- await keysCreateCommand();
85
+ // Step 3: Setup
86
+ const runSetup = await p.confirm({
87
+ message: "Set up your agent now?",
88
+ });
85
89
 
86
- // Step 3: Setup
87
- const runSetup = await p.confirm({
88
- message: "Set up your agent now?",
89
- });
90
-
91
- if (!p.isCancel(runSetup) && runSetup) {
92
- const { setupCommand } = await import("./setup.js");
93
- await setupCommand();
90
+ if (!p.isCancel(runSetup) && runSetup) {
91
+ const { setupCommand } = await import("./setup.js");
92
+ await setupCommand();
93
+ }
94
94
  }
95
95
  }
96
96
  }
97
+
98
+ // Always show next steps so the user knows where to go
99
+ p.note(
100
+ [
101
+ `${orange.bold("claw topup")} ${chalk.dim("Top up your balance")}`,
102
+ `${orange.bold("claw keys create")} ${chalk.dim("Create an agent key")}`,
103
+ `${orange.bold("claw setup")} ${chalk.dim("Set up your agent")}`,
104
+ `${orange.bold("claw dashboard")} ${chalk.dim("Open the portal")}`,
105
+ "",
106
+ chalk.dim(`Or visit: ${BASE_URL}/dashboard`),
107
+ ].join("\n"),
108
+ "You can pick up where you left off anytime"
109
+ );
97
110
  } catch (err) {
98
111
  s.stop("Signup failed");
99
112
  p.log.error(err.message);