suzi-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.
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +274 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/deploy.d.ts +3 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +149 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +70 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/list-tools.d.ts +3 -0
- package/dist/commands/list-tools.d.ts.map +1 -0
- package/dist/commands/list-tools.js +163 -0
- package/dist/commands/list-tools.js.map +1 -0
- package/dist/commands/login.d.ts +13 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +311 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/portfolio.d.ts +3 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +170 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/preferences.d.ts +3 -0
- package/dist/commands/preferences.d.ts.map +1 -0
- package/dist/commands/preferences.js +121 -0
- package/dist/commands/preferences.js.map +1 -0
- package/dist/commands/prompt-suggestions.d.ts +3 -0
- package/dist/commands/prompt-suggestions.d.ts.map +1 -0
- package/dist/commands/prompt-suggestions.js +148 -0
- package/dist/commands/prompt-suggestions.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +571 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/subagents.d.ts +3 -0
- package/dist/commands/subagents.d.ts.map +1 -0
- package/dist/commands/subagents.js +194 -0
- package/dist/commands/subagents.js.map +1 -0
- package/dist/commands/transactions.d.ts +3 -0
- package/dist/commands/transactions.d.ts.map +1 -0
- package/dist/commands/transactions.js +153 -0
- package/dist/commands/transactions.js.map +1 -0
- package/dist/commands/wallet.d.ts +3 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +183 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +12 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +82 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +42 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +85 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/utils/ui.d.ts +26 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +111 -0
- package/dist/utils/ui.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerSkillsCommand = registerSkillsCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const os_1 = __importDefault(require("os"));
|
|
11
|
+
const ui_1 = require("../utils/ui");
|
|
12
|
+
// ─────────────────────────────────────────────────────────────
|
|
13
|
+
// Skill: suzi-guide
|
|
14
|
+
// ─────────────────────────────────────────────────────────────
|
|
15
|
+
const SUZI_GUIDE_SKILL = `---
|
|
16
|
+
name: suzi-guide
|
|
17
|
+
description: >
|
|
18
|
+
Comprehensive guide for the Suzi CLI and agent platform. Use this skill when
|
|
19
|
+
the user asks about Suzi commands, how to create/deploy/manage agents, available
|
|
20
|
+
protocols and actions, agent code patterns, or anything related to the Suzi
|
|
21
|
+
autonomous agent platform for blockchain protocols.
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Suzi CLI & Agent Platform Guide
|
|
25
|
+
|
|
26
|
+
## IMPORTANT: Always Use the CLI for Live Data
|
|
27
|
+
|
|
28
|
+
**NEVER rely on hardcoded data from this skill for questions about protocols, actions, balances, agents, or any runtime state.** Always run the appropriate \`suzi\` CLI command and use its output. This ensures the user gets up-to-date information.
|
|
29
|
+
|
|
30
|
+
| User asks about... | Run this command |
|
|
31
|
+
|---------------------|-----------------|
|
|
32
|
+
| Available protocols / actions | \`suzi list-tools --verbose\` |
|
|
33
|
+
| Actions for a specific protocol | \`suzi list-tools --protocol <name>\` |
|
|
34
|
+
| Their agents | \`suzi agents\` |
|
|
35
|
+
| Agent details / triggers / config | \`suzi agents view <id>\` |
|
|
36
|
+
| Agent logs | \`suzi agents logs <id>\` |
|
|
37
|
+
| Wallet addresses | \`suzi wallet address\` |
|
|
38
|
+
| Balances | \`suzi wallet balance\` |
|
|
39
|
+
| Portfolio | \`suzi portfolio --all\` |
|
|
40
|
+
| Transactions | \`suzi transactions\` |
|
|
41
|
+
| Current user / auth status | \`suzi whoami\` |
|
|
42
|
+
|
|
43
|
+
**Do NOT answer "what protocols are available?" or "what actions does polymarket have?" from memory. Run the CLI.**
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## What is Suzi?
|
|
48
|
+
|
|
49
|
+
Suzi is an autonomous agent platform for creating and executing intelligent agents that interact with blockchain protocols. Users write TypeScript agents with triggers (manual, cron, event-based) that execute actions against protocols in a sandboxed environment.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Installing the Suzi CLI
|
|
54
|
+
|
|
55
|
+
\\\`\\\`\\\`bash
|
|
56
|
+
pnpm add suzi
|
|
57
|
+
|
|
58
|
+
# Verify installation
|
|
59
|
+
suzi --version
|
|
60
|
+
\\\`\\\`\\\`
|
|
61
|
+
|
|
62
|
+
### First-time setup
|
|
63
|
+
|
|
64
|
+
\\\`\\\`\\\`bash
|
|
65
|
+
# 1. Point to the Suzi API (production)
|
|
66
|
+
suzi login --api-url https://api-3ihwe.ondigitalocean.app
|
|
67
|
+
|
|
68
|
+
# 2. Browser opens for Google OAuth sign-in
|
|
69
|
+
# 3. After auth, CLI shows your wallet address + QR code
|
|
70
|
+
# 4. Send SOL to the displayed address to fund your wallet
|
|
71
|
+
# 5. CLI auto-detects the deposit and shows your portfolio
|
|
72
|
+
\\\`\\\`\\\`
|
|
73
|
+
|
|
74
|
+
### Requirements
|
|
75
|
+
|
|
76
|
+
- Node.js 22.x
|
|
77
|
+
- pnpm 9.15.0
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## CLI Commands Reference
|
|
82
|
+
|
|
83
|
+
### Authentication
|
|
84
|
+
|
|
85
|
+
\`\`\`bash
|
|
86
|
+
suzi login # Sign in with Google (OAuth2.0). Shows QR code for wallet funding.
|
|
87
|
+
suzi login --api-url <url> # Override API endpoint
|
|
88
|
+
suzi login --web-url <url> # Override web app URL
|
|
89
|
+
suzi logout # Sign out and clear stored credentials
|
|
90
|
+
suzi whoami # Show current authenticated user, wallet addresses
|
|
91
|
+
\`\`\`
|
|
92
|
+
|
|
93
|
+
### Wallet Management
|
|
94
|
+
|
|
95
|
+
\`\`\`bash
|
|
96
|
+
suzi wallet # Show wallet overview (SOL + EVM addresses)
|
|
97
|
+
suzi wallet address # Show full wallet addresses (for copying)
|
|
98
|
+
suzi wallet balance # Show balances (ALWAYS run this for balance questions)
|
|
99
|
+
suzi wallet fund # Show deposit instructions with full addresses
|
|
100
|
+
\`\`\`
|
|
101
|
+
|
|
102
|
+
### Portfolio
|
|
103
|
+
|
|
104
|
+
\`\`\`bash
|
|
105
|
+
suzi portfolio # View SOL + top 3 assets across chains
|
|
106
|
+
suzi portfolio --all # Full portfolio including Hyperliquid perp positions
|
|
107
|
+
\`\`\`
|
|
108
|
+
|
|
109
|
+
### Agent Management
|
|
110
|
+
|
|
111
|
+
\`\`\`bash
|
|
112
|
+
suzi agents # List all agents (ALWAYS run this for agent questions)
|
|
113
|
+
suzi agents view <id> # View agent details (spec, triggers, resources, config)
|
|
114
|
+
suzi agents activate <id> # Activate agent (allocates wallets, registers triggers)
|
|
115
|
+
suzi agents deactivate <id> # Deactivate agent
|
|
116
|
+
suzi agents execute <id> [trigger] # Manually execute a trigger (prompts if multiple)
|
|
117
|
+
suzi agents logs <id> # View agent logs (default: last 20)
|
|
118
|
+
suzi agents logs <id> -n 50 # View more log entries
|
|
119
|
+
suzi agents logs <id> --level error # Filter by level: info|warn|error|debug
|
|
120
|
+
suzi agents delete <id> # Delete agent (with confirmation)
|
|
121
|
+
suzi agents delete <id> -f # Delete without confirmation
|
|
122
|
+
\`\`\`
|
|
123
|
+
|
|
124
|
+
### Agent Deployment
|
|
125
|
+
|
|
126
|
+
\`\`\`bash
|
|
127
|
+
suzi deploy # Deploy agent (auto-discovers agent.ts, src/agent.ts, index.ts)
|
|
128
|
+
suzi deploy ./path/to/agent.ts # Deploy specific file
|
|
129
|
+
suzi deploy -t "My Agent" # Set title
|
|
130
|
+
suzi deploy -d "Description here" # Set description
|
|
131
|
+
suzi deploy --activate # Activate immediately after deployment
|
|
132
|
+
suzi deploy --update <agentId> # Update existing agent's code
|
|
133
|
+
\`\`\`
|
|
134
|
+
|
|
135
|
+
### Agent Templates & Validation
|
|
136
|
+
|
|
137
|
+
\`\`\`bash
|
|
138
|
+
suzi subagents # List agent.md and agent.ts files in current directory
|
|
139
|
+
suzi subagents init # Create template agent.md + agent.ts files
|
|
140
|
+
suzi subagents init --dir ./myagent # Create templates in specific directory
|
|
141
|
+
suzi subagents validate # Validate agent.md (checks Meta, Resources, Triggers sections)
|
|
142
|
+
suzi subagents validate ./agent.md # Validate specific file
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
### Agent Import (Sharing)
|
|
146
|
+
|
|
147
|
+
\`\`\`bash
|
|
148
|
+
suzi import <slug> # Clone a shared agent by its share slug
|
|
149
|
+
\`\`\`
|
|
150
|
+
|
|
151
|
+
### Transactions
|
|
152
|
+
|
|
153
|
+
\`\`\`bash
|
|
154
|
+
suzi transactions # View recent transactions across all agents (alias: suzi txns)
|
|
155
|
+
suzi txns -n 30 # Show more entries
|
|
156
|
+
suzi txns --type order # Filter: order|cancel|transfer|swap|bridge|liquidity
|
|
157
|
+
suzi txns --protocol polymarket # Filter by protocol
|
|
158
|
+
suzi txns --agent <id> # Filter by specific agent
|
|
159
|
+
suzi tx-confirm <agentId> # Show latest execution details (input/output)
|
|
160
|
+
\`\`\`
|
|
161
|
+
|
|
162
|
+
### Tools & Protocols
|
|
163
|
+
|
|
164
|
+
\`\`\`bash
|
|
165
|
+
suzi list-tools # List all protocols (ALWAYS run for protocol questions)
|
|
166
|
+
suzi list-tools --verbose # Show ALL actions per protocol with descriptions
|
|
167
|
+
suzi list-tools --protocol <name> # Show actions for a specific protocol
|
|
168
|
+
\`\`\`
|
|
169
|
+
|
|
170
|
+
### Preferences
|
|
171
|
+
|
|
172
|
+
\`\`\`bash
|
|
173
|
+
suzi preferences # View current preferences (alias: suzi prefs)
|
|
174
|
+
suzi prefs set-username [name] # Set display username
|
|
175
|
+
suzi prefs telegram # Connect Telegram for notifications
|
|
176
|
+
suzi prefs api-url <url> # Set API server URL
|
|
177
|
+
\`\`\`
|
|
178
|
+
|
|
179
|
+
### Help & Suggestions
|
|
180
|
+
|
|
181
|
+
\`\`\`bash
|
|
182
|
+
suzi suggest # Interactive command suggestions (alias: suzi help-me)
|
|
183
|
+
suzi --help # Show all commands
|
|
184
|
+
\`\`\`
|
|
185
|
+
|
|
186
|
+
### Skills
|
|
187
|
+
|
|
188
|
+
\`\`\`bash
|
|
189
|
+
suzi skills # List available skills
|
|
190
|
+
suzi skills show <name> # Show skill details and sections
|
|
191
|
+
suzi skills add <name> # Install a skill to ~/.claude/skills/
|
|
192
|
+
suzi skills add --all # Install all available skills
|
|
193
|
+
\`\`\`
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Creating Agents
|
|
198
|
+
|
|
199
|
+
### Quick Start
|
|
200
|
+
|
|
201
|
+
\`\`\`bash
|
|
202
|
+
# 1. Initialize a template
|
|
203
|
+
suzi subagents init
|
|
204
|
+
|
|
205
|
+
# 2. Edit agent.ts with your logic
|
|
206
|
+
|
|
207
|
+
# 3. Deploy
|
|
208
|
+
suzi deploy ./agent.ts
|
|
209
|
+
|
|
210
|
+
# 4. Activate
|
|
211
|
+
suzi agents activate <agent-id>
|
|
212
|
+
|
|
213
|
+
# 5. Execute manually
|
|
214
|
+
suzi agents execute <agent-id>
|
|
215
|
+
\`\`\`
|
|
216
|
+
|
|
217
|
+
### Agent File Structure
|
|
218
|
+
|
|
219
|
+
Agent files must default-export a \`defineAgent()\` call. The file is self-contained — **no imports allowed** (the runtime provides \`defineAgent\`, \`on\`, \`resource\`, \`config\`, \`requirement\` as globals).
|
|
220
|
+
|
|
221
|
+
\`\`\`typescript
|
|
222
|
+
export default defineAgent({
|
|
223
|
+
meta: { ... }, // Required: name, version
|
|
224
|
+
resources: { ... }, // Optional: wallet requirements
|
|
225
|
+
config: { ... }, // Optional: user-configurable parameters
|
|
226
|
+
activationRequirements: { ... }, // Optional: balance checks before activation
|
|
227
|
+
lifecycle: { ... }, // Optional: onActivate, onDeactivate hooks
|
|
228
|
+
triggers: { ... }, // Required: at least one trigger
|
|
229
|
+
});
|
|
230
|
+
\`\`\`
|
|
231
|
+
|
|
232
|
+
### Minimal Agent
|
|
233
|
+
|
|
234
|
+
\`\`\`typescript
|
|
235
|
+
export default defineAgent({
|
|
236
|
+
meta: {
|
|
237
|
+
name: 'My Agent',
|
|
238
|
+
version: '0.1.0',
|
|
239
|
+
},
|
|
240
|
+
triggers: {
|
|
241
|
+
manual: on.suzi.manual(async (ctx, input) => {
|
|
242
|
+
await ctx.actions.suzi.log({ message: 'Hello from my agent!' });
|
|
243
|
+
return { ok: true };
|
|
244
|
+
}),
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
\`\`\`
|
|
248
|
+
|
|
249
|
+
### Full Agent Template
|
|
250
|
+
|
|
251
|
+
\`\`\`typescript
|
|
252
|
+
export default defineAgent({
|
|
253
|
+
meta: {
|
|
254
|
+
name: 'My Trading Agent',
|
|
255
|
+
version: '0.1.0',
|
|
256
|
+
description: 'Automated trading strategy',
|
|
257
|
+
tags: ['trading', 'solana'],
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
// Wallet resources the agent needs
|
|
261
|
+
resources: {
|
|
262
|
+
svmWallet: resource.wallet('svm'), // Solana wallet
|
|
263
|
+
evmWallet: resource.wallet('evm'), // Ethereum wallet (for Hyperliquid/Polymarket)
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
// User-configurable parameters (set during activation)
|
|
267
|
+
config: {
|
|
268
|
+
capital: config.number({
|
|
269
|
+
description: 'Initial capital in USDC',
|
|
270
|
+
min: 100,
|
|
271
|
+
max: 10000,
|
|
272
|
+
required: true,
|
|
273
|
+
default: 1000,
|
|
274
|
+
}),
|
|
275
|
+
},
|
|
276
|
+
|
|
277
|
+
// Balance checks before agent can activate
|
|
278
|
+
activationRequirements: {
|
|
279
|
+
__min_usdc: requirement.svmTokenBalance({
|
|
280
|
+
token: 'USDC',
|
|
281
|
+
minAmount: { $ref: 'config.capital' }, // References config value
|
|
282
|
+
description: 'Minimum USDC required',
|
|
283
|
+
}),
|
|
284
|
+
__min_sol: requirement.svmNativeBalance({
|
|
285
|
+
minAmount: 0.5,
|
|
286
|
+
description: 'Minimum SOL for transaction fees',
|
|
287
|
+
}),
|
|
288
|
+
},
|
|
289
|
+
|
|
290
|
+
// Lifecycle hooks
|
|
291
|
+
lifecycle: {
|
|
292
|
+
onActivate: async (ctx) => {
|
|
293
|
+
const { capital } = ctx.config as { capital: number };
|
|
294
|
+
await ctx.actions.suzi.log({ message: \`Activating with $\${capital} USDC\` });
|
|
295
|
+
const svmResult = await ctx.actions.suzi.get_svm_address({});
|
|
296
|
+
await ctx.actions.suzi.set_to_store({ key: 'initial_capital', value: capital });
|
|
297
|
+
},
|
|
298
|
+
|
|
299
|
+
onDeactivate: async (ctx) => {
|
|
300
|
+
await ctx.actions.suzi.log({ message: 'Deactivating — closing positions...' });
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
|
|
304
|
+
triggers: {
|
|
305
|
+
// Manual trigger — executed from dashboard or CLI
|
|
306
|
+
manual: on.suzi.manual(async (ctx, input) => {
|
|
307
|
+
await ctx.actions.suzi.log({ message: 'Manual execution' });
|
|
308
|
+
return { ok: true };
|
|
309
|
+
}),
|
|
310
|
+
|
|
311
|
+
// Cron trigger — runs on schedule
|
|
312
|
+
rebalance: on.suzi.cron(
|
|
313
|
+
{ schedule: '*/5 * * * *' }, // Every 5 minutes (standard cron syntax)
|
|
314
|
+
async (ctx) => {
|
|
315
|
+
await ctx.actions.suzi.log({ message: 'Rebalancing...' });
|
|
316
|
+
return { ok: true, action: 'rebalanced' };
|
|
317
|
+
}
|
|
318
|
+
),
|
|
319
|
+
},
|
|
320
|
+
});
|
|
321
|
+
\`\`\`
|
|
322
|
+
|
|
323
|
+
### Agent Context (ctx)
|
|
324
|
+
|
|
325
|
+
Available in all trigger handlers and lifecycle hooks:
|
|
326
|
+
|
|
327
|
+
\`\`\`typescript
|
|
328
|
+
ctx.actions.<protocol>.<action>() // Call any protocol action
|
|
329
|
+
ctx.config // Access config values
|
|
330
|
+
\`\`\`
|
|
331
|
+
|
|
332
|
+
**To see what protocols and actions are available, run \`suzi list-tools --verbose\`.**
|
|
333
|
+
Actions are called as \`ctx.actions.<protocol>.<action_name>({ ...params })\`.
|
|
334
|
+
|
|
335
|
+
### Validation Rules
|
|
336
|
+
|
|
337
|
+
- Agent **must** default-export via \`defineAgent({})\`
|
|
338
|
+
- **No imports/requires** — agent code must be self-contained
|
|
339
|
+
- \`triggers\` object is **required** with at least one trigger
|
|
340
|
+
- Each trigger must have a \`type\` (e.g., \`suzi.manual\`, \`suzi.cron\`)
|
|
341
|
+
- Config fields need \`type\` and \`description\`
|
|
342
|
+
- The file is transpiled from TypeScript to JavaScript and executed in a VM2 sandbox
|
|
343
|
+
|
|
344
|
+
### Agent Statuses
|
|
345
|
+
|
|
346
|
+
| Status | Description |
|
|
347
|
+
|--------|-------------|
|
|
348
|
+
| \`draft\` | Created but not activated. No wallets allocated. |
|
|
349
|
+
| \`active\` | Running. Cron triggers fire on schedule, event triggers are subscribed. |
|
|
350
|
+
| \`inactive\` | Deactivated. Triggers stopped. Can be reactivated. |
|
|
351
|
+
| \`deleted\` | Soft-deleted. Not recoverable from CLI. |
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## Trigger Types
|
|
356
|
+
|
|
357
|
+
| Trigger | Syntax | Description |
|
|
358
|
+
|---------|--------|-------------|
|
|
359
|
+
| Manual | \`on.suzi.manual(handler)\` | Triggered from dashboard or \`suzi agents execute\` |
|
|
360
|
+
| Cron | \`on.suzi.cron({ schedule }, handler)\` | Runs on cron schedule (e.g., \`'*/5 * * * *'\`) |
|
|
361
|
+
| Event | \`on.<protocol>.event(config, handler)\` | Triggered by realtime protocol events |
|
|
362
|
+
|
|
363
|
+
### Cron Schedule Examples
|
|
364
|
+
|
|
365
|
+
| Schedule | Meaning |
|
|
366
|
+
|----------|---------|
|
|
367
|
+
| \`*/1 * * * *\` | Every minute |
|
|
368
|
+
| \`*/5 * * * *\` | Every 5 minutes |
|
|
369
|
+
| \`0 * * * *\` | Every hour |
|
|
370
|
+
| \`0 */4 * * *\` | Every 4 hours |
|
|
371
|
+
| \`0 0 * * *\` | Daily at midnight |
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Common Workflows
|
|
376
|
+
|
|
377
|
+
### Deploy & Activate in One Command
|
|
378
|
+
|
|
379
|
+
\`\`\`bash
|
|
380
|
+
suzi deploy ./agent.ts --activate
|
|
381
|
+
\`\`\`
|
|
382
|
+
|
|
383
|
+
### Update Running Agent Code
|
|
384
|
+
|
|
385
|
+
\`\`\`bash
|
|
386
|
+
suzi deploy ./agent.ts --update <agent-id>
|
|
387
|
+
\`\`\`
|
|
388
|
+
|
|
389
|
+
### Monitor Agent
|
|
390
|
+
|
|
391
|
+
\`\`\`bash
|
|
392
|
+
suzi agents logs <id> # View recent logs
|
|
393
|
+
suzi agents logs <id> --level error # Check for errors
|
|
394
|
+
suzi txns --agent <id> # View transactions
|
|
395
|
+
\`\`\`
|
|
396
|
+
|
|
397
|
+
### Typical Development Loop
|
|
398
|
+
|
|
399
|
+
\`\`\`bash
|
|
400
|
+
# 1. Create template
|
|
401
|
+
suzi subagents init --dir ./my-agent
|
|
402
|
+
|
|
403
|
+
# 2. Edit agent.ts — write your logic
|
|
404
|
+
|
|
405
|
+
# 3. Deploy as draft
|
|
406
|
+
suzi deploy ./my-agent/agent.ts
|
|
407
|
+
|
|
408
|
+
# 4. Review
|
|
409
|
+
suzi agents view <id>
|
|
410
|
+
|
|
411
|
+
# 5. Activate
|
|
412
|
+
suzi agents activate <id>
|
|
413
|
+
|
|
414
|
+
# 6. Test manually
|
|
415
|
+
suzi agents execute <id>
|
|
416
|
+
|
|
417
|
+
# 7. Check results
|
|
418
|
+
suzi agents logs <id>
|
|
419
|
+
|
|
420
|
+
# 8. Iterate — update code
|
|
421
|
+
suzi deploy ./my-agent/agent.ts --update <id>
|
|
422
|
+
\`\`\`
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
## Tips & Best Practices
|
|
427
|
+
|
|
428
|
+
1. **Start simple** — begin with a manual trigger, test it, then add cron/event triggers
|
|
429
|
+
2. **Use \`suzi.log\`** liberally — logs are your debugging tool since agents run in a sandbox
|
|
430
|
+
3. **Use \`suzi.set_to_store / get_from_store\`** for state that persists across trigger executions
|
|
431
|
+
4. **Activation requirements** prevent agents from starting without sufficient funds
|
|
432
|
+
5. **Kill switches** — add a cron trigger that checks drawdown and calls \`request_deactivation\` if needed
|
|
433
|
+
6. **No imports** — all code must be self-contained. Use \`ctx.actions\` for all external interactions
|
|
434
|
+
7. **Test with manual triggers first**, then add cron schedules
|
|
435
|
+
8. **Connect Telegram** (\`suzi prefs telegram\`) for \`suzi.notify\` alerts
|
|
436
|
+
`;
|
|
437
|
+
// ─────────────────────────────────────────────────────────────
|
|
438
|
+
// Registry
|
|
439
|
+
// ─────────────────────────────────────────────────────────────
|
|
440
|
+
const SKILLS = [
|
|
441
|
+
{
|
|
442
|
+
name: 'suzi-guide',
|
|
443
|
+
filename: 'suzi-guide.md',
|
|
444
|
+
description: 'Comprehensive guide for Suzi CLI commands, agent creation, protocols & actions',
|
|
445
|
+
sections: [
|
|
446
|
+
{ title: 'CLI-First Data Fetching', description: 'Always use suzi CLI for live data — protocols, balances, agents, etc.' },
|
|
447
|
+
{ title: 'Installing the Suzi CLI', description: 'pnpm add suzi, first-time setup, requirements' },
|
|
448
|
+
{ title: 'CLI Commands Reference', description: 'All suzi commands: login, wallet, portfolio, agents, deploy, tools, etc.' },
|
|
449
|
+
{ title: 'Creating Agents', description: 'Quick start, file structure, minimal agent, full template with all sections' },
|
|
450
|
+
{ title: 'Trigger Types', description: 'Manual, cron, and event triggers with schedule syntax' },
|
|
451
|
+
{ title: 'Common Workflows', description: 'Deploy+activate, update, monitor, typical dev loop' },
|
|
452
|
+
{ title: 'Tips & Best Practices', description: 'Logging, state management, kill switches, testing patterns' },
|
|
453
|
+
],
|
|
454
|
+
content: SUZI_GUIDE_SKILL,
|
|
455
|
+
},
|
|
456
|
+
];
|
|
457
|
+
// ─────────────────────────────────────────────────────────────
|
|
458
|
+
// Command
|
|
459
|
+
// ─────────────────────────────────────────────────────────────
|
|
460
|
+
function registerSkillsCommand(program) {
|
|
461
|
+
const skills = program
|
|
462
|
+
.command('skills')
|
|
463
|
+
.description('Manage Claude Code skills for Suzi');
|
|
464
|
+
// suzi skills — list available skills
|
|
465
|
+
skills.action(() => {
|
|
466
|
+
(0, ui_1.header)('Available Skills');
|
|
467
|
+
console.log();
|
|
468
|
+
for (const skill of SKILLS) {
|
|
469
|
+
console.log(` ${ui_1.colors.primary('▸')} ${chalk_1.default.bold(skill.name)}`);
|
|
470
|
+
console.log(` ${ui_1.colors.muted(skill.description)}`);
|
|
471
|
+
console.log(` ${ui_1.colors.muted('Install:')} ${chalk_1.default.cyan(`suzi skills add ${skill.name}`)}`);
|
|
472
|
+
console.log();
|
|
473
|
+
}
|
|
474
|
+
(0, ui_1.divider)();
|
|
475
|
+
(0, ui_1.info)(`${SKILLS.length} skill(s) available.`);
|
|
476
|
+
(0, ui_1.info)('Use `suzi skills add <name>` to install, or `suzi skills add --all` for all.');
|
|
477
|
+
});
|
|
478
|
+
// suzi skills show <name>
|
|
479
|
+
skills
|
|
480
|
+
.command('show <name>')
|
|
481
|
+
.description('Show skill details and contents')
|
|
482
|
+
.option('--full', 'Print the full markdown content')
|
|
483
|
+
.action((name, opts) => {
|
|
484
|
+
const skill = SKILLS.find((s) => s.name === name);
|
|
485
|
+
if (!skill) {
|
|
486
|
+
(0, ui_1.error)(`Skill "${name}" not found.`);
|
|
487
|
+
(0, ui_1.info)(`Available: ${SKILLS.map((s) => s.name).join(', ')}`);
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
(0, ui_1.header)(skill.name);
|
|
491
|
+
console.log();
|
|
492
|
+
(0, ui_1.label)('Path', `~/.claude/skills/${skill.name}/SKILL.md`);
|
|
493
|
+
(0, ui_1.label)('Description', skill.description);
|
|
494
|
+
(0, ui_1.label)('Size', `${skill.content.split('\n').length} lines`);
|
|
495
|
+
console.log();
|
|
496
|
+
// Show sections
|
|
497
|
+
console.log(chalk_1.default.bold(' Sections:'));
|
|
498
|
+
console.log();
|
|
499
|
+
for (let i = 0; i < skill.sections.length; i++) {
|
|
500
|
+
const s = skill.sections[i];
|
|
501
|
+
console.log(` ${ui_1.colors.primary(`${i + 1}.`)} ${chalk_1.default.bold(s.title)}`);
|
|
502
|
+
console.log(` ${ui_1.colors.muted(s.description)}`);
|
|
503
|
+
}
|
|
504
|
+
console.log();
|
|
505
|
+
(0, ui_1.divider)();
|
|
506
|
+
if (opts.full) {
|
|
507
|
+
console.log();
|
|
508
|
+
console.log(skill.content);
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
(0, ui_1.info)(`Use --full to print the entire skill content.`);
|
|
512
|
+
(0, ui_1.info)(`Use \`suzi skills add ${name}\` to install it.`);
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
// suzi skills add <name>
|
|
516
|
+
skills
|
|
517
|
+
.command('add [name]')
|
|
518
|
+
.description('Install a skill to .claude/skills/')
|
|
519
|
+
.option('--all', 'Install all available skills')
|
|
520
|
+
.option('--dir <path>', 'Custom output directory (default: ~/.claude/skills/)')
|
|
521
|
+
.action((name, opts) => {
|
|
522
|
+
const targetDir = opts?.dir
|
|
523
|
+
? path_1.default.resolve(process.cwd(), opts.dir)
|
|
524
|
+
: path_1.default.join(os_1.default.homedir(), '.claude', 'skills');
|
|
525
|
+
// Determine which skills to install
|
|
526
|
+
let toInstall;
|
|
527
|
+
if (opts?.all) {
|
|
528
|
+
toInstall = SKILLS;
|
|
529
|
+
}
|
|
530
|
+
else if (name) {
|
|
531
|
+
const skill = SKILLS.find((s) => s.name === name);
|
|
532
|
+
if (!skill) {
|
|
533
|
+
(0, ui_1.error)(`Skill "${name}" not found.`);
|
|
534
|
+
(0, ui_1.info)(`Available: ${SKILLS.map((s) => s.name).join(', ')}`);
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
toInstall = [skill];
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
(0, ui_1.error)('Specify a skill name or use --all.');
|
|
541
|
+
(0, ui_1.info)(`Available: ${SKILLS.map((s) => s.name).join(', ')}`);
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
// Create directory
|
|
545
|
+
if (!fs_1.default.existsSync(targetDir)) {
|
|
546
|
+
fs_1.default.mkdirSync(targetDir, { recursive: true });
|
|
547
|
+
}
|
|
548
|
+
for (const skill of toInstall) {
|
|
549
|
+
const skillDir = path_1.default.join(targetDir, skill.name);
|
|
550
|
+
const filePath = path_1.default.join(skillDir, 'SKILL.md');
|
|
551
|
+
const exists = fs_1.default.existsSync(filePath);
|
|
552
|
+
if (!fs_1.default.existsSync(skillDir)) {
|
|
553
|
+
fs_1.default.mkdirSync(skillDir, { recursive: true });
|
|
554
|
+
}
|
|
555
|
+
fs_1.default.writeFileSync(filePath, skill.content);
|
|
556
|
+
const displayPath = filePath.startsWith(os_1.default.homedir())
|
|
557
|
+
? '~' + filePath.slice(os_1.default.homedir().length)
|
|
558
|
+
: path_1.default.relative(process.cwd(), filePath);
|
|
559
|
+
if (exists) {
|
|
560
|
+
(0, ui_1.success)(`Updated ${chalk_1.default.bold(skill.name)} → ${displayPath}`);
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
(0, ui_1.success)(`Installed ${chalk_1.default.bold(skill.name)} → ${displayPath}`);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
console.log();
|
|
567
|
+
(0, ui_1.divider)();
|
|
568
|
+
(0, ui_1.info)('Skills are now available to Claude Code in this project.');
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../../src/commands/subagents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0I/D"}
|