@sogni-ai/sogni-creative-agent-skill 3.4.0 → 3.5.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/CHANGELOG.md ADDED
@@ -0,0 +1,248 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [3.5.0] - 2026-06-11
9
+
10
+ ### Added
11
+
12
+ - **`sogni-agent doctor` (also `--doctor`).** One deterministic install health check: Node floor, credentials
13
+ presence and file permissions, config-dir writability, ffmpeg discovery, a live auth + balance probe with a
14
+ timeout, and version freshness. `--json` emits a structured `checks` array; exit 1 when a required check fails.
15
+ Every install path in the docs now ends with `sogni-agent doctor` as the verification gate.
16
+ - **Upgrade UX.** `--whats-new [since-version]` prints the bundled CHANGELOG entries (CHANGELOG.md now ships in
17
+ the npm tarball and `self-update` points at it after upgrading), and `--snooze-update` pauses the update
18
+ reminder with escalating backoff (1 day → 2 days → 1 week, reset by a newer release) instead of re-nagging
19
+ every 24 hours.
20
+ - **SSRF-guarded downloads.** New `fetchSafeUrl` in `ssrf-guard.mjs` fetches with manual redirects and re-validates
21
+ every hop, so a vetted public media URL can no longer redirect a download to a private/metadata address. Remote
22
+ `--ref`/`--ref-audio`/`--ref-video` fetches use it.
23
+ - **CI.** GitHub Actions workflow running the unit suite on Node 22.11.0 and 24, verifying npm tarball contents,
24
+ and validating the plugin manifests. `npm run sync:version` stamps the package.json version into every manifest
25
+ (`version.mjs`, `SKILL.md`, `.claude-plugin/plugin.json`, `openclaw.plugin.json`), enforced by a new
26
+ docs-consistency test suite that also fails on any documented flag missing from the CLI parser.
27
+
28
+ ### Changed
29
+
30
+ - **SKILL.md restructured for progressive disclosure.** The always-loaded core shrank from 1,338 lines (~10k
31
+ words) to ~300 lines (~2.6k words) — every routing rule (photobooth-vs-context-edit, LTX prompt rewrite,
32
+ high-res routing, PWD output convention, insufficient-funds script, media/shell security rules) stays inline,
33
+ while deep guides moved to `references/` (video-prompting, video-editing, hosted-api, models, personas-memory,
34
+ openclaw-config) read on demand. `references/` and `skills/` now ship in the npm tarball, the Claude plugin,
35
+ and the OpenClaw link surface. Verified with a 7-scenario agent battery against the new layout.
36
+ - **Install docs are now accurate per platform.** Added the missing OpenAI Codex CLI section
37
+ (`~/.codex/skills/`), a real Hermes Agent section (`~/.hermes/skills/media/` + `/reset`), the ChatGPT
38
+ Custom-GPT path the installer prints, an explicit note that the npx installer does not configure OpenClaw, and
39
+ "pick one registration" guidance for Claude Code (plugin or personal skill, not both). The OpenClaw install
40
+ command is now `openclaw plugins install npm:@sogni-ai/sogni-creative-agent-skill` — the bare unscoped name
41
+ never resolved the scoped npm package.
42
+ - **OpenClaw branding modernized.** Frontmatter metadata key `clawdbot:` → `openclaw:`; `--list-media` now
43
+ defaults to `~/.openclaw/media/inbound` with automatic fallback to the legacy `~/.clawdbot/media/inbound`;
44
+ the ClawHub install hook no longer overwrites `package.json` in a git checkout (guarded copy).
45
+ - **`--json` stdout is now strictly machine-parseable.** Durable-workflow SSE progress frames stream to stderr in
46
+ JSON mode; `--last --json` wraps the record in a `{ "success": true, ... }` envelope and exits 1 with
47
+ `errorCode: "NO_LAST_RENDER"` when nothing has been rendered (previously raw record / exit 0). Human-mode
48
+ errors now print the same classified, friendly message JSON consumers get.
49
+ - **Paid-batch safety cap.** `-n/--count` is capped at 16 outputs per invocation (a typo like `-n 1000` no longer
50
+ launches a thousand paid renders); raise deliberately with `SOGNI_MAX_COUNT`. OpenClaw `defaultCount` is
51
+ clamped the same way.
52
+ - `npm test` now runs the offline unit suites only and works without the private `sogni-creative-agent` sibling
53
+ (the runtime freshness check skips with a warning; publishing still hard-requires it via `prepack`).
54
+ Integration tests are strictly opt-in: `SOGNI_INTEGRATION=1` / `npm run test:integration` — a `SOGNI_API_KEY`
55
+ in the environment no longer causes plain `npm test` to submit real paid GPU jobs.
56
+ - `engines.node` raised to `>=22.11.0` to match the runtime guard (Node 22.0–22.10 previously passed `npm
57
+ install` and then hard-exited at first run).
58
+
59
+ ### Fixed
60
+
61
+ - **Ctrl-C and temp-file hygiene.** The CLI now handles SIGINT/SIGTERM/SIGHUP (conventional exit codes) and
62
+ removes every temporary directory it created on exit — interrupting a long video job no longer orphans
63
+ directories under the OS temp dir, and the multi-angle / loop flows no longer leak a temp dir on every run.
64
+ - Credentials file values containing an inline ` #` comment now trigger a clear warning instead of silently
65
+ corrupting the API key into a confusing 401; prompts that begin with `-` get a hint about the standalone `--`
66
+ separator.
67
+
68
+ ## [3.4.0] - 2026-05-30
69
+
70
+ ### Added
71
+
72
+ - **Video finishing without raw ffmpeg.** `--concat-videos` now uses the concat *filter* (not the demuxer): it
73
+ probes each clip and normalizes fps/size/SAR/pixel-format and synthesizes silent audio for clips with no audio
74
+ track, fixing frozen video with continuing audio when clips differ in frame rate or stream layout. Adds
75
+ `--concat-fps`, `--extract-first-frame` (mirror of `--extract-last-frame`), and `--remix-audio` for looping a
76
+ bed (`--audio-loop`), fades (`--audio-fade-in/out`), and mixing one extra track (`--mix-audio/--mix-at/--mix-gain`)
77
+ without re-encoding video. External `--concat-audio` is now padded/trimmed to the video length.
78
+
79
+ ### Changed
80
+
81
+ - Bumped `@sogni-ai/sogni-intelligence-client` to `^3.0.13` (pins `sogni-client 5.0.0-alpha.17`), keeping the
82
+ bundled creative-agent runtime in sync with the current shared prompt contracts and repair recipes.
83
+
84
+ ### Fixed
85
+
86
+ - **Idiotproof first run.** Added a zero-dependency Node.js version guard that prints a clear "requires Node >= 22"
87
+ message before native modules load, `fetchWithTimeout` on every REST/download call (a black-holing proxy now
88
+ fails with `NETWORK_TIMEOUT` instead of hanging; override via `SOGNI_HTTP_TIMEOUT_MS`), `OUTPUT_WRITE_FAILED`
89
+ mapping for filesystem errors so a paid render isn't lost to a raw `EACCES`/`ENOSPC`, a friendly
90
+ `MEDIA_REFERENCE_NOT_FOUND` for missing `--ref`/`-c` files, and leading `~` expansion in file arguments.
91
+ - **Invalid/rejected API key no longer crashes.** A bad or expired `SOGNI_API_KEY` previously threw from a
92
+ detached promise during connect and dumped a raw stack trace. Added invalid-key detection plus global
93
+ `uncaughtException`/`unhandledRejection` handlers that route fatals through the clean `Error:`/`Hint:` path
94
+ (JSON-aware, exit 1) with a dashboard.sogni.ai hint.
95
+ - Routed source-preserving image edits away from photobooth and preserved structured project-result errors so
96
+ insufficient-funds responses consistently surface the Spark Packs guidance.
97
+
98
+ ## [3.3.5] - 2026-05-29
99
+
100
+ ### Changed
101
+
102
+ - Added an explicit **Output Path Convention** section to `SKILL.md` instructing agents to save generated images,
103
+ videos, and music to the user's current working directory (PWD) rather than `/tmp`. The directive includes a
104
+ short ✓/✗ example block so agents prefer `./cat.png` or a bare filename over an absolute `/tmp/…` path. Final
105
+ user-visible renders belong in the user's working directory; `/tmp` is reserved for transient intermediate
106
+ files (audio re-encodes, frame extraction, concat staging) the CLI cleans up itself.
107
+ - Updated all 26 inline `-o /tmp/…` examples in `SKILL.md` and 2 in `README.md` to use relative paths so
108
+ agent transcripts model the recommended behavior.
109
+
110
+ ## [3.3.4] - 2026-05-26
111
+
112
+ ### Added
113
+
114
+ - Added a Sogni-aware default hosted-chat system prompt for `--api-chat` and `--durable-chat`, so hosted
115
+ chat describes and uses Sogni's real image, video, music, GPT Image 2, Seedance, workflow, and media-reference
116
+ capabilities instead of behaving like a generic text-only assistant.
117
+ - Added public guidance for batching prompt-only video variations with Dynamic Prompt syntax and `-n` when each
118
+ output shares the same source/end assets, duration, dimensions, and references.
119
+ - Added LTX-2.3 dialogue-duration guidance that budgets roughly three spoken words per second plus acting beats,
120
+ helping agents choose workable clip durations before submitting paid video jobs.
121
+
122
+ ### Changed
123
+
124
+ - Bumped `@sogni-ai/sogni-intelligence-client` to `^3.0.8` so the skill consumes the current published Sogni Intelligence client stack, including `@sogni-ai/sogni-client@5.0.0-alpha.15` and `@sogni-ai/sogni-protocol@1.0.0-alpha.6`.
125
+ - Synced the bundled creative-agent runtime with the current shared prompt contracts and storyboard helpers, including
126
+ provider-neutral storyboard reference wording, field-tag sanitizer compatibility, and updated video Dynamic Prompt
127
+ instructions from the shared runtime.
128
+ - Tightened persona resolution to explicit saved persona names, ids, and tags/aliases. Relationship phrases such as
129
+ "my wife" or "my son" are no longer treated as persona identifiers by themselves.
130
+ - Refreshed README, root skill, Claude Code plugin skill, `llm.txt`, and per-skill docs to reflect the current image, video, music, hosted chat, durable workflow, replay, and Seedance/LTX/WAN feature surface.
131
+
132
+ ### Fixed
133
+
134
+ - `--durable-chat` now recognizes v2 chat-run SSE event names such as `assistant_message_delta`, `run_completed`, `run_failed`, and `run_waiting_for_user` while preserving the legacy aliases.
135
+ - Vendor models such as Seedance and GPT Image 2 no longer fall back to SOGNI tokens under `--token-type auto`; they
136
+ require Premium Spark eligibility and fail clearly when that billing path is unavailable.
137
+ - Hosted API chat now keeps saved persona, memory, and personality injection while using the richer Sogni-specific
138
+ prompt, avoiding regressions where media requests could be framed as plain text-only chat.
139
+ - Replaced stale agent-facing quick examples that referenced removed `--image`, `--context-image`, and `--i2v --image` flags with current `sogni-agent`, `-c`, and `--video --ref` usage.
140
+
141
+ ## [3.3.3] - 2026-05-22
142
+
143
+ ### Changed
144
+
145
+ - Aligned skill, OpenClaw, and Claude Code plugin version metadata with the npm package version for the release.
146
+
147
+ ## [3.3.2] - 2026-05-21
148
+
149
+ ### Changed
150
+
151
+ - Synced the bundled creative-agent runtime with the same source SHA now deployed by `sogni-chat`, picking up the latest prompt contracts for exact Seedance prompts, Seedance V2V remaster routing, relative video segment windows, persona video gating, and non-empty text-only `finalize_response` answers.
152
+ - Bumped `@sogni-ai/sogni-intelligence-client` to `^2.4.1` so npm installs use the current shared Sogni runtime dependency set.
153
+ - Aligned skill, OpenClaw, and Claude Code plugin version metadata with the npm package version for the release.
154
+
155
+ ### Fixed
156
+
157
+ - Active persona state now gates only explicit persona-video requests that lack a persona image, instead of broad video-generation requests.
158
+ - Text-only / no-action `finalize_response` guidance now requires a substantive final answer instead of an empty or placeholder summary.
159
+
160
+ ## [3.3.1] - 2026-05-21
161
+
162
+ ### Added
163
+
164
+ - **Seedance direct-gen media upload support.** Local Seedance `--ref-audio` and `--ref-video` references now upload through the Sogni Intelligence `/v2/media/*Url` presigned POST flow and are forwarded as Sogni-hosted URL references, matching the documented backend media-reference contract.
165
+ - Regression coverage for Seedance direct-gen local MP3 audio uploads, local V2V source uploads, and vendor policy-failure JSON shaping.
166
+
167
+ ### Changed
168
+
169
+ - Seedance audio references are now treated as MP3-only. Local audio is trimmed to the requested Seedance clip window and converted to `audio/mpeg` before upload; HTTPS non-MP3 audio references are re-uploaded as prepared MP3 media instead of being forwarded directly.
170
+ - Seedance V2V local source clips are trimmed to the requested clip duration before upload so long local source videos are not submitted raw to the vendor.
171
+
172
+ ### Fixed
173
+
174
+ - Seedance vendor content-policy cancellations now surface friendly, structured CLI errors (`SAFETY_REJECTED` / `content_refused`) without leaking raw vendor task IDs or terminal status payloads.
175
+ - Seedance invalid audio-format failures now classify as non-retryable parameter errors with actionable MP3 guidance instead of opaque vendor failures.
176
+
177
+ ## [3.3.0] - 2026-05-20
178
+
179
+ ### Added
180
+
181
+ - **Background npm update check.** `sogni-agent` now checks the npm registry at most once every 24 hours and surfaces a trailing "update available" notice when a newer version is published. The check times out at 1.5s, never blocks the foreground command, detects the package manager that installed the CLI (npm, pnpm, or yarn) so the suggested install command matches the user's environment, and persists throttle state at `~/.config/sogni/update-check.json`.
182
+ - **`--no-update-check`** flag to opt out of the update check for a single run.
183
+ - **Claude Code plugin install instructions** in README and `llm.txt`. Both now show the `npm install -g` prerequisite, the marketplace registration command, and the new `/plugin install sogni-creative-agent@sogni` step, with a brief explanation of what each command does.
184
+
185
+ ## [3.2.0] - 2026-05-20
186
+
187
+ ### Added
188
+
189
+ - **Seedance multi-modal references.** `--ref-audio` and `--ref-video` are now repeatable on Seedance models, and `-c`/`--context` image refs flow through to Seedance `referenceImageUrls` as loose `@ImageN` refs — matching the "up to 9 image / 3 video / 3 audio / 12 total" caps published by `@sogni-ai/sogni-intelligence-client@2.4.0` (sourced from `@sogni-ai/sogni-protocol`'s `SEEDANCE_REFERENCE_LIMITS` catalog).
190
+ - **Dedicated first-frame / last-frame mode parity** with sogni-socket's two-mode contract. Dedicated frame mode (`--ref` / `--ref-end`) and loose reference mode (`-c`/`--context`) are mutually exclusive on Seedance; the skill rejects mixed mode client-side with a message pointing to the right mode.
191
+ - **Per-job progress and ETA logging during durable chat runs.** `--durable-chat` now emits de-duplicated per-job progress, ETA, and result lines from hosted run events.
192
+ - **Hosted-intelligence guidance refresh** in `SKILL.md`, covering the recommended routing through `/v1/chat/completions`, `/v1/creative-agent/workflows`, and `/v1/chat/runs`.
193
+
194
+ ### Changed
195
+
196
+ - Bumped `@sogni-ai/sogni-intelligence-client` to `^2.4.0` for the `SEEDANCE_REFERENCE_LIMITS` export and refreshed the rest of the Sogni runtime dependency surface.
197
+ - New `enforceSeedanceReferenceCaps()` helper translates `SeedanceReferenceLimitError` into a fatal CLI error with the canonical message. Non-Seedance video models reject repeated `--ref-audio` / `--ref-video` flags with a clear error.
198
+
199
+ ### Tests
200
+
201
+ - 10 new `node:test` cases covering multi-ref forwarding (HTTPS extras → URL arrays), per-modality cap errors, the combined 12-asset cap, dedicated-vs-loose mutex, local-file extra rejection in CLI direct-gen, `seedance2-fast` parity, and non-seedance multi-ref rejection.
202
+
203
+ ## [3.1.1] - 2026-05-20
204
+
205
+ ### Changed
206
+
207
+ - Bumped `@sogni-ai/sogni-intelligence-client` to `^2.2.8` and refreshed the intelligence-client runtime bundle.
208
+
209
+ ### Fixed
210
+
211
+ - The skill now invokes the globally installed `sogni-agent` command directly instead of assuming a specific install path, so agents that resolve the binary via `PATH` work in both global-install and `npm link` setups.
212
+ - Republished alongside the renamed `@sogni-ai/sogni-client` package so consumers pulling the latest skill no longer hit the unscoped/legacy client name.
213
+
214
+ ## [3.1.0] - 2026-05-20
215
+
216
+ ### Added
217
+
218
+ - **Claude Code plugin marketplace manifest.** Scaffolds the `sogni` marketplace and `sogni-creative-agent` plugin entry that ships a lean Claude-Code-focused `SKILL.md` from `plugin-skills/` while keeping the full skill spec at the repository root.
219
+ - **`setup-sogni-agent-skill` installer.** Adds the design spec and implementation plan for the upcoming bootstrap installer; the runtime work lands in a later release.
220
+
221
+ ### Changed
222
+
223
+ - Bumped `@sogni-ai/sogni-intelligence-client` through `^2.2.4` to `^2.2.6` as the client stabilized.
224
+
225
+ ### Fixed
226
+
227
+ - Root SDK is now loaded through a compatible module path so installs on Node module resolvers that disallow deep imports continue to work.
228
+
229
+ ## [3.1.0-alpha.1] - 2026-05-20
230
+
231
+ ### Changed
232
+
233
+ - Bumped `@sogni-ai/sogni-intelligence-client` to `^2.2.1`.
234
+
235
+ ### Fixed
236
+
237
+ - Synced `version.mjs` with `package.json` so the runtime `--version` output matches the published npm version.
238
+
239
+ ## [3.1.0-alpha.0] - 2026-05-18
240
+
241
+ ### Added
242
+
243
+ - **Managed Agent parity with sogni-chat.** `buildSkillDynamicSystemPrompt()` injects the same persona / memory / personality framing as `buildChatDynamicSystemPrompt` (`User's people` / `PERSONA RULES` / `User preferences` / `USER PERSONALITY PREFERENCE`) so saved `--persona-*`, `--memory-set`, and `--personality-*` stores travel into `/v1/chat/completions`. Empty when no stores are populated, so fresh installs are unaffected.
244
+ - **`--no-filter` now propagates to `safeContentFilter: false`** on the hosted chat body, in addition to the existing per-tool `disableNSFWFilter` plumbing.
245
+ - **`--durable-chat` CLI flag** for `/v1/chat/runs` with SSE assistant deltas — the foundation for the per-job progress / ETA / result events added in 3.2.0.
246
+ - **`composition_planning` per-skill manifest** groups `enhance_prompt`, `compose_lyrics`, `compose_instrumental`, `compose_script`, `compose_workflow`, and `compose_workflow_template` into a single capability surface, matching the canonical `@sogni/creative-agent` manifest layout. SKILL.md and `skills/README.md` are updated to list it in the per-skill index, and the cross-surface parity test asserts `ALL_BUILT_IN_SKILLS` exposes it.
247
+ - **Conventional commits tooling.** Adopted commitlint + husky for the strict commit-message rules used across the Sogni ecosystem.
248
+ - **Semantic-release configuration** added; publish remains manual-gated for now (the CI auto-publish workflow was added and then removed in the same release pending an automation token).
package/README.md CHANGED
@@ -43,9 +43,13 @@ With this skill, an agent can:
43
43
  - [Installation](#installation)
44
44
  - [Node CLI (default)](#node-cli-default)
45
45
  - [Claude Code plugin](#claude-code-plugin)
46
+ - [OpenAI Codex CLI](#openai-codex-cli)
47
+ - [Hermes Agent](#hermes-agent)
46
48
  - [OpenClaw plugin](#openclaw-plugin)
47
- - [Hermes Agent / Manus / other frameworks](#hermes-agent--manus--other-frameworks)
49
+ - [ChatGPT (Custom GPT)](#chatgpt-custom-gpt)
50
+ - [Manus / other SKILL.md frameworks](#manus--other-skillmd-frameworks)
48
51
  - [Manual install from source](#manual-install-from-source)
52
+ - [Verify your install](#verify-your-install)
49
53
  - [Upgrading safely from inside an agent](#upgrading-safely-from-inside-an-agent)
50
54
  - [Setup (Sogni API key)](#setup-sogni-api-key)
51
55
  - [Usage](#usage)
@@ -76,8 +80,10 @@ With this skill, an agent can:
76
80
  npx setup-sogni-agent-skill
77
81
  ```
78
82
 
79
- This auto-detects Claude Code, Codex CLI, and Hermes; installs the CLI globally;
80
- registers the skill into each detected runtime; and prompts for your API key.
83
+ This auto-detects Claude Code, OpenAI Codex CLI, and Hermes Agent; installs the
84
+ CLI globally; registers the skill into each detected runtime; prompts for your
85
+ API key; and prints ChatGPT Custom-GPT setup instructions. (It does **not**
86
+ configure OpenClaw — see the [OpenClaw plugin](#openclaw-plugin) section.)
81
87
 
82
88
  Prefer to do it manually? Install the CLI directly:
83
89
 
@@ -88,6 +94,12 @@ With this skill, an agent can:
88
94
 
89
95
  Then point your agent runtime at this repository's [`SKILL.md`](./SKILL.md).
90
96
 
97
+ 3. Verify the install:
98
+
99
+ ```bash
100
+ sogni-agent doctor
101
+ ```
102
+
91
103
  Then ask your agent to do something:
92
104
 
93
105
  - "Generate an image of a sunset over mountains"
@@ -132,15 +144,39 @@ The Claude Code plugin shells out to the `sogni-agent` CLI installed above, so b
132
144
 
133
145
  The first command registers a `sogni` marketplace with one plugin entry (`sogni-creative-agent`) backed by a lean Claude-Code-focused [`plugin-skills/sogni-creative-agent/SKILL.md`](./plugin-skills/sogni-creative-agent/SKILL.md); the second installs the plugin into Claude Code. The full skill spec still lives at the repository root [`SKILL.md`](./SKILL.md).
134
146
 
147
+ > **Pick one registration per machine.** Install either this plugin **or** the personal skill that `npx setup-sogni-agent-skill` writes to `~/.claude/skills/` — not both. With both installed, Claude Code lists two near-identical skills, which wastes context and makes skill selection ambiguous.
148
+
149
+ ### OpenAI Codex CLI
150
+
151
+ The `npx` installer writes the skill to `~/.codex/skills/sogni-creative-agent-skill/`, which the Codex CLI discovers automatically:
152
+
153
+ ```bash
154
+ npm install -g @sogni-ai/sogni-creative-agent-skill@latest
155
+ npx setup-sogni-agent-skill --only=codex
156
+ ```
157
+
158
+ Restart Codex (or start a new session) and ask it to "generate an image of a sunset" — the skill shells out to the globally installed `sogni-agent`. To remove it later: `npx setup-sogni-agent-skill --uninstall --only=codex`.
159
+
160
+ ### Hermes Agent
161
+
162
+ [Hermes Agent](https://hermes-agent.nousresearch.com/) loads skills from `~/.hermes/skills/<category>/<name>/SKILL.md`. The `npx` installer places this skill at `~/.hermes/skills/media/sogni-creative-agent-skill/`:
163
+
164
+ ```bash
165
+ npm install -g @sogni-ai/sogni-creative-agent-skill@latest
166
+ npx setup-sogni-agent-skill --only=hermes
167
+ ```
168
+
169
+ Then `/reset` your Hermes session so it picks up the new skill. (You can also install manually: copy [`SKILL.md`](./SKILL.md) into `~/.hermes/skills/media/sogni-creative-agent-skill/SKILL.md`, or use `hermes skills install` if your build supports it.)
170
+
135
171
  ### OpenClaw plugin
136
172
 
137
- For the published plugin:
173
+ The npm package is scoped, so install it through OpenClaw's `npm:` source prefix (a bare `openclaw plugins install sogni-creative-agent-skill` will not resolve the scoped package):
138
174
 
139
175
  ```bash
140
- openclaw plugins install sogni-creative-agent-skill
176
+ openclaw plugins install npm:@sogni-ai/sogni-creative-agent-skill
141
177
  ```
142
178
 
143
- The installed plugin loads its behavior from [`SKILL.md`](./SKILL.md) via [`openclaw.plugin.json`](./openclaw.plugin.json).
179
+ The installed plugin loads its behavior from [`SKILL.md`](./SKILL.md) via [`openclaw.plugin.json`](./openclaw.plugin.json). The `npx setup-sogni-agent-skill` installer does **not** configure OpenClaw — use the command above (or the local-link flow below) instead.
144
180
 
145
181
  > **API key under OpenClaw:** the plugin config holds non-secret defaults only (models, timeouts, paths) — it does **not** carry your API key. Provide `SOGNI_API_KEY` via the environment the OpenClaw gateway passes to the CLI, or save it to `~/.config/sogni/credentials` (`SOGNI_API_KEY=<your-key>`). This keeps your key out of plugin config files.
146
182
 
@@ -172,7 +208,11 @@ The generated `.openclaw-link/` directory is only for OpenClaw; Hermes, Manus, a
172
208
 
173
209
  When loaded through OpenClaw, this skill reads plugin defaults from OpenClaw config; CLI flags always override them. The supported config schema is defined in [`openclaw.plugin.json`](./openclaw.plugin.json) and includes default models, video workflow models, hosted API defaults (`apiBaseUrl`, `defaultLlmModel`, `defaultTaskProfile`, `defaultApiMaxTokens`, `defaultApiThinking`, `defaultApiToolMode`, workflow cost defaults), token type, seed strategy, timeouts, and media paths. If your OpenClaw config lives elsewhere, set `OPENCLAW_CONFIG_PATH`.
174
210
 
175
- ### Hermes Agent / Manus / other frameworks
211
+ ### ChatGPT (Custom GPT)
212
+
213
+ Running `npx setup-sogni-agent-skill` also prints step-by-step instructions for creating a ChatGPT Custom GPT whose Instructions embed this skill. Note that ChatGPT cannot run the local CLI; the Custom GPT path covers prompt-side behavior only.
214
+
215
+ ### Manus / other SKILL.md frameworks
176
216
 
177
217
  Point the agent at this repository's [`SKILL.md`](./SKILL.md) for behavior guidance and [`llm.txt`](https://raw.githubusercontent.com/Sogni-AI/sogni-creative-agent-skill/main/llm.txt) for install/setup help. The agent should invoke the globally installed `sogni-agent` CLI by default.
178
218
 
@@ -184,6 +224,16 @@ cd sogni-creative-agent-skill
184
224
  npm install
185
225
  ```
186
226
 
227
+ ### Verify your install
228
+
229
+ Every install path above ends the same way — run the built-in health check:
230
+
231
+ ```bash
232
+ sogni-agent doctor
233
+ ```
234
+
235
+ It verifies the Node version, API credentials (and their file permissions), config-dir writability, `ffmpeg` availability, live authentication, and whether a newer version is available. `sogni-agent doctor --json` emits the same checks for agents. If anything is marked `✗`, the detail line says exactly how to fix it.
236
+
187
237
  ### Upgrading safely from inside an agent
188
238
 
189
239
  When upgrading from inside an agent runtime, prefer direct package-manager or existing-checkout commands. Avoid asking the agent to build a clone-or-pull shell bootstrap script with `set -e`, `bash -c`, `sh -c`, or an inline repository URL — some sandboxes correctly route those through approval and the install will stall.
@@ -381,6 +431,14 @@ Run `sogni-agent --help` for the full CLI. Below are the options and tables most
381
431
  | `--last`, `--last-image` | Inspect last render / reuse last image as context or video reference |
382
432
  | `--strict-size` | Fail instead of auto-adjusting video size |
383
433
  | `--json` | Emit structured output for agents |
434
+ | `-n <count>` | Multiple outputs per call (safety-capped at 16; raise deliberately with `SOGNI_MAX_COUNT`) |
435
+ | `doctor` / `--doctor` | Install health check: Node, credentials, ffmpeg, auth, version (`--json` for agents) |
436
+ | `self-update` | Upgrade the CLI via the detected package manager |
437
+ | `--whats-new [version]` | Show bundled CHANGELOG entries (everything after `<version>` if given) |
438
+ | `--snooze-update` | Snooze the pending-update reminder (1 day → 2 days → 1 week) |
439
+ | `--no-update-check` | Disable the background update check for this run (`SOGNI_NO_UPDATE_CHECK=1` to disable always) |
440
+ | `--video-model <id>` | Override the i2v model used by `--angles-360-video` |
441
+ | `--memory-category <c>` | Category for `--memory-set`: `preference` (default), `fact`, or `context` |
384
442
 
385
443
  ### Quality presets
386
444
 
@@ -552,8 +610,6 @@ Hosted API credentials are only sent to `https://api.sogni.ai` by default. Add t
552
610
  hosts with `SOGNI_API_ALLOWED_HOSTS`; loopback or non-HTTPS local testing requires
553
611
  `SOGNI_ALLOW_UNSAFE_API_BASE_URL=1`.
554
612
 
555
- > The public skill consumes generated storyboard adapters from `../sogni-creative-agent`: `compileForModel()` now works in the bundled runtime for Seedance, GPT Image 2, LTX-2.3, and WAN storyboard stages.
556
-
557
613
  ---
558
614
 
559
615
  ## Dynamic Prompt Variations
@@ -598,8 +654,10 @@ Tries SPARK first, then falls back to SOGNI if the balance is too low. Vendor mo
598
654
 
599
655
  - **Exit codes:** failures use a non-zero exit code with human-readable stderr.
600
656
  - **Structured output:** add `--json` when an agent needs machine-parseable success/error data, or `--last` to inspect the last render. JSON failures include canonical `errorType`, `errorCategory`, and `retryable` fields where the shared runtime can classify the error.
657
+ - **stdout stays parseable in `--json` mode:** progress lines, SSE workflow frames, and warnings go to stderr; stdout carries exactly one JSON object. `--last --json` wraps the record in a `{ "success": true, ... }` envelope and exits 1 with `errorCode: "NO_LAST_RENDER"` when nothing has been rendered yet.
601
658
  - **Output files:** use `-o <path>` to save locally; otherwise the CLI prints a result URL.
602
659
  - **Quiet mode:** `-q` / `--quiet` suppresses progress output without changing exit semantics.
660
+ - **Interrupts:** Ctrl-C exits with the conventional signal code and cleans up the CLI's temporary files.
603
661
 
604
662
  ---
605
663
 
@@ -618,41 +676,24 @@ This skill is designed to be loaded into agent runtimes as a first-class capabil
618
676
  Use `--json` for machine-readable success/error payloads. Use `--last` to read the previous render's metadata.
619
677
  5. **Agent-safe install/upgrade**
620
678
  Prefer the `npm install -g` and `git -C "$DEST" pull --ff-only` paths above. Avoid generating clone-or-pull bootstrap scripts with `set -e`, `bash -c`, `sh -c`, or inline repository URLs — agent sandboxes correctly route those through approval and the install will stall.
621
- 6. **SSRF / URL safety**
622
- The CLI runs an SSRF guard ([`ssrf-guard.mjs`](./ssrf-guard.mjs)) before forwarding any HTTP(S) reference to hosted models. Localhost and private-network URLs are rejected; only public HTTPS references are forwarded as Seedance multimodal context.
679
+ 6. **Verify with `doctor`**
680
+ After any install or upgrade, run `sogni-agent doctor --json` and confirm `"success": true` before reporting the install as working. Each failed check carries a `detail` string with the fix.
681
+ 7. **SSRF / URL safety**
682
+ The CLI validates every HTTP(S) media reference with an SSRF guard ([`ssrf-guard.mjs`](./ssrf-guard.mjs)) and re-validates each redirect hop on download. Localhost and private-network URLs are rejected; only public HTTPS references are forwarded as Seedance multimodal context.
623
683
 
624
684
  ---
625
685
 
626
686
  ## Development
627
687
 
628
- The public skill keeps CLI/runtime glue in this repo, but Sogni model routing, video workflow defaults, quality tiers, and prompt guardrails are generated from the private `sogni-creative-agent` repo. The generated runtime is committed at [`generated/creative-agent-runtime.mjs`](./generated/creative-agent-runtime.mjs) so public installs do not need access to the private repo.
629
-
630
- Run the test suite:
688
+ Run the unit test suite (works without any Sogni credentials or private repos):
631
689
 
632
690
  ```bash
633
691
  npm test
634
692
  ```
635
693
 
636
- `npm test` first runs `npm run check:creative-agent-runtime`, which regenerates the runtime file and fails if it differs from the committed copy.
637
-
638
- With both repos checked out as siblings, refresh the generated runtime before publishing:
639
-
640
- ```bash
641
- npm run sync:creative-agent-runtime
642
- ```
643
-
644
- Reusable workflow rules should come from the shared Sogni runtime before they are synced into this public package. Keep storyboard planning, tool argument validation, prompt linting, media-routing decisions, chat-run progress extraction, and repair/control behavior aligned with the hosted `/v1/chat/completions` and `/v1/creative-agent/workflows` APIs. Prefer typed helpers exported by `@sogni-ai/sogni-intelligence-client` or the generated runtime over new skill-local regex guards.
645
-
646
- Public-skill regex should stay limited to CLI argument/fact extraction such as file paths, URLs, extensions, dimensions, durations, and explicit positions. Hosted-style decisions such as latest-video continuation, uploaded-video modification, image-selection waits, stitch-after-batch state, and repair/control routing belong upstream in typed planner/runtime fields before they are synced here.
647
-
648
- ### Execution boundaries: local CLI vs. hosted surfaces
649
-
650
- `sogni-agent.mjs` is a **local command-line tool** (`#!/usr/bin/env node`, the package `bin`). It is the only place that may assume a local filesystem and a local `ffmpeg`/`ffprobe` binary. Flags like `--concat-videos`, `--remix-audio`, `--extract-first-frame`, `--extract-last-frame`, and `--angles-360-video` shell out to ffmpeg behind `ensureFfmpegAvailable()` and run only when those flags are passed.
651
-
652
- Hosted surfaces — including the chat.sogni.ai web app — do **not** run `sogni-agent.mjs`. They consume `@sogni-ai/sogni-intelligence-client` and the hosted `/v1/chat/completions` and `/v1/creative-agent/workflows` APIs, where there is no local ffmpeg and no local filesystem. Therefore:
694
+ Paid integration tests are opt-in: `npm run test:integration` (requires a Sogni API key and submits real GPU jobs).
653
695
 
654
- - Keep ffmpeg- and filesystem-dependent helpers (frame extraction, concat, audio remux, media listing) **local to `sogni-agent.mjs`**. Do not move them into the shared runtime or `@sogni-ai/sogni-intelligence-client`, and never make hosted code paths depend on a local binary.
655
- - Server-side equivalents of these capabilities (e.g. `stitch_video`, `overlay_video`, `extend_video`) live in the hosted creative-agent tool surface and belong upstream, not in the CLI.
696
+ Architecture notes, the private-runtime sync workflow, code-placement policy, and the release process live in [`CONTRIBUTING.md`](./CONTRIBUTING.md).
656
697
 
657
698
  Issues and feature requests: [github.com/Sogni-AI/sogni-creative-agent-skill/issues](https://github.com/Sogni-AI/sogni-creative-agent-skill/issues).
658
699