Skip to content

feat: Multimodal Studio — unified image/video/character generation layer#12

Merged
frankxai merged 9 commits into
mainfrom
claude/vibrant-gates-8pp1t
Jun 10, 2026
Merged

feat: Multimodal Studio — unified image/video/character generation layer#12
frankxai merged 9 commits into
mainfrom
claude/vibrant-gates-8pp1t

Conversation

@frankxai

@frankxai frankxai commented May 29, 2026

Copy link
Copy Markdown
Owner

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

Layer File(s)
Skill (the brain) skills/multimodal-studio/SKILL.md + resources/model-matrix.md
Agent .claude/agents/multimodal-director.md
Commands .claude/commands/studio.md, generate-video.md
Connector .mcp.json + opencode.jsonhiggsfield (hosted HTTP, OAuth)
Activation .claude/skill-rules.json, skills/registry.json
Front door README.md (flagship Core Concept), CONNECTORS.md, CLAUDE.md
Guide docs/multimodal-studio.md (incl. ACOS-vs-Antigravity positioning)

Differentiators vs. single-vendor platforms

  • Model-agnostic — Soul/Flux/Seedream (image), Kling/Hailuo/Veo/Sora/DoP (video); swap any MCP at the ~~category seam.
  • Character consistency across a whole setcreate_character once, reference its ID everywhere.
  • Brand-locked & auditable — assets inherit Frank DNA + brand tokens; model+prompt+job-id logged per keeper.
  • Runs in the agent host you already use (Claude Code, Cursor, Windsurf, OpenCode, Gemini CLI).

Bonus: fixed pre-existing CI debt (the build job had never been green on main)

  • npm ci always failed — no committed package-lock.json (gitignored with a contradictory "use npm ci" note) → committed the lockfile, un-ignored it.
  • browser-mcp TS2589 — TS 5.7+ generic-depth tightening broke the MCP SDK's zod registerTool → pinned TypeScript to 5.6.3 (newest 5.x that compiles all 7 workspaces).
  • website-mcp syntax error — unquoted hyphenated keys in a generated package.json template → quoted.
  • creator/evaluator type errors patched; tracked build/ artifacts rebuilt to match.
  • Verified: authoritative npm run build:all → exit 0, 0 TS errors, all 7 workspaces emit. CI build job now green.

Setup

claude mcp add --transport http --scope user higgsfield https://mcp.higgsfield.ai/mcp

Validation

  • All JSON validated (.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.
  • Skill/agent/command frontmatter matches ACOS conventions; auto-activation wired.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HWwgQVAGWETuQ9t5jGR3j8

Summary by CodeRabbit

Release Notes

  • New Features

    • Multimodal Studio: unified image, video, and character generation with brand consistency
    • /studio command for end-to-end multimodal production pipelines
    • /generate-video command for cinematic video generation from images or prompts
    • Character consistency features for reusable characters across assets
  • Documentation

    • Added comprehensive Multimodal Studio guides and model reference documentation
    • Updated command documentation with new creation workflows
  • Chores

    • Integrated Higgsfield connector for multimodal generation capabilities
    • Enhanced configuration and dependency management

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
@coderabbitai

coderabbitai Bot commented May 29, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Multimodal Studio Feature

Layer / File(s) Summary
Skill definition and reference documentation
skills/multimodal-studio/SKILL.md, skills/multimodal-studio/resources/model-matrix.md, skills/registry.json
Core skill outlines end-to-end workflow (BRIEF → ROUTE → CRAFT → GENERATE → ASSEMBLE), character consistency via create_character/list_characters, quality standards ("Frank DNA"), and detailed reference covering model selection, aspect-ratio mappings, cost tiers, async job polling, and regeneration guidance.
Agent specification and commands
.claude/agents/multimodal-director.md, .claude/commands/generate-video.md, .claude/commands/studio.md
Multimodal Director agent orchestrates parallel generation with brand-locking and consistency checks; /generate-video turns images/prompts into cinematic clips; /studio runs the full production pipeline with model routing, prompt crafting, and asset assembly.
Activation rules and MCP connector configuration
.claude/skill-rules.json, .claude-plugin/plugin.json, .mcp.json, opencode.json
Skill auto-activates on image/video keywords, file patterns, and commands at high priority; plugin keywords expanded; Higgsfield MCP HTTP transport registered in both configuration formats for orchestrating generation jobs.
Product and developer documentation updates
CLAUDE.md, README.md, CONNECTORS.md, docs/multimodal-studio.md
CLAUDE.md and README.md tables/sections document /studio and /generate-video commands, Multimodal Studio overview, modality/model mapping, and connector setup; CONNECTORS.md unified image/video/character under Higgsfield default; dedicated multimodal-studio.md guide compares approach to Google Antigravity 2.0, includes workflow examples, and roadmap for asset wiring, character registry, cost ledger, and storyboard mode.

MCP Server Infrastructure

Layer / File(s) Summary
Creator MCP type fixes
mcp-servers/creator/src/index.ts
Social tool handlers (instagram_story, farcaster_cast, farcaster_frame, schedule_bulk) now explicitly cast params to SDK function parameter signatures using Parameters<typeof ...>[0] for stricter type safety instead of relying on inference.
Evaluator MCP handler and utility refactoring
mcp-servers/evaluator/src/index.ts, mcp-servers/evaluator/src/evaluation/evaluator.ts
evaluate_content and evaluate_hook handlers parse incoming args once into a schema-validated input object, then pass that input to both evaluation logic and logging payload; eliminates repeated parsing and improves field extraction clarity. Syllable-counting expression parenthesized for evaluation clarity.
Evaluator build configuration and dependency management
mcp-servers/evaluator/tsconfig.json, mcp-servers/website/src/index.ts, package.json, .gitignore
New evaluator tsconfig with ES2020/ESNext, strict mode, and declaration maps; website MCP scaffolding dependency formatting normalized; TypeScript 5.6.3 pinned in devDependencies and overrides; package-lock.json now tracked for reproducible npm ci installs.

🎯 3 (Moderate) | ⏱️ ~20 minutes

🐰 A studio unified at last,
Where images and videos vast
Dance with characters true,
Brand-locked in their hue—
Higgsfield's mcp comes to broadcast! 🎬✨

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description covers the main feature comprehensively with sections on why it was added, what's included (layered architecture table), key differentiators, setup instructions, and validation steps. However, it does not follow the provided template structure with the required checkboxes for Change Type, Frank DNA Alignment, Testing, and Related Issues. Restructure the PR description to match the template: include Change Type checkboxes, Frank DNA Alignment checks, Testing verification checkboxes, and Related Issues section with issue links.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly summarizes the main feature: a unified multimodal generation layer for image, video, and character generation. It is concise, specific, and directly related to the primary change in the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/vibrant-gates-8pp1t
⚔️ Resolve merge conflicts
  • Resolve merge conflict in branch claude/vibrant-gates-8pp1t

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread skills/registry.json
"downloads": 0,
"rating": 0,
"dependencies": ["frankx-brand"],
"mcp": ["higgsfield"],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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}" }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
"env": { "HF_API_KEY": "${HF_API_KEY}", "HF_SECRET": "${HF_SECRET}" }
"env": { "HF_API_KEY": "<YOUR_HF_API_KEY>", "HF_SECRET": "<YOUR_HF_SECRET>" }

frankxai added 5 commits May 29, 2026 02:03
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
@frankxai frankxai marked this pull request as ready for review May 31, 2026 09:21
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
Copilot AI review requested due to automatic review settings June 9, 2026 05:22

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-studio skill plus operator-facing /studio and /generate-video commands 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.json and pinning TypeScript to 5.6.3 (via devDependencies + 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.

Comment thread docs/multimodal-studio.md
│ ~~image / ~~video / ~~character
┌──────────────▼──────────────┐
│ Higgsfield MCP (connector) │ one OAuth · 30+ models
│ generate_image · _video │

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Wire multimodal-studio into categories.creative.

The skill is registered under skills, but it is missing from categories.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

📥 Commits

Reviewing files that changed from the base of the PR and between 5c5656f and 0e10ce6.

⛔ Files ignored due to path filters (1)
  • package-lock.json is 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.json
  • CLAUDE.md
  • CONNECTORS.md
  • README.md
  • docs/multimodal-studio.md
  • mcp-servers/creator/src/index.ts
  • mcp-servers/evaluator/src/evaluation/evaluator.ts
  • mcp-servers/evaluator/src/index.ts
  • mcp-servers/evaluator/tsconfig.json
  • mcp-servers/website/src/index.ts
  • opencode.json
  • package.json
  • skills/multimodal-studio/SKILL.md
  • skills/multimodal-studio/resources/model-matrix.md
  • skills/registry.json

Comment thread .claude/commands/generate-video.md Outdated
Comment on lines +44 to +48
```
/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
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

Comment thread .claude/commands/studio.md Outdated
Comment on lines +10 to +17
```
╔══════════════════════════════════════════════════════════════════════╗
║ MULTIMODAL STUDIO PIPELINE ║
║ "One connector. Stills, motion, and a character that stays." ║
╠══════════════════════════════════════════════════════════════════════╣
║ BRIEF → ROUTE → CRAFT → GENERATE (async, parallel) → ASSEMBLE ║
╚══════════════════════════════════════════════════════════════════════╝
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

Comment thread CLAUDE.md
Comment on lines +83 to +86
### Creation (12)
| Command | Description |
|---------|-------------|
| `/studio` | **Multimodal Studio** — end-to-end image + video + character production (Higgsfield MCP) |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

Comment thread docs/multimodal-studio.md Outdated
Comment on lines +22 to +37
```
┌─────────────────────────────┐
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 │
└─────────────────────────────┘
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

Comment thread mcp-servers/evaluator/src/index.ts Outdated
sessionId: input.context?.sessionId,
projectId: input.context?.projectId,
workflowId: input.context?.workflowId,
contentType: input.platform,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

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.

Suggested change
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.

Comment thread README.md Outdated
Comment on lines +193 to +199
```
/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
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

Comment thread README.md Outdated
| Category | Count | Examples |
|----------|-------|----------|
| **Creation** | 8 | `/article-creator`, `/create-music`, `/infogenius`, `/factory` |
| **Creation** | 10 | `/studio`, `/generate-video`, `/article-creator`, `/create-music`, `/infogenius`, `/factory` |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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.

Comment on lines +83 to +89
```
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)
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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

Comment on lines +111 to +114
- `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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

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.

frankxai added 2 commits June 10, 2026 15:19
- 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

Copy link
Copy Markdown
Owner Author

Independent verification pass (Claude Code session):

  • npm ci — clean install from the committed lockfile (the original CI failure mode is gone)
  • npm run build:all — exit 0, all 7 workspaces emit, TS resolved to the pinned 5.6.3
  • npm run lint — 18 skills checked, 0 errors, 0 warnings
  • GitHub CI on head c9413b5: build ✅ · Validate Agent Alignment ✅

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 typecheck informational step in ci.yml can be flipped to blocking.

Branch already contains current main (the ab334c8 merge). Green and mergeable from where I sit — leaving the button to you since you're actively cycling on review feedback.


Generated by Claude Code

@frankxai frankxai merged commit e5c9692 into main Jun 10, 2026
3 checks passed
@frankxai frankxai deleted the claude/vibrant-gates-8pp1t branch June 10, 2026 18:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants