Skip to main content
Glama

speech_overlap

Read-onlyIdempotent

Check if placing a clip at a proposed timeline position would overlap voice-over speech, before designing audio ducking. Identifies clean gaps wide enough for the clip to speak without touching the VO, using transcript or energy evidence.

Instructions

Does a proposed placement of clip_id overlap the VO's speech?

The prerequisite check behind "can this clip speak here?" — answer it before designing any ducking. at/clip_in/clip_out describe where clip_id would sit on the timeline (defaults: unplaced at 0, its whole duration) — the clip need not be on the timeline yet, and usually isn't, since the current model is single-track. VO's own words map through the existing edit (Edit.timeline_span); clip_id's map by offsetting into the proposed window instead. Both sides are trimmed with energy.believable first — an inflated word duration can hide a real seam — then merged into speech runs with max_gap tolerance, since a 0.05s gap is not a usable seam.

Read overlaps first: any entry means placing clip_id there would step on VO speech, not empty air — this caught exactly that on Billy/Stu, where the clip's speech nearly fully covered a VO thesis line with no clean seam to duck into. clean_seams (>= min_seam wide) are the windows where clip_id could speak without touching the VO. Read-only — nothing is written, and there is no plan=.

clip_id need not have a transcript. Without one the clip side is its energy envelope — runs of sound, reported as sound rather than speech (a sting or a swell counts too) — and clip_evidence in the result says "energy" so the reading is not mistaken for a word-level one. Pass clip_evidence="transcript" to refuse instead, or "energy" to force the envelope on a clip that has a transcript. The VO always needs its transcript.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
atNoWhere the clip would sit on the timeline, in seconds.
capNoHow far a word's claimed duration is trusted, as a multiple of the median. Whisper inflates the word after a collapsed retake until it covers the second take, so believing the claim masks exactly the hole being looked for — 3x is the same multiple a suspect duration is flagged at.
pathNoThe project directory to act on. Omit it — the usual case — when this server is bound to a project (started as `proofcut -C DIR mcp`, or inside a project; `ping` says which): it then resolves to that one bound project, a relative path resolves against it, and a path outside it is refused by name. Unbound, `path` is the whole address and omitting it refuses rather than guessing.
clip_idYesThe clip whose placement is being proposed. It need not be on the timeline yet, and usually is not.
clip_inNoWhere inside the clip the proposed placement starts, in its own source seconds. Unset, its head.
max_gapNoHow short a silence may be and still be swallowed into one speech run, in seconds — a 0.05s gap is not a usable seam.
clip_outNoWhere it ends, in the clip's own source seconds. Unset, its end.
min_seamNoHow wide a gap has to be to be reported as a `clean_seam`, in seconds.
vo_clip_idNoWhich transcript is the VO. Unset, the project's own. The VO always needs a transcript; the placed clip does not.
clip_evidenceNo`auto` (the default) uses the clip's transcript if it has one and its energy envelope otherwise, saying which in the result. `transcript` refuses a clip with none; `energy` forces the envelope even on a clip that has one — sound rather than speech, which counts a sting or a swell too.auto

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed29 schema fields changedv0.25.0
    • addedInput schema / properties / at / description
      Added value: +"Where the clip would sit on the timeline, in seconds."
    • removedInput schema / properties / at / title
      Removed value: -"At"
    • addedInput schema / properties / cap / description
      Added value: +"How far a word's claimed duration is trusted, as a multiple of the median. Whisper inflates the word after a collapsed retake until it covers the second take, so believing the claim masks exactly the hole being looked for — 3x is the same multiple a suspect duration is flagged at."
    • removedInput schema / properties / cap / title
      Removed value: -"Cap"
    • addedInput schema / properties / clip_evidence / description
      Added value: +"`auto` (the default) uses the clip's transcript if it has one and its energy envelope otherwise, saying which in the result. `transcript` refuses a clip with none; `energy` forces the envelope even on a clip that has one — sound rather than speech, which counts a sting or a swell too."
    • removedInput schema / properties / clip_evidence / title
      Removed value: -"Clip Evidence"
    • addedInput schema / properties / clip_id / description
      Added value: +"The clip whose placement is being proposed. It need not be on the timeline yet, and usually is not."
    • removedInput schema / properties / clip_id / title
      Removed value: -"Clip Id"
    • removedInput schema / properties / clip_in / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / clip_in / description
      Added value: +"Where inside the clip the proposed placement starts, in its own source seconds. Unset, its head."
    • removedInput schema / properties / clip_in / title
      Removed value: -"Clip In"
    • addedInput schema / properties / clip_in / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedInput schema / properties / clip_out / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / clip_out / description
      Added value: +"Where it ends, in the clip's own source seconds. Unset, its end."
    • removedInput schema / properties / clip_out / title
      Removed value: -"Clip Out"
    • addedInput schema / properties / clip_out / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • addedInput schema / properties / max_gap / description
      Added value: +"How short a silence may be and still be swallowed into one speech run, in seconds — a 0.05s gap is not a usable seam."
    • removedInput schema / properties / max_gap / title
      Removed value: -"Max Gap"
    • addedInput schema / properties / min_seam / description
      Added value: +"How wide a gap has to be to be reported as a `clean_seam`, in seconds."
    • removedInput schema / properties / min_seam / title
      Removed value: -"Min Seam"
    • removedInput schema / properties / path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / path / description
      Added value: +"The project directory to act on. Omit it — the usual case — when this server is bound to a project (started as `proofcut -C DIR mcp`, or inside a project; `ping` says which): it then resolves to that one bound project, a relative path resolves against it, and a path outside it is refused by name. Unbound, `path` is the whole address and omitting it refuses rather than guessing."
    • removedInput schema / properties / path / title
      Removed value: -"Path"
    • addedInput schema / properties / path / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / vo_clip_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / vo_clip_id / description
      Added value: +"Which transcript is the VO. Unset, the project's own. The VO always needs a transcript; the placed clip does not."
    • removedInput schema / properties / vo_clip_id / title
      Removed value: -"Vo Clip Id"
    • addedInput schema / properties / vo_clip_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / title
      Removed value: -"speech_overlapArguments"
  2. First observedv0.24.0

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: it explains the trimming with `energy.believable`, the merging into speech runs with `max_gap` tolerance, and the read-only nature ('nothing is written, and there is no `plan=`'). It also discloses the fallback behavior when `clip_id` lacks a transcript, which is a meaningful behavioral trait not visible in the schema. Minor gap: it doesn't describe the exact result shape beyond `overlaps`, `clean_seams`, and `clip_evidence`, but the output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every paragraph earns its place: the first paragraph states the core question and the mapping logic, the second explains the output semantics and the real-world catch, the third covers the transcript/energy fallback. It is front-loaded with the purpose and read-only note. It loses one point for density—some sentences are packed with domain jargon ('energy.believable', 'speech runs', 'seam') that could be tightened—but it is not bloated or repetitive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 10-parameter tool with an output schema, the description is remarkably complete. It explains the default placement semantics, the single-track model assumption, the trimming and merging pipeline, the meaning of `overlaps` and `clean_seams`, the transcript/energy fallback, and the read-only guarantee. The output schema covers return values, so the description doesn't need to enumerate them. An agent has everything needed to decide when to call this tool and how to interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the conceptual role of `at`/`clip_in`/`clip_out` as describing where `clip_id` would sit on the timeline, and how the clip's words map by offsetting into the proposed window. It also explains the rationale behind `max_gap` ('a 0.05s gap is not a usable seam') and `cap` (Whisper inflation), which the schema descriptions only hint at. It doesn't restate every parameter, but it adds interpretive context that helps an agent choose values correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a direct question—'Does a proposed placement of `clip_id` overlap the VO's speech?'—which precisely states the tool's verb, resource, and purpose. It distinguishes itself from siblings by framing it as the prerequisite check behind 'can this clip speak here?' and explicitly notes it is read-only with no `plan=`, separating it from planning or editing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'answer it before designing any ducking.' It also explains the clip need not be on the timeline yet and usually isn't, since the current model is single-track. It clarifies when to pass `clip_evidence` values ('Pass `clip_evidence="transcript"` to refuse instead, or `"energy"` to force the envelope'), and notes the VO always needs a transcript. This is strong routing and exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.