eigen-skills 1.1.3 → 1.1.5
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/README.md +10 -0
- package/SKILL.md +144 -225
- package/VIDEO_SCRIPT.md +180 -0
- package/index.js +15 -3
- package/package.json +9 -10
- package/scripts/demo.js +93 -0
- package/skills/eigen-avs/SKILL.md +92 -0
- package/skills/eigen-avs/scripts/avs-api.js +117 -0
- package/skills/eigen-da/SKILL.md +148 -0
- package/skills/eigen-da/scripts/da-api.js +128 -0
- package/skills/eigen-delegation/SKILL.md +98 -0
- package/skills/eigen-delegation/scripts/delegation-api.js +102 -0
- package/skills/eigen-restaking/SKILL.md +92 -0
- package/skills/eigen-restaking/scripts/eigen-api.js +196 -0
- package/skills/eigen-rewards/SKILL.md +83 -0
- package/skills/eigen-rewards/scripts/rewards-api.js +73 -0
package/README.md
CHANGED
|
@@ -139,6 +139,16 @@ mkdir -p .claude/skills/eigen
|
|
|
139
139
|
curl -o .claude/skills/eigen/SKILL.md https://raw.githubusercontent.com/zeeshan8281/eigen-agent-skills/main/SKILL.md
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
+
### As an MCP Server (Claude Desktop, Cursor, Windsurf, Claude Code)
|
|
143
|
+
|
|
144
|
+
Install the separate [`eigen-mcp`](https://www.npmjs.com/package/eigen-mcp) package for MCP support — all 21 tools, no SKILL.md files or curl needed:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
npm install -g eigen-mcp
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
See the [eigen-mcp README](https://www.npmjs.com/package/eigen-mcp) for config examples for Claude Desktop, Cursor, Windsurf, and Claude Code.
|
|
151
|
+
|
|
142
152
|
### For Programmatic Use (JavaScript)
|
|
143
153
|
|
|
144
154
|
```javascript
|
package/SKILL.md
CHANGED
|
@@ -1,249 +1,218 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eigen-skills
|
|
3
|
-
description: "
|
|
4
|
-
version: 1.
|
|
3
|
+
description: "Deploy any app to EigenCompute TEE — hardware-isolated Trusted Execution Environments with encrypted memory, sealed secrets, and cryptographic attestation"
|
|
4
|
+
version: 1.1.5
|
|
5
5
|
metadata:
|
|
6
|
-
emoji: "
|
|
7
|
-
tags: ["
|
|
6
|
+
emoji: "🔒"
|
|
7
|
+
tags: ["eigencompute", "tee", "deploy", "ecloud"]
|
|
8
8
|
user-invocable: true
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
#
|
|
11
|
+
# EigenCompute Deploy Skill
|
|
12
12
|
|
|
13
|
-
One-command integration:
|
|
13
|
+
One-command integration: install this skill and Claude Code can deploy any app to EigenCompute TEE.
|
|
14
14
|
|
|
15
|
-
## Setup
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
curl -o SKILL.md https://raw.githubusercontent.com/zeeshan8281/eigen-agent-skills/main/SKILL.md
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Get a free API key at https://developer.eigenexplorer.com and set it:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
export EIGEN_API_KEY="your-key-here"
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Data Source
|
|
28
|
-
|
|
29
|
-
**EigenExplorer API** — `https://api.eigenexplorer.com`
|
|
30
|
-
- Auth: `x-api-token` header
|
|
31
|
-
- Testnet: `https://api-holesky.eigenexplorer.com`
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## 1. Ecosystem Metrics
|
|
36
|
-
|
|
37
|
-
Use when the user asks about EigenLayer stats, total TVL, total stakers, total operators, or an ecosystem overview.
|
|
38
|
-
|
|
39
|
-
### Get ecosystem metrics
|
|
40
|
-
```bash
|
|
41
|
-
curl -s "https://api.eigenexplorer.com/metrics" -H "x-api-token: $EIGEN_API_KEY"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Get historical TVL
|
|
45
15
|
```bash
|
|
46
|
-
|
|
16
|
+
npm install eigen-skills
|
|
47
17
|
```
|
|
48
18
|
|
|
49
19
|
---
|
|
50
20
|
|
|
51
|
-
##
|
|
52
|
-
|
|
53
|
-
Use when the user asks about EigenLayer operators, top operators, operator details, or operator search.
|
|
21
|
+
## FIRST-TIME SETUP (do these once)
|
|
54
22
|
|
|
55
|
-
###
|
|
23
|
+
### Step 1: Install the ecloud CLI
|
|
56
24
|
```bash
|
|
57
|
-
|
|
25
|
+
npm install -g @layr-labs/ecloud-cli
|
|
58
26
|
```
|
|
59
27
|
|
|
60
|
-
###
|
|
28
|
+
### Step 2: Generate keys and authenticate
|
|
29
|
+
For new users who have never used ecloud before:
|
|
61
30
|
```bash
|
|
62
|
-
|
|
31
|
+
ecloud auth generate --store
|
|
63
32
|
```
|
|
33
|
+
This generates a new private key AND stores it in the OS keyring in one step.
|
|
64
34
|
|
|
65
|
-
|
|
35
|
+
If they already have a private key:
|
|
66
36
|
```bash
|
|
67
|
-
|
|
37
|
+
ecloud auth login
|
|
68
38
|
```
|
|
39
|
+
This will prompt them to paste their existing private key.
|
|
69
40
|
|
|
70
|
-
###
|
|
41
|
+
### Step 3: Verify authentication
|
|
71
42
|
```bash
|
|
72
|
-
|
|
43
|
+
ecloud auth whoami
|
|
73
44
|
```
|
|
45
|
+
Should show their address and "stored credentials".
|
|
74
46
|
|
|
75
|
-
###
|
|
47
|
+
### Step 4: Subscribe to billing (required before first deploy)
|
|
76
48
|
```bash
|
|
77
|
-
|
|
49
|
+
ecloud billing subscribe
|
|
78
50
|
```
|
|
79
|
-
|
|
80
|
-
### Get stakers delegating to an operator
|
|
51
|
+
Check status:
|
|
81
52
|
```bash
|
|
82
|
-
|
|
53
|
+
ecloud billing status
|
|
83
54
|
```
|
|
84
55
|
|
|
85
|
-
###
|
|
56
|
+
### Step 5: Ensure Docker is installed and running
|
|
57
|
+
Docker Desktop (or docker daemon) must be running. The deploy process builds and pushes images. Check with:
|
|
86
58
|
```bash
|
|
87
|
-
|
|
59
|
+
docker info
|
|
88
60
|
```
|
|
61
|
+
If Docker is not running, start Docker Desktop:
|
|
62
|
+
- macOS: `open -a Docker`
|
|
63
|
+
- Then wait for `docker info` to succeed before proceeding.
|
|
89
64
|
|
|
90
65
|
---
|
|
91
66
|
|
|
92
|
-
##
|
|
67
|
+
## DEPLOYING AN APP (full playbook)
|
|
93
68
|
|
|
94
|
-
|
|
69
|
+
**CRITICAL: The `ecloud compute app deploy` CLI is fully interactive with 6+ prompts. It CANNOT be run directly from a non-interactive shell. You MUST use an expect script to automate the prompts.**
|
|
95
70
|
|
|
96
|
-
###
|
|
97
|
-
|
|
98
|
-
curl -s "https://api.eigenexplorer.com/stakers/0xSTAKER_ADDRESS" -H "x-api-token: $EIGEN_API_KEY"
|
|
99
|
-
```
|
|
71
|
+
### Step 1: Ensure the project has a Dockerfile
|
|
72
|
+
If the project does not have a Dockerfile, generate one based on the project type:
|
|
100
73
|
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
|
|
74
|
+
**Node.js:**
|
|
75
|
+
```dockerfile
|
|
76
|
+
FROM node:20-slim
|
|
77
|
+
WORKDIR /app
|
|
78
|
+
COPY package*.json ./
|
|
79
|
+
RUN npm ci --omit=dev
|
|
80
|
+
COPY . .
|
|
81
|
+
EXPOSE 3000
|
|
82
|
+
CMD ["node", "index.js"]
|
|
104
83
|
```
|
|
105
84
|
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
|
|
85
|
+
**Python:**
|
|
86
|
+
```dockerfile
|
|
87
|
+
FROM python:3.12-slim
|
|
88
|
+
WORKDIR /app
|
|
89
|
+
COPY requirements.txt ./
|
|
90
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
91
|
+
COPY . .
|
|
92
|
+
EXPOSE 8000
|
|
93
|
+
CMD ["python", "main.py"]
|
|
109
94
|
```
|
|
110
95
|
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
|
|
96
|
+
**Go:**
|
|
97
|
+
```dockerfile
|
|
98
|
+
FROM golang:1.22-alpine AS builder
|
|
99
|
+
WORKDIR /app
|
|
100
|
+
COPY go.* ./
|
|
101
|
+
RUN go mod download
|
|
102
|
+
COPY . .
|
|
103
|
+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server .
|
|
104
|
+
FROM alpine:3.19
|
|
105
|
+
COPY --from=builder /app/server /server
|
|
106
|
+
EXPOSE 8080
|
|
107
|
+
CMD ["/server"]
|
|
114
108
|
```
|
|
115
109
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
110
|
+
**Rust:**
|
|
111
|
+
```dockerfile
|
|
112
|
+
FROM rust:1.77-slim AS builder
|
|
113
|
+
WORKDIR /app
|
|
114
|
+
COPY . .
|
|
115
|
+
RUN cargo build --release
|
|
116
|
+
FROM debian:bookworm-slim
|
|
117
|
+
COPY --from=builder /app/target/release/app /app
|
|
118
|
+
EXPOSE 8080
|
|
119
|
+
CMD ["/app"]
|
|
125
120
|
```
|
|
126
121
|
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
curl -s "https://api.eigenexplorer.com/avs?withTvl=true&sortByApy=desc&take=10" -H "x-api-token: $EIGEN_API_KEY"
|
|
122
|
+
Also create a `.dockerignore`:
|
|
130
123
|
```
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
124
|
+
node_modules
|
|
125
|
+
.git
|
|
126
|
+
target
|
|
127
|
+
__pycache__
|
|
135
128
|
```
|
|
136
129
|
|
|
137
|
-
###
|
|
130
|
+
### Step 2: Build the Docker image
|
|
131
|
+
**IMPORTANT: Must build for linux/amd64 — EigenCompute TEEs run on x86_64.**
|
|
138
132
|
```bash
|
|
139
|
-
|
|
133
|
+
docker build --platform linux/amd64 -t <REGISTRY_USER>/<APP_NAME>:latest .
|
|
140
134
|
```
|
|
141
135
|
|
|
142
|
-
###
|
|
136
|
+
### Step 3: Push to a container registry
|
|
137
|
+
The image must be in a public registry (Docker Hub or GHCR) so EigenCompute can pull it.
|
|
143
138
|
```bash
|
|
144
|
-
|
|
139
|
+
docker push <REGISTRY_USER>/<APP_NAME>:latest
|
|
145
140
|
```
|
|
146
141
|
|
|
147
|
-
###
|
|
148
|
-
|
|
149
|
-
curl -s "https://api.eigenexplorer.com/avs/0xAVS_ADDRESS/stakers?take=20" -H "x-api-token: $EIGEN_API_KEY"
|
|
150
|
-
```
|
|
142
|
+
### Step 4: Deploy using an expect script
|
|
143
|
+
Create a file called `deploy.exp` and run it with `expect`. This handles all interactive prompts:
|
|
151
144
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
```
|
|
145
|
+
```expect
|
|
146
|
+
#!/usr/bin/expect -f
|
|
147
|
+
set timeout 300
|
|
156
148
|
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
curl -s "https://api.eigenexplorer.com/avs/0xAVS_ADDRESS/events/registration?take=20" -H "x-api-token: $EIGEN_API_KEY"
|
|
160
|
-
```
|
|
149
|
+
spawn ecloud compute app deploy --name "<APP_NAME>" --image-ref "<REGISTRY_USER>/<APP_NAME>:latest" --skip-profile --log-visibility public
|
|
161
150
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
```
|
|
151
|
+
# Prompt 1: Build from verifiable source? -> No
|
|
152
|
+
expect "Build from verifiable source?"
|
|
153
|
+
send "n\r"
|
|
166
154
|
|
|
167
|
-
|
|
155
|
+
# Prompt 2: Choose deployment method -> "Deploy existing image from registry" (arrow down once)
|
|
156
|
+
expect "Choose deployment method:"
|
|
157
|
+
send "\033\[B\r"
|
|
168
158
|
|
|
169
|
-
|
|
159
|
+
# Prompt 3: Env file -> "Continue without env file" (arrow down once)
|
|
160
|
+
# If the project has a .env file, select "Enter path to existing env file" instead (just press enter)
|
|
161
|
+
expect "Choose an option:"
|
|
162
|
+
send "\033\[B\r"
|
|
170
163
|
|
|
171
|
-
|
|
164
|
+
# Prompt 4: Instance type -> default g1-micro-1v (just press enter)
|
|
165
|
+
# Use arrow keys to select a larger instance if needed
|
|
166
|
+
expect "Choose instance:"
|
|
167
|
+
send "\r"
|
|
172
168
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
```
|
|
169
|
+
# Prompt 5: Resource usage monitoring -> Yes (just press enter)
|
|
170
|
+
expect "resource usage"
|
|
171
|
+
send "\r"
|
|
177
172
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
173
|
+
# Catch any remaining prompts
|
|
174
|
+
expect {
|
|
175
|
+
"Confirm" { send "y\r"; exp_continue }
|
|
176
|
+
"(y/N)" { send "y\r"; exp_continue }
|
|
177
|
+
"(Y/n)" { send "y\r"; exp_continue }
|
|
178
|
+
eof { }
|
|
179
|
+
}
|
|
181
180
|
```
|
|
182
181
|
|
|
183
|
-
|
|
182
|
+
Run it:
|
|
184
183
|
```bash
|
|
185
|
-
|
|
184
|
+
chmod +x deploy.exp && expect deploy.exp
|
|
186
185
|
```
|
|
187
186
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
## 6. Deposits & Withdrawals (Global)
|
|
191
|
-
|
|
192
|
-
Use when the user asks about recent deposits/withdrawals across the whole protocol.
|
|
193
|
-
|
|
194
|
-
### Get recent deposits
|
|
195
|
-
```bash
|
|
196
|
-
curl -s "https://api.eigenexplorer.com/deposits?take=20" -H "x-api-token: $EIGEN_API_KEY"
|
|
187
|
+
The output will contain the **App ID** and **IP address** on success:
|
|
197
188
|
```
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
curl -s "https://api.eigenexplorer.com/withdrawals?take=20" -H "x-api-token: $EIGEN_API_KEY"
|
|
189
|
+
App ID: 0x...
|
|
190
|
+
App is now running with IP: x.x.x.x
|
|
202
191
|
```
|
|
203
192
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
## 7. Delegation & Events
|
|
207
|
-
|
|
208
|
-
Use when the user asks about delegation events, who is delegating to whom, or operator registration events.
|
|
209
|
-
|
|
210
|
-
### Get delegation events
|
|
193
|
+
### Step 5: Verify the deployment
|
|
211
194
|
```bash
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
### Get operator registration events
|
|
216
|
-
```bash
|
|
217
|
-
curl -s "https://api.eigenexplorer.com/events/registration-status?take=20" -H "x-api-token: $EIGEN_API_KEY"
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### Get all operator-sets
|
|
221
|
-
```bash
|
|
222
|
-
curl -s "https://api.eigenexplorer.com/operator-sets?take=20" -H "x-api-token: $EIGEN_API_KEY"
|
|
195
|
+
ecloud compute app list
|
|
196
|
+
ecloud compute app info <APP_ID>
|
|
223
197
|
```
|
|
224
198
|
|
|
225
199
|
---
|
|
226
200
|
|
|
227
|
-
##
|
|
201
|
+
## Instance types available
|
|
228
202
|
|
|
229
|
-
|
|
203
|
+
| Instance | Specs | TEE Type |
|
|
204
|
+
|----------|-------|----------|
|
|
205
|
+
| g1-micro-1v | 2 shared vCPUs, 1 GB RAM | Shielded VM (default) |
|
|
206
|
+
| g1-medium-1v | 2 shared vCPUs, 4 GB RAM | Shielded VM |
|
|
207
|
+
| g1-custom-2-4096s | 2 vCPUs, 4 GB RAM | SEV-SNP |
|
|
208
|
+
| g1-standard-2s | 2 vCPUs, 8 GB RAM | SEV-SNP |
|
|
209
|
+
| g1-standard-4t | 4 vCPUs, 16 GB RAM | TDX |
|
|
210
|
+
| g1-standard-8t | 8 vCPUs, 32 GB RAM | TDX |
|
|
230
211
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
### Authentication
|
|
234
|
-
```bash
|
|
235
|
-
ecloud auth login
|
|
236
|
-
ecloud auth whoami
|
|
237
|
-
```
|
|
212
|
+
---
|
|
238
213
|
|
|
239
|
-
|
|
240
|
-
```bash
|
|
241
|
-
ecloud compute app create --name my-app --language typescript
|
|
242
|
-
ecloud compute app deploy
|
|
243
|
-
```
|
|
244
|
-
Always use **"Build and deploy from Dockerfile"** — deploy from registry is unreliable.
|
|
214
|
+
## Manage deployed apps
|
|
245
215
|
|
|
246
|
-
### Manage apps
|
|
247
216
|
```bash
|
|
248
217
|
ecloud compute app list
|
|
249
218
|
ecloud compute app info <APP_ID>
|
|
@@ -254,75 +223,25 @@ ecloud compute app terminate <APP_ID>
|
|
|
254
223
|
ecloud compute app upgrade <APP_ID>
|
|
255
224
|
```
|
|
256
225
|
|
|
257
|
-
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Set sealed secrets (encrypted env vars, decrypted only inside TEE)
|
|
229
|
+
|
|
258
230
|
```bash
|
|
259
231
|
ecloud compute app env set MY_SECRET="value" API_KEY="key"
|
|
260
232
|
```
|
|
261
233
|
|
|
262
|
-
### TEE attestation
|
|
263
|
-
Inside the TEE, the KMS signing key is at `/usr/local/bin/kms-signing-public-key.pem`. Verify at `https://verify-sepolia.eigencloud.xyz`.
|
|
264
|
-
|
|
265
234
|
---
|
|
266
235
|
|
|
267
|
-
##
|
|
268
|
-
|
|
269
|
-
Use when the user asks about storing/retrieving data on EigenDA, blob storage, or data availability.
|
|
270
|
-
|
|
271
|
-
**Requires:** EigenDA Proxy running locally:
|
|
272
|
-
```bash
|
|
273
|
-
docker run -d --name eigenda-proxy -p 3100:3100 \
|
|
274
|
-
ghcr.io/layr-labs/eigenda-proxy:latest \
|
|
275
|
-
--eigenda.disperser-rpc=disperser-sepolia.eigenda.xyz:443 \
|
|
276
|
-
--eigenda.service-manager-addr=0xD4A7E1Bd8015057293f0D0A557088c286942e84b \
|
|
277
|
-
--eigenda.eth-rpc=YOUR_SEPOLIA_RPC_URL \
|
|
278
|
-
--eigenda.status-query-timeout=45s \
|
|
279
|
-
--eigenda.signer-private-key-hex=YOUR_PRIVATE_KEY \
|
|
280
|
-
--memstore.enabled=false --eigenda.disable-tls=false
|
|
281
|
-
```
|
|
236
|
+
## TEE attestation
|
|
282
237
|
|
|
283
|
-
|
|
284
|
-
```bash
|
|
285
|
-
curl -s -X POST "http://127.0.0.1:3100/put?commitment_mode=standard" \
|
|
286
|
-
-H "Content-Type: application/json" \
|
|
287
|
-
-d '{"key": "value"}'
|
|
288
|
-
```
|
|
238
|
+
Inside the TEE, the KMS signing key is at `/usr/local/bin/kms-signing-public-key.pem`. Verify at `https://verify-sepolia.eigencloud.xyz`.
|
|
289
239
|
|
|
290
|
-
|
|
291
|
-
```bash
|
|
292
|
-
curl -s "http://127.0.0.1:3100/get/COMMITMENT_HASH?commitment_mode=standard"
|
|
293
|
-
```
|
|
240
|
+
---
|
|
294
241
|
|
|
295
|
-
|
|
296
|
-
```bash
|
|
297
|
-
curl -s "http://127.0.0.1:3100/health"
|
|
298
|
-
```
|
|
242
|
+
## Dashboard
|
|
299
243
|
|
|
300
|
-
|
|
244
|
+
View any deployed app at:
|
|
301
245
|
```
|
|
302
|
-
https://
|
|
246
|
+
https://verify-sepolia.eigencloud.xyz/app/<APP_ID>
|
|
303
247
|
```
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
|
|
307
|
-
## Query Parameters Reference
|
|
308
|
-
|
|
309
|
-
| Parameter | Used On | Values | Description |
|
|
310
|
-
|-----------|---------|--------|-------------|
|
|
311
|
-
| `withTvl` | operators, avs | `true`/`false` | Include TVL calculations |
|
|
312
|
-
| `sortByTvl` | operators, avs | `asc`/`desc` | Sort by TVL |
|
|
313
|
-
| `sortByApy` | operators, avs | `asc`/`desc` | Sort by APY |
|
|
314
|
-
| `sortByTotalStakers` | operators, avs | `asc`/`desc` | Sort by staker count |
|
|
315
|
-
| `sortByTotalAvs` | operators | `asc`/`desc` | Sort by AVS count |
|
|
316
|
-
| `searchByText` | operators, avs | string | Case-insensitive name search |
|
|
317
|
-
| `skip` | all list endpoints | number | Pagination offset (default: 0) |
|
|
318
|
-
| `take` | all list endpoints | number | Results per page (default: 12) |
|
|
319
|
-
|
|
320
|
-
## Response Formatting
|
|
321
|
-
|
|
322
|
-
When presenting results to users:
|
|
323
|
-
- **Bold names** and abbreviate addresses (`0x1234...abcd`)
|
|
324
|
-
- TVL in human-readable form ("$1.2B" not "1200000000")
|
|
325
|
-
- APY as percentages ("4.2% APY")
|
|
326
|
-
- Show staker counts and operator counts
|
|
327
|
-
- Use bullet points, not tables
|
|
328
|
-
- Flag high APY + low TVL as potentially risky
|
package/VIDEO_SCRIPT.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Eigen Skills & Eigen MCP — Code Walkthrough Script
|
|
2
|
+
|
|
3
|
+
## Video Details
|
|
4
|
+
- **Target length**: ~10-12 minutes
|
|
5
|
+
- **Tone**: Developer-to-developer, casual but technically precise
|
|
6
|
+
- **Audience**: Devs interested in AI agent tooling, EigenLayer ecosystem
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## FLOW (at a glance)
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
1. Hook & Context (~1 min)
|
|
14
|
+
2. Project Overview (~1 min)
|
|
15
|
+
3. Skills Deep Dive (~3 min)
|
|
16
|
+
4. MCP Deep Dive (~2 min)
|
|
17
|
+
5. Skills vs MCP — same data, two paths (~1 min)
|
|
18
|
+
6. Live Demo (~3 min)
|
|
19
|
+
7. Chat UI & Deployment (~1.5 min)
|
|
20
|
+
8. Wrap-up (~30s)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## SCRIPT
|
|
26
|
+
|
|
27
|
+
### 1. Hook & Context (0:00 – 1:00)
|
|
28
|
+
|
|
29
|
+
> "What if any AI agent — Claude Code, Cursor, Windsurf — could query live EigenLayer data just by reading a markdown file?
|
|
30
|
+
>
|
|
31
|
+
> That's what we built. This is `eigen-skills` — an open-source package that gives AI agents the ability to query operators, AVS data, staker positions, rewards, delegation events, TEE compute, and data availability blobs — all from the EigenLayer ecosystem.
|
|
32
|
+
>
|
|
33
|
+
> There are two integration paths: **Agent Skills** for Claude Code and compatible agents, and **MCP** for Claude Desktop, Cursor, and Windsurf. Let me walk you through the code."
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
### 2. Project Overview (1:00 – 2:00)
|
|
38
|
+
|
|
39
|
+
**[SCREEN: terminal, run `ls` or show file tree]**
|
|
40
|
+
|
|
41
|
+
> "Here's the repo structure. At the top level:
|
|
42
|
+
>
|
|
43
|
+
> - `skills/` — six skill modules, one per EigenLayer domain
|
|
44
|
+
> - `eigen-mcp/` — a standalone MCP server package
|
|
45
|
+
> - `index.js` — exports all six API client classes
|
|
46
|
+
> - `server.js` — a chat UI powered by Gemini with tool-use
|
|
47
|
+
> - `Dockerfile` + `entrypoint.sh` — for deploying into EigenCompute TEE
|
|
48
|
+
>
|
|
49
|
+
> The key insight is that **skills and MCP share the same API client layer**. Let me show you."
|
|
50
|
+
|
|
51
|
+
**[SCREEN: open `index.js`]**
|
|
52
|
+
|
|
53
|
+
> "Six classes. `EigenAPI`, `AVSAPI`, `RewardsAPI`, `DelegationAPI`, `EigenCompute`, `EigenDA`. Every integration path — skills, MCP, chat UI — uses these same clients underneath."
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### 3. Skills Deep Dive (2:00 – 5:00)
|
|
58
|
+
|
|
59
|
+
**[SCREEN: open `skills/` directory]**
|
|
60
|
+
|
|
61
|
+
> "Each skill follows the same pattern: a `SKILL.md` file and a `scripts/` folder with the JS client."
|
|
62
|
+
|
|
63
|
+
**[SCREEN: open `skills/eigen-restaking/SKILL.md`]**
|
|
64
|
+
|
|
65
|
+
> "This is the magic. The `SKILL.md` is a markdown file that an agent reads to understand what it can do. It has:
|
|
66
|
+
>
|
|
67
|
+
> - A description of the skill's purpose
|
|
68
|
+
> - The base URL and auth headers
|
|
69
|
+
> - Complete curl examples for every endpoint
|
|
70
|
+
>
|
|
71
|
+
> When a user asks Claude Code something like 'show me the top EigenLayer operators by TVL', Claude reads this file, picks the right curl command, runs it, and formats the response. No SDK, no dependencies — just curl."
|
|
72
|
+
|
|
73
|
+
**[SCREEN: open `skills/eigen-avs/SKILL.md` briefly]**
|
|
74
|
+
|
|
75
|
+
> "Same pattern for AVS data — services, their operators, their stakers."
|
|
76
|
+
|
|
77
|
+
**[SCREEN: open `skills/eigen-rewards/SKILL.md` briefly]**
|
|
78
|
+
|
|
79
|
+
> "Rewards and APY rankings..."
|
|
80
|
+
|
|
81
|
+
**[SCREEN: open one API client, e.g. `skills/eigen-restaking/scripts/eigen-api.js`]**
|
|
82
|
+
|
|
83
|
+
> "And if you want to use these programmatically in your own Node app, each skill also has a JS client. Standard axios wrapper — constructor takes an API key, methods map to endpoints. Nothing fancy, deliberately simple."
|
|
84
|
+
|
|
85
|
+
**[SCREEN: open `scripts/postinstall.js`]**
|
|
86
|
+
|
|
87
|
+
> "One nice DX touch — when you `npm install eigen-skills`, the postinstall hook copies the unified `SKILL.md` into `~/.claude/skills/eigen/`. Claude Code auto-discovers skills in that directory, so installation is literally one command and you're done."
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### 4. MCP Deep Dive (5:00 – 7:00)
|
|
92
|
+
|
|
93
|
+
**[SCREEN: open `eigen-mcp/` directory]**
|
|
94
|
+
|
|
95
|
+
> "Now the second integration path — MCP, the Model Context Protocol.
|
|
96
|
+
>
|
|
97
|
+
> MCP is a standard from Anthropic for exposing tools to AI agents over a structured RPC interface. Instead of the agent reading markdown and running curl, the agent calls named tools with typed parameters and gets structured JSON back."
|
|
98
|
+
|
|
99
|
+
**[SCREEN: open `eigen-mcp/mcp.js`]**
|
|
100
|
+
|
|
101
|
+
> "Here's the server. It imports the same six API clients from `eigen-skills`, then registers 21 tools.
|
|
102
|
+
>
|
|
103
|
+
> Each tool has a name, description, and a Zod schema for parameter validation. When Claude Desktop or Cursor calls `get_operators`, the MCP server runs `eigenAPI.getOperators()` and returns the result.
|
|
104
|
+
>
|
|
105
|
+
> Look — the tool implementations are just thin wrappers around the same API clients the skills use. Same data, different delivery mechanism."
|
|
106
|
+
|
|
107
|
+
**[SCREEN: show the tool registration pattern — pick `get_metrics` and `get_operators`]**
|
|
108
|
+
|
|
109
|
+
> "Simple example: `get_metrics` takes no parameters, calls `eigenAPI.getMetrics()`, returns JSON. `get_operators` takes optional skip, take, and search parameters with Zod validation."
|
|
110
|
+
|
|
111
|
+
**[SCREEN: open `eigen-mcp/README.md` — show config snippets]**
|
|
112
|
+
|
|
113
|
+
> "To use it, you register it with your client. For Claude Desktop, add it to `claude_desktop_config.json`. For Cursor or Windsurf, similar JSON config. One line: `npx eigen-mcp`."
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### 5. Skills vs MCP — Same Data, Two Paths (7:00 – 8:00)
|
|
118
|
+
|
|
119
|
+
**[SCREEN: side-by-side or diagram]**
|
|
120
|
+
|
|
121
|
+
> "So why two paths?
|
|
122
|
+
>
|
|
123
|
+
> **Skills** are the agent-native approach. The agent reads a markdown file, understands the API surface, and runs curl commands. No server process, no extra dependencies. Works great with Claude Code and any agent that supports the skills spec.
|
|
124
|
+
>
|
|
125
|
+
> **MCP** is the protocol-native approach. A server process exposes typed tools over stdio. Better for IDE integrations like Cursor and Windsurf where you want structured tool calling.
|
|
126
|
+
>
|
|
127
|
+
> Both hit the same EigenExplorer API. Both return the same data. It's about meeting agents where they are."
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
### 6. Live Demo (8:00 – 11:00)
|
|
132
|
+
|
|
133
|
+
**[SCREEN: terminal with Claude Code open]**
|
|
134
|
+
|
|
135
|
+
> "Let me show you this working. I've got Claude Code open with eigen-skills installed."
|
|
136
|
+
|
|
137
|
+
**Demo queries (pick 3-4):**
|
|
138
|
+
|
|
139
|
+
1. **"What's the current EigenLayer TVL?"** — hits `get_metrics`, shows ecosystem stats
|
|
140
|
+
2. **"Show me the top 5 operators by TVL"** — hits `get_operators`, tabular output
|
|
141
|
+
3. **"What AVS has the most operators?"** — hits `get_avs_list`, cross-references data
|
|
142
|
+
4. **"Show me the highest APY strategies"** — hits rewards skill, shows yield data
|
|
143
|
+
|
|
144
|
+
> *(narrate what Claude is doing as it runs — "it's reading the skill file... picking the right endpoint... running the curl... formatting the response")*
|
|
145
|
+
|
|
146
|
+
**[Optional: show the MCP path too in Claude Desktop or Cursor if set up]**
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### 7. Chat UI & TEE Deployment (11:00 – 12:30)
|
|
151
|
+
|
|
152
|
+
**[SCREEN: open `server.js` briefly]**
|
|
153
|
+
|
|
154
|
+
> "Bonus — there's also a web chat UI. Express server, Socket.io for real-time chat, Gemini as the LLM via OpenRouter. It has the same 21 tools defined inline. You can ask EigenLayer questions in a browser."
|
|
155
|
+
|
|
156
|
+
**[SCREEN: open `ui/index.html` or show the running UI briefly]**
|
|
157
|
+
|
|
158
|
+
**[SCREEN: open `Dockerfile` and `entrypoint.sh`]**
|
|
159
|
+
|
|
160
|
+
> "And the whole thing can be deployed into EigenCompute — Intel TDX trusted execution environments. The entrypoint script sources sealed secrets from the TEE, writes the env file, and starts the server. Your API keys never leave the enclave."
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### 8. Wrap-up (12:30 – 13:00)
|
|
165
|
+
|
|
166
|
+
> "That's eigen-skills. Six EigenLayer domains, two integration paths, same underlying clients.
|
|
167
|
+
>
|
|
168
|
+
> `npm install eigen-skills` for Claude Code. `npx eigen-mcp` for Claude Desktop and Cursor. Or use the JS clients directly in your own app.
|
|
169
|
+
>
|
|
170
|
+
> Links in the description. Star the repo, open issues, PRs welcome."
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Production Notes
|
|
175
|
+
|
|
176
|
+
- **Screen recordings**: Use a clean terminal theme, large font (16-18pt)
|
|
177
|
+
- **Code highlights**: When showing files, zoom into the relevant section — don't scroll through entire files
|
|
178
|
+
- **Transitions**: Cut between terminal and editor, avoid long pauses
|
|
179
|
+
- **B-roll ideas**: EigenExplorer website, EigenLayer docs, Claude Code in action
|
|
180
|
+
- **Thumbnail**: Terminal with EigenLayer logo + "AI Agent Skills" text
|