clodds 1.2.9 → 1.3.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/skills/bundled/acp/SKILL.md +188 -0
- package/dist/skills/bundled/acp/index.d.ts +0 -3
- package/dist/skills/bundled/acp/index.js +1 -1
- package/dist/skills/bundled/acp/index.js.map +1 -1
- package/dist/skills/bundled/agentbets/SKILL.md +19 -0
- package/dist/skills/bundled/ai-strategy/SKILL.md +111 -0
- package/dist/skills/bundled/ai-strategy/index.js +1 -1
- package/dist/skills/bundled/ai-strategy/index.js.map +1 -1
- package/dist/skills/bundled/alerts/SKILL.md +87 -0
- package/dist/skills/bundled/analytics/SKILL.md +252 -0
- package/dist/skills/bundled/analytics/index.js +2 -2
- package/dist/skills/bundled/analytics/index.js.map +1 -1
- package/dist/skills/bundled/arbitrage/SKILL.md +287 -0
- package/dist/skills/bundled/auto-reply/SKILL.md +285 -0
- package/dist/skills/bundled/auto-reply/index.js +2 -2
- package/dist/skills/bundled/auto-reply/index.js.map +1 -1
- package/dist/skills/bundled/automation/SKILL.md +242 -0
- package/dist/skills/bundled/automation/index.js +2 -2
- package/dist/skills/bundled/automation/index.js.map +1 -1
- package/dist/skills/bundled/backtest/SKILL.md +225 -0
- package/dist/skills/bundled/bags/SKILL.md +131 -0
- package/dist/skills/bundled/bankr/SKILL.md +114 -0
- package/dist/skills/bundled/betfair/SKILL.md +113 -0
- package/dist/skills/bundled/binance-futures/SKILL.md +84 -0
- package/dist/skills/bundled/binance-futures/index.d.ts +0 -3
- package/dist/skills/bundled/binance-futures/index.js +1 -2
- package/dist/skills/bundled/binance-futures/index.js.map +1 -1
- package/dist/skills/bundled/botchan/SKILL.md +66 -0
- package/dist/skills/bundled/botchan/index.d.ts +0 -3
- package/dist/skills/bundled/botchan/index.js +0 -1
- package/dist/skills/bundled/botchan/index.js.map +1 -1
- package/dist/skills/bundled/bridge/SKILL.md +215 -0
- package/dist/skills/bundled/bybit-futures/SKILL.md +84 -0
- package/dist/skills/bundled/bybit-futures/index.d.ts +0 -3
- package/dist/skills/bundled/bybit-futures/index.js +0 -1
- package/dist/skills/bundled/bybit-futures/index.js.map +1 -1
- package/dist/skills/bundled/clanker/SKILL.md +125 -0
- package/dist/skills/bundled/clanker/index.d.ts +0 -3
- package/dist/skills/bundled/clanker/index.js +0 -1
- package/dist/skills/bundled/clanker/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading/SKILL.md +285 -0
- package/dist/skills/bundled/copy-trading/index.js +2 -2
- package/dist/skills/bundled/copy-trading/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading-solana/SKILL.md +66 -0
- package/dist/skills/bundled/credentials/SKILL.md +261 -0
- package/dist/skills/bundled/crypto-hft/SKILL.md +121 -0
- package/dist/skills/bundled/dca/SKILL.md +27 -0
- package/dist/skills/bundled/dex/SKILL.md +87 -0
- package/dist/skills/bundled/divergence/SKILL.md +83 -0
- package/dist/skills/bundled/doctor/SKILL.md +267 -0
- package/dist/skills/bundled/doctor/index.js +2 -8
- package/dist/skills/bundled/doctor/index.js.map +1 -1
- package/dist/skills/bundled/drift/SKILL.md +53 -0
- package/dist/skills/bundled/drift-sdk/SKILL.md +103 -0
- package/dist/skills/bundled/drift-sdk/index.d.ts +0 -3
- package/dist/skills/bundled/drift-sdk/index.js +0 -1
- package/dist/skills/bundled/drift-sdk/index.js.map +1 -1
- package/dist/skills/bundled/edge/SKILL.md +84 -0
- package/dist/skills/bundled/embeddings/SKILL.md +244 -0
- package/dist/skills/bundled/endaoment/SKILL.md +65 -0
- package/dist/skills/bundled/endaoment/index.d.ts +0 -3
- package/dist/skills/bundled/endaoment/index.js +0 -1
- package/dist/skills/bundled/endaoment/index.js.map +1 -1
- package/dist/skills/bundled/ens/SKILL.md +63 -0
- package/dist/skills/bundled/ens/index.d.ts +0 -3
- package/dist/skills/bundled/ens/index.js +0 -1
- package/dist/skills/bundled/ens/index.js.map +1 -1
- package/dist/skills/bundled/erc8004/SKILL.md +79 -0
- package/dist/skills/bundled/erc8004/index.d.ts +0 -3
- package/dist/skills/bundled/erc8004/index.js +0 -1
- package/dist/skills/bundled/erc8004/index.js.map +1 -1
- package/dist/skills/bundled/execution/SKILL.md +278 -0
- package/dist/skills/bundled/farcaster/SKILL.md +80 -0
- package/dist/skills/bundled/features/SKILL.md +20 -0
- package/dist/skills/bundled/feeds/SKILL.md +288 -0
- package/dist/skills/bundled/harden/SKILL.md +74 -0
- package/dist/skills/bundled/history/SKILL.md +257 -0
- package/dist/skills/bundled/hyperliquid/SKILL.md +200 -0
- package/dist/skills/bundled/hyperliquid/index.d.ts +0 -3
- package/dist/skills/bundled/hyperliquid/index.js +0 -1
- package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
- package/dist/skills/bundled/identity/SKILL.md +228 -0
- package/dist/skills/bundled/identity/index.js +2 -2
- package/dist/skills/bundled/identity/index.js.map +1 -1
- package/dist/skills/bundled/integrations/SKILL.md +321 -0
- package/dist/skills/bundled/integrations/index.js +2 -2
- package/dist/skills/bundled/integrations/index.js.map +1 -1
- package/dist/skills/bundled/jupiter/SKILL.md +163 -0
- package/dist/skills/bundled/kamino/SKILL.md +69 -0
- package/dist/skills/bundled/ledger/SKILL.md +20 -0
- package/dist/skills/bundled/lighter/SKILL.md +83 -0
- package/dist/skills/bundled/lighter/index.d.ts +0 -3
- package/dist/skills/bundled/lighter/index.js +0 -1
- package/dist/skills/bundled/lighter/index.js.map +1 -1
- package/dist/skills/bundled/marginfi/SKILL.md +62 -0
- package/dist/skills/bundled/market-index/SKILL.md +242 -0
- package/dist/skills/bundled/market-index/index.js +1 -3
- package/dist/skills/bundled/market-index/index.js.map +1 -1
- package/dist/skills/bundled/markets/SKILL.md +49 -0
- package/dist/skills/bundled/mcp/SKILL.md +235 -0
- package/dist/skills/bundled/mcp/index.js +1 -3
- package/dist/skills/bundled/mcp/index.js.map +1 -1
- package/dist/skills/bundled/memory/SKILL.md +209 -0
- package/dist/skills/bundled/metaculus/SKILL.md +62 -0
- package/dist/skills/bundled/meteora/SKILL.md +28 -0
- package/dist/skills/bundled/meteora-dbc/SKILL.md +25 -0
- package/dist/skills/bundled/metrics/SKILL.md +338 -0
- package/dist/skills/bundled/mev/SKILL.md +239 -0
- package/dist/skills/bundled/mev/index.js +2 -2
- package/dist/skills/bundled/mev/index.js.map +1 -1
- package/dist/skills/bundled/mexc-futures/SKILL.md +86 -0
- package/dist/skills/bundled/mexc-futures/index.d.ts +0 -3
- package/dist/skills/bundled/mexc-futures/index.js +0 -1
- package/dist/skills/bundled/mexc-futures/index.js.map +1 -1
- package/dist/skills/bundled/mm/SKILL.md +142 -0
- package/dist/skills/bundled/monitoring/SKILL.md +249 -0
- package/dist/skills/bundled/news/SKILL.md +95 -0
- package/dist/skills/bundled/onchainkit/SKILL.md +83 -0
- package/dist/skills/bundled/opinion/SKILL.md +87 -0
- package/dist/skills/bundled/opportunity/SKILL.md +308 -0
- package/dist/skills/bundled/orca/SKILL.md +28 -0
- package/dist/skills/bundled/pairing/SKILL.md +275 -0
- package/dist/skills/bundled/pancakeswap/SKILL.md +93 -0
- package/dist/skills/bundled/pancakeswap/index.d.ts +0 -3
- package/dist/skills/bundled/pancakeswap/index.js +0 -1
- package/dist/skills/bundled/pancakeswap/index.js.map +1 -1
- package/dist/skills/bundled/percolator/SKILL.md +22 -0
- package/dist/skills/bundled/permissions/SKILL.md +269 -0
- package/dist/skills/bundled/permissions/index.js +2 -2
- package/dist/skills/bundled/permissions/index.js.map +1 -1
- package/dist/skills/bundled/plugins/SKILL.md +263 -0
- package/dist/skills/bundled/plugins/index.js +2 -2
- package/dist/skills/bundled/plugins/index.js.map +1 -1
- package/dist/skills/bundled/portfolio/SKILL.md +161 -0
- package/dist/skills/bundled/portfolio/index.js +1 -1
- package/dist/skills/bundled/portfolio/index.js.map +1 -1
- package/dist/skills/bundled/portfolio-sync/SKILL.md +466 -0
- package/dist/skills/bundled/positions/SKILL.md +262 -0
- package/dist/skills/bundled/predictfun/SKILL.md +109 -0
- package/dist/skills/bundled/predictfun/index.js +1 -1
- package/dist/skills/bundled/predictfun/index.js.map +1 -1
- package/dist/skills/bundled/predictit/SKILL.md +66 -0
- package/dist/skills/bundled/presence/SKILL.md +217 -0
- package/dist/skills/bundled/presence/index.js +2 -2
- package/dist/skills/bundled/presence/index.js.map +1 -1
- package/dist/skills/bundled/processes/SKILL.md +254 -0
- package/dist/skills/bundled/pump-swarm/SKILL.md +309 -0
- package/dist/skills/bundled/pumpfun/SKILL.md +145 -0
- package/dist/skills/bundled/qmd/SKILL.md +129 -0
- package/dist/skills/bundled/qrcoin/SKILL.md +60 -0
- package/dist/skills/bundled/qrcoin/index.d.ts +0 -3
- package/dist/skills/bundled/qrcoin/index.js +0 -1
- package/dist/skills/bundled/qrcoin/index.js.map +1 -1
- package/dist/skills/bundled/raydium/SKILL.md +198 -0
- package/dist/skills/bundled/remote/SKILL.md +201 -0
- package/dist/skills/bundled/research/SKILL.md +83 -0
- package/dist/skills/bundled/research/index.js +2 -2
- package/dist/skills/bundled/research/index.js.map +1 -1
- package/dist/skills/bundled/risk/SKILL.md +323 -0
- package/dist/skills/bundled/router/SKILL.md +233 -0
- package/dist/skills/bundled/routing/SKILL.md +258 -0
- package/dist/skills/bundled/sandbox/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/index.js +2 -2
- package/dist/skills/bundled/search-config/index.js.map +1 -1
- package/dist/skills/bundled/sessions/SKILL.md +251 -0
- package/dist/skills/bundled/sessions/index.js +1 -1
- package/dist/skills/bundled/sessions/index.js.map +1 -1
- package/dist/skills/bundled/setup/SKILL.md +53 -0
- package/dist/skills/bundled/shield/SKILL.md +21 -0
- package/dist/skills/bundled/signals/SKILL.md +106 -0
- package/dist/skills/bundled/signals/index.d.ts +0 -3
- package/dist/skills/bundled/signals/index.js +3 -4
- package/dist/skills/bundled/signals/index.js.map +1 -1
- package/dist/skills/bundled/sizing/SKILL.md +238 -0
- package/dist/skills/bundled/slippage/SKILL.md +306 -0
- package/dist/skills/bundled/smarkets/SKILL.md +107 -0
- package/dist/skills/bundled/solend/SKILL.md +63 -0
- package/dist/skills/bundled/strategy/SKILL.md +266 -0
- package/dist/skills/bundled/streaming/SKILL.md +150 -0
- package/dist/skills/bundled/streaming/index.js +2 -2
- package/dist/skills/bundled/streaming/index.js.map +1 -1
- package/dist/skills/bundled/tailscale/SKILL.md +249 -0
- package/dist/skills/bundled/tailscale/index.js +2 -2
- package/dist/skills/bundled/tailscale/index.js.map +1 -1
- package/dist/skills/bundled/ticks/SKILL.md +61 -0
- package/dist/skills/bundled/token-security/SKILL.md +18 -0
- package/dist/skills/bundled/trading-evm/SKILL.md +329 -0
- package/dist/skills/bundled/trading-futures/SKILL.md +865 -0
- package/dist/skills/bundled/trading-kalshi/SKILL.md +629 -0
- package/dist/skills/bundled/trading-manifold/SKILL.md +387 -0
- package/dist/skills/bundled/trading-polymarket/SKILL.md +1080 -0
- package/dist/skills/bundled/trading-solana/SKILL.md +418 -0
- package/dist/skills/bundled/trading-system/SKILL.md +290 -0
- package/dist/skills/bundled/triggers/SKILL.md +433 -0
- package/dist/skills/bundled/tts/SKILL.md +220 -0
- package/dist/skills/bundled/tweet-ideas/SKILL.md +77 -0
- package/dist/skills/bundled/usage/SKILL.md +239 -0
- package/dist/skills/bundled/usage/index.js +2 -2
- package/dist/skills/bundled/usage/index.js.map +1 -1
- package/dist/skills/bundled/veil/SKILL.md +76 -0
- package/dist/skills/bundled/veil/index.d.ts +0 -3
- package/dist/skills/bundled/veil/index.js +0 -1
- package/dist/skills/bundled/veil/index.js.map +1 -1
- package/dist/skills/bundled/verify/SKILL.md +199 -0
- package/dist/skills/bundled/verify/index.d.ts +0 -3
- package/dist/skills/bundled/verify/index.js +0 -1
- package/dist/skills/bundled/verify/index.js.map +1 -1
- package/dist/skills/bundled/virtuals/SKILL.md +82 -0
- package/dist/skills/bundled/voice/SKILL.md +217 -0
- package/dist/skills/bundled/voice/index.js +2 -2
- package/dist/skills/bundled/voice/index.js.map +1 -1
- package/dist/skills/bundled/weather/SKILL.md +80 -0
- package/dist/skills/bundled/webhooks/SKILL.md +297 -0
- package/dist/skills/bundled/webhooks/index.js +2 -2
- package/dist/skills/bundled/webhooks/index.js.map +1 -1
- package/dist/skills/bundled/whale-tracking/SKILL.md +287 -0
- package/dist/skills/bundled/whale-tracking/index.js +2 -2
- package/dist/skills/bundled/whale-tracking/index.js.map +1 -1
- package/dist/skills/bundled/yoink/SKILL.md +54 -0
- package/dist/skills/bundled/yoink/index.d.ts +0 -3
- package/dist/skills/bundled/yoink/index.js +0 -1
- package/dist/skills/bundled/yoink/index.js.map +1 -1
- package/dist/skills/executor.js +5 -3
- package/dist/skills/executor.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: triggers
|
|
3
|
+
description: "Conditional orders that auto-execute when price thresholds are met"
|
|
4
|
+
emoji: "⚡"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Triggers - Complete API Reference
|
|
8
|
+
|
|
9
|
+
Set up conditional orders that automatically execute trades when price conditions are met. Works across prediction markets, futures, and crypto spot.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Chat Commands
|
|
14
|
+
|
|
15
|
+
### Create Trigger Orders
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/trigger buy poly "Trump 2028" YES below 0.40 size 100
|
|
19
|
+
/trigger buy poly "Fed rate" NO above 0.60 size 50
|
|
20
|
+
/trigger sell poly "Trump 2028" YES above 0.55 size all
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Futures Triggers
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/trigger long binance BTCUSDT below 95000 size 0.1 leverage 10x
|
|
27
|
+
/trigger short binance ETHUSDT above 4000 size 1 leverage 20x
|
|
28
|
+
/trigger close binance BTCUSDT above 105000
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Crypto Spot Triggers
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
/trigger buy sol SOL below 180 size 100usdc
|
|
35
|
+
/trigger sell eth ETH above 4000 size 0.5
|
|
36
|
+
/trigger swap arb USDC to ARB below 1.50 size 500
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Manage Triggers
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
/triggers List all active triggers
|
|
43
|
+
/triggers pending Show pending only
|
|
44
|
+
/triggers history Triggered order history
|
|
45
|
+
/trigger cancel <id> Cancel trigger
|
|
46
|
+
/trigger cancel all Cancel all triggers
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Stop-Loss & Take-Profit
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
/sl poly "Trump" at 0.35 Stop-loss on position
|
|
53
|
+
/tp poly "Trump" at 0.65 Take-profit on position
|
|
54
|
+
/trailing-stop poly "Trump" 10% Trailing stop (% from high)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## TypeScript API Reference
|
|
60
|
+
|
|
61
|
+
### Create Trigger Service
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { createTriggerService } from 'clodds/triggers';
|
|
65
|
+
|
|
66
|
+
const triggers = createTriggerService({
|
|
67
|
+
// Price monitoring
|
|
68
|
+
checkIntervalMs: 5000, // Check every 5 seconds
|
|
69
|
+
|
|
70
|
+
// Execution
|
|
71
|
+
maxSlippagePercent: 2,
|
|
72
|
+
retryAttempts: 3,
|
|
73
|
+
|
|
74
|
+
// Storage
|
|
75
|
+
storage: 'sqlite',
|
|
76
|
+
dbPath: './triggers.db',
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Start monitoring
|
|
80
|
+
await triggers.start();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Create Prediction Market Trigger
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// Buy YES when price drops below threshold
|
|
87
|
+
const trigger = await triggers.create({
|
|
88
|
+
type: 'entry',
|
|
89
|
+
platform: 'polymarket',
|
|
90
|
+
market: 'will-trump-win-2028',
|
|
91
|
+
side: 'YES',
|
|
92
|
+
direction: 'below',
|
|
93
|
+
triggerPrice: 0.40,
|
|
94
|
+
size: 100, // $100
|
|
95
|
+
orderType: 'limit', // 'market' | 'limit'
|
|
96
|
+
limitPrice: 0.41, // Optional: max price for limit
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
console.log(`Trigger ID: ${trigger.id}`);
|
|
100
|
+
console.log(`Status: ${trigger.status}`); // 'pending'
|
|
101
|
+
|
|
102
|
+
// Sell when price rises above threshold
|
|
103
|
+
await triggers.create({
|
|
104
|
+
type: 'exit',
|
|
105
|
+
platform: 'polymarket',
|
|
106
|
+
market: 'will-trump-win-2028',
|
|
107
|
+
side: 'YES',
|
|
108
|
+
direction: 'above',
|
|
109
|
+
triggerPrice: 0.55,
|
|
110
|
+
size: 'all', // Sell entire position
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Create Futures Trigger
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
// Long entry when BTC drops below support
|
|
118
|
+
await triggers.create({
|
|
119
|
+
type: 'entry',
|
|
120
|
+
platform: 'binance',
|
|
121
|
+
symbol: 'BTCUSDT',
|
|
122
|
+
side: 'long',
|
|
123
|
+
direction: 'below',
|
|
124
|
+
triggerPrice: 95000,
|
|
125
|
+
size: 0.1,
|
|
126
|
+
leverage: 10,
|
|
127
|
+
|
|
128
|
+
// Auto-set SL/TP on fill
|
|
129
|
+
stopLoss: 93000,
|
|
130
|
+
takeProfit: 105000,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// Short entry when ETH breaks above resistance
|
|
134
|
+
await triggers.create({
|
|
135
|
+
type: 'entry',
|
|
136
|
+
platform: 'bybit',
|
|
137
|
+
symbol: 'ETHUSDT',
|
|
138
|
+
side: 'short',
|
|
139
|
+
direction: 'above',
|
|
140
|
+
triggerPrice: 4000,
|
|
141
|
+
size: 1,
|
|
142
|
+
leverage: 20,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Close position when price target hit
|
|
146
|
+
await triggers.create({
|
|
147
|
+
type: 'exit',
|
|
148
|
+
platform: 'binance',
|
|
149
|
+
symbol: 'BTCUSDT',
|
|
150
|
+
direction: 'above',
|
|
151
|
+
triggerPrice: 105000,
|
|
152
|
+
size: 'all',
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Create Crypto Spot Trigger
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
// Buy SOL when price drops
|
|
160
|
+
await triggers.create({
|
|
161
|
+
type: 'entry',
|
|
162
|
+
platform: 'jupiter', // Solana DEX
|
|
163
|
+
tokenIn: 'USDC',
|
|
164
|
+
tokenOut: 'SOL',
|
|
165
|
+
direction: 'below',
|
|
166
|
+
triggerPrice: 180,
|
|
167
|
+
size: 100, // 100 USDC
|
|
168
|
+
slippagePercent: 1,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
// Sell ETH when price rises
|
|
172
|
+
await triggers.create({
|
|
173
|
+
type: 'exit',
|
|
174
|
+
platform: 'uniswap', // EVM DEX
|
|
175
|
+
chain: 'ethereum',
|
|
176
|
+
tokenIn: 'ETH',
|
|
177
|
+
tokenOut: 'USDC',
|
|
178
|
+
direction: 'above',
|
|
179
|
+
triggerPrice: 4000,
|
|
180
|
+
size: 0.5,
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Stop-Loss & Take-Profit
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// Set stop-loss on existing position
|
|
188
|
+
await triggers.setStopLoss({
|
|
189
|
+
platform: 'polymarket',
|
|
190
|
+
market: 'will-trump-win-2028',
|
|
191
|
+
side: 'YES',
|
|
192
|
+
triggerPrice: 0.35,
|
|
193
|
+
size: 'all',
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// Set take-profit
|
|
197
|
+
await triggers.setTakeProfit({
|
|
198
|
+
platform: 'polymarket',
|
|
199
|
+
market: 'will-trump-win-2028',
|
|
200
|
+
side: 'YES',
|
|
201
|
+
triggerPrice: 0.65,
|
|
202
|
+
size: 'all',
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// Trailing stop (follows price up, triggers on pullback)
|
|
206
|
+
await triggers.setTrailingStop({
|
|
207
|
+
platform: 'polymarket',
|
|
208
|
+
market: 'will-trump-win-2028',
|
|
209
|
+
side: 'YES',
|
|
210
|
+
trailPercent: 10, // Trigger if drops 10% from high
|
|
211
|
+
size: 'all',
|
|
212
|
+
});
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Multi-Condition Triggers
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
// Trigger only when multiple conditions met
|
|
219
|
+
await triggers.create({
|
|
220
|
+
type: 'entry',
|
|
221
|
+
platform: 'polymarket',
|
|
222
|
+
market: 'will-trump-win-2028',
|
|
223
|
+
side: 'YES',
|
|
224
|
+
|
|
225
|
+
conditions: [
|
|
226
|
+
{ type: 'price', direction: 'below', value: 0.40 },
|
|
227
|
+
{ type: 'volume24h', direction: 'above', value: 100000 },
|
|
228
|
+
{ type: 'spread', direction: 'below', value: 0.02 },
|
|
229
|
+
],
|
|
230
|
+
|
|
231
|
+
// All conditions must be true
|
|
232
|
+
conditionLogic: 'AND', // 'AND' | 'OR'
|
|
233
|
+
|
|
234
|
+
size: 100,
|
|
235
|
+
});
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### One-Cancels-Other (OCO)
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
// OCO: Either SL or TP triggers, other cancels
|
|
242
|
+
const oco = await triggers.createOCO({
|
|
243
|
+
platform: 'binance',
|
|
244
|
+
symbol: 'BTCUSDT',
|
|
245
|
+
|
|
246
|
+
stopLoss: {
|
|
247
|
+
direction: 'below',
|
|
248
|
+
triggerPrice: 93000,
|
|
249
|
+
size: 'all',
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
takeProfit: {
|
|
253
|
+
direction: 'above',
|
|
254
|
+
triggerPrice: 105000,
|
|
255
|
+
size: 'all',
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### List & Manage Triggers
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
// List all triggers
|
|
264
|
+
const all = await triggers.list();
|
|
265
|
+
|
|
266
|
+
for (const t of all) {
|
|
267
|
+
console.log(`${t.id}: ${t.platform} ${t.market || t.symbol}`);
|
|
268
|
+
console.log(` ${t.direction} ${t.triggerPrice}`);
|
|
269
|
+
console.log(` Status: ${t.status}`);
|
|
270
|
+
console.log(` Created: ${t.createdAt}`);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Get pending only
|
|
274
|
+
const pending = await triggers.list({ status: 'pending' });
|
|
275
|
+
|
|
276
|
+
// Get history (triggered)
|
|
277
|
+
const history = await triggers.list({ status: 'triggered' });
|
|
278
|
+
|
|
279
|
+
// Cancel trigger
|
|
280
|
+
await triggers.cancel(triggerId);
|
|
281
|
+
|
|
282
|
+
// Cancel all
|
|
283
|
+
await triggers.cancelAll();
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Event Handlers
|
|
287
|
+
|
|
288
|
+
```typescript
|
|
289
|
+
// Trigger activated
|
|
290
|
+
triggers.on('triggered', async (trigger, result) => {
|
|
291
|
+
console.log(`Trigger ${trigger.id} activated!`);
|
|
292
|
+
console.log(`Order: ${result.orderId}`);
|
|
293
|
+
console.log(`Fill price: ${result.fillPrice}`);
|
|
294
|
+
console.log(`Size: ${result.filledSize}`);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
// Trigger failed
|
|
298
|
+
triggers.on('failed', (trigger, error) => {
|
|
299
|
+
console.error(`Trigger ${trigger.id} failed: ${error.message}`);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
// Price approaching trigger
|
|
303
|
+
triggers.on('approaching', (trigger, currentPrice) => {
|
|
304
|
+
console.log(`Price ${currentPrice} approaching trigger at ${trigger.triggerPrice}`);
|
|
305
|
+
});
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Supported Platforms
|
|
311
|
+
|
|
312
|
+
### Prediction Markets
|
|
313
|
+
|
|
314
|
+
| Platform | Entry Triggers | Exit Triggers | SL/TP |
|
|
315
|
+
|----------|---------------|---------------|-------|
|
|
316
|
+
| **Polymarket** | ✓ | ✓ | ✓ |
|
|
317
|
+
| **Kalshi** | ✓ | ✓ | ✓ |
|
|
318
|
+
| **Manifold** | ✓ | ✓ | ✓ |
|
|
319
|
+
|
|
320
|
+
### Futures
|
|
321
|
+
|
|
322
|
+
| Platform | Entry Triggers | Native Triggers | SL/TP |
|
|
323
|
+
|----------|---------------|-----------------|-------|
|
|
324
|
+
| **Binance** | ✓ | ✓ | ✓ |
|
|
325
|
+
| **Bybit** | ✓ | ✓ | ✓ |
|
|
326
|
+
| **MEXC** | ✓ | ✓ Native | ✓ |
|
|
327
|
+
| **Hyperliquid** | ✓ | ✓ | ✓ |
|
|
328
|
+
|
|
329
|
+
### Crypto Spot
|
|
330
|
+
|
|
331
|
+
| Platform | Entry Triggers | Exit Triggers |
|
|
332
|
+
|----------|---------------|---------------|
|
|
333
|
+
| **Jupiter** (Solana) | ✓ | ✓ |
|
|
334
|
+
| **Raydium** | ✓ | ✓ |
|
|
335
|
+
| **Uniswap** (EVM) | ✓ | ✓ |
|
|
336
|
+
| **1inch** (EVM) | ✓ | ✓ |
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## Trigger Types
|
|
341
|
+
|
|
342
|
+
| Type | Description |
|
|
343
|
+
|------|-------------|
|
|
344
|
+
| **entry** | Open new position when triggered |
|
|
345
|
+
| **exit** | Close position when triggered |
|
|
346
|
+
| **stop-loss** | Exit to limit losses |
|
|
347
|
+
| **take-profit** | Exit to lock in gains |
|
|
348
|
+
| **trailing-stop** | Dynamic stop that follows price |
|
|
349
|
+
| **oco** | One-cancels-other (SL + TP pair) |
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Price Sources
|
|
354
|
+
|
|
355
|
+
| Platform | Price Source |
|
|
356
|
+
|----------|-------------|
|
|
357
|
+
| Polymarket | WebSocket mid price |
|
|
358
|
+
| Kalshi | REST API best bid/ask |
|
|
359
|
+
| Binance | WebSocket mark price |
|
|
360
|
+
| Bybit | WebSocket last price |
|
|
361
|
+
| Jupiter | On-chain oracle |
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Examples
|
|
366
|
+
|
|
367
|
+
### Prediction Market Strategy
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
// Buy the dip, sell the rip
|
|
371
|
+
await triggers.create({
|
|
372
|
+
platform: 'polymarket',
|
|
373
|
+
market: 'trump-2028',
|
|
374
|
+
side: 'YES',
|
|
375
|
+
direction: 'below',
|
|
376
|
+
triggerPrice: 0.40,
|
|
377
|
+
size: 200,
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
await triggers.create({
|
|
381
|
+
platform: 'polymarket',
|
|
382
|
+
market: 'trump-2028',
|
|
383
|
+
side: 'YES',
|
|
384
|
+
direction: 'above',
|
|
385
|
+
triggerPrice: 0.55,
|
|
386
|
+
size: 'all',
|
|
387
|
+
});
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Futures Breakout Strategy
|
|
391
|
+
|
|
392
|
+
```typescript
|
|
393
|
+
// Enter long on breakout above resistance
|
|
394
|
+
await triggers.create({
|
|
395
|
+
platform: 'binance',
|
|
396
|
+
symbol: 'BTCUSDT',
|
|
397
|
+
side: 'long',
|
|
398
|
+
direction: 'above',
|
|
399
|
+
triggerPrice: 100000,
|
|
400
|
+
size: 0.5,
|
|
401
|
+
leverage: 10,
|
|
402
|
+
stopLoss: 98000,
|
|
403
|
+
takeProfit: 110000,
|
|
404
|
+
});
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### DCA on Dips
|
|
408
|
+
|
|
409
|
+
```typescript
|
|
410
|
+
// Buy more as price drops
|
|
411
|
+
const levels = [180, 170, 160, 150];
|
|
412
|
+
for (const price of levels) {
|
|
413
|
+
await triggers.create({
|
|
414
|
+
platform: 'jupiter',
|
|
415
|
+
tokenOut: 'SOL',
|
|
416
|
+
tokenIn: 'USDC',
|
|
417
|
+
direction: 'below',
|
|
418
|
+
triggerPrice: price,
|
|
419
|
+
size: 50, // $50 at each level
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
## Best Practices
|
|
427
|
+
|
|
428
|
+
1. **Use limit orders** — Avoid slippage on triggers
|
|
429
|
+
2. **Set expiration** — Don't leave triggers forever
|
|
430
|
+
3. **Monitor execution** — Check fill prices
|
|
431
|
+
4. **Use OCO for exits** — SL + TP together
|
|
432
|
+
5. **Test with small size** — Verify triggers work
|
|
433
|
+
6. **Account for fees** — Include in trigger price
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tts
|
|
3
|
+
description: "Text-to-speech synthesis with ElevenLabs and system voices"
|
|
4
|
+
emoji: "🔊"
|
|
5
|
+
gates:
|
|
6
|
+
envs:
|
|
7
|
+
anyOf:
|
|
8
|
+
- ELEVENLABS_API_KEY
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# TTS (Text-to-Speech) - Complete API Reference
|
|
12
|
+
|
|
13
|
+
Convert text to natural-sounding speech using ElevenLabs, macOS say, or espeak.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Chat Commands
|
|
18
|
+
|
|
19
|
+
### Synthesize Speech
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/speak "Your order has been filled" Speak text aloud
|
|
23
|
+
/speak "Market alert" --voice rachel Use specific voice
|
|
24
|
+
/speak "Portfolio up 5%" --speed 1.2 Adjust speed
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Voice Management
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
/voices List available voices
|
|
31
|
+
/voices preview rachel Preview a voice
|
|
32
|
+
/voice set rachel Set default voice
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Settings
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
/tts status Check TTS status
|
|
39
|
+
/tts provider elevenlabs Set provider
|
|
40
|
+
/tts speed 1.0 Set default speed
|
|
41
|
+
/tts volume 0.8 Set volume (0-1)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## TypeScript API Reference
|
|
47
|
+
|
|
48
|
+
### Create TTS Service
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { createTTSService } from 'clodds/tts';
|
|
52
|
+
|
|
53
|
+
const tts = createTTSService({
|
|
54
|
+
provider: 'elevenlabs',
|
|
55
|
+
apiKey: process.env.ELEVENLABS_API_KEY,
|
|
56
|
+
|
|
57
|
+
// Defaults
|
|
58
|
+
defaultVoice: 'rachel',
|
|
59
|
+
defaultSpeed: 1.0,
|
|
60
|
+
defaultPitch: 1.0,
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Synthesize Speech
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// Basic synthesis
|
|
68
|
+
const audio = await tts.synthesize('Hello, your trade was executed.');
|
|
69
|
+
|
|
70
|
+
// Play immediately
|
|
71
|
+
await tts.speak('Portfolio value is $10,000');
|
|
72
|
+
|
|
73
|
+
// With options
|
|
74
|
+
await tts.speak('Market alert: BTC crossed $100k', {
|
|
75
|
+
voice: 'josh',
|
|
76
|
+
speed: 1.2,
|
|
77
|
+
pitch: 1.0,
|
|
78
|
+
volume: 0.8,
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Streaming Synthesis
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// Stream for long text (lower latency)
|
|
86
|
+
const stream = await tts.streamSynthesize(longText, {
|
|
87
|
+
voice: 'rachel',
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
stream.on('data', (chunk) => {
|
|
91
|
+
// Play audio chunks as they arrive
|
|
92
|
+
audioPlayer.write(chunk);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
stream.on('end', () => {
|
|
96
|
+
console.log('Synthesis complete');
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### List Voices
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// Get available voices
|
|
104
|
+
const voices = await tts.listVoices();
|
|
105
|
+
|
|
106
|
+
for (const voice of voices) {
|
|
107
|
+
console.log(`${voice.id}: ${voice.name}`);
|
|
108
|
+
console.log(` Gender: ${voice.gender}`);
|
|
109
|
+
console.log(` Accent: ${voice.accent}`);
|
|
110
|
+
console.log(` Use case: ${voice.useCase}`);
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Voice Preview
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
// Preview a voice
|
|
118
|
+
await tts.preview('rachel', 'This is a preview of the Rachel voice.');
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Queue Management
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// Queue multiple messages
|
|
125
|
+
tts.queue('First message');
|
|
126
|
+
tts.queue('Second message');
|
|
127
|
+
tts.queue('Third message');
|
|
128
|
+
|
|
129
|
+
// Messages play in order
|
|
130
|
+
|
|
131
|
+
// Clear queue
|
|
132
|
+
tts.clearQueue();
|
|
133
|
+
|
|
134
|
+
// Skip current
|
|
135
|
+
tts.skip();
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## ElevenLabs Voices
|
|
141
|
+
|
|
142
|
+
| Voice ID | Name | Gender | Accent | Best For |
|
|
143
|
+
|----------|------|--------|--------|----------|
|
|
144
|
+
| `rachel` | Rachel | F | American | Narration |
|
|
145
|
+
| `domi` | Domi | F | American | Conversational |
|
|
146
|
+
| `bella` | Bella | F | American | Soft, gentle |
|
|
147
|
+
| `antoni` | Antoni | M | American | Narration |
|
|
148
|
+
| `josh` | Josh | M | American | Deep, authoritative |
|
|
149
|
+
| `arnold` | Arnold | M | American | Gruff, character |
|
|
150
|
+
| `adam` | Adam | M | American | Deep, narration |
|
|
151
|
+
| `sam` | Sam | M | American | Raspy, character |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Providers
|
|
156
|
+
|
|
157
|
+
| Provider | Quality | Latency | Cost | Setup |
|
|
158
|
+
|----------|---------|---------|------|-------|
|
|
159
|
+
| **ElevenLabs** | Premium | ~500ms | $5/100k chars | API key |
|
|
160
|
+
| **say** (macOS) | Good | ~100ms | Free | Built-in |
|
|
161
|
+
| **espeak** | Basic | ~50ms | Free | Install |
|
|
162
|
+
|
|
163
|
+
### Provider Configuration
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
// ElevenLabs (best quality)
|
|
167
|
+
const tts = createTTSService({
|
|
168
|
+
provider: 'elevenlabs',
|
|
169
|
+
apiKey: process.env.ELEVENLABS_API_KEY,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// macOS say (free, local)
|
|
173
|
+
const tts = createTTSService({
|
|
174
|
+
provider: 'say',
|
|
175
|
+
defaultVoice: 'Samantha', // macOS voice
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// espeak (cross-platform, free)
|
|
179
|
+
const tts = createTTSService({
|
|
180
|
+
provider: 'espeak',
|
|
181
|
+
defaultVoice: 'en-us',
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Audio Output
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
// Set output device
|
|
191
|
+
tts.setOutputDevice('Built-in Speakers');
|
|
192
|
+
|
|
193
|
+
// Get available devices
|
|
194
|
+
const devices = await tts.listOutputDevices();
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## SSML Support (ElevenLabs)
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
// Use SSML for advanced control
|
|
203
|
+
await tts.speak(`
|
|
204
|
+
<speak>
|
|
205
|
+
<prosody rate="slow">Important alert:</prosody>
|
|
206
|
+
<break time="500ms"/>
|
|
207
|
+
Your stop loss was triggered.
|
|
208
|
+
</speak>
|
|
209
|
+
`, { ssml: true });
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Best Practices
|
|
215
|
+
|
|
216
|
+
1. **Use streaming** — For long text, reduces time to first audio
|
|
217
|
+
2. **Cache common phrases** — "Order filled", "Alert triggered"
|
|
218
|
+
3. **Adjust speed** — Faster for alerts, slower for details
|
|
219
|
+
4. **Queue management** — Don't overlap important messages
|
|
220
|
+
5. **Fallback provider** — Use say/espeak if ElevenLabs unavailable
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tweet-ideas
|
|
3
|
+
description: "Generate tweet ideas from trends and project updates"
|
|
4
|
+
command: tweets
|
|
5
|
+
emoji: "💭"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Tweet Ideas Generator
|
|
9
|
+
|
|
10
|
+
Generate tweet ideas from market trends OR your project's latest developments.
|
|
11
|
+
|
|
12
|
+
## Commands
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/tweets generate [topic] Generate from trends/topic
|
|
16
|
+
/tweets spicy Contrarian/provocative takes
|
|
17
|
+
/tweets project <path> Generate about project updates
|
|
18
|
+
/tweets changelog <path> Announce latest changelog entries
|
|
19
|
+
/tweets feature <description> Announce a specific feature
|
|
20
|
+
/tweets launch <path> Generate launch thread
|
|
21
|
+
/tweets style <description> Set your voice/style
|
|
22
|
+
/tweets trends Show what's trending to riff on
|
|
23
|
+
/tweets drafts View saved ideas
|
|
24
|
+
/tweets save <id> Save to drafts
|
|
25
|
+
/tweets clear Clear drafts
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Examples
|
|
29
|
+
|
|
30
|
+
### Set Your Style
|
|
31
|
+
```
|
|
32
|
+
/tweets style "contrarian crypto takes, short punchy sentences, no emojis, slightly unhinged, call out hypocrisy"
|
|
33
|
+
/tweets style "builder sharing wins, technical but accessible, authentic not hype"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Generate From Trends
|
|
37
|
+
```
|
|
38
|
+
/tweets generate
|
|
39
|
+
/tweets generate "bitcoin etf"
|
|
40
|
+
/tweets spicy
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Project Announcements
|
|
44
|
+
```
|
|
45
|
+
/tweets project /path/to/myproject
|
|
46
|
+
/tweets changelog /path/to/CHANGELOG.md
|
|
47
|
+
/tweets feature "Added SPL token escrow with Pyth oracle conditions"
|
|
48
|
+
/tweets launch /path/to/myproject
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## How It Works
|
|
52
|
+
|
|
53
|
+
### Trend Mode
|
|
54
|
+
- Pulls from crypto news feeds, market data, social signals
|
|
55
|
+
- Generates takes in your style
|
|
56
|
+
- `/tweets spicy` deliberately goes contrarian
|
|
57
|
+
|
|
58
|
+
### Project Mode
|
|
59
|
+
- Reads CHANGELOG.md for latest updates
|
|
60
|
+
- Reads README.md for project description
|
|
61
|
+
- Reads package.json for name/version
|
|
62
|
+
- Generates announcement tweets in your style
|
|
63
|
+
|
|
64
|
+
### Style Memory
|
|
65
|
+
Your style is saved and persists across sessions. Examples:
|
|
66
|
+
- "degen energy, lowercase, lots of slang"
|
|
67
|
+
- "thoughtful builder, focus on technical details"
|
|
68
|
+
- "provocative, question everything, short sentences"
|
|
69
|
+
|
|
70
|
+
## Output
|
|
71
|
+
|
|
72
|
+
Returns 3-5 tweet ideas per generation. Each shows:
|
|
73
|
+
- The tweet text
|
|
74
|
+
- Character count
|
|
75
|
+
- Thread potential (if topic is big)
|
|
76
|
+
|
|
77
|
+
Save the ones you like with `/tweets save <id>`.
|