@formthefog/stratus 2026.2.20 → 2026.3.19
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/.github/sentinel/action.yml +100 -0
- package/.github/sentinel/dist/codebase.d.ts +3 -0
- package/.github/sentinel/dist/codebase.d.ts.map +1 -0
- package/.github/sentinel/dist/context.d.ts +6 -0
- package/.github/sentinel/dist/context.d.ts.map +1 -0
- package/.github/sentinel/dist/fixer.d.ts +6 -0
- package/.github/sentinel/dist/fixer.d.ts.map +1 -0
- package/.github/sentinel/dist/index.d.ts +1 -0
- package/.github/sentinel/dist/index.d.ts.map +1 -0
- package/.github/sentinel/dist/index.js +68808 -0
- package/.github/sentinel/dist/index.js.map +1 -0
- package/.github/sentinel/dist/licenses.txt +1152 -0
- package/.github/sentinel/dist/models/anthropic.d.ts +26 -0
- package/.github/sentinel/dist/models/anthropic.d.ts.map +1 -0
- package/.github/sentinel/dist/models/openai.d.ts +26 -0
- package/.github/sentinel/dist/models/openai.d.ts.map +1 -0
- package/.github/sentinel/dist/models/openrouter.d.ts +31 -0
- package/.github/sentinel/dist/models/openrouter.d.ts.map +1 -0
- package/.github/sentinel/dist/models/types.d.ts +37 -0
- package/.github/sentinel/dist/models/types.d.ts.map +1 -0
- package/.github/sentinel/dist/orchestrator.d.ts +3 -0
- package/.github/sentinel/dist/orchestrator.d.ts.map +1 -0
- package/.github/sentinel/dist/policy.d.ts +15 -0
- package/.github/sentinel/dist/policy.d.ts.map +1 -0
- package/.github/sentinel/dist/reporter.d.ts +8 -0
- package/.github/sentinel/dist/reporter.d.ts.map +1 -0
- package/.github/sentinel/dist/responder.d.ts +6 -0
- package/.github/sentinel/dist/responder.d.ts.map +1 -0
- package/.github/sentinel/dist/router.d.ts +2 -0
- package/.github/sentinel/dist/router.d.ts.map +1 -0
- package/.github/sentinel/dist/schemas/config.d.ts +195 -0
- package/.github/sentinel/dist/schemas/config.d.ts.map +1 -0
- package/.github/sentinel/dist/schemas/fix.d.ts +130 -0
- package/.github/sentinel/dist/schemas/fix.d.ts.map +1 -0
- package/.github/sentinel/dist/schemas/review.d.ts +275 -0
- package/.github/sentinel/dist/schemas/review.d.ts.map +1 -0
- package/.github/sentinel/dist/sourcemap-register.js +1 -0
- package/.github/sentinel/dist/subway.d.ts +31 -0
- package/.github/sentinel/dist/subway.d.ts.map +1 -0
- package/.github/sentinel/dist/types.d.ts +210 -0
- package/.github/sentinel/dist/types.d.ts.map +1 -0
- package/.github/sentinel/package-lock.json +2389 -0
- package/.github/sentinel/package.json +29 -0
- package/.github/sentinel/src/codebase.ts +265 -0
- package/.github/sentinel/src/context.ts +182 -0
- package/.github/sentinel/src/fixer.ts +353 -0
- package/.github/sentinel/src/index.ts +263 -0
- package/.github/sentinel/src/models/anthropic.ts +244 -0
- package/.github/sentinel/src/models/openai.ts +242 -0
- package/.github/sentinel/src/models/openrouter.ts +319 -0
- package/.github/sentinel/src/models/types.ts +35 -0
- package/.github/sentinel/src/orchestrator.ts +287 -0
- package/.github/sentinel/src/policy.ts +133 -0
- package/.github/sentinel/src/reporter.ts +666 -0
- package/.github/sentinel/src/responder.ts +156 -0
- package/.github/sentinel/src/router.ts +308 -0
- package/.github/sentinel/src/schemas/config.ts +84 -0
- package/.github/sentinel/src/schemas/fix.ts +44 -0
- package/.github/sentinel/src/schemas/review.ts +73 -0
- package/.github/sentinel/src/subway.ts +250 -0
- package/.github/sentinel/src/types.ts +234 -0
- package/.github/sentinel/tsconfig.json +19 -0
- package/.github/sentinel.yml +34 -0
- package/.github/workflows/publish.yml +28 -0
- package/.github/workflows/sentinel.yml +55 -0
- package/README.md +90 -41
- package/SECURITY.md +85 -0
- package/TROUBLESHOOTING.md +2 -2
- package/index.ts +219 -109
- package/openclaw.plugin.json +50 -26
- package/package.json +1 -1
- package/skills/stratus-info/SKILL.md +70 -10
- package/src/client.ts +78 -18
- package/src/config.ts +29 -8
- package/src/setup.ts +53 -61
- package/src/types.ts +11 -0
package/README.md
CHANGED
|
@@ -10,12 +10,16 @@ Integrate Stratus V3 (X1-AC), a state-of-the-art action-conditioned JEPA (Joint-
|
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
|
-
- **
|
|
13
|
+
- **Zero-Config**: Works out of the box with Formation pooled keys — no API key needed
|
|
14
|
+
- **2050+ Models**: Dynamic discovery via OpenRouter — OpenAI, Anthropic, Google, and more
|
|
15
|
+
- **Model Provider**: Use Stratus models for agent conversations with predictive planning
|
|
14
16
|
- **Embeddings Tool**: Generate 768-dimensional semantic state embeddings
|
|
15
|
-
- **Rollout Tool**: Multi-step task planning
|
|
16
|
-
- **
|
|
17
|
+
- **Rollout Tool**: Multi-step task planning via Policy Head v3 (94.4% accuracy)
|
|
18
|
+
- **BYOK Support**: Bring your own provider keys (`openai_key`, `anthropic_key`, `gemini_key`) for zero-markup usage
|
|
17
19
|
- **Opt-in Tools**: Tools are optional and require explicit allowlisting
|
|
18
20
|
|
|
21
|
+
> See [SECURITY.md](./SECURITY.md) for a full accounting of credentials accessed, network calls made, and files written.
|
|
22
|
+
|
|
19
23
|
## Support
|
|
20
24
|
|
|
21
25
|
- **Documentation**: [https://stratus.run/docs](https://stratus.run/docs)
|
|
@@ -24,7 +28,7 @@ Integrate Stratus V3 (X1-AC), a state-of-the-art action-conditioned JEPA (Joint-
|
|
|
24
28
|
|
|
25
29
|
## Installation
|
|
26
30
|
|
|
27
|
-
### Quick Start (
|
|
31
|
+
### Quick Start (2 Steps) ✨
|
|
28
32
|
|
|
29
33
|
> **Note:** This plugin does NOT have an automatic postinstall script. You must run setup manually.
|
|
30
34
|
|
|
@@ -39,15 +43,23 @@ openclaw plugins install @formthefog/stratus
|
|
|
39
43
|
/stratus verify
|
|
40
44
|
```
|
|
41
45
|
|
|
42
|
-
**That's it!**
|
|
43
|
-
|
|
46
|
+
**That's it!** No API key required — Formation pooled keys give you instant access to all 2050+ models.
|
|
47
|
+
|
|
48
|
+
The `/stratus setup` command handles:
|
|
49
|
+
- ✅ Zero-config auth via Formation pool (or BYOK if you have a key)
|
|
44
50
|
- ✅ OpenClaw config updates
|
|
45
51
|
- ✅ Auth profile creation
|
|
46
|
-
- ✅
|
|
52
|
+
- ✅ Dynamic model registration
|
|
47
53
|
- ✅ Gateway restart prompt
|
|
48
54
|
|
|
49
55
|
**No manual config editing required!** 🧈
|
|
50
56
|
|
|
57
|
+
> **Optional — BYOK (no markup):** Set `STRATUS_API_KEY` to bypass the Formation pool:
|
|
58
|
+
> ```bash
|
|
59
|
+
> export STRATUS_API_KEY=stratus_sk_your_key_here
|
|
60
|
+
> ```
|
|
61
|
+
> Then re-run `/stratus setup`.
|
|
62
|
+
|
|
51
63
|
> **Tip:** Once installed, you can also access Stratus models with `/model stratus` in chat.
|
|
52
64
|
|
|
53
65
|
---
|
|
@@ -61,6 +73,7 @@ Use these slash commands in any OpenClaw chat (TUI, Telegram, Discord, etc.):
|
|
|
61
73
|
| `/stratus` | Show help |
|
|
62
74
|
| `/stratus setup` | Interactive configuration wizard |
|
|
63
75
|
| `/stratus verify` | Verify plugin is configured correctly |
|
|
76
|
+
| `/stratus models` | List all available models (live from API) |
|
|
64
77
|
|
|
65
78
|
---
|
|
66
79
|
|
|
@@ -68,11 +81,11 @@ Use these slash commands in any OpenClaw chat (TUI, Telegram, Discord, etc.):
|
|
|
68
81
|
|
|
69
82
|
The interactive setup command will:
|
|
70
83
|
|
|
71
|
-
1. ✅
|
|
84
|
+
1. ✅ Detect auth mode (BYOK if `STRATUS_API_KEY` is set, Formation pool otherwise)
|
|
72
85
|
2. ✅ Update OpenClaw configuration
|
|
73
86
|
3. ✅ Configure authentication profiles
|
|
74
|
-
4. ✅
|
|
75
|
-
5. ✅
|
|
87
|
+
4. ✅ Dynamically register all available models from the API
|
|
88
|
+
5. ✅ Report auth mode and markup status
|
|
76
89
|
|
|
77
90
|
---
|
|
78
91
|
|
|
@@ -151,23 +164,41 @@ Edit `~/.openclaw/openclaw.json`:
|
|
|
151
164
|
```json
|
|
152
165
|
{
|
|
153
166
|
"plugins": {
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
"apiKey": "${STRATUS_API_KEY}",
|
|
157
|
-
"baseUrl": "https://api.stratus.run",
|
|
158
|
-
"provider": {
|
|
167
|
+
"entries": {
|
|
168
|
+
"stratus": {
|
|
159
169
|
"enabled": true,
|
|
160
|
-
"
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
170
|
+
"config": {
|
|
171
|
+
"apiKey": "${STRATUS_API_KEY}",
|
|
172
|
+
"baseUrl": "https://api.stratus.run",
|
|
173
|
+
"inlineKeys": {
|
|
174
|
+
"openai_key": "${OPENAI_API_KEY}",
|
|
175
|
+
"anthropic_key": "${ANTHROPIC_API_KEY}",
|
|
176
|
+
"gemini_key": "${GOOGLE_API_KEY}"
|
|
177
|
+
},
|
|
178
|
+
"provider": {
|
|
179
|
+
"enabled": true,
|
|
180
|
+
"defaultModel": "stratus-x1ac-base-claude-sonnet-4-5"
|
|
181
|
+
},
|
|
182
|
+
"tools": {
|
|
183
|
+
"embeddings": { "enabled": true },
|
|
184
|
+
"rollout": { "enabled": true }
|
|
185
|
+
}
|
|
186
|
+
}
|
|
165
187
|
}
|
|
166
188
|
}
|
|
167
189
|
}
|
|
168
190
|
}
|
|
169
191
|
```
|
|
170
192
|
|
|
193
|
+
> **Note:** All keys are optional. Without any keys, Formation pooled keys are used automatically (25% markup). Inline provider keys (`openai_key`, `anthropic_key`, `gemini_key`) let you BYOK for specific providers while using the pool for others.
|
|
194
|
+
|
|
195
|
+
> **Important:** OpenClaw's plugin config schema requires plugin-specific settings
|
|
196
|
+
> to be nested under a `config` key within `plugins.entries.<id>`. Only `enabled`
|
|
197
|
+
> and `config` are valid top-level keys per entry. Placing keys like `apiKey` or
|
|
198
|
+
> `tools` at the top level will cause a config validation error and prevent the
|
|
199
|
+
> gateway from starting.
|
|
200
|
+
```
|
|
201
|
+
|
|
171
202
|
## Usage
|
|
172
203
|
|
|
173
204
|
### 1. Use Stratus as a Model Provider
|
|
@@ -188,9 +219,9 @@ openclaw agent --model stratus/stratus-x1ac-small-claude-haiku-4-5 \
|
|
|
188
219
|
"Quick question: what is JEPA?"
|
|
189
220
|
```
|
|
190
221
|
|
|
191
|
-
**Available Models:
|
|
222
|
+
**Available Models: Dynamic (2050+ models)**
|
|
192
223
|
|
|
193
|
-
The plugin
|
|
224
|
+
Models are fetched live from the Stratus API on startup via OpenRouter dynamic discovery and refreshed automatically. Run `/stratus models` to see the current full list. The plugin supports all models returned by the API.
|
|
194
225
|
|
|
195
226
|
**Model Format:** `stratus-x1ac-{size}-{llm}`
|
|
196
227
|
|
|
@@ -206,9 +237,12 @@ The plugin registers all 75 Stratus chat completion models:
|
|
|
206
237
|
|
|
207
238
|
**Anthropic LLMs (Claude 4.x):**
|
|
208
239
|
|
|
240
|
+
- `claude-sonnet-4-6` - Claude 4.6 Sonnet (latest)
|
|
241
|
+
- `claude-opus-4-6` - Claude 4.6 Opus (latest, high performance)
|
|
209
242
|
- `claude-sonnet-4-5` - Claude 4.5 Sonnet (recommended)
|
|
210
243
|
- `claude-opus-4-5` - Claude 4.5 Opus
|
|
211
244
|
- `claude-haiku-4-5` - Claude 4.5 Haiku (fast)
|
|
245
|
+
- `claude-opus-4-1` - Claude 4.1 Opus
|
|
212
246
|
- `claude-sonnet-4` - Claude 4 Sonnet
|
|
213
247
|
- `claude-opus-4` - Claude 4 Opus
|
|
214
248
|
|
|
@@ -216,11 +250,20 @@ The plugin registers all 75 Stratus chat completion models:
|
|
|
216
250
|
|
|
217
251
|
- `claude-3-7-sonnet`, `claude-3-5-sonnet`, `claude-3-opus`, `claude-3-sonnet`, `claude-3-haiku`
|
|
218
252
|
|
|
253
|
+
**Google LLMs:**
|
|
254
|
+
|
|
255
|
+
- `gemini-2.0-flash` - Gemini 2.0 Flash (1M context)
|
|
256
|
+
- `gemini-1.5-pro` - Gemini 1.5 Pro (2M context)
|
|
257
|
+
- `gemini-1.5-flash` - Gemini 1.5 Flash (1M context)
|
|
258
|
+
- `gemini-pro` - Gemini Pro
|
|
259
|
+
|
|
219
260
|
**Examples:**
|
|
220
261
|
|
|
221
262
|
- `stratus/stratus-x1ac-base-claude-sonnet-4-5` (recommended)
|
|
263
|
+
- `stratus/stratus-x1ac-base-claude-sonnet-4-6` (latest Claude)
|
|
222
264
|
- `stratus/stratus-x1ac-base-gpt-4o`
|
|
223
|
-
- `stratus/stratus-x1ac-
|
|
265
|
+
- `stratus/stratus-x1ac-base-gemini-2.0-flash` (1M context window)
|
|
266
|
+
- `stratus/stratus-x1ac-large-claude-opus-4-6` (high performance)
|
|
224
267
|
- `stratus/stratus-x1ac-small-gpt-4o-mini` (development/testing)
|
|
225
268
|
|
|
226
269
|
### 2. Use Stratus Tools
|
|
@@ -404,17 +447,9 @@ Tools are **opt-in only**:
|
|
|
404
447
|
|
|
405
448
|
### Quick Fixes
|
|
406
449
|
|
|
407
|
-
#### "Stratus API key not configured"
|
|
408
|
-
|
|
409
|
-
**Solution**:
|
|
410
|
-
|
|
411
|
-
```bash
|
|
412
|
-
export STRATUS_API_KEY=stratus_sk_live_your_key_here
|
|
413
|
-
```
|
|
414
|
-
|
|
415
450
|
#### "Invalid Stratus API key format"
|
|
416
451
|
|
|
417
|
-
**Solution**:
|
|
452
|
+
**Solution**: If you set `STRATUS_API_KEY`, verify it starts with `stratus_sk_`. Or remove it entirely to use Formation pool (zero-config).
|
|
418
453
|
|
|
419
454
|
#### "Tool not available"
|
|
420
455
|
|
|
@@ -460,18 +495,32 @@ This follows UNIX philosophy: clean separation, composable interfaces, transpare
|
|
|
460
495
|
|
|
461
496
|
### Configuration Schema
|
|
462
497
|
|
|
498
|
+
OpenClaw plugin entries use `{ enabled, config }` at the top level. The `config`
|
|
499
|
+
object holds all plugin-specific settings:
|
|
500
|
+
|
|
463
501
|
```typescript
|
|
502
|
+
// What OpenClaw stores in plugins.entries.stratus
|
|
503
|
+
interface PluginEntryConfig {
|
|
504
|
+
enabled?: boolean;
|
|
505
|
+
config?: StratusPluginConfig;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// Plugin-specific config (nested under "config" key)
|
|
464
509
|
interface StratusPluginConfig {
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
510
|
+
apiKey?: string; // API key (optional — Formation pool used as fallback)
|
|
511
|
+
baseUrl?: string; // API base URL
|
|
512
|
+
inlineKeys?: { // BYOK keys passed per-request
|
|
513
|
+
openai_key?: string;
|
|
514
|
+
anthropic_key?: string;
|
|
515
|
+
gemini_key?: string; // Also sent as X-Google-Key header
|
|
516
|
+
};
|
|
517
|
+
provider?: {
|
|
518
|
+
enabled?: boolean; // Enable provider registration
|
|
519
|
+
defaultModel?: string; // Default model
|
|
471
520
|
};
|
|
472
|
-
tools
|
|
473
|
-
embeddings
|
|
474
|
-
rollout
|
|
521
|
+
tools?: {
|
|
522
|
+
embeddings?: { enabled?: boolean };
|
|
523
|
+
rollout?: { enabled?: boolean };
|
|
475
524
|
};
|
|
476
525
|
}
|
|
477
526
|
```
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## What This Plugin Does
|
|
4
|
+
|
|
5
|
+
`@formthefog/stratus` is an OpenClaw plugin that integrates the Stratus X1 world model API. This document provides a transparent accounting of all security-relevant behavior.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Credentials
|
|
10
|
+
|
|
11
|
+
**What is accessed:**
|
|
12
|
+
- `STRATUS_API_KEY` — read from environment or OpenClaw config (`plugins.stratus.apiKey`). **Optional** — if not set, Formation pooled keys are used automatically.
|
|
13
|
+
- `OPENAI_API_KEY` — optional, forwarded as inline BYOK key in request body
|
|
14
|
+
- `ANTHROPIC_API_KEY` — optional, forwarded as inline BYOK key in request body
|
|
15
|
+
- `GOOGLE_API_KEY` — optional, forwarded as inline BYOK key in request body and as `X-Google-Key` header
|
|
16
|
+
|
|
17
|
+
**What is validated:**
|
|
18
|
+
- If `STRATUS_API_KEY` is present, it must match the format `stratus_sk_*` — requests with malformed keys are rejected locally, no network call is made
|
|
19
|
+
- If no key is present, the plugin operates in Formation pool mode (zero-config, 25% markup)
|
|
20
|
+
|
|
21
|
+
**What is written to disk:**
|
|
22
|
+
- During setup, the auth profile is stored in `~/.openclaw/agents/main/agent/auth-profiles.json`
|
|
23
|
+
- This is the standard OpenClaw credential store, equivalent in scope to `~/.aws/credentials` or `~/.npmrc`
|
|
24
|
+
- A timestamped backup of any existing file is created before writing
|
|
25
|
+
- Keys are never logged, printed, or written anywhere else by this plugin
|
|
26
|
+
|
|
27
|
+
**What is never accessed:**
|
|
28
|
+
- `~/.ssh` or any SSH keys or known_hosts — nothing in this plugin reads or touches SSH paths
|
|
29
|
+
- Other environment variables beyond `STRATUS_API_KEY`, `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, `STRATUS_BASE_URL`, and `SHELL`
|
|
30
|
+
- Browser storage, keychains, or system credential managers
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Network
|
|
35
|
+
|
|
36
|
+
**Outbound endpoints:**
|
|
37
|
+
| Endpoint | When | What is sent |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| `https://api.stratus.run/v1/embeddings` | `stratus_embeddings` tool call | `Authorization: Bearer <key>` (if set), text input, optional inline keys |
|
|
40
|
+
| `https://api.stratus.run/v1/rollout` | `stratus_rollout` tool call | `Authorization: Bearer <key>` (if set), goal + state, optional inline keys |
|
|
41
|
+
| `https://api.stratus.run/v1/models` | Plugin startup / `/stratus models` | `Authorization: Bearer <key>` (if set) |
|
|
42
|
+
|
|
43
|
+
**Headers sent:**
|
|
44
|
+
- `Authorization: Bearer <key>` — only when `STRATUS_API_KEY` is configured
|
|
45
|
+
- `X-Google-Key: <key>` — only when a Google/Gemini key is configured
|
|
46
|
+
- `Content-Type: application/json` — on all POST requests
|
|
47
|
+
|
|
48
|
+
**Inline key fields in request body:**
|
|
49
|
+
- `openai_key`, `anthropic_key`, `gemini_key` — only when corresponding environment variables or config values are set
|
|
50
|
+
|
|
51
|
+
**What is never done:**
|
|
52
|
+
- No calls to any endpoint other than `api.stratus.run`
|
|
53
|
+
- No telemetry, analytics, or usage reporting
|
|
54
|
+
- No data is sent to third parties
|
|
55
|
+
- All connections are HTTPS-only
|
|
56
|
+
|
|
57
|
+
Data handling is governed by the [Stratus privacy policy](https://stratus.run/privacy).
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## File System
|
|
62
|
+
|
|
63
|
+
**Files read during setup/verify:**
|
|
64
|
+
- `~/.openclaw/openclaw.json` — OpenClaw's own config, to add the Stratus provider entry
|
|
65
|
+
- `~/.openclaw/agents/main/agent/auth-profiles.json` — OpenClaw's own auth store, to add Stratus credentials
|
|
66
|
+
- `~/Library/LaunchAgents/ai.openclaw.gateway.plist` — macOS only, if the user explicitly opts in during `install.sh`
|
|
67
|
+
|
|
68
|
+
**Files written during setup:**
|
|
69
|
+
- Same paths as above, plus timestamped `.backup-*` copies before any modification
|
|
70
|
+
|
|
71
|
+
**What is never touched:**
|
|
72
|
+
- No files outside `~/.openclaw/` or the LaunchAgent plist
|
|
73
|
+
- No `/etc/`, `/usr/`, `/Library/` (system paths)
|
|
74
|
+
- No other dotfiles or home directory contents
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Reporting a Vulnerability
|
|
79
|
+
|
|
80
|
+
If you discover a security issue, please report it privately:
|
|
81
|
+
|
|
82
|
+
- Email: security@stratus.run
|
|
83
|
+
- GitHub: [open a private security advisory](https://github.com/formthefog/openclaw-stratus-x1-plugin/security/advisories/new)
|
|
84
|
+
|
|
85
|
+
Please do not open a public issue for security vulnerabilities. We aim to respond within 72 hours.
|
package/TROUBLESHOOTING.md
CHANGED
|
@@ -132,9 +132,9 @@ Implement Option 1 (plugin-level role mapping) as it provides maximum compatibil
|
|
|
132
132
|
|
|
133
133
|
### "Stratus API key not configured"
|
|
134
134
|
|
|
135
|
-
**
|
|
135
|
+
**Note**: As of March 2026, an API key is **no longer required**. The plugin uses Formation pooled keys by default (zero-config, 25% markup). This error should no longer appear.
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
If you want BYOK (no markup), set your key:
|
|
138
138
|
|
|
139
139
|
```bash
|
|
140
140
|
export STRATUS_API_KEY=stratus_sk_live_your_key_here
|