@vibeframe/cli 0.110.0 → 0.111.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -68080,6 +68080,8 @@ var init_scene2 = __esm({
68080
68080
  name: "scene_list_styles",
68081
68081
  category: "scene",
68082
68082
  cost: "free",
68083
+ title: "List Visual Styles",
68084
+ annotations: { readOnly: true, openWorld: false },
68083
68085
  description: "List the 8 vendored visual identities available for `init --visual-style` (Swiss Pulse, Data Drift, \u2026) or, when `name` is provided, return the full DESIGN.md hard-gate body for one style. The DESIGN.md content is what the LLM uses as a non-negotiable visual rulebook during compose-scenes-with-skills.",
68084
68086
  schema: sceneStylesSchema,
68085
68087
  async execute(args) {
@@ -68141,6 +68143,8 @@ var init_scene2 = __esm({
68141
68143
  name: "init",
68142
68144
  category: "scene",
68143
68145
  cost: "free",
68146
+ title: "Initialize Video Project",
68147
+ annotations: { readOnly: false, destructive: false, idempotent: true, openWorld: false },
68144
68148
  description: "Scaffold a new VibeFrame video scene project. Supports minimal, agent, and full profiles; full includes the current HTML render backend metadata. Idempotent: re-running keeps user-authored files and merges backend config instead of overwriting. No API keys required.",
68145
68149
  schema: sceneInitSchema,
68146
68150
  async execute(args, ctx) {
@@ -68191,6 +68195,8 @@ var init_scene2 = __esm({
68191
68195
  name: "scene_add",
68192
68196
  category: "scene",
68193
68197
  cost: "low",
68198
+ title: "Add Scene from Preset",
68199
+ annotations: { readOnly: false, openWorld: true },
68194
68200
  description: "Add a single scene to an existing scene project. Optionally generates narration audio (ElevenLabs) and/or a backdrop image (Gemini/OpenAI), then emits compositions/scene-<id>.html with a paused GSAP timeline and splices a clip reference into the root index.html. Use skipAudio:true and skipImage:true for text-only scenes that need no API calls.",
68195
68201
  schema: sceneAddSchema,
68196
68202
  async execute(args, ctx) {
@@ -68248,6 +68254,8 @@ var init_scene2 = __esm({
68248
68254
  name: "scene_lint",
68249
68255
  category: "scene",
68250
68256
  cost: "free",
68257
+ title: "Lint Scene Compositions",
68258
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
68251
68259
  description: "Validate every scene file in a project against the public Hyperframes lint rules (in-process, no Chrome required). Returns errors, warnings, and info findings per file. Optional fix:true mechanically repairs `timed_element_missing_clip_class` only \u2014 other issues surface with fixHints.",
68252
68260
  schema: sceneLintSchema,
68253
68261
  async execute(args, ctx) {
@@ -68285,6 +68293,8 @@ var init_scene2 = __esm({
68285
68293
  name: "scene_repair",
68286
68294
  category: "scene",
68287
68295
  cost: "free",
68296
+ title: "Repair Scene Compositions",
68297
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
68288
68298
  description: "Apply deterministic mechanical scene repairs. Currently uses the safe lint auto-fix allow-list and never performs semantic creative rewrites.",
68289
68299
  schema: sceneRepairSchema,
68290
68300
  async execute(args, ctx) {
@@ -68321,6 +68331,8 @@ var init_scene2 = __esm({
68321
68331
  name: "render",
68322
68332
  category: "scene",
68323
68333
  cost: "free",
68334
+ title: "Render Video to MP4",
68335
+ annotations: { readOnly: false, openWorld: false },
68324
68336
  description: "Render a scene project to MP4/WebM/MOV via the Hyperframes producer. Requires Chrome installed locally. Output defaults to renders/<projectName>-<isoStamp>.<format>. Long runs: over MCP, calls exceeding ~45s return immediately with { promoted: true, jobId, status: 'running' } \u2014 poll status_job every 15-30s until completed/failed instead of re-invoking render. Emits MCP progress notifications when the client supplies a progressToken.",
68325
68337
  schema: sceneRenderSchema,
68326
68338
  async execute(args, ctx) {
@@ -68386,6 +68398,8 @@ var init_scene2 = __esm({
68386
68398
  name: "build",
68387
68399
  category: "scene",
68388
68400
  cost: "high",
68401
+ title: "Build Video from Storyboard",
68402
+ annotations: { readOnly: false, openWorld: true },
68389
68403
  description: "v0.60 one-shot orchestrator: read STORYBOARD.md per-beat YAML cues (narration / backdrop / duration), dispatch TTS + image generation per beat, compose scene HTML via the compose-scenes-with-skills pipeline, then render to MP4. Use this instead of chaining init + scene_add + render manually. Caches by SHA256 of (DESIGN.md + cue body) so re-runs are idempotent and cheap. Long runs: over MCP, calls exceeding ~45s return immediately with { promoted: true, jobId, status: 'running' } \u2014 poll status_job every 15-30s until completed/failed instead of re-invoking build. Emits MCP progress notifications when the client supplies a progressToken. When the MCP host supports elicitation, unspecified asset choices (narration provider, backdrop images, cost cap) are confirmed with the user via a form before the build starts.",
68390
68404
  schema: sceneBuildSchema,
68391
68405
  async execute(args, ctx) {
@@ -68468,6 +68482,8 @@ var init_scene2 = __esm({
68468
68482
  name: "scene_install_skill",
68469
68483
  category: "scene",
68470
68484
  cost: "free",
68485
+ title: "Install Hyperframes Skill",
68486
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
68471
68487
  description: "Install the vendored Hyperframes skill bundle into a scene project so the host agent (Claude Code, Cursor, Codex, Aider) can read framework rules + house style directly. Writes a universal SKILL.md + references/ at the project root, plus per-host layouts (.claude/skills/hyperframes/ for Claude Code, .cursor/rules/hyperframes.mdc for Cursor) when those hosts are detected. Phase H1 of the agentic-native composer plan \u2014 once installed, the host agent itself can author scene HTML using the rules instead of relying on vibe's internal LLM call.",
68472
68488
  schema: sceneInstallSkillSchema,
68473
68489
  async execute(args, ctx) {
@@ -68514,6 +68530,8 @@ var init_scene2 = __esm({
68514
68530
  name: "scene_compose_prompts",
68515
68531
  category: "scene",
68516
68532
  cost: "free",
68533
+ title: "Get Scene Authoring Prompts",
68534
+ annotations: { readOnly: true, openWorld: false },
68517
68535
  description: "Emit the per-beat compose plan for the host agent to author scene HTML itself. Reads STORYBOARD.md + DESIGN.md and returns each beat's outputPath + userPrompt + cues + body, plus references to the project's SKILL.md (Hyperframes rules) and DESIGN.md (visual identity). The host agent writes each compositions/scene-<id>.html file directly \u2014 VibeFrame makes NO LLM call here. Hosts that cannot write files (e.g. Claude Desktop) submit each authored beat with scene_submit instead. Pairs with scene_install_skill (Phase H1). Phase H2 of the agentic-native composer plan; the internal-LLM batch path (build) remains as a fallback for non-agent contexts.",
68518
68536
  schema: sceneComposePromptsSchema,
68519
68537
  async execute(args, ctx) {
@@ -68556,6 +68574,8 @@ var init_scene2 = __esm({
68556
68574
  name: "scene_submit",
68557
68575
  category: "scene",
68558
68576
  cost: "free",
68577
+ title: "Submit Scene HTML",
68578
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
68559
68579
  description: "Submit host-authored Hyperframes scene HTML for one beat. Validates with the same lint as the batch composer and writes compositions/scene-<id>.html on pass; on lint errors it returns the findings WITHOUT writing so you can fix and resubmit. This completes agent-mode compose for hosts that cannot write files (e.g. Claude Desktop): build (mode agent) \u2192 needs-author plan \u2192 author each beat from its composePrompts userPrompt \u2192 scene_submit per beat \u2192 build (stage sync) \u2192 render. No internal LLM call \u2014 the submitting agent is the composer.",
68560
68580
  schema: sceneSubmitSchema,
68561
68581
  async execute(args, ctx) {
@@ -68605,6 +68625,8 @@ var init_audio2 = __esm({
68605
68625
  name: "audio_transcribe",
68606
68626
  category: "audio",
68607
68627
  cost: "low",
68628
+ title: "Transcribe Audio",
68629
+ annotations: { readOnly: false, openWorld: true },
68608
68630
  description: "Transcribe audio using OpenAI Whisper. Outputs text, SRT, or VTT. Requires OPENAI_API_KEY.",
68609
68631
  schema: external_exports.object({
68610
68632
  audioPath: external_exports.string().describe("Input audio file path"),
@@ -68634,6 +68656,8 @@ var init_audio2 = __esm({
68634
68656
  name: "audio_isolate",
68635
68657
  category: "audio",
68636
68658
  cost: "low",
68659
+ title: "Isolate Vocals from Audio",
68660
+ annotations: { readOnly: false, openWorld: true },
68637
68661
  description: "Isolate vocals from audio using ElevenLabs. Requires ELEVENLABS_API_KEY.",
68638
68662
  schema: external_exports.object({
68639
68663
  audioPath: external_exports.string().describe("Input audio file path"),
@@ -68653,6 +68677,8 @@ var init_audio2 = __esm({
68653
68677
  name: "audio_clone_voice",
68654
68678
  category: "audio",
68655
68679
  cost: "low",
68680
+ title: "Clone Voice from Samples",
68681
+ annotations: { readOnly: false, destructive: false, openWorld: true },
68656
68682
  description: "Clone a voice from audio samples using ElevenLabs. Requires ELEVENLABS_API_KEY.",
68657
68683
  schema: external_exports.object({
68658
68684
  samplePaths: external_exports.array(external_exports.string()).describe("Audio sample file paths (1-25 files)"),
@@ -68674,6 +68700,8 @@ var init_audio2 = __esm({
68674
68700
  name: "audio_dub",
68675
68701
  category: "audio",
68676
68702
  cost: "high",
68703
+ title: "Dub Audio to Another Language",
68704
+ annotations: { readOnly: false, openWorld: true },
68677
68705
  description: "Dub audio/video to another language (transcribe + translate + TTS). Requires OPENAI_API_KEY, ANTHROPIC_API_KEY, ELEVENLABS_API_KEY.",
68678
68706
  schema: external_exports.object({
68679
68707
  mediaPath: external_exports.string().describe("Input media file (video or audio)"),
@@ -68704,6 +68732,8 @@ var init_audio2 = __esm({
68704
68732
  name: "audio_duck",
68705
68733
  category: "audio",
68706
68734
  cost: "free",
68735
+ title: "Duck Background Music",
68736
+ annotations: { readOnly: false, openWorld: false },
68707
68737
  description: "Auto-duck background music when voice is present using FFmpeg sidechain compression. Free, no API key needed.",
68708
68738
  schema: external_exports.object({
68709
68739
  musicPath: external_exports.string().describe("Background music file path"),
@@ -68749,6 +68779,8 @@ var init_edit = __esm({
68749
68779
  name: "edit_silence_cut",
68750
68780
  category: "edit",
68751
68781
  cost: "free",
68782
+ title: "Cut Silence from Video",
68783
+ annotations: { readOnly: false, openWorld: true },
68752
68784
  description: "Remove silent segments from a video using FFmpeg or Gemini AI detection. No API key needed for FFmpeg mode.",
68753
68785
  schema: external_exports.object({
68754
68786
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -68779,6 +68811,8 @@ var init_edit = __esm({
68779
68811
  name: "edit_caption",
68780
68812
  category: "edit",
68781
68813
  cost: "low",
68814
+ title: "Burn Captions into Video",
68815
+ annotations: { readOnly: false, openWorld: true },
68782
68816
  description: "Transcribe audio and burn styled captions into video. Requires OPENAI_API_KEY for Whisper transcription.",
68783
68817
  schema: external_exports.object({
68784
68818
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -68803,6 +68837,8 @@ var init_edit = __esm({
68803
68837
  name: "edit_fade",
68804
68838
  category: "edit",
68805
68839
  cost: "free",
68840
+ title: "Apply Fade Effects",
68841
+ annotations: { readOnly: false, openWorld: false },
68806
68842
  description: "Apply fade in/out effects to video and/or audio. No API key needed.",
68807
68843
  schema: external_exports.object({
68808
68844
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -68826,6 +68862,8 @@ var init_edit = __esm({
68826
68862
  name: "edit_noise_reduce",
68827
68863
  category: "edit",
68828
68864
  cost: "free",
68865
+ title: "Reduce Audio Noise",
68866
+ annotations: { readOnly: false, openWorld: false },
68829
68867
  description: "Reduce audio/video noise using FFmpeg filters. No API key needed.",
68830
68868
  schema: external_exports.object({
68831
68869
  inputPath: external_exports.string().describe("Path to the input media file"),
@@ -68847,6 +68885,8 @@ var init_edit = __esm({
68847
68885
  name: "edit_jump_cut",
68848
68886
  category: "edit",
68849
68887
  cost: "low",
68888
+ title: "Remove Filler Words",
68889
+ annotations: { readOnly: false, openWorld: true },
68850
68890
  description: "Remove filler words (um, uh, like, etc.) from video using Whisper transcription. Requires OPENAI_API_KEY.",
68851
68891
  schema: external_exports.object({
68852
68892
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -68870,6 +68910,8 @@ var init_edit = __esm({
68870
68910
  name: "edit_text_overlay",
68871
68911
  category: "edit",
68872
68912
  cost: "free",
68913
+ title: "Overlay Static Text",
68914
+ annotations: { readOnly: false, openWorld: false },
68873
68915
  description: "Apply simple static text burn-in on video using FFmpeg drawtext. No API key needed. For designed or animated overlays, use edit_motion_overlay.",
68874
68916
  schema: external_exports.object({
68875
68917
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -68896,6 +68938,8 @@ var init_edit = __esm({
68896
68938
  name: "edit_motion_overlay",
68897
68939
  category: "edit",
68898
68940
  cost: "low",
68941
+ title: "Apply Motion Graphics Overlay",
68942
+ annotations: { readOnly: false, openWorld: true },
68899
68943
  description: "Apply designed motion graphics overlays to an existing video. Generates Remotion overlays from a prompt, or overlays a user-provided .json/.lottie animation via the Hyperframes renderer.",
68900
68944
  schema: external_exports.object({
68901
68945
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -68932,6 +68976,8 @@ var init_edit = __esm({
68932
68976
  name: "edit_translate_srt",
68933
68977
  category: "edit",
68934
68978
  cost: "low",
68979
+ title: "Translate SRT Subtitles",
68980
+ annotations: { readOnly: false, openWorld: true },
68935
68981
  description: "Translate SRT subtitle files using Claude or OpenAI. Requires ANTHROPIC_API_KEY or OPENAI_API_KEY.",
68936
68982
  schema: external_exports.object({
68937
68983
  srtPath: external_exports.string().describe("Path to the input SRT file"),
@@ -68954,6 +69000,8 @@ var init_edit = __esm({
68954
69000
  name: "edit_grade",
68955
69001
  category: "edit",
68956
69002
  cost: "low",
69003
+ title: "Apply Color Grading",
69004
+ annotations: { readOnly: false, openWorld: true },
68957
69005
  description: "Apply AI-generated color grading using Claude + FFmpeg. Use preset for free built-in grades, or style for custom AI-generated grades (needs ANTHROPIC_API_KEY).",
68958
69006
  schema: external_exports.object({
68959
69007
  videoPath: external_exports.string().describe("Input video file path"),
@@ -68976,6 +69024,8 @@ var init_edit = __esm({
68976
69024
  name: "edit_speed_ramp",
68977
69025
  category: "edit",
68978
69026
  cost: "low",
69027
+ title: "Apply Content-Aware Speed Ramping",
69028
+ annotations: { readOnly: false, openWorld: true },
68979
69029
  description: "Apply content-aware speed ramping. Analyzes speech with Whisper, plans speed changes with Claude, applies with FFmpeg. Requires OPENAI_API_KEY + ANTHROPIC_API_KEY.",
68980
69030
  schema: external_exports.object({
68981
69031
  videoPath: external_exports.string().describe("Input video file path (must have audio)"),
@@ -69000,6 +69050,8 @@ var init_edit = __esm({
69000
69050
  name: "edit_reframe",
69001
69051
  category: "edit",
69002
69052
  cost: "free",
69053
+ title: "Reframe Video Aspect Ratio",
69054
+ annotations: { readOnly: false, openWorld: false },
69003
69055
  description: "Auto-reframe video to a different aspect ratio using smart cropping. Free (FFmpeg only).",
69004
69056
  schema: external_exports.object({
69005
69057
  videoPath: external_exports.string().describe("Input video file path"),
@@ -69022,6 +69074,8 @@ var init_edit = __esm({
69022
69074
  name: "edit_interpolate",
69023
69075
  category: "edit",
69024
69076
  cost: "free",
69077
+ title: "Create Slow Motion with Frame Interpolation",
69078
+ annotations: { readOnly: false, openWorld: false },
69025
69079
  description: "Create slow motion with AI frame interpolation using FFmpeg minterpolate. Free, no API key needed.",
69026
69080
  schema: external_exports.object({
69027
69081
  videoPath: external_exports.string().describe("Input video file path"),
@@ -69044,6 +69098,8 @@ var init_edit = __esm({
69044
69098
  name: "edit_upscale",
69045
69099
  category: "edit",
69046
69100
  cost: "free",
69101
+ title: "Upscale Video Resolution",
69102
+ annotations: { readOnly: false, openWorld: false },
69047
69103
  description: "Upscale video resolution using FFmpeg (Lanczos scaling). Free, no API key needed.",
69048
69104
  schema: external_exports.object({
69049
69105
  videoPath: external_exports.string().describe("Input video file path"),
@@ -69065,6 +69121,8 @@ var init_edit = __esm({
69065
69121
  name: "edit_animated_caption",
69066
69122
  category: "edit",
69067
69123
  cost: "low",
69124
+ title: "Add Animated Captions",
69125
+ annotations: { readOnly: false, openWorld: true },
69068
69126
  description: "Add animated word-by-word captions (TikTok/Reels style). Supports highlight, bounce, pop-in, neon, karaoke-sweep, typewriter styles. Requires OPENAI_API_KEY for Whisper.",
69069
69127
  schema: external_exports.object({
69070
69128
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -69097,6 +69155,8 @@ var init_edit = __esm({
69097
69155
  name: "edit_image",
69098
69156
  category: "edit",
69099
69157
  cost: "low",
69158
+ title: "Edit Image with AI",
69159
+ annotations: { readOnly: false, openWorld: true },
69100
69160
  description: "Edit image(s) using Gemini (Nano Banana). Provide image paths and an edit prompt. Requires GOOGLE_API_KEY.",
69101
69161
  schema: external_exports.object({
69102
69162
  imagePaths: external_exports.array(external_exports.string()).describe("Input image file path(s)"),
@@ -69120,6 +69180,8 @@ var init_edit = __esm({
69120
69180
  name: "edit_fill_gaps",
69121
69181
  category: "edit",
69122
69182
  cost: "high",
69183
+ title: "Fill Timeline Gaps with AI Video",
69184
+ annotations: { readOnly: false, openWorld: true },
69123
69185
  description: "Fill timeline gaps with AI-generated video using Kling image-to-video. Detects empty regions in a project's timeline, extracts the last frame of the preceding clip, and generates a continuation video. Requires KLING_API_KEY and IMGBB_API_KEY (image hosting for Kling).",
69124
69186
  schema: external_exports.object({
69125
69187
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -69244,6 +69306,8 @@ var init_inspect = __esm({
69244
69306
  name: "inspect_project",
69245
69307
  category: "analyze",
69246
69308
  cost: "free",
69309
+ title: "Inspect Project",
69310
+ annotations: { readOnly: false, openWorld: false },
69247
69311
  description: "Local project inspection: checks STORYBOARD.md, DESIGN.md, config, build-report, scene lint, composition files, and referenced assets. Writes review-report.json by default.",
69248
69312
  schema: external_exports.object({
69249
69313
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
@@ -69278,6 +69342,8 @@ var init_inspect = __esm({
69278
69342
  name: "inspect_render",
69279
69343
  category: "analyze",
69280
69344
  cost: "low",
69345
+ title: "Inspect Render",
69346
+ annotations: { readOnly: false, openWorld: false },
69281
69347
  description: "Render inspection: runs cheap local video checks by default, optionally adds Gemini AI review with ai: true, and writes review-report.json by default.",
69282
69348
  schema: external_exports.object({
69283
69349
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
@@ -69342,6 +69408,8 @@ var init_inspect = __esm({
69342
69408
  name: "inspect_media",
69343
69409
  category: "analyze",
69344
69410
  cost: "low",
69411
+ title: "Inspect Media with AI",
69412
+ annotations: { readOnly: true, openWorld: true },
69345
69413
  description: "Analyze media (image, video, or YouTube URL) using Gemini AI. Requires GOOGLE_API_KEY.",
69346
69414
  schema: external_exports.object({
69347
69415
  source: external_exports.string().describe("Path to image/video or YouTube URL"),
@@ -69370,6 +69438,8 @@ var init_inspect = __esm({
69370
69438
  name: "inspect_video",
69371
69439
  category: "analyze",
69372
69440
  cost: "low",
69441
+ title: "Inspect Video with AI",
69442
+ annotations: { readOnly: true, openWorld: true },
69373
69443
  description: "Analyze video content using Gemini AI with temporal understanding. Requires GOOGLE_API_KEY.",
69374
69444
  schema: external_exports.object({
69375
69445
  source: external_exports.string().describe("Path to video file"),
@@ -69398,6 +69468,8 @@ var init_inspect = __esm({
69398
69468
  name: "inspect_review",
69399
69469
  category: "analyze",
69400
69470
  cost: "low",
69471
+ title: "Review Video with AI",
69472
+ annotations: { readOnly: false, openWorld: true },
69401
69473
  description: "AI video review: analyzes quality, suggests fixes, and optionally auto-applies them. Requires GOOGLE_API_KEY.",
69402
69474
  schema: external_exports.object({
69403
69475
  videoPath: external_exports.string().describe("Path to the video file to review"),
@@ -69426,6 +69498,8 @@ var init_inspect = __esm({
69426
69498
  name: "inspect_suggest",
69427
69499
  category: "analyze",
69428
69500
  cost: "low",
69501
+ title: "Suggest Edits with AI",
69502
+ annotations: { readOnly: false, openWorld: true },
69429
69503
  description: "Get natural-language edit suggestions for a project from Gemini. Returns suggestions array with type/confidence/clipIds. With `apply: true`, applies the first suggestion in place. Requires GOOGLE_API_KEY.",
69430
69504
  schema: external_exports.object({
69431
69505
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -69481,6 +69555,8 @@ var init_generate2 = __esm({
69481
69555
  name: "generate_motion",
69482
69556
  category: "generate",
69483
69557
  cost: "low",
69558
+ title: "Generate Motion Graphics",
69559
+ annotations: { readOnly: false, openWorld: true },
69484
69560
  description: "Generate standalone motion graphics using Claude or Gemini + Remotion. For overlays on an existing video, prefer edit_motion_overlay. Requires ANTHROPIC_API_KEY (Claude) or GOOGLE_API_KEY (Gemini).",
69485
69561
  schema: external_exports.object({
69486
69562
  description: external_exports.string().describe("Description of the motion graphic to generate"),
@@ -69520,6 +69596,8 @@ var init_generate2 = __esm({
69520
69596
  name: "generate_speech",
69521
69597
  category: "generate",
69522
69598
  cost: "low",
69599
+ title: "Generate Speech Audio",
69600
+ annotations: { readOnly: false, openWorld: true },
69523
69601
  description: "Generate speech from text using ElevenLabs TTS. Requires ELEVENLABS_API_KEY.",
69524
69602
  schema: external_exports.object({
69525
69603
  text: external_exports.string().describe("Text to convert to speech"),
@@ -69540,6 +69618,8 @@ var init_generate2 = __esm({
69540
69618
  name: "generate_narration",
69541
69619
  category: "generate",
69542
69620
  cost: "low",
69621
+ title: "Generate Narration Audio",
69622
+ annotations: { readOnly: false, openWorld: true },
69543
69623
  description: "Generate narration from text using ElevenLabs TTS. Product-facing alias for generate_speech. Requires ELEVENLABS_API_KEY.",
69544
69624
  schema: external_exports.object({
69545
69625
  text: external_exports.string().describe("Narration text to convert to speech"),
@@ -69564,6 +69644,8 @@ var init_generate2 = __esm({
69564
69644
  name: "generate_sound_effect",
69565
69645
  category: "generate",
69566
69646
  cost: "low",
69647
+ title: "Generate Sound Effect",
69648
+ annotations: { readOnly: false, openWorld: true },
69567
69649
  description: "Generate sound effects using ElevenLabs. Requires ELEVENLABS_API_KEY.",
69568
69650
  schema: external_exports.object({
69569
69651
  prompt: external_exports.string().describe("Description of the sound effect"),
@@ -69585,6 +69667,8 @@ var init_generate2 = __esm({
69585
69667
  name: "generate_music",
69586
69668
  category: "generate",
69587
69669
  cost: "low",
69670
+ title: "Generate Music",
69671
+ annotations: { readOnly: false, openWorld: true },
69588
69672
  description: "Generate background music from text prompt. ElevenLabs (default, up to 10min) or Replicate MusicGen (max 30s). Requires ELEVENLABS_API_KEY or REPLICATE_API_TOKEN.",
69589
69673
  schema: external_exports.object({
69590
69674
  prompt: external_exports.string().describe("Description of the music to generate"),
@@ -69630,6 +69714,8 @@ var init_generate2 = __esm({
69630
69714
  name: "generate_music_status",
69631
69715
  category: "generate",
69632
69716
  cost: "free",
69717
+ title: "Check Music Generation Status",
69718
+ annotations: { readOnly: true, openWorld: true },
69633
69719
  description: "Check Replicate music generation task status. `generate_music` returns a task id; this tool polls it until the audio URL is ready. Requires REPLICATE_API_TOKEN.",
69634
69720
  schema: external_exports.object({
69635
69721
  taskId: external_exports.string().describe("Task ID returned from generate_music")
@@ -69653,6 +69739,8 @@ var init_generate2 = __esm({
69653
69739
  name: "generate_image",
69654
69740
  category: "generate",
69655
69741
  cost: "low",
69742
+ title: "Generate Image",
69743
+ annotations: { readOnly: false, openWorld: true },
69656
69744
  description: "Generate an image using AI. Supports Gemini (free), OpenAI GPT Image, or Grok Imagine. Requires GOOGLE_API_KEY (Gemini), OPENAI_API_KEY (OpenAI), or XAI_API_KEY (Grok).",
69657
69745
  schema: external_exports.object({
69658
69746
  prompt: external_exports.string().describe("Image description prompt"),
@@ -69686,6 +69774,8 @@ var init_generate2 = __esm({
69686
69774
  name: "generate_storyboard",
69687
69775
  category: "generate",
69688
69776
  cost: "low",
69777
+ title: "Generate Storyboard",
69778
+ annotations: { readOnly: false, openWorld: true },
69689
69779
  description: "Generate a video storyboard from text content using Claude. Returns scene segments with descriptions, visuals, and narration. Requires ANTHROPIC_API_KEY.",
69690
69780
  schema: external_exports.object({
69691
69781
  content: external_exports.string().describe("Text content to analyze (script, article, etc.)"),
@@ -69709,6 +69799,8 @@ var init_generate2 = __esm({
69709
69799
  name: "generate_background",
69710
69800
  category: "generate",
69711
69801
  cost: "low",
69802
+ title: "Generate Background Image",
69803
+ annotations: { readOnly: false, openWorld: true },
69712
69804
  description: "Generate a cinematic backdrop image (OpenAI gpt-image-2 / DALL\xB7E variant tuned for video backgrounds). Returns the image URL and, when `output` is provided, downloads the PNG to disk. Requires OPENAI_API_KEY.",
69713
69805
  schema: external_exports.object({
69714
69806
  description: external_exports.string().describe("Background description / image prompt."),
@@ -69733,6 +69825,8 @@ var init_generate2 = __esm({
69733
69825
  name: "generate_thumbnail",
69734
69826
  category: "generate",
69735
69827
  cost: "low",
69828
+ title: "Generate Thumbnail",
69829
+ annotations: { readOnly: false, openWorld: true },
69736
69830
  description: "Extract the best thumbnail frame from a video using Gemini AI analysis. Requires GOOGLE_API_KEY.",
69737
69831
  schema: external_exports.object({
69738
69832
  videoPath: external_exports.string().describe("Path to the video file"),
@@ -69754,6 +69848,8 @@ var init_generate2 = __esm({
69754
69848
  name: "generate_video",
69755
69849
  category: "generate",
69756
69850
  cost: "high",
69851
+ title: "Generate Video",
69852
+ annotations: { readOnly: false, openWorld: true },
69757
69853
  description: "Generate video using AI. Supports Seedance 2.0 via fal.ai, Grok, Kling, Runway, and Veo. Requires FAL_API_KEY, XAI_API_KEY, KLING_API_KEY, RUNWAY_API_SECRET, or GOOGLE_API_KEY.",
69758
69854
  schema: external_exports.object({
69759
69855
  prompt: external_exports.string().describe("Text prompt describing the video"),
@@ -69815,6 +69911,8 @@ var init_generate2 = __esm({
69815
69911
  name: "generate_video_status",
69816
69912
  category: "generate",
69817
69913
  cost: "free",
69914
+ title: "Check Video Generation Status",
69915
+ annotations: { readOnly: false, openWorld: true },
69818
69916
  description: "Check video generation status for Grok, Runway, Kling, or Veo tasks.",
69819
69917
  schema: external_exports.object({
69820
69918
  taskId: external_exports.string().describe("Task ID from video generation"),
@@ -69845,6 +69943,8 @@ var init_generate2 = __esm({
69845
69943
  name: "generate_video_cancel",
69846
69944
  category: "generate",
69847
69945
  cost: "free",
69946
+ title: "Cancel Video Generation",
69947
+ annotations: { readOnly: false, openWorld: true },
69848
69948
  description: "Cancel a Runway video generation task.",
69849
69949
  schema: external_exports.object({
69850
69950
  taskId: external_exports.string().describe("Task ID to cancel")
@@ -69863,6 +69963,8 @@ var init_generate2 = __esm({
69863
69963
  name: "generate_video_extend",
69864
69964
  category: "generate",
69865
69965
  cost: "high",
69966
+ title: "Extend Generated Video",
69967
+ annotations: { readOnly: false, openWorld: true },
69866
69968
  description: "Extend video duration using Kling or Veo. Requires the video/operation ID from a previous generation.",
69867
69969
  schema: external_exports.object({
69868
69970
  videoId: external_exports.string().describe("Video ID (Kling) or operation name (Veo)"),
@@ -69938,6 +70040,8 @@ var init_storyboard2 = __esm({
69938
70040
  name: "storyboard_list",
69939
70041
  category: "storyboard",
69940
70042
  cost: "free",
70043
+ title: "List Storyboard Beats",
70044
+ annotations: { readOnly: true, openWorld: false },
69941
70045
  description: "List beats, ids, durations, and cue blocks from a project's STORYBOARD.md.",
69942
70046
  schema: projectDirSchema,
69943
70047
  async execute(args, ctx) {
@@ -69964,6 +70068,8 @@ var init_storyboard2 = __esm({
69964
70068
  name: "storyboard_validate",
69965
70069
  category: "storyboard",
69966
70070
  cost: "free",
70071
+ title: "Validate Storyboard",
70072
+ annotations: { readOnly: true, openWorld: false },
69967
70073
  description: "Validate STORYBOARD.md beat ids and cue blocks.",
69968
70074
  schema: projectDirSchema,
69969
70075
  async execute(args, ctx) {
@@ -69994,6 +70100,8 @@ var init_storyboard2 = __esm({
69994
70100
  name: "storyboard_get",
69995
70101
  category: "storyboard",
69996
70102
  cost: "free",
70103
+ title: "Get Storyboard Beat",
70104
+ annotations: { readOnly: true, openWorld: false },
69997
70105
  description: "Return one STORYBOARD.md beat as structured data.",
69998
70106
  schema: external_exports.object({
69999
70107
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
@@ -70016,6 +70124,8 @@ var init_storyboard2 = __esm({
70016
70124
  name: "storyboard_set",
70017
70125
  category: "storyboard",
70018
70126
  cost: "free",
70127
+ title: "Set Storyboard Cue",
70128
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
70019
70129
  description: "Set or unset one cue on one beat in STORYBOARD.md.",
70020
70130
  schema: external_exports.object({
70021
70131
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
@@ -70052,6 +70162,8 @@ var init_storyboard2 = __esm({
70052
70162
  name: "storyboard_move",
70053
70163
  category: "storyboard",
70054
70164
  cost: "free",
70165
+ title: "Reorder Storyboard Beat",
70166
+ annotations: { readOnly: false, openWorld: false },
70055
70167
  description: "Move one beat after another beat in STORYBOARD.md.",
70056
70168
  schema: external_exports.object({
70057
70169
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
@@ -70082,6 +70194,8 @@ var init_storyboard2 = __esm({
70082
70194
  name: "storyboard_revise",
70083
70195
  category: "storyboard",
70084
70196
  cost: "low",
70197
+ title: "Revise Storyboard with AI",
70198
+ annotations: { readOnly: false, openWorld: true },
70085
70199
  description: "Revise an existing STORYBOARD.md from a natural-language request. Reads project context, validates the revised storyboard, and writes unless dryRun is true.",
70086
70200
  schema: external_exports.object({
70087
70201
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
@@ -70113,6 +70227,8 @@ var init_storyboard2 = __esm({
70113
70227
  name: "plan",
70114
70228
  category: "storyboard",
70115
70229
  cost: "free",
70230
+ title: "Plan Build Cost and Stages",
70231
+ annotations: { readOnly: true, openWorld: false },
70116
70232
  description: "Read STORYBOARD.md and return the build plan, missing artifacts, provider needs, and estimated cost.",
70117
70233
  schema: external_exports.object({
70118
70234
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
@@ -70193,6 +70309,8 @@ var init_remix = __esm({
70193
70309
  name: "remix_highlights",
70194
70310
  category: "pipeline",
70195
70311
  cost: "low",
70312
+ title: "Extract Video Highlights",
70313
+ annotations: { readOnly: false, openWorld: true },
70196
70314
  description: "Extract highlight clips from a longer video using AI analysis. Requires OPENAI_API_KEY+ANTHROPIC_API_KEY or GOOGLE_API_KEY (with --use-gemini).",
70197
70315
  schema: external_exports.object({
70198
70316
  media: external_exports.string().describe("Path to the input video file"),
@@ -70226,6 +70344,8 @@ var init_remix = __esm({
70226
70344
  name: "remix_auto_shorts",
70227
70345
  category: "pipeline",
70228
70346
  cost: "medium",
70347
+ title: "Generate Auto Shorts",
70348
+ annotations: { readOnly: false, openWorld: true },
70229
70349
  description: "Automatically generate short-form content (Reels/TikTok/Shorts) from a longer video. Same API key requirements as remix_highlights.",
70230
70350
  schema: external_exports.object({
70231
70351
  video: external_exports.string().describe("Path to the input video file"),
@@ -70263,6 +70383,8 @@ var init_remix = __esm({
70263
70383
  name: "run",
70264
70384
  category: "pipeline",
70265
70385
  cost: "very-high",
70386
+ title: "Run YAML Pipeline",
70387
+ annotations: { readOnly: false, openWorld: true },
70266
70388
  surfaces: ["mcp"],
70267
70389
  description: "Execute a declarative YAML pipeline (Video as Code). Accepts either a file path or inline YAML. Supports dry-run, resume-from-checkpoint, and budget limits. Cost depends on the steps \u2014 use dryRun: true first to preview.",
70268
70390
  schema: external_exports.object({
@@ -70342,6 +70464,8 @@ var init_remix = __esm({
70342
70464
  name: "remix_regenerate_scene",
70343
70465
  category: "pipeline",
70344
70466
  cost: "high",
70467
+ title: "Regenerate Storyboard Scenes",
70468
+ annotations: { readOnly: false, openWorld: true },
70345
70469
  description: "Regenerate specific scenes against an existing storyboard.{yaml,json} on disk. Can regenerate video, image, or narration independently.",
70346
70470
  schema: external_exports.object({
70347
70471
  projectDir: external_exports.string().describe("Path to the project output directory containing storyboard.json"),
@@ -70386,6 +70510,8 @@ var init_detect2 = __esm({
70386
70510
  name: "detect_scenes",
70387
70511
  category: "detect",
70388
70512
  cost: "free",
70513
+ title: "Detect Scene Cuts",
70514
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
70389
70515
  description: "Detect scene changes in video using FFmpeg. No API key needed.",
70390
70516
  schema: external_exports.object({
70391
70517
  videoPath: external_exports.string().describe("Path to the input video file"),
@@ -70410,6 +70536,8 @@ var init_detect2 = __esm({
70410
70536
  name: "detect_silence",
70411
70537
  category: "detect",
70412
70538
  cost: "free",
70539
+ title: "Detect Silence Periods",
70540
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
70413
70541
  description: "Detect silence periods in audio/video using FFmpeg. No API key needed.",
70414
70542
  schema: external_exports.object({
70415
70543
  mediaPath: external_exports.string().describe("Path to the audio/video file"),
@@ -70431,6 +70559,8 @@ var init_detect2 = __esm({
70431
70559
  name: "detect_beats",
70432
70560
  category: "detect",
70433
70561
  cost: "free",
70562
+ title: "Detect Audio Beats",
70563
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
70434
70564
  description: "Detect beats in audio for music sync using FFmpeg loudness analysis. No API key needed.",
70435
70565
  schema: external_exports.object({
70436
70566
  audioPath: external_exports.string().describe("Path to the audio file"),
@@ -70504,6 +70634,8 @@ var init_timeline = __esm({
70504
70634
  name: "timeline_create",
70505
70635
  category: "timeline",
70506
70636
  cost: "free",
70637
+ title: "Create Timeline",
70638
+ annotations: { readOnly: false, openWorld: false },
70507
70639
  description: "Create a low-level timeline JSON file for FFmpeg-style editing",
70508
70640
  schema: external_exports.object({
70509
70641
  name: external_exports.string().describe("Timeline name or directory path"),
@@ -70534,6 +70666,8 @@ var init_timeline = __esm({
70534
70666
  name: "timeline_info",
70535
70667
  category: "timeline",
70536
70668
  cost: "free",
70669
+ title: "Get Timeline Info",
70670
+ annotations: { readOnly: true, openWorld: false },
70537
70671
  description: "Get information about a timeline JSON file. Legacy *.vibe.json files are supported.",
70538
70672
  schema: external_exports.object({
70539
70673
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
@@ -70561,6 +70695,8 @@ var init_timeline = __esm({
70561
70695
  name: "timeline_add_source",
70562
70696
  category: "timeline",
70563
70697
  cost: "free",
70698
+ title: "Add Source to Timeline",
70699
+ annotations: { readOnly: false, openWorld: false },
70564
70700
  description: "Add a media source (video, audio, image) to the timeline",
70565
70701
  schema: external_exports.object({
70566
70702
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70586,6 +70722,8 @@ var init_timeline = __esm({
70586
70722
  name: "timeline_add_clip",
70587
70723
  category: "timeline",
70588
70724
  cost: "free",
70725
+ title: "Add Clip to Timeline",
70726
+ annotations: { readOnly: false, openWorld: false },
70589
70727
  description: "Add a clip to the timeline from an existing source",
70590
70728
  schema: external_exports.object({
70591
70729
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70617,6 +70755,8 @@ var init_timeline = __esm({
70617
70755
  name: "timeline_split_clip",
70618
70756
  category: "timeline",
70619
70757
  cost: "free",
70758
+ title: "Split Clip",
70759
+ annotations: { readOnly: false, openWorld: false },
70620
70760
  description: "Split a clip at a specific time",
70621
70761
  schema: external_exports.object({
70622
70762
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70635,6 +70775,8 @@ var init_timeline = __esm({
70635
70775
  name: "timeline_trim_clip",
70636
70776
  category: "timeline",
70637
70777
  cost: "free",
70778
+ title: "Trim Clip",
70779
+ annotations: { readOnly: false, openWorld: false },
70638
70780
  description: "Trim a clip by adjusting its start or end",
70639
70781
  schema: external_exports.object({
70640
70782
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70654,6 +70796,8 @@ var init_timeline = __esm({
70654
70796
  name: "timeline_move_clip",
70655
70797
  category: "timeline",
70656
70798
  cost: "free",
70799
+ title: "Move Clip",
70800
+ annotations: { readOnly: false, openWorld: false },
70657
70801
  description: "Move a clip to a new position or track",
70658
70802
  schema: external_exports.object({
70659
70803
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70676,6 +70820,8 @@ var init_timeline = __esm({
70676
70820
  name: "timeline_delete_clip",
70677
70821
  category: "timeline",
70678
70822
  cost: "free",
70823
+ title: "Delete Clip",
70824
+ annotations: { readOnly: false, openWorld: false },
70679
70825
  description: "Delete a clip from the timeline",
70680
70826
  schema: external_exports.object({
70681
70827
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70692,6 +70838,8 @@ var init_timeline = __esm({
70692
70838
  name: "timeline_duplicate_clip",
70693
70839
  category: "timeline",
70694
70840
  cost: "free",
70841
+ title: "Duplicate Clip",
70842
+ annotations: { readOnly: false, openWorld: false },
70695
70843
  description: "Duplicate a clip on the timeline (optionally at a new start time)",
70696
70844
  schema: external_exports.object({
70697
70845
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70710,6 +70858,8 @@ var init_timeline = __esm({
70710
70858
  name: "timeline_add_effect",
70711
70859
  category: "timeline",
70712
70860
  cost: "free",
70861
+ title: "Add Effect to Clip",
70862
+ annotations: { readOnly: false, openWorld: false },
70713
70863
  description: "Add an effect to a clip",
70714
70864
  schema: external_exports.object({
70715
70865
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70736,6 +70886,8 @@ var init_timeline = __esm({
70736
70886
  name: "timeline_add_track",
70737
70887
  category: "timeline",
70738
70888
  cost: "free",
70889
+ title: "Add Track to Timeline",
70890
+ annotations: { readOnly: false, openWorld: false },
70739
70891
  description: "Add a new track to the timeline",
70740
70892
  schema: external_exports.object({
70741
70893
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -70762,6 +70914,8 @@ var init_timeline = __esm({
70762
70914
  name: "timeline_list",
70763
70915
  category: "timeline",
70764
70916
  cost: "free",
70917
+ title: "List Timeline Contents",
70918
+ annotations: { readOnly: true, openWorld: false },
70765
70919
  description: "List all sources, tracks, and clips in a project",
70766
70920
  schema: external_exports.object({
70767
70921
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
@@ -70812,6 +70966,8 @@ var init_project2 = __esm({
70812
70966
  name: "project_create",
70813
70967
  category: "project",
70814
70968
  cost: "free",
70969
+ title: "Create Project",
70970
+ annotations: { readOnly: false, openWorld: false },
70815
70971
  description: "Deprecated alias for creating low-level timeline state. Prefer timeline_create.",
70816
70972
  schema: external_exports.object({
70817
70973
  name: external_exports.string().describe("Project name"),
@@ -70836,6 +70992,8 @@ var init_project2 = __esm({
70836
70992
  name: "project_info",
70837
70993
  category: "project",
70838
70994
  cost: "free",
70995
+ title: "Get Project Info",
70996
+ annotations: { readOnly: true, openWorld: false },
70839
70997
  description: "Deprecated alias for timeline_info. Legacy *.vibe.json files remain supported.",
70840
70998
  schema: external_exports.object({
70841
70999
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
@@ -71735,6 +71893,8 @@ var init_export2 = __esm({
71735
71893
  name: "export_video",
71736
71894
  category: "export",
71737
71895
  cost: "free",
71896
+ title: "Export Timeline to Video",
71897
+ annotations: { readOnly: false, openWorld: false },
71738
71898
  description: "Export a VibeFrame timeline to a video file (MP4, WebM, or MOV). Requires FFmpeg.",
71739
71899
  schema: external_exports.object({
71740
71900
  projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
@@ -71834,6 +71994,8 @@ var init_agent_only = __esm({
71834
71994
  name: "fs_list",
71835
71995
  category: "agent-only",
71836
71996
  cost: "free",
71997
+ title: "List Files",
71998
+ annotations: { readOnly: true, openWorld: false },
71837
71999
  surfaces: ["agent"],
71838
72000
  description: "List files and directories in a path",
71839
72001
  schema: external_exports.object({
@@ -71867,6 +72029,8 @@ var init_agent_only = __esm({
71867
72029
  name: "fs_read",
71868
72030
  category: "agent-only",
71869
72031
  cost: "free",
72032
+ title: "Read File",
72033
+ annotations: { readOnly: true, openWorld: false },
71870
72034
  surfaces: ["agent"],
71871
72035
  description: "Read contents of a text file",
71872
72036
  schema: external_exports.object({
@@ -71889,6 +72053,8 @@ var init_agent_only = __esm({
71889
72053
  name: "fs_write",
71890
72054
  category: "agent-only",
71891
72055
  cost: "free",
72056
+ title: "Write File",
72057
+ annotations: { readOnly: false, openWorld: false },
71892
72058
  surfaces: ["agent"],
71893
72059
  description: "Write content to a file",
71894
72060
  schema: external_exports.object({
@@ -71909,6 +72075,8 @@ var init_agent_only = __esm({
71909
72075
  name: "fs_exists",
71910
72076
  category: "agent-only",
71911
72077
  cost: "free",
72078
+ title: "Check Path Exists",
72079
+ annotations: { readOnly: true, openWorld: false },
71912
72080
  surfaces: ["agent"],
71913
72081
  description: "Check if a file or directory exists",
71914
72082
  schema: external_exports.object({
@@ -71930,6 +72098,8 @@ var init_agent_only = __esm({
71930
72098
  name: "batch_import",
71931
72099
  category: "agent-only",
71932
72100
  cost: "free",
72101
+ title: "Batch Import Media",
72102
+ annotations: { readOnly: false, openWorld: false },
71933
72103
  surfaces: ["agent"],
71934
72104
  description: "Import multiple media files from a directory into a project. Scans directory for video, audio, and image files.",
71935
72105
  schema: external_exports.object({
@@ -71999,6 +72169,8 @@ var init_agent_only = __esm({
71999
72169
  name: "batch_concat",
72000
72170
  category: "agent-only",
72001
72171
  cost: "free",
72172
+ title: "Batch Concatenate Sources",
72173
+ annotations: { readOnly: false, openWorld: false },
72002
72174
  surfaces: ["agent"],
72003
72175
  description: "Concatenate multiple sources into sequential clips on the timeline",
72004
72176
  schema: external_exports.object({
@@ -72068,6 +72240,8 @@ var init_agent_only = __esm({
72068
72240
  name: "batch_apply_effect",
72069
72241
  category: "agent-only",
72070
72242
  cost: "free",
72243
+ title: "Batch Apply Effect",
72244
+ annotations: { readOnly: false, openWorld: false },
72071
72245
  surfaces: ["agent"],
72072
72246
  description: "Apply an effect to multiple clips at once",
72073
72247
  schema: external_exports.object({
@@ -72124,6 +72298,8 @@ var init_agent_only = __esm({
72124
72298
  name: "timeline_clear",
72125
72299
  category: "agent-only",
72126
72300
  cost: "free",
72301
+ title: "Clear Timeline",
72302
+ annotations: { readOnly: false, openWorld: false },
72127
72303
  surfaces: ["agent"],
72128
72304
  description: "Clear timeline contents (remove clips, tracks, or sources)",
72129
72305
  schema: external_exports.object({
@@ -72198,6 +72374,8 @@ var init_agent_only = __esm({
72198
72374
  name: "project_set",
72199
72375
  category: "agent-only",
72200
72376
  cost: "free",
72377
+ title: "Update Project Settings",
72378
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
72201
72379
  surfaces: ["agent"],
72202
72380
  description: "Update timeline settings (name, aspect ratio, frame rate)",
72203
72381
  schema: external_exports.object({
@@ -72243,6 +72421,8 @@ var init_agent_only = __esm({
72243
72421
  name: "project_open",
72244
72422
  category: "agent-only",
72245
72423
  cost: "free",
72424
+ title: "Open Project",
72425
+ annotations: { readOnly: false, idempotent: true, openWorld: false },
72246
72426
  surfaces: ["agent"],
72247
72427
  description: "Open an existing project and set it as the current context",
72248
72428
  schema: external_exports.object({
@@ -72281,6 +72461,8 @@ var init_agent_only = __esm({
72281
72461
  name: "project_save",
72282
72462
  category: "agent-only",
72283
72463
  cost: "free",
72464
+ title: "Save Project",
72465
+ annotations: { readOnly: false, openWorld: false },
72284
72466
  surfaces: ["agent"],
72285
72467
  description: "Save the current project (uses ctx.agent.projectPath if no path given)",
72286
72468
  schema: external_exports.object({
@@ -72315,6 +72497,8 @@ var init_agent_only = __esm({
72315
72497
  name: "export_audio",
72316
72498
  category: "agent-only",
72317
72499
  cost: "free",
72500
+ title: "Export Audio",
72501
+ annotations: { readOnly: false, openWorld: false },
72318
72502
  surfaces: ["agent"],
72319
72503
  description: "Export audio track from a project. Not implemented \u2014 use export_video then strip audio with FFmpeg.",
72320
72504
  schema: external_exports.object({
@@ -72333,6 +72517,8 @@ var init_agent_only = __esm({
72333
72517
  name: "export_subtitles",
72334
72518
  category: "agent-only",
72335
72519
  cost: "free",
72520
+ title: "Export Subtitles",
72521
+ annotations: { readOnly: false, openWorld: false },
72336
72522
  surfaces: ["agent"],
72337
72523
  description: "Export subtitles from transcription. Not implemented \u2014 use audio_transcribe to generate subtitles from audio.",
72338
72524
  schema: external_exports.object({
@@ -72351,6 +72537,8 @@ var init_agent_only = __esm({
72351
72537
  name: "media_info",
72352
72538
  category: "agent-only",
72353
72539
  cost: "free",
72540
+ title: "Get Media Info",
72541
+ annotations: { readOnly: true, openWorld: false },
72354
72542
  surfaces: ["agent"],
72355
72543
  description: "Get information about a media file (duration, resolution, codec, etc.)",
72356
72544
  schema: external_exports.object({
@@ -72435,6 +72623,8 @@ Audio:`);
72435
72623
  name: "media_compress",
72436
72624
  category: "agent-only",
72437
72625
  cost: "free",
72626
+ title: "Compress Media",
72627
+ annotations: { readOnly: false, openWorld: false },
72438
72628
  surfaces: ["agent"],
72439
72629
  description: "Compress a video or audio file using FFmpeg",
72440
72630
  schema: external_exports.object({
@@ -72496,6 +72686,8 @@ Audio:`);
72496
72686
  name: "media_convert",
72497
72687
  category: "agent-only",
72498
72688
  cost: "free",
72689
+ title: "Convert Media",
72690
+ annotations: { readOnly: false, openWorld: false },
72499
72691
  surfaces: ["agent"],
72500
72692
  description: "Convert media file to a different format using FFmpeg",
72501
72693
  schema: external_exports.object({
@@ -72543,6 +72735,8 @@ Audio:`);
72543
72735
  name: "media_concat",
72544
72736
  category: "agent-only",
72545
72737
  cost: "free",
72738
+ title: "Concatenate Media Files",
72739
+ annotations: { readOnly: false, openWorld: false },
72546
72740
  surfaces: ["agent"],
72547
72741
  description: "Concatenate multiple media files into one using FFmpeg",
72548
72742
  schema: external_exports.object({
@@ -72643,6 +72837,8 @@ var init_walkthrough = __esm({
72643
72837
  name: "guide",
72644
72838
  category: "agent",
72645
72839
  cost: "free",
72840
+ title: "Load Workflow Guide",
72841
+ annotations: { readOnly: true, openWorld: false },
72646
72842
  description: "Load the step-by-step guide for a vibe workflow (motion overlays, BUILD scene authoring, YAML pipeline authoring, architecture choices). Universal CLI-equivalent of `vibe guide <topic>` and Claude Code's /vibe-* slash commands. Without a topic, returns the guide catalog for discovery.",
72647
72843
  schema: guideSchema,
72648
72844
  async execute(args) {
@@ -72686,6 +72882,8 @@ var init_status = __esm({
72686
72882
  name: "status_job",
72687
72883
  category: "status",
72688
72884
  cost: "free",
72885
+ title: "Check Job Status",
72886
+ annotations: { readOnly: false, destructive: false, openWorld: true },
72689
72887
  description: "Read one local async job record and optionally refresh supported provider status. Supports Runway/Kling video and Replicate music live checks. Also tracks long-running MCP build/render jobs (jobType build/render, provider local): their records are updated in-process \u2014 on completion result.payload carries the full tool result; status 'unknown' means the MCP server restarted mid-job (check build-report.json / render-report.json on disk).",
72690
72888
  schema: external_exports.object({
72691
72889
  jobId: external_exports.string().describe("Local job id returned by a no-wait command."),
@@ -72721,6 +72919,8 @@ var init_status = __esm({
72721
72919
  name: "status_project",
72722
72920
  category: "status",
72723
72921
  cost: "free",
72922
+ title: "Check Project Status",
72923
+ annotations: { readOnly: false, destructive: false, openWorld: true },
72724
72924
  description: "Summarize build-report.json, review-report.json, and local async job records for a VibeFrame project.",
72725
72925
  schema: external_exports.object({
72726
72926
  projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION4),
@@ -73013,7 +73213,7 @@ init_source();
73013
73213
  // package.json
73014
73214
  var package_default = {
73015
73215
  name: "@vibeframe/cli",
73016
- version: "0.110.0",
73216
+ version: "0.111.1",
73017
73217
  description: "VibeFrame CLI - agentic video workflow runtime",
73018
73218
  private: false,
73019
73219
  license: "MIT",