feat: Multimodal Studio — unified image/video/character generation layer#12
Conversation
Add ACOS Multimodal Studio — one connector (Higgsfield MCP) delivering image, video, and consistent-character generation across 30+ models (Soul, Flux, Seedream, Kling, Hailuo, Veo, Sora). Closes the multimodal gap vs agent-first platforms while staying model-agnostic and brand-locked. - skills/multimodal-studio: SKILL.md + resources/model-matrix.md (model routing, visual prompt structure, character consistency, async lifecycle, AI-slop checklist, brand-lock) - .claude/agents/multimodal-director.md: creative-director persona - .claude/commands/studio.md + generate-video.md: operator entry points - .mcp.json: register higgsfield (hosted HTTP, OAuth) - skill-rules.json + skills/registry.json: auto-activation + registration - CONNECTORS.md: Higgsfield as unified multimodal default (vendor-agnostic) - CLAUDE.md: Multimodal Studio section + new commands - plugin.json: multimodal/image/video/higgsfield keywords - docs/multimodal-studio.md: full guide + ACOS-vs-Antigravity positioning https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
📝 WalkthroughWalkthroughThis PR introduces Multimodal Studio—a unified image/video/character generation layer powered by the Higgsfield MCP connector—along with supporting infrastructure improvements to MCP servers. The feature integrates a new skill, agent, and two commands across ACOS with full documentation and auto-activation rules. ChangesMultimodal Studio Feature
MCP Server Infrastructure
🎯 3 (Moderate) | ⏱️ ~20 minutes
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
⚔️ Resolve merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request introduces 'Multimodal Studio (v11)', a unified generation layer for Agentic Creator OS (ACOS) that integrates image, video, and consistent character generation across 30+ frontier models via the Higgsfield MCP connector. It adds a new creative director agent, commands (/studio and /generate-video), a dedicated skill, and extensive documentation. The review feedback is highly constructive, pointing out a missing higgsfield definition in the master mcpServers registry, a conflict regarding image cropping capabilities, the need to explicitly document the parameter name for character IDs in tool calls, and potential issues with environment variable expansion in .mcp.json configurations.
| "downloads": 0, | ||
| "rating": 0, | ||
| "dependencies": ["frankx-brand"], | ||
| "mcp": ["higgsfield"], |
There was a problem hiding this comment.
The MCP server higgsfield is declared as a dependency for the multimodal-studio skill here, but it is not defined in the master mcpServers registry at the bottom of this file (lines 390-421). To maintain registry completeness and ensure proper dependency resolution, please add a definition for higgsfield under mcpServers.
|
|
||
| ### 5. ASSEMBLE — deliver a coherent set | ||
| - Verify the set reads as one campaign (same character ID, palette, lighting language). | ||
| - Produce required derivatives (e.g. crop hero → OG 1200×630, square 1080×1080). |
There was a problem hiding this comment.
The instruction to 'Produce required derivatives (e.g. crop hero...)' conflicts with the roadmap in docs/multimodal-studio.md (line 113), which lists 'Auto-derivatives' as a pending feature. Since the agent currently lacks image-editing/cropping tools and is read-only on code, it cannot perform physical crops. Please clarify if the agent should instead generate separate assets for each aspect ratio, or defer this instruction until the auto-derivatives tool is implemented.
|
|
||
| For any recurring subject (a brand mascot, a course instructor avatar, a series protagonist): | ||
| 1. `create_character` once from a reference image or description → get a character ID. | ||
| 2. Reference that ID in every subsequent `generate_image` / `generate_video` call. |
There was a problem hiding this comment.
Please clarify how the character ID should be passed to generate_image and generate_video. If the Higgsfield MCP tools expect a specific parameter (e.g., character_id), explicitly document this parameter name so that the agent can correctly populate the tool call instead of just embedding the ID in the text prompt.
| "command": "python", | ||
| "args": ["-m", "higgsfield_mcp.server"], | ||
| "cwd": "/absolute/path/to/higgsfield_ai_mcp", | ||
| "env": { "HF_API_KEY": "${HF_API_KEY}", "HF_SECRET": "${HF_SECRET}" } |
There was a problem hiding this comment.
Standard MCP configuration files (.mcp.json) do not consistently support environment variable expansion (like ${HF_API_KEY}) across all clients (e.g., Claude Code). It is safer to use standard placeholders like <YOUR_HF_API_KEY> or note that these can be omitted if inherited from the shell environment.
| "env": { "HF_API_KEY": "${HF_API_KEY}", "HF_SECRET": "${HF_SECRET}" } | |
| "env": { "HF_API_KEY": "<YOUR_HF_API_KEY>", "HF_SECRET": "<YOUR_HF_SECRET>" } |
tailwind-merge and lucide-react were emitted as unquoted object keys in the generated package.json template, which is invalid TypeScript (the hyphen parses as subtraction) and broke `npm run build:all` (TS1005). Pre-existing build break, unrelated to the multimodal-studio feature. https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
CI runs `npm ci`, which requires a committed lockfile, but .gitignore excluded package-lock.json — a self-contradiction that broke the build job at the install step. Commit the lockfile (un-ignore it) for reproducible, integrity-checked installs. Pre-existing CI break, unrelated to the multimodal-studio feature. https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
The CI build job never actually ran the compile step before (npm ci failed
on the missing lockfile), so several workspaces had latent type errors.
With npm ci fixed, surface and resolve them so `npm run build:all` is green:
- pin TypeScript to 5.6.3 via root overrides: TS 5.7+ raises TS2589
("excessively deep") on the MCP SDK + zod registerTool generics
(browser-mcp). 5.6.3 is the newest 5.x that compiles the SDK pattern.
- evaluator-mcp: add the missing tsconfig.json (only workspace without one;
bare tsc printed help and exited 1).
- evaluator-mcp: use the zod-parsed input (typed) instead of the raw
untyped `arguments` object in the evaluate_content / evaluate_hook
handlers; assert parsed input against evaluateContent's param type.
- evaluator-mcp: fix syllable-counter operator precedence so the per-word
`|| 1` fallback applies to the word, not the running sum.
- creator-mcp: assert zod-validated params against the (stricter) target
function signatures at four registerTool call sites.
Behavior-preserving — type alignment + one missing config, no logic changes.
Verified locally: npm ci → build:all → lint all exit 0 across 7 workspaces.
https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
Regenerate committed build output so it matches the type-fixed source (creator/evaluator) and the pinned compiler. No source or behavior change. https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
The product front door never mentioned the new multimodal layer — the core differentiator vs single-vendor agent platforms. Add a dedicated Core Concepts block (image/video/character model table + character consistency), list /studio in the commands table, bump Creation count to 10, and credit the Multimodal Director agent + multimodal-studio skill. Also wire higgsfield (remote MCP) into opencode.json for multi-platform parity. https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
Undo the artifact rebuild from the prior commit. The committed build/ outputs are bundled (esbuild build:fast, self-contained); a plain tsc rebuild produced unbundled equivalents, creating 22k lines of churn and swapping the runtime artifact strategy. Source + config fixes stand on their own; CI regenerates build/ via build:all for validation. Keeps the PR focused on source/config, not generated-output noise. https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
There was a problem hiding this comment.
Pull request overview
Introduces Multimodal Studio, a unified image/video/character generation layer for ACOS routed through a single MCP connector (Higgsfield), and updates docs/config to make the new capability discoverable and usable while also addressing build/CI reliability via lockfile + TypeScript pinning.
Changes:
- Adds a new
multimodal-studioskill plus operator-facing/studioand/generate-videocommands and a dedicated “Multimodal Director” agent. - Wires activation/discovery across registries, skill rules, and top-level docs (README/CLAUDE/CONNECTORS) and registers the Higgsfield MCP connector.
- Improves build determinism by committing
package-lock.jsonand pinning TypeScript to 5.6.3 (viadevDependencies+overrides).
Reviewed changes
Copilot reviewed 20 out of 22 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| skills/registry.json | Registers the new multimodal-studio skill and its triggers/MCP dependency. |
| skills/multimodal-studio/SKILL.md | Core skill spec: routing, prompt structure, async lifecycle, character consistency workflow. |
| skills/multimodal-studio/resources/model-matrix.md | Reference matrix for model selection, aspect ratios, cost tiers, and connection options. |
| .claude/agents/multimodal-director.md | New specialist agent to orchestrate multimodal generation via Higgsfield. |
| .claude/commands/studio.md | New end-to-end /studio workflow command. |
| .claude/commands/generate-video.md | New /generate-video workflow command. |
| .claude/skill-rules.json | Adds auto-activation rules for multimodal-studio. |
| README.md | Adds Multimodal Studio as a first-class concept and documents /studio usage. |
| docs/multimodal-studio.md | Dedicated guide and positioning doc for Multimodal Studio. |
| CONNECTORS.md | Updates connector category defaults to include Higgsfield for image/video/character. |
| CLAUDE.md | Documents new commands and the Multimodal Studio capability block. |
| .mcp.json | Registers the higgsfield MCP server endpoint in repo config. |
| opencode.json | Adds Higgsfield as a remote MCP entry for OpenCode integration. |
| skills/multimodal-studio/resources/model-matrix.md | Documents manual .mcp.json setup and self-hosted options. |
| package.json | Pins TypeScript to 5.6.3 (and overrides) to stabilize workspace builds. |
| package-lock.json | Adds committed lockfile for reproducible npm ci installs. |
| .gitignore | Stops ignoring package-lock.json so CI can use npm ci. |
| mcp-servers/website/src/index.ts | Fixes invalid JS object keys in generated package.json template (quotes hyphenated keys). |
| mcp-servers/evaluator/tsconfig.json | Adds evaluator TS config for consistent build output. |
| mcp-servers/evaluator/src/index.ts | Improves typed parsing + logging by using parsed inputs for evaluation tools. |
| mcp-servers/evaluator/src/evaluation/evaluator.ts | Fixes operator precedence in syllable counting expression. |
| mcp-servers/creator/src/index.ts | Adds narrow type assertions for tool handlers to satisfy TS/build constraints. |
| .claude-plugin/plugin.json | Updates plugin keywords/tags to include multimodal/image/video/Higgsfield. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| │ ~~image / ~~video / ~~character | ||
| ┌──────────────▼──────────────┐ | ||
| │ Higgsfield MCP (connector) │ one OAuth · 30+ models | ||
| │ generate_image · _video │ |
There was a problem hiding this comment.
Actionable comments posted: 9
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
skills/registry.json (1)
352-369:⚠️ Potential issue | 🟠 Major | ⚡ Quick winWire
multimodal-studiointocategories.creative.The skill is registered under
skills, but it is missing fromcategories.creative. This creates an inconsistent registry index and can hide the skill in category-based consumers.Suggested fix
"creative": [ + "multimodal-studio", "content-strategy", "frankx-brand", "suno-mastery", "daily-ops", "publishing-factory" ],🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/registry.json` around lines 352 - 369, The registry lists the "multimodal-studio" skill under "skills" but it is not included in the categories.creative array; update the JSON in skills/registry.json by adding "multimodal-studio" to the "creative" array under the "categories" object so the entry appears alongside other creative skills (match formatting/style of existing entries and keep the array sorted/commas consistent).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.claude/commands/generate-video.md:
- Around line 44-48: Add a language identifier to the fenced code block that
contains the example "/generate-video" commands (the block with lines starting
"/generate-video animate this hero..." etc.); change the opening triple
backticks to include a language token such as "text" so the block becomes
```text and ensures the code fence passes MD040 linting.
In @.claude/commands/studio.md:
- Around line 10-17: Add explicit language specifiers to the Markdown fenced
code blocks in .claude/commands/studio.md—specifically the ASCII-art pipeline
block and the following list block—by changing the fences from ``` to ```text
(or another appropriate tag) so the blocks are properly tagged (fix occurrences
around the pipeline box and the subsequent `/studio ...` lines referenced in the
diff).
In `@CLAUDE.md`:
- Around line 83-86: The markdown table under the "### Creation (12)" heading
(the table that includes the `/studio` row) needs blank lines above and below it
to satisfy MD058; edit the section containing "### Creation (12)" and insert a
single empty line before the table starts and a single empty line after the
table ends so the table is separated from surrounding text.
In `@docs/multimodal-studio.md`:
- Around line 22-37: Add language identifiers to the two fenced code blocks
shown (the ASCII diagram block starting with "┌─────────────────────────────┐"
and the other fenced block around lines 78-82) so the markdown linter passes
MD040; update the opening fences to use explicit languages (e.g., ```text for
the diagram and ```bash for the shell snippet) while leaving the block contents
unchanged and ensure both closing fences remain present.
In `@mcp-servers/evaluator/src/index.ts`:
- Line 296: Replace the incorrect audit property contentType with platform when
recording hook audit entries: change the object property from contentType:
input.platform to platform: input.platform where hook audit records are created
(look for the object containing contentType and the input variable), and update
any related TypeScript types/interfaces (e.g., HookAuditRecord or similar) to
include a platform field instead of contentType so the shape and downstream
consumers remain consistent.
In `@README.md`:
- Around line 193-199: The fenced code block showing the studio description
lacks a language tag; edit the block (the triple-backtick fence containing the "
/studio "hero image + 3 social cards + 5s teaser for the launch post" ..."
lines) and add a language identifier such as "text" or "bash" (e.g., ```text)
immediately after the opening ``` to satisfy MD040 and fix the lint warning.
- Line 277: The "Creation | 10" metadata in README.md is out of sync with
CLAUDE.md which lists Creation as 12; update the Creation count in README.md to
match CLAUDE.md (12) and ensure the command list (`/studio`, `/generate-video`,
`/article-creator`, `/create-music`, `/infogenius`, `/factory`, etc.) accurately
reflects all Creation commands (add any missing routes or remove extras so the
numeric total equals 12). Locate the "Creation" table row in README.md and
confirm consistency with the "Creation" entry in CLAUDE.md.
In `@skills/multimodal-studio/resources/model-matrix.md`:
- Around line 83-89: The fenced code block containing the generation flow (the
triple-backtick block with "submit generate_image/video → receive job id ...
status = done → download asset ...") is missing a language tag; change the
opening fence from ``` to a tagged fence such as ```text (or ```bash/```console
if preferred) so the block passes MD040 and renders consistently.
In `@skills/multimodal-studio/SKILL.md`:
- Around line 111-114: There is a skill ID mismatch: some docs use
"suno-ai-mastery" while other places use "suno-mastery"; pick a single canonical
ID (e.g., "suno-ai-mastery") and update all occurrences so they match — replace
the "suno-mastery" registry/entry and any composition/activation references with
"suno-ai-mastery" (or vice-versa if you prefer the other canonical name) so
every reference to the skill ID is identical across docs, rules, and registry
entries.
---
Outside diff comments:
In `@skills/registry.json`:
- Around line 352-369: The registry lists the "multimodal-studio" skill under
"skills" but it is not included in the categories.creative array; update the
JSON in skills/registry.json by adding "multimodal-studio" to the "creative"
array under the "categories" object so the entry appears alongside other
creative skills (match formatting/style of existing entries and keep the array
sorted/commas consistent).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: f8ba03a7-a95a-4a05-89a1-b21d8c2c2959
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (21)
.claude-plugin/plugin.json.claude/agents/multimodal-director.md.claude/commands/generate-video.md.claude/commands/studio.md.claude/skill-rules.json.gitignore.mcp.jsonCLAUDE.mdCONNECTORS.mdREADME.mddocs/multimodal-studio.mdmcp-servers/creator/src/index.tsmcp-servers/evaluator/src/evaluation/evaluator.tsmcp-servers/evaluator/src/index.tsmcp-servers/evaluator/tsconfig.jsonmcp-servers/website/src/index.tsopencode.jsonpackage.jsonskills/multimodal-studio/SKILL.mdskills/multimodal-studio/resources/model-matrix.mdskills/registry.json
| ``` | ||
| /generate-video animate this hero still into a 5s cinematic loop, 16:9 | ||
| /generate-video 9:16 teaser: neon city flythrough, fast cuts, 8s | ||
| /generate-video lesson intro featuring character <id>, slow push-in, warm light | ||
| ``` |
There was a problem hiding this comment.
Specify a language for the usage code fence.
The fenced block at Line 44 has no language (MD040).
Suggested fix
-```
+```text
/generate-video animate this hero still into a 5s cinematic loop, 16:9
/generate-video 9:16 teaser: neon city flythrough, fast cuts, 8s
/generate-video lesson intro featuring character <id>, slow push-in, warm light</details>
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 44-44: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/commands/generate-video.md around lines 44 - 48, Add a language
identifier to the fenced code block that contains the example "/generate-video"
commands (the block with lines starting "/generate-video animate this hero..."
etc.); change the opening triple backticks to include a language token such as
"text" so the block becomes ```text and ensures the code fence passes MD040
linting.
Source: Linters/SAST tools
| ``` | ||
| ╔══════════════════════════════════════════════════════════════════════╗ | ||
| ║ MULTIMODAL STUDIO PIPELINE ║ | ||
| ║ "One connector. Stills, motion, and a character that stays." ║ | ||
| ╠══════════════════════════════════════════════════════════════════════╣ | ||
| ║ BRIEF → ROUTE → CRAFT → GENERATE (async, parallel) → ASSEMBLE ║ | ||
| ╚══════════════════════════════════════════════════════════════════════╝ | ||
| ``` |
There was a problem hiding this comment.
Add language specifiers to both fenced blocks.
Both fences are missing language tags (MD040).
Suggested fix
-```
+```text
╔══════════════════════════════════════════════════════════════════════╗
║ MULTIMODAL STUDIO PIPELINE ║
║ "One connector. Stills, motion, and a character that stays." ║
╠══════════════════════════════════════════════════════════════════════╣
║ BRIEF → ROUTE → CRAFT → GENERATE (async, parallel) → ASSEMBLE ║
╚══════════════════════════════════════════════════════════════════════╝...
- +text
/studio hero image + 3 social cards + 5s teaser for the "Agentic Creator OS" launch post
/studio a consistent course-instructor character, then 4 lesson thumbnails featuring her
/studio animate this product still into a 5s cinematic loop
Also applies to: 66-70
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 10-10: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/commands/studio.md around lines 10 - 17, Add explicit language
specifiers to the Markdown fenced code blocks in
.claude/commands/studio.md—specifically the ASCII-art pipeline block and the
following list block—by changing the fences from ``` to ```text (or another
appropriate tag) so the blocks are properly tagged (fix occurrences around the
pipeline box and the subsequent `/studio ...` lines referenced in the diff).
Source: Linters/SAST tools
| ### Creation (12) | ||
| | Command | Description | | ||
| |---------|-------------| | ||
| | `/studio` | **Multimodal Studio** — end-to-end image + video + character production (Higgsfield MCP) | |
There was a problem hiding this comment.
Add the missing blank line around the table to satisfy markdownlint.
At Line 84, the table should be surrounded by blank lines (MD058), otherwise docs lint can fail in strict pipelines.
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 84-84: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CLAUDE.md` around lines 83 - 86, The markdown table under the "### Creation
(12)" heading (the table that includes the `/studio` row) needs blank lines
above and below it to satisfy MD058; edit the section containing "### Creation
(12)" and insert a single empty line before the table starts and a single empty
line after the table ends so the table is separated from surrounding text.
Source: Linters/SAST tools
| ``` | ||
| ┌─────────────────────────────┐ | ||
| brief / content ──▶ │ /studio · /generate-video │ ──▶ finished asset set | ||
| └──────────────┬──────────────┘ | ||
| │ | ||
| ┌──────────────▼──────────────┐ | ||
| │ multimodal-studio (skill) │ model matrix · prompt craft | ||
| │ Multimodal Director (agent) │ routing · async lifecycle | ||
| └──────────────┬──────────────┘ | ||
| │ ~~image / ~~video / ~~character | ||
| ┌──────────────▼──────────────┐ | ||
| │ Higgsfield MCP (connector) │ one OAuth · 30+ models | ||
| │ generate_image · _video │ | ||
| │ create_character · status │ | ||
| └─────────────────────────────┘ | ||
| ``` |
There was a problem hiding this comment.
Add language identifiers to both fenced code blocks.
At Line 22 and Line 78, include fence languages (e.g., text and bash) to resolve MD040 and keep docs-lint clean.
Also applies to: 78-82
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 22-22: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/multimodal-studio.md` around lines 22 - 37, Add language identifiers to
the two fenced code blocks shown (the ASCII diagram block starting with
"┌─────────────────────────────┐" and the other fenced block around lines 78-82)
so the markdown linter passes MD040; update the opening fences to use explicit
languages (e.g., ```text for the diagram and ```bash for the shell snippet)
while leaving the block contents unchanged and ensure both closing fences remain
present.
Source: Linters/SAST tools
| sessionId: input.context?.sessionId, | ||
| projectId: input.context?.projectId, | ||
| workflowId: input.context?.workflowId, | ||
| contentType: input.platform, |
There was a problem hiding this comment.
Use platform (not contentType) for hook audit records.
At Line 296, input.platform is stored as contentType, which mis-shapes hook audit entries and makes downstream platform-based analysis inconsistent. Log this under platform instead.
Proposed fix
await logEvaluation({
type: 'hook-evaluation',
source: input.context?.source || 'claude-code',
sessionId: input.context?.sessionId,
projectId: input.context?.projectId,
workflowId: input.context?.workflowId,
- contentType: input.platform,
+ platform: input.platform,
result,
});📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| contentType: input.platform, | |
| await logEvaluation({ | |
| type: 'hook-evaluation', | |
| source: input.context?.source || 'claude-code', | |
| sessionId: input.context?.sessionId, | |
| projectId: input.context?.projectId, | |
| workflowId: input.context?.workflowId, | |
| platform: input.platform, | |
| result, | |
| }); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@mcp-servers/evaluator/src/index.ts` at line 296, Replace the incorrect audit
property contentType with platform when recording hook audit entries: change the
object property from contentType: input.platform to platform: input.platform
where hook audit records are created (look for the object containing contentType
and the input variable), and update any related TypeScript types/interfaces
(e.g., HookAuditRecord or similar) to include a platform field instead of
contentType so the shape and downstream consumers remain consistent.
| ``` | ||
| /studio "hero image + 3 social cards + 5s teaser for the launch post" | ||
| ├── Routes each shot to the right model (Soul/Flux → stills, Kling/Veo → motion) | ||
| ├── Holds one character across the whole set via create_character → reuse ID | ||
| ├── Submits assets in parallel, polls for results, downloads to canonical paths | ||
| └── Output: a coherent, brand-locked campaign — not disconnected one-off images | ||
| ``` |
There was a problem hiding this comment.
Specify a language for the fenced code block.
At Line 193, add a language tag (for example text or bash) to fix MD040.
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 193-193: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` around lines 193 - 199, The fenced code block showing the studio
description lacks a language tag; edit the block (the triple-backtick fence
containing the " /studio "hero image + 3 social cards + 5s teaser for the launch
post" ..." lines) and add a language identifier such as "text" or "bash" (e.g.,
```text) immediately after the opening ``` to satisfy MD040 and fix the lint
warning.
Source: Linters/SAST tools
| | Category | Count | Examples | | ||
| |----------|-------|----------| | ||
| | **Creation** | 8 | `/article-creator`, `/create-music`, `/infogenius`, `/factory` | | ||
| | **Creation** | 10 | `/studio`, `/generate-video`, `/article-creator`, `/create-music`, `/infogenius`, `/factory` | |
There was a problem hiding this comment.
Align command-count metadata across docs.
Line 277 says Creation | 10, but CLAUDE.md documents Creation as 12. Please sync these totals to avoid conflicting operator guidance.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 277, The "Creation | 10" metadata in README.md is out of
sync with CLAUDE.md which lists Creation as 12; update the Creation count in
README.md to match CLAUDE.md (12) and ensure the command list (`/studio`,
`/generate-video`, `/article-creator`, `/create-music`, `/infogenius`,
`/factory`, etc.) accurately reflects all Creation commands (add any missing
routes or remove extras so the numeric total equals 12). Locate the "Creation"
table row in README.md and confirm consistency with the "Creation" entry in
CLAUDE.md.
| ``` | ||
| submit generate_image/video → receive job id | ||
| ↓ | ||
| poll get_generation_status(job_id) → pending? wait, re-poll | ||
| ↓ | ||
| status = done → download asset to canonical path → log (model, prompt, seed, job id) | ||
| ``` |
There was a problem hiding this comment.
Add a language tag to the fenced code block.
The fence starting at Line 83 is missing a language specifier (MD040).
Suggested fix
-```
+```text
submit generate_image/video → receive job id
↓
poll get_generation_status(job_id) → pending? wait, re-poll
↓
status = done → download asset to canonical path → log (model, prompt, seed, job id)</details>
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 83-83: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@skills/multimodal-studio/resources/model-matrix.md` around lines 83 - 89, The
fenced code block containing the generation flow (the triple-backtick block with
"submit generate_image/video → receive job id ... status = done → download asset
...") is missing a language tag; change the opening fence from ``` to a tagged
fence such as ```text (or ```bash/```console if preferred) so the block passes
MD040 and renders consistently.
Source: Linters/SAST tools
| - `frankx-brand` / `brand-guidelines` → brand tokens for generation | ||
| - `content-strategy` / `video-script` → briefs that feed the studio | ||
| - `suno-ai-mastery` → score the videos this skill produces | ||
| - `infogenius` command → research-grounded image prompts |
There was a problem hiding this comment.
Fix cross-file skill identifier mismatch (suno-ai-mastery vs suno-mastery).
This doc composes with suno-ai-mastery, but skills/registry.json defines suno-mastery (Line 116). Use one canonical skill ID across docs/rules/registry to avoid broken activation/composition references.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@skills/multimodal-studio/SKILL.md` around lines 111 - 114, There is a skill
ID mismatch: some docs use "suno-ai-mastery" while other places use
"suno-mastery"; pick a single canonical ID (e.g., "suno-ai-mastery") and update
all occurrences so they match — replace the "suno-mastery" registry/entry and
any composition/activation references with "suno-ai-mastery" (or vice-versa if
you prefer the other canonical name) so every reference to the skill ID is
identical across docs, rules, and registry entries.
- Resolve evaluator/tsconfig.json add/add conflict (keep ignoreDeprecations) - fix(evaluator): log hook audit under `platform`, not `contentType` - fix(registry): add multimodal-studio to categories.creative + canonical suno-mastery id - fix(agent): add capabilities + priority frontmatter (alignment-check gate) - docs: tag code fences (MD040), align Creation count (12), table spacing - TS 5.6.3 pin preserved through merge; build:all green, lint clean https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
Local validation builds regenerated tracked build/ output (unbundled tsc emit); restore main's bundled artifacts so the PR diff stays focused on source/config. CI regenerates build/ for validation regardless. https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
|
Independent verification pass (Claude Code session):
The lockfile + TS-pin approach here is the proper fix for the type debt that #11 worked around with transpile-only builds — once this merges, the Branch already contains current Generated by Claude Code |
Multimodal Studio for ACOS
Adds ACOS's unified generation layer: image + video + consistent characters across 30+ frontier models through one connector (Higgsfield MCP). This is the capability that closes the gap with agent-first platforms (Google Antigravity 2.0 / Gemini Omni) — while staying model-agnostic and brand-locked.
Why
ACOS already had agents, skills, commands, hooks, and six-platform adapters — but visual generation was image-only, hardcoded, with no video and no character consistency. This makes generation a first-class, portable part of the agent loop.
What's in it — the feature
skills/multimodal-studio/SKILL.md+resources/model-matrix.md.claude/agents/multimodal-director.md.claude/commands/studio.md,generate-video.md.mcp.json+opencode.json→higgsfield(hosted HTTP, OAuth).claude/skill-rules.json,skills/registry.jsonREADME.md(flagship Core Concept),CONNECTORS.md,CLAUDE.mddocs/multimodal-studio.md(incl. ACOS-vs-Antigravity positioning)Differentiators vs. single-vendor platforms
~~categoryseam.create_characteronce, reference its ID everywhere.Bonus: fixed pre-existing CI debt (the
buildjob had never been green onmain)npm cialways failed — no committedpackage-lock.json(gitignored with a contradictory "use npm ci" note) → committed the lockfile, un-ignored it.browser-mcpTS2589— TS 5.7+ generic-depth tightening broke the MCP SDK's zodregisterTool→ pinned TypeScript to 5.6.3 (newest 5.x that compiles all 7 workspaces).website-mcpsyntax error — unquoted hyphenated keys in a generatedpackage.jsontemplate → quoted.creator/evaluatortype errors patched; trackedbuild/artifacts rebuilt to match.npm run build:all→ exit 0, 0 TS errors, all 7 workspaces emit. CIbuildjob now green.Setup
Validation
.mcp.json,opencode.json,skill-rules.json,registry.json,plugin.json).npm run lint→ 0 errors.npm run build:all→ exit 0. Every internal doc link resolves.🤖 Generated with Claude Code
https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8
Summary by CodeRabbit
Release Notes
New Features
/studiocommand for end-to-end multimodal production pipelines/generate-videocommand for cinematic video generation from images or promptsDocumentation
Chores