hive-intelligence 1.1.2 → 1.1.3
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 +232 -379
- package/agent-skills/.claude-plugin/plugin.json +105 -0
- package/{LICENSE → agent-skills/LICENSE} +1 -1
- package/agent-skills/README.md +146 -0
- package/agent-skills/SKILL.md +68 -0
- package/agent-skills/evals/README.md +20 -0
- package/agent-skills/evals/trigger-queries.json +194 -0
- package/agent-skills/package.json +49 -0
- package/agent-skills/packs/hive-build/SKILL.md +327 -0
- package/agent-skills/packs/hive-build/evals/evals.json +28 -0
- package/agent-skills/packs/hive-build-onboarding/SKILL.md +137 -0
- package/agent-skills/packs/hive-build-onboarding/evals/evals.json +27 -0
- package/agent-skills/packs/hive-cli/SKILL.md +141 -0
- package/agent-skills/packs/hive-cli/evals/evals.json +27 -0
- package/agent-skills/packs/hive-defi-research/SKILL.md +42 -0
- package/agent-skills/packs/hive-defi-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-defi-research/references/workflow.md +41 -0
- package/agent-skills/packs/hive-dex-pool-analysis/SKILL.md +41 -0
- package/agent-skills/packs/hive-dex-pool-analysis/evals/evals.json +27 -0
- package/agent-skills/packs/hive-dex-pool-analysis/references/workflow.md +42 -0
- package/agent-skills/packs/hive-market-research/SKILL.md +45 -0
- package/agent-skills/packs/hive-market-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-market-research/references/workflow.md +47 -0
- package/agent-skills/packs/hive-mcp/SKILL.md +224 -0
- package/agent-skills/packs/hive-mcp/evals/evals.json +38 -0
- package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +83 -0
- package/agent-skills/packs/hive-network-infrastructure/SKILL.md +44 -0
- package/agent-skills/packs/hive-network-infrastructure/evals/evals.json +27 -0
- package/agent-skills/packs/hive-network-infrastructure/references/workflow.md +41 -0
- package/agent-skills/packs/hive-nft-research/SKILL.md +41 -0
- package/agent-skills/packs/hive-nft-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-nft-research/references/workflow.md +42 -0
- package/agent-skills/packs/hive-prediction-markets/SKILL.md +44 -0
- package/agent-skills/packs/hive-prediction-markets/evals/evals.json +27 -0
- package/agent-skills/packs/hive-prediction-markets/references/workflow.md +42 -0
- package/agent-skills/packs/hive-query/SKILL.md +98 -0
- package/agent-skills/packs/hive-query/evals/evals.json +38 -0
- package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +54 -0
- package/agent-skills/packs/hive-security-risk/SKILL.md +42 -0
- package/agent-skills/packs/hive-security-risk/evals/evals.json +27 -0
- package/agent-skills/packs/hive-security-risk/references/workflow.md +46 -0
- package/agent-skills/packs/hive-solana-analysis/SKILL.md +42 -0
- package/agent-skills/packs/hive-solana-analysis/evals/evals.json +27 -0
- package/agent-skills/packs/hive-solana-analysis/references/workflow.md +42 -0
- package/agent-skills/packs/hive-token-diligence/SKILL.md +44 -0
- package/agent-skills/packs/hive-token-diligence/evals/evals.json +27 -0
- package/agent-skills/packs/hive-token-diligence/references/workflow.md +45 -0
- package/agent-skills/packs/hive-tool-discovery/SKILL.md +49 -0
- package/agent-skills/packs/hive-tool-discovery/evals/evals.json +38 -0
- package/agent-skills/packs/hive-tool-discovery/references/discovery-surfaces.md +62 -0
- package/agent-skills/packs/hive-wallet-investigation/SKILL.md +42 -0
- package/agent-skills/packs/hive-wallet-investigation/evals/evals.json +27 -0
- package/agent-skills/packs/hive-wallet-investigation/references/workflow.md +45 -0
- package/agent-skills/references/agents-routing.md +49 -0
- package/agent-skills/scripts/validate-agent-skills-package.mjs +178 -0
- package/agent-skills/skills.sh.json +40 -0
- package/bin/hive-mcp.js +33 -0
- package/build/{alias-INGXWFCG.js → alias-CZ3DEYHF.js} +3 -3
- package/build/api-client-I23XLSHU.js +28 -0
- package/build/auth-KKINNBXT.js +40 -0
- package/build/browser-auth-EEFGRHWY.js +9 -0
- package/build/{cache-US4LSZPI.js → cache-EGNMENNA.js} +3 -3
- package/build/chunk-2MYMHMBF.js +340 -0
- package/build/chunk-2MYMHMBF.js.map +1 -0
- package/build/chunk-2X3U4DFK.js +77369 -0
- package/build/chunk-2X3U4DFK.js.map +1 -0
- package/build/chunk-B6G222LS.js +265 -0
- package/build/chunk-B6G222LS.js.map +1 -0
- package/build/{chunk-WKVZVQTG.js → chunk-DYJBTKNR.js} +4 -4
- package/build/chunk-DYJBTKNR.js.map +1 -0
- package/build/chunk-IDZD2NVG.js +247 -0
- package/build/chunk-IDZD2NVG.js.map +1 -0
- package/build/chunk-IZTN7WFH.js +250 -0
- package/build/chunk-IZTN7WFH.js.map +1 -0
- package/build/{chunk-QMRVH5ZP.js → chunk-KBVPIZS4.js} +10 -2
- package/build/chunk-KGYBTXIN.js +86 -0
- package/build/chunk-KGYBTXIN.js.map +1 -0
- package/build/{chunk-CGXVV6WR.js → chunk-MPIUUE3T.js} +87 -105
- package/build/chunk-MPIUUE3T.js.map +1 -0
- package/build/chunk-PGBVNMNZ.js +127 -0
- package/build/chunk-PGBVNMNZ.js.map +1 -0
- package/build/chunk-QNCI4DEB.js +88 -0
- package/build/chunk-QNCI4DEB.js.map +1 -0
- package/build/chunk-RKICZ6DZ.js +497 -0
- package/build/chunk-RKICZ6DZ.js.map +1 -0
- package/build/chunk-UKHZIVDT.js +44 -0
- package/build/chunk-UKHZIVDT.js.map +1 -0
- package/build/{chunk-XQJ6PB2L.js → chunk-V77LO4RO.js} +1 -1
- package/build/chunk-V77LO4RO.js.map +1 -0
- package/build/{chunk-CP3FXEQA.js → chunk-XYBEFFZ3.js} +5 -6
- package/build/chunk-XYBEFFZ3.js.map +1 -0
- package/build/cli.js +133 -122
- package/build/cli.js.map +1 -1
- package/build/{completion-J6HFY6PS.js → completion-BELZL7ND.js} +55 -50
- package/build/completion-BELZL7ND.js.map +1 -0
- package/build/config-TDX4VUGW.js +58 -0
- package/build/{config-dir-IEOID7Q6.js → config-dir-V43W2WIA.js} +3 -3
- package/build/{doctor-7WZMCQC7.js → doctor-5K5UWHNX.js} +13 -13
- package/build/doctor-5K5UWHNX.js.map +1 -0
- package/build/{errors-U6UZWVSD.js → errors-E6MVUBNA.js} +3 -3
- package/build/format-TSFSI2K7.js +43 -0
- package/build/format-TSFSI2K7.js.map +1 -0
- package/build/{init-CAVIFVSH.js → init-YQ5NBICF.js} +2 -2
- package/build/init-all-6OWEQALB.js +274 -0
- package/build/init-all-6OWEQALB.js.map +1 -0
- package/build/mcpServer-AEX3RQ4U.js +20 -0
- package/build/mcpServer-AEX3RQ4U.js.map +1 -0
- package/build/{namespace-7JWWBWBL.js → namespace-PVHBFDW2.js} +3 -3
- package/build/namespace-PVHBFDW2.js.map +1 -0
- package/build/{open-FUXYIHFO.js → open-YUIJP37F.js} +6 -6
- package/build/open-YUIJP37F.js.map +1 -0
- package/build/{output-7PGQWJY2.js → output-IYJBFCYK.js} +3 -3
- package/build/output-IYJBFCYK.js.map +1 -0
- package/build/serve-KWNJK6EY.js +44 -0
- package/build/serve-KWNJK6EY.js.map +1 -0
- package/build/server.js +4749 -14124
- package/build/server.js.map +1 -1
- package/build/setup-YTUKMPNP.js +136 -0
- package/build/setup-YTUKMPNP.js.map +1 -0
- package/build/stdio.js +31 -0
- package/build/stdio.js.map +1 -0
- package/build/{telemetry-KNWMQURH.js → telemetry-5IPRKZBL.js} +4 -4
- package/build/telemetry-5IPRKZBL.js.map +1 -0
- package/build/{tools-VRRMBCZQ.js → tools-PJHWFCAG.js} +15 -15
- package/build/uninstall-HWXEIP6K.js +115 -0
- package/build/uninstall-HWXEIP6K.js.map +1 -0
- package/build/{watch-A75SVIQ6.js → watch-KZ5EDZK3.js} +7 -7
- package/package.json +118 -52
- package/bin/hive.js +0 -25
- package/build/auth-77MKFFBQ.js +0 -233
- package/build/auth-77MKFFBQ.js.map +0 -1
- package/build/chunk-CGXVV6WR.js.map +0 -1
- package/build/chunk-CP3FXEQA.js.map +0 -1
- package/build/chunk-DTUDM6HX.js +0 -3108
- package/build/chunk-DTUDM6HX.js.map +0 -1
- package/build/chunk-LBTLYTZS.js +0 -115
- package/build/chunk-LBTLYTZS.js.map +0 -1
- package/build/chunk-OK3LSM73.js +0 -22
- package/build/chunk-OK3LSM73.js.map +0 -1
- package/build/chunk-RRI526CJ.js +0 -212
- package/build/chunk-RRI526CJ.js.map +0 -1
- package/build/chunk-WKVZVQTG.js.map +0 -1
- package/build/chunk-XQJ6PB2L.js.map +0 -1
- package/build/completion-J6HFY6PS.js.map +0 -1
- package/build/config-ANFERP7A.js +0 -99
- package/build/config-ANFERP7A.js.map +0 -1
- package/build/doctor-7WZMCQC7.js.map +0 -1
- package/build/format-CVLLK6GD.js +0 -75
- package/build/format-CVLLK6GD.js.map +0 -1
- package/build/open-FUXYIHFO.js.map +0 -1
- package/build/version-3TZ3U4IR.js +0 -9
- /package/build/{alias-INGXWFCG.js.map → alias-CZ3DEYHF.js.map} +0 -0
- /package/build/{chunk-QMRVH5ZP.js.map → api-client-I23XLSHU.js.map} +0 -0
- /package/build/{config-dir-IEOID7Q6.js.map → auth-KKINNBXT.js.map} +0 -0
- /package/build/{errors-U6UZWVSD.js.map → browser-auth-EEFGRHWY.js.map} +0 -0
- /package/build/{cache-US4LSZPI.js.map → cache-EGNMENNA.js.map} +0 -0
- /package/build/{namespace-7JWWBWBL.js.map → chunk-KBVPIZS4.js.map} +0 -0
- /package/build/{output-7PGQWJY2.js.map → config-TDX4VUGW.js.map} +0 -0
- /package/build/{telemetry-KNWMQURH.js.map → config-dir-V43W2WIA.js.map} +0 -0
- /package/build/{version-3TZ3U4IR.js.map → errors-E6MVUBNA.js.map} +0 -0
- /package/build/{init-CAVIFVSH.js.map → init-YQ5NBICF.js.map} +0 -0
- /package/build/{tools-VRRMBCZQ.js.map → tools-PJHWFCAG.js.map} +0 -0
- /package/build/{watch-A75SVIQ6.js.map → watch-KZ5EDZK3.js.map} +0 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hive-build
|
|
3
|
+
description: Use this skill when the user is integrating Hive into application code, backend services, agents, cron jobs, SDK adapters, or production systems rather than asking a one-off chat query. Covers the TypeScript MCP client adapter, REST fallback execution, retries, typed responses, schema discovery, and safe secret handling.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
package: "@hiveintelligence/agent-skills"
|
|
7
|
+
category: "build"
|
|
8
|
+
requires_network: "true"
|
|
9
|
+
version: 1.0.0
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# hive-build — Integrate Hive Into App Code
|
|
13
|
+
|
|
14
|
+
Use this skill when the user is writing code that should call Hive at
|
|
15
|
+
runtime (a TypeScript app, Python script, Next.js API route, Rust service,
|
|
16
|
+
LangChain agent, Go cron job...).
|
|
17
|
+
|
|
18
|
+
If the user just wants live data in this chat, route to `hive-query`
|
|
19
|
+
instead. If they're adding Hive to an MCP-capable client, route to
|
|
20
|
+
`hive-mcp`. This skill is for "I'm writing code."
|
|
21
|
+
|
|
22
|
+
## Integration path
|
|
23
|
+
|
|
24
|
+
- **TypeScript / custom app default** — `@hiveintelligence/mcp-client`
|
|
25
|
+
- **MCP transport** — `https://mcp.hiveintelligence.xyz/mcp`
|
|
26
|
+
- **REST fallback base** — `https://mcp.hiveintelligence.xyz/api/v1`
|
|
27
|
+
- **REST execute** — `POST /execute` with `{"tool": "...", "args": {...}}`
|
|
28
|
+
- **REST catalog** — `GET /tools?search=...&limit=...`
|
|
29
|
+
- **Health** — `GET https://mcp.hiveintelligence.xyz/health`
|
|
30
|
+
|
|
31
|
+
Auth header on every request: `Authorization: Bearer $HIVE_API_KEY`.
|
|
32
|
+
|
|
33
|
+
## Pattern by language
|
|
34
|
+
|
|
35
|
+
### Python (sync — `requests`)
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
import os, requests
|
|
39
|
+
from typing import Any
|
|
40
|
+
|
|
41
|
+
def hive(tool: str, args: dict[str, Any] | None = None) -> dict[str, Any]:
|
|
42
|
+
r = requests.post(
|
|
43
|
+
"https://mcp.hiveintelligence.xyz/api/v1/execute",
|
|
44
|
+
headers={"Authorization": f"Bearer {os.environ['HIVE_API_KEY']}"},
|
|
45
|
+
json={"tool": tool, "args": args or {}},
|
|
46
|
+
timeout=30,
|
|
47
|
+
)
|
|
48
|
+
r.raise_for_status()
|
|
49
|
+
return r.json()
|
|
50
|
+
|
|
51
|
+
print(hive("get_price", {"ids": "bitcoin", "vs_currencies": "usd"}))
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Python (async — `httpx`)
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
import os
|
|
58
|
+
import asyncio
|
|
59
|
+
import httpx
|
|
60
|
+
|
|
61
|
+
class HiveClient:
|
|
62
|
+
def __init__(self, key: str | None = None):
|
|
63
|
+
key = key or os.environ["HIVE_API_KEY"]
|
|
64
|
+
self._client = httpx.AsyncClient(
|
|
65
|
+
base_url="https://mcp.hiveintelligence.xyz",
|
|
66
|
+
headers={"Authorization": f"Bearer {key}"},
|
|
67
|
+
timeout=httpx.Timeout(30, connect=5),
|
|
68
|
+
limits=httpx.Limits(max_connections=32),
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
async def execute(self, tool: str, args: dict | None = None) -> dict:
|
|
72
|
+
r = await self._client.post(
|
|
73
|
+
"/api/v1/execute",
|
|
74
|
+
json={"tool": tool, "args": args or {}},
|
|
75
|
+
)
|
|
76
|
+
r.raise_for_status()
|
|
77
|
+
return r.json()
|
|
78
|
+
|
|
79
|
+
async def aclose(self):
|
|
80
|
+
await self._client.aclose()
|
|
81
|
+
|
|
82
|
+
async def briefing():
|
|
83
|
+
h = HiveClient()
|
|
84
|
+
try:
|
|
85
|
+
prices, tvl, oi = await asyncio.gather(
|
|
86
|
+
h.execute("get_price", {"ids": "bitcoin,ethereum"}),
|
|
87
|
+
h.execute("get_protocol_tvl", {}),
|
|
88
|
+
h.execute("get_open_interest", {"exchange": "binance"}),
|
|
89
|
+
)
|
|
90
|
+
return {"prices": prices, "tvl": tvl[:5], "oi": oi}
|
|
91
|
+
finally:
|
|
92
|
+
await h.aclose()
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Hive bills one credit per call regardless of concurrency, so fan-out
|
|
96
|
+
is the right default for research / reporting agents.
|
|
97
|
+
|
|
98
|
+
### TypeScript (Node, serverless, edge)
|
|
99
|
+
|
|
100
|
+
Prefer the typed MCP adapter for TypeScript applications. It centralizes the
|
|
101
|
+
root MCP contract, auth headers, schema lookup, endpoint invocation, retries,
|
|
102
|
+
metadata resources, and normalized result parsing.
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm install @hiveintelligence/mcp-client
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
import {
|
|
110
|
+
createHiveMcpClient,
|
|
111
|
+
getHiveEndpointSchema,
|
|
112
|
+
invokeHiveEndpoint,
|
|
113
|
+
readHiveMetadataSnapshot,
|
|
114
|
+
} from "@hiveintelligence/mcp-client";
|
|
115
|
+
|
|
116
|
+
export async function getBtcPrice() {
|
|
117
|
+
const hive = await createHiveMcpClient({
|
|
118
|
+
apiKey: process.env.HIVE_API_KEY,
|
|
119
|
+
clientName: "my-app",
|
|
120
|
+
retry: { attempts: 2, baseDelayMs: 500 },
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
const schema = await getHiveEndpointSchema(hive, "get_price");
|
|
125
|
+
const result = await invokeHiveEndpoint(hive, "get_price", {
|
|
126
|
+
ids: "bitcoin",
|
|
127
|
+
vs_currencies: "usd",
|
|
128
|
+
});
|
|
129
|
+
const metadata = await readHiveMetadataSnapshot(hive);
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
schema,
|
|
133
|
+
result,
|
|
134
|
+
metadataStatus: metadata.status,
|
|
135
|
+
};
|
|
136
|
+
} finally {
|
|
137
|
+
await hive.close();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Keep `HIVE_API_KEY` server-side. For browser UI, call your own backend route
|
|
143
|
+
and never expose a full Hive key to the client.
|
|
144
|
+
|
|
145
|
+
### Go (`net/http`)
|
|
146
|
+
|
|
147
|
+
```go
|
|
148
|
+
type HiveClient struct {
|
|
149
|
+
Key string
|
|
150
|
+
HTTP *http.Client
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
func (h *HiveClient) Execute(tool string, args any) ([]byte, error) {
|
|
154
|
+
body, _ := json.Marshal(map[string]any{"tool": tool, "args": args})
|
|
155
|
+
req, _ := http.NewRequest("POST",
|
|
156
|
+
"https://mcp.hiveintelligence.xyz/api/v1/execute",
|
|
157
|
+
bytes.NewReader(body))
|
|
158
|
+
req.Header.Set("Authorization", "Bearer "+h.Key)
|
|
159
|
+
req.Header.Set("Content-Type", "application/json")
|
|
160
|
+
res, err := h.HTTP.Do(req)
|
|
161
|
+
if err != nil { return nil, err }
|
|
162
|
+
defer res.Body.Close()
|
|
163
|
+
if res.StatusCode >= 300 { return nil, fmt.Errorf("hive %d", res.StatusCode) }
|
|
164
|
+
return io.ReadAll(res.Body)
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Rust (`reqwest`)
|
|
169
|
+
|
|
170
|
+
```rust
|
|
171
|
+
use reqwest::Client;
|
|
172
|
+
use serde_json::{json, Value};
|
|
173
|
+
|
|
174
|
+
pub struct HiveClient {
|
|
175
|
+
key: String,
|
|
176
|
+
http: Client,
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
impl HiveClient {
|
|
180
|
+
pub fn new(key: String) -> Self {
|
|
181
|
+
Self { key, http: Client::new() }
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
pub async fn execute(&self, tool: &str, args: Value) -> reqwest::Result<Value> {
|
|
185
|
+
self.http
|
|
186
|
+
.post("https://mcp.hiveintelligence.xyz/api/v1/execute")
|
|
187
|
+
.header("Authorization", format!("Bearer {}", self.key))
|
|
188
|
+
.json(&json!({ "tool": tool, "args": args }))
|
|
189
|
+
.send().await?
|
|
190
|
+
.error_for_status()?
|
|
191
|
+
.json().await
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
For typed responses, derive `Deserialize` on a struct and use
|
|
197
|
+
`serde_json::from_value(raw)`.
|
|
198
|
+
|
|
199
|
+
### Java 11+ (`HttpClient`)
|
|
200
|
+
|
|
201
|
+
```java
|
|
202
|
+
public class HiveClient {
|
|
203
|
+
private final HttpClient http = HttpClient.newBuilder()
|
|
204
|
+
.connectTimeout(Duration.ofSeconds(5)).build();
|
|
205
|
+
private final ObjectMapper json = new ObjectMapper();
|
|
206
|
+
private final String key = System.getenv("HIVE_API_KEY");
|
|
207
|
+
|
|
208
|
+
public Map<String, Object> execute(String tool, Map<String, Object> args)
|
|
209
|
+
throws Exception {
|
|
210
|
+
var body = json.writeValueAsString(Map.of("tool", tool, "args", args));
|
|
211
|
+
var req = HttpRequest.newBuilder()
|
|
212
|
+
.uri(URI.create("https://mcp.hiveintelligence.xyz/api/v1/execute"))
|
|
213
|
+
.header("Authorization", "Bearer " + key)
|
|
214
|
+
.header("Content-Type", "application/json")
|
|
215
|
+
.POST(HttpRequest.BodyPublishers.ofString(body)).build();
|
|
216
|
+
var res = http.send(req, HttpResponse.BodyHandlers.ofString());
|
|
217
|
+
if (res.statusCode() >= 300) throw new RuntimeException(res.body());
|
|
218
|
+
return json.readValue(res.body(), Map.class);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Retry / backoff
|
|
224
|
+
|
|
225
|
+
Hive returns:
|
|
226
|
+
|
|
227
|
+
- **400** — invalid tool name or args. Don't retry — the request is
|
|
228
|
+
malformed.
|
|
229
|
+
- **401** — invalid API key. Don't retry — the credential is wrong.
|
|
230
|
+
- **429** — rate limited. Honor `Retry-After` header (in seconds).
|
|
231
|
+
Use exponential backoff if the header is missing.
|
|
232
|
+
- **500 / 502 / 503** — upstream provider failure. Exponential
|
|
233
|
+
backoff. Retry up to 3 times.
|
|
234
|
+
|
|
235
|
+
Pseudocode:
|
|
236
|
+
|
|
237
|
+
```text
|
|
238
|
+
for attempt in 0..3 {
|
|
239
|
+
response = http.execute(...)
|
|
240
|
+
if response.status == 429 {
|
|
241
|
+
sleep(retry_after || 2^attempt)
|
|
242
|
+
continue
|
|
243
|
+
}
|
|
244
|
+
if response.status >= 500 {
|
|
245
|
+
sleep(2^attempt)
|
|
246
|
+
continue
|
|
247
|
+
}
|
|
248
|
+
return response
|
|
249
|
+
}
|
|
250
|
+
throw ExhaustedRetries()
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Tool discovery
|
|
254
|
+
|
|
255
|
+
Don't hardcode tool schemas. In TypeScript, use the adapter:
|
|
256
|
+
|
|
257
|
+
```ts
|
|
258
|
+
import { searchHiveTools, getHiveEndpointSchema } from "@hiveintelligence/mcp-client";
|
|
259
|
+
|
|
260
|
+
const matches = await searchHiveTools(hive, { query: "wallet risk", limit: 20 });
|
|
261
|
+
const schema = await getHiveEndpointSchema(hive, "get_address_risk");
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
For REST fallback clients, fetch at runtime:
|
|
265
|
+
|
|
266
|
+
```http
|
|
267
|
+
GET /api/v1/tools?search=wallet&limit=200
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Returns a paginated list with `name`, `description`, `inputSchema`,
|
|
271
|
+
`metadata`. Walk pages via `meta.cursor`. New tools ship continuously
|
|
272
|
+
— `/api/v1/tools` is always authoritative.
|
|
273
|
+
|
|
274
|
+
For a single tool's input schema:
|
|
275
|
+
|
|
276
|
+
```http
|
|
277
|
+
POST /api/v1/execute
|
|
278
|
+
{ "tool": "get_api_endpoint_schema", "args": { "name": "get_price" } }
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Frameworks
|
|
282
|
+
|
|
283
|
+
- **LangChain** — use `@hiveintelligence/mcp-client/langchain` or
|
|
284
|
+
`langchain-mcp-adapters` to expose Hive tools. Connect to
|
|
285
|
+
`https://mcp.hiveintelligence.xyz/mcp` with the auth header.
|
|
286
|
+
- **CrewAI** — same pattern; CrewAI accepts MCP servers via the
|
|
287
|
+
generic adapter.
|
|
288
|
+
- **Vercel AI SDK** — use `@hiveintelligence/mcp-client/ai-sdk` helpers to
|
|
289
|
+
build the MCP transport config and select only the compact/ranked Hive tools
|
|
290
|
+
the model needs.
|
|
291
|
+
- **Spring Boot** — register the Java `HiveClient` as a `@Bean`,
|
|
292
|
+
inject into services, wrap with Resilience4j for retries.
|
|
293
|
+
|
|
294
|
+
## Response envelope
|
|
295
|
+
|
|
296
|
+
Every successful response shares the same shape:
|
|
297
|
+
|
|
298
|
+
```json
|
|
299
|
+
{
|
|
300
|
+
"ok": true,
|
|
301
|
+
"data": { /* tool result */ },
|
|
302
|
+
"meta": {
|
|
303
|
+
"fetched_at": "2026-04-25T07:42:11Z",
|
|
304
|
+
"latency_ms": 94,
|
|
305
|
+
"tool": "get_price",
|
|
306
|
+
"cached": false
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Read `meta.fetched_at` when surfacing freshness to the user. Ignore
|
|
312
|
+
the `cached` field unless the user explicitly asks about caching.
|
|
313
|
+
|
|
314
|
+
## Runtime status handling
|
|
315
|
+
|
|
316
|
+
When building on Hive, preserve runtime status in your own response model:
|
|
317
|
+
`ok`, `missing_key`, `plan_required`, `rate_limited`, `degraded`, and
|
|
318
|
+
`failing`. Do not remove a tool from the application because a provider is
|
|
319
|
+
temporarily gated; surface the state and retry or fall back based on the class.
|
|
320
|
+
|
|
321
|
+
## Reference
|
|
322
|
+
|
|
323
|
+
- TypeScript MCP client: `packages/mcp-client/README.md`
|
|
324
|
+
- Full API integration guide: https://www.hiveintelligence.xyz/api-integration
|
|
325
|
+
- SDK pages: https://www.hiveintelligence.xyz/sdk
|
|
326
|
+
- Errors: https://www.hiveintelligence.xyz/errors
|
|
327
|
+
- Rate limits: https://www.hiveintelligence.xyz/rate-limits
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "hive-build",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Build a TypeScript server helper that calls Hive safely from a Next.js API route.",
|
|
7
|
+
"expected_output": "Uses @hiveintelligence/mcp-client on the server side with HIVE_API_KEY, schema/tool discovery helpers, timeout/retry/error handling, provenance-aware metadata handling, and no client-side secret exposure. REST is mentioned only as a fallback.",
|
|
8
|
+
"files": [],
|
|
9
|
+
"assertions": [
|
|
10
|
+
"Uses @hiveintelligence/mcp-client as the primary TypeScript path.",
|
|
11
|
+
"Keeps HIVE_API_KEY server-side.",
|
|
12
|
+
"Includes retry or error handling guidance.",
|
|
13
|
+
"Preserves provider/freshness/runtime metadata."
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 2,
|
|
18
|
+
"prompt": "I need a Python cron job that fetches Hive crypto data daily and writes a JSON report.",
|
|
19
|
+
"expected_output": "Uses REST execute endpoint, environment auth, bounded calls, retry/backoff, JSON output, and provenance-aware response handling.",
|
|
20
|
+
"files": [],
|
|
21
|
+
"assertions": [
|
|
22
|
+
"Uses environment variable auth.",
|
|
23
|
+
"Explains 429 and 5xx retry behavior.",
|
|
24
|
+
"Mentions provider/freshness/runtime metadata in output handling."
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hive-build-onboarding
|
|
3
|
+
description: Use this skill when the user needs a Hive API key, cannot find a key, is signing up, or needs browser PKCE versus headless dashboard setup. Guide key creation without exposing secrets in chat, logs, screenshots, or committed files.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
package: "@hiveintelligence/agent-skills"
|
|
7
|
+
category: "setup"
|
|
8
|
+
requires_network: "true"
|
|
9
|
+
version: 1.0.0
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# hive-build-onboarding — Get a Hive API Key
|
|
13
|
+
|
|
14
|
+
Use this skill when the user says any of:
|
|
15
|
+
|
|
16
|
+
- "I don't have a Hive key"
|
|
17
|
+
- "How do I sign up?"
|
|
18
|
+
- "I lost my API key"
|
|
19
|
+
- "Set up Hive for me"
|
|
20
|
+
|
|
21
|
+
Hive uses passwordless magic-link auth — no username/password, no
|
|
22
|
+
credit card to start. Free Demo tier: 10,000 credits/month, 30
|
|
23
|
+
req/min.
|
|
24
|
+
|
|
25
|
+
## Path 1 — PKCE browser flow (preferred)
|
|
26
|
+
|
|
27
|
+
If the user has a browser available on the same machine as their
|
|
28
|
+
terminal:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx -y -p hive-intelligence@latest hive init --browser
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
What happens:
|
|
35
|
+
|
|
36
|
+
1. The CLI generates a PKCE code verifier + challenge locally.
|
|
37
|
+
2. It starts a localhost listener on a random port.
|
|
38
|
+
3. It opens the user's browser at
|
|
39
|
+
`https://www.hiveintelligence.xyz/auth/cli?code_challenge=<challenge>&port=<port>`.
|
|
40
|
+
4. The user signs in with magic-link (one-time email link, no
|
|
41
|
+
password). If they don't have an account, one is created.
|
|
42
|
+
5. The marketing site exchanges the verified session for a fresh API
|
|
43
|
+
key + the original code challenge.
|
|
44
|
+
6. The browser POSTs the key back to the localhost listener with the
|
|
45
|
+
matching verifier.
|
|
46
|
+
7. The CLI stores the key in `~/.hive/credentials.json` with `0600`
|
|
47
|
+
permissions.
|
|
48
|
+
8. The browser tab shows "You can close this window" and closes
|
|
49
|
+
itself.
|
|
50
|
+
|
|
51
|
+
The key never lives on the clipboard. If a step fails, the CLI
|
|
52
|
+
surfaces the exact error (port collision, browser refused to open,
|
|
53
|
+
verifier mismatch).
|
|
54
|
+
|
|
55
|
+
## Path 2 — Dashboard copy-paste (fallback for headless)
|
|
56
|
+
|
|
57
|
+
If `init --browser` won't work (CI environment, SSH session, Docker
|
|
58
|
+
container, restricted network):
|
|
59
|
+
|
|
60
|
+
1. From any machine with a browser, open
|
|
61
|
+
`https://www.hiveintelligence.xyz/dashboard/keys`.
|
|
62
|
+
2. Click "Sign in" and enter the user's email.
|
|
63
|
+
3. Open the magic-link email and click through. Account is created
|
|
64
|
+
automatically if it doesn't exist.
|
|
65
|
+
4. Click "Create key" → name it (e.g., "production-CI") → copy the
|
|
66
|
+
shown secret.
|
|
67
|
+
5. Set `HIVE_API_KEY=hive_live_…` in the headless environment's env.
|
|
68
|
+
|
|
69
|
+
For CI, store the key in the secret manager (GitHub Secrets, Vault,
|
|
70
|
+
1Password CLI, etc.) and inject as `HIVE_API_KEY` at runtime.
|
|
71
|
+
|
|
72
|
+
## Key prefixes
|
|
73
|
+
|
|
74
|
+
The first three characters of the secret tell you the environment:
|
|
75
|
+
|
|
76
|
+
- `hive_live_` — production key
|
|
77
|
+
- `hive_test_` — test mode (no rate limiting against the user's quota,
|
|
78
|
+
capped tools)
|
|
79
|
+
- `hive_dev_` — local development key
|
|
80
|
+
|
|
81
|
+
The user can have multiple keys. Plan-tier limits: Demo = 1 key,
|
|
82
|
+
Analyst = 10, Pro = 25, Enterprise = 100.
|
|
83
|
+
|
|
84
|
+
## When the user can't find an old key
|
|
85
|
+
|
|
86
|
+
Hive **never reveals a key after the creation dialog closes**. The
|
|
87
|
+
secret is hashed server-side; only a prefix is stored. If the user
|
|
88
|
+
lost a key:
|
|
89
|
+
|
|
90
|
+
1. Don't try to "recover" it — that's cryptographically impossible.
|
|
91
|
+
2. Direct them to revoke it (so it can't be used by whoever has it
|
|
92
|
+
now): https://www.hiveintelligence.xyz/dashboard/keys → revoke.
|
|
93
|
+
3. Create a new key. Update wherever the old one was used.
|
|
94
|
+
|
|
95
|
+
This is the same pattern Stripe / Linear / GitHub use. It's a feature,
|
|
96
|
+
not a UX bug.
|
|
97
|
+
|
|
98
|
+
## Verifying the new key works
|
|
99
|
+
|
|
100
|
+
After Path 1 or Path 2:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
hive doctor
|
|
104
|
+
# or
|
|
105
|
+
curl -H "Authorization: Bearer $HIVE_API_KEY" \
|
|
106
|
+
https://mcp.hiveintelligence.xyz/api/v1/tools?limit=1
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
A successful `doctor` shows `API key: configured` and
|
|
110
|
+
`Connectivity: ok`. A successful curl returns `{"data": [...], ...}`.
|
|
111
|
+
If you see HTTP 401 or JSON-RPC `-32001`, the key is wrong or
|
|
112
|
+
disabled.
|
|
113
|
+
|
|
114
|
+
## Plan upgrade
|
|
115
|
+
|
|
116
|
+
If the user wants higher limits than the Demo tier:
|
|
117
|
+
|
|
118
|
+
- Analyst — $129/month, 500k credits, 500 req/min, 10 keys
|
|
119
|
+
- Pro — $499/month, 2M credits, 1k req/min, 25 keys
|
|
120
|
+
- Enterprise — custom, unlimited credits, 3k req/min, 100 keys
|
|
121
|
+
|
|
122
|
+
Direct them to https://www.hiveintelligence.xyz/dashboard/plans.
|
|
123
|
+
Today the upgrade flow is mailto-based; in-app Stripe checkout is on
|
|
124
|
+
the roadmap.
|
|
125
|
+
|
|
126
|
+
## Runtime status handling
|
|
127
|
+
|
|
128
|
+
After onboarding, Hive tools may still report `missing_key`, `plan_required`,
|
|
129
|
+
`rate_limited`, `degraded`, or `failing` for provider-specific runtime states.
|
|
130
|
+
Do not create a new Hive key for provider plan gates; explain the blocked
|
|
131
|
+
provider/tool and the upgrade or retry path.
|
|
132
|
+
|
|
133
|
+
## Reference
|
|
134
|
+
|
|
135
|
+
- Authentication docs: https://www.hiveintelligence.xyz/authentication
|
|
136
|
+
- Dashboard keys: https://www.hiveintelligence.xyz/dashboard/keys
|
|
137
|
+
- Public agent manifest: https://www.hiveintelligence.xyz/agent-onboarding/SKILL.md
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "hive-build-onboarding",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "I do not have a Hive API key. Walk me through getting one on my laptop without pasting secrets into chat.",
|
|
7
|
+
"expected_output": "Uses PKCE browser flow first, avoids exposing secrets, and explains fallback dashboard setup for headless environments.",
|
|
8
|
+
"files": [],
|
|
9
|
+
"assertions": [
|
|
10
|
+
"Recommends npx -y -p hive-intelligence@latest hive init --browser.",
|
|
11
|
+
"Warns not to paste or commit API keys.",
|
|
12
|
+
"Provides headless fallback via dashboard and HIVE_API_KEY."
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": 2,
|
|
17
|
+
"prompt": "I'm setting Hive up in CI over SSH. Browser auth will not work. What should I do?",
|
|
18
|
+
"expected_output": "Routes to dashboard copy-paste flow, stores key in CI secret manager, and avoids clipboard/log exposure.",
|
|
19
|
+
"files": [],
|
|
20
|
+
"assertions": [
|
|
21
|
+
"Recognizes browser flow is unsuitable for CI or SSH.",
|
|
22
|
+
"Mentions HIVE_API_KEY and secret manager storage.",
|
|
23
|
+
"Does not request the user paste the secret into the chat."
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hive-cli
|
|
3
|
+
description: Use this skill when the user wants to run Hive from a terminal, script, cron job, jq pipeline, shell briefing, or local diagnostic command. Covers CLI auth, status, tool discovery, JSON output, and safe automation.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
package: "@hiveintelligence/agent-skills"
|
|
7
|
+
category: "setup"
|
|
8
|
+
requires_network: "true"
|
|
9
|
+
version: 1.0.0
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# hive-cli — Hive From the Terminal
|
|
13
|
+
|
|
14
|
+
Use this skill when the user says any of:
|
|
15
|
+
|
|
16
|
+
- "Run a CLI command for…"
|
|
17
|
+
- "Show me from the terminal…"
|
|
18
|
+
- "Pipe this into jq" / "give me a shell script"
|
|
19
|
+
- "Set up a daily briefing"
|
|
20
|
+
|
|
21
|
+
The Hive CLI lives in the `hive-intelligence` npm package; the
|
|
22
|
+
executable name is `hive`. Package and binary names differ on purpose
|
|
23
|
+
— the npm package also ships the stdio MCP server and bundled skills
|
|
24
|
+
installer. One install, multiple agent entrypoints.
|
|
25
|
+
|
|
26
|
+
## Bootstrap
|
|
27
|
+
|
|
28
|
+
If the user doesn't have the CLI installed:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# One-time install + auth
|
|
32
|
+
npx -y -p hive-intelligence@latest hive init --browser
|
|
33
|
+
|
|
34
|
+
# Or, install globally for repeated use
|
|
35
|
+
npm install -g hive-intelligence
|
|
36
|
+
hive auth login
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`init --browser` runs the PKCE flow described in `hive-build-onboarding`.
|
|
40
|
+
|
|
41
|
+
## Common commands
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
hive doctor # connectivity + auth check
|
|
45
|
+
hive status # plan, recent usage, key info
|
|
46
|
+
hive tools list # full live tool catalog
|
|
47
|
+
hive tools search <keyword> # filter the catalog
|
|
48
|
+
hive tools info <tool-name> # input schema for one tool
|
|
49
|
+
hive market price --ids bitcoin --vs usd # price query (domain subcommand)
|
|
50
|
+
hive defi tvl --protocol aave # DeFi TVL query
|
|
51
|
+
hive watch '<command>' --interval 30 # tail a query on an interval
|
|
52
|
+
hive uninstall --all # remove from every client
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Domain subcommands map directly to Hive's category namespace. Common
|
|
56
|
+
ones: `hive market`, `hive defi`, `hive wallet`, `hive security`,
|
|
57
|
+
`hive nft`, `hive prediction`. Run `hive --help` for the full list.
|
|
58
|
+
|
|
59
|
+
## Pipe into jq
|
|
60
|
+
|
|
61
|
+
The CLI returns JSON by default — perfect for `jq`:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Price as a single number
|
|
65
|
+
hive market price --ids bitcoin --vs usd | jq '.bitcoin.usd'
|
|
66
|
+
|
|
67
|
+
# Top DeFi protocol name
|
|
68
|
+
hive defi protocols | jq '.[0].name'
|
|
69
|
+
|
|
70
|
+
# Count tools matching "wallet"
|
|
71
|
+
hive tools search wallet --format json | jq 'length'
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Daily briefing pattern
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
#!/bin/bash
|
|
78
|
+
set -euo pipefail
|
|
79
|
+
|
|
80
|
+
echo "=== Daily Crypto Briefing ==="
|
|
81
|
+
echo
|
|
82
|
+
echo "--- Watchlist ---"
|
|
83
|
+
hive market price --ids bitcoin,ethereum,solana --vs usd \
|
|
84
|
+
| jq -r 'to_entries[] | "\(.key): $\(.value.usd)"'
|
|
85
|
+
echo
|
|
86
|
+
echo "--- Top Gainers (24h) ---"
|
|
87
|
+
hive market gainers-losers --vs usd --duration 24h | jq '.top_gainers[:5]'
|
|
88
|
+
echo
|
|
89
|
+
echo "--- DeFi TVL Leaders ---"
|
|
90
|
+
hive defi protocols \
|
|
91
|
+
| jq '.[:5] | .[] | "\(.name): $\(.tvl / 1000000 | floor)M"'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Schedule with cron:
|
|
95
|
+
|
|
96
|
+
```cron
|
|
97
|
+
0 8 * * * /path/to/briefing.sh >> /var/log/crypto-briefing.log 2>&1
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Authentication options
|
|
101
|
+
|
|
102
|
+
1. **`hive auth login`** — interactive PKCE browser flow. Stores key
|
|
103
|
+
in `~/.hive/credentials.json`. Recommended for personal machines.
|
|
104
|
+
2. **`HIVE_API_KEY=hive_live_…`** — env var. Recommended for CI,
|
|
105
|
+
Docker, scripts. The CLI reads the env var per-command.
|
|
106
|
+
3. **`hive --api-key <key> ...`** — one-shot override. Useful for
|
|
107
|
+
testing a different account without rotating the saved cred.
|
|
108
|
+
|
|
109
|
+
`hive status` confirms which path the CLI is using.
|
|
110
|
+
|
|
111
|
+
## Output formats
|
|
112
|
+
|
|
113
|
+
- `--format json` (default) — clean JSON, ready for jq
|
|
114
|
+
- `--format table` — human-friendly columns
|
|
115
|
+
- `--format yaml` — yaml output
|
|
116
|
+
- `--quiet` — suppress headers, useful in shell pipes
|
|
117
|
+
|
|
118
|
+
## When to use the CLI vs the MCP
|
|
119
|
+
|
|
120
|
+
- **CLI** — terminal workflows, cron jobs, shell scripts, one-off
|
|
121
|
+
exploration during a chat session.
|
|
122
|
+
- **MCP** — let Claude Code / Cursor / Claude Desktop call tools as
|
|
123
|
+
part of its reasoning. The user doesn't see commands; the agent
|
|
124
|
+
calls tools transparently.
|
|
125
|
+
|
|
126
|
+
If the user is in Claude Code and asks "what's BTC?", call the MCP
|
|
127
|
+
tool. If they ask "give me a shell script that fetches BTC daily",
|
|
128
|
+
write a `hive market price …` invocation in the script.
|
|
129
|
+
|
|
130
|
+
## Runtime status handling
|
|
131
|
+
|
|
132
|
+
CLI and MCP responses should be interpreted with Hive's runtime states:
|
|
133
|
+
`ok`, `missing_key`, `plan_required`, `rate_limited`, `degraded`, and
|
|
134
|
+
`failing`. In scripts, retry `rate_limited` and `degraded` with backoff, but
|
|
135
|
+
surface `missing_key` or `plan_required` to the operator.
|
|
136
|
+
|
|
137
|
+
## Reference
|
|
138
|
+
|
|
139
|
+
- CLI command reference: https://www.hiveintelligence.xyz/cli
|
|
140
|
+
- CLI tutorial: https://www.hiveintelligence.xyz/tutorials/cli
|
|
141
|
+
- One-command install: https://www.hiveintelligence.xyz/install/claude-skill
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "hive-cli",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Give me a terminal command to check Bitcoin and Ethereum prices with Hive and pipe the result into jq.",
|
|
7
|
+
"expected_output": "Uses Hive CLI market command, JSON output, jq extraction, and avoids embedding API keys in the command.",
|
|
8
|
+
"files": [],
|
|
9
|
+
"assertions": [
|
|
10
|
+
"Uses the hive CLI.",
|
|
11
|
+
"Pipes output into jq.",
|
|
12
|
+
"Does not inline a real API key."
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": 2,
|
|
17
|
+
"prompt": "Set up a daily shell briefing with Hive that I can run from cron.",
|
|
18
|
+
"expected_output": "Provides a shell script pattern, cron example, HIVE_API_KEY/env guidance, and JSON-safe output handling.",
|
|
19
|
+
"files": [],
|
|
20
|
+
"assertions": [
|
|
21
|
+
"Includes a cron-compatible command or script.",
|
|
22
|
+
"Mentions HIVE_API_KEY or hive auth status.",
|
|
23
|
+
"Uses bounded CLI queries."
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|