name: cut-story description: Esta habilidad se usa cuando el usuario pide decidir de qué trata realmente el video antes de cualquier corte mecánico — "bau die Story", "was soll ins Video", "was kann raus", "welche Themen bleiben", "kürz das auf 6 Minuten", "mach daraus ein kurzes Video", "wo ist der Hook", "sortier die Themen", "worum geht es hier eigentlich", "build the story", "decide what stays", "structure this", "cut this down to N minutes", "find the hook", "reorder the topics". Es el pase de selección de CONTENIDO que escribe el bloque "story" en project.json; se ejecuta después de transcribir y antes del corte bruto. argument-hint: [project-slug] [target-minutes] arguments: [project, target]
cut-story
Decide de qué trata el video realmente. El corte mecánico solo ajusta lo dicho en el orden en que se dijo; este pase decide qué bloques temáticos sobreviven, en qué orden y dónde está el gancho. Es la única etapa que puede convertir una divagación de 25 minutos en un video de 6 minutos, y es la etapa que más determina si alguien lo mira.
Argumentos: $project es el slug del proyecto, $target una duración objetivo opcional en minutos. El texto completo de la solicitud está en $ARGUMENTS. Si no se proporciona slug, usa el proyecto nombrado en PIPELINE_STATE del hook de sesión y di cuál elegiste.
Los nombres de verbo a continuación siguen el contrato de compilación. Si python engine/ve.py --help discrepa, la CLI tiene prioridad — usa sus nombres y menciona la discrepancia.
Precondiciones
projects/$project/project.jsonexiste constageentranscribedo posterior.transcript.pathse resuelve ytranscript.word_countestá establecido.- Si
stagetodavía está enintake, detente y ejecuta primero la habilidad de transcripción.
Nunca ejecutes este pase dos veces en silencio. Si story.blocks ya existe, muestra las decisiones actuales primero y pregunta si revisar o reemplazar.
Paso 1 — obtener una transcripción legible
El JSON a nivel de palabras es prosa ilegible. Aplánalo primero:
python engine/ve.py transcript flatten $project --numbered
Esto emite las palabras como texto corrido con un marcador de índice cada 25 palabras. Los índices de palabras son los anclajes que almacena el bloque story — nunca almacenes segundos, nunca almacenes códigos de tiempo.
Paso 2 — enviar transcript-analyst cuando la transcripción es larga
Si word_count > 2500 (aproximadamente 15 minutos de habla en alemán), envía al agente transcript-analyst en lugar de leer la transcripción en línea.
Por qué: una transcripción de 5,000 palabras consume el contexto que necesitas para el resto de la sesión, y el analista devuelve aproximadamente 40 líneas. Leerlo tú mismo también te sesga — después de haber leído cada frase, todo parece importante. Un contexto fresco corta más fuerte, que es lo correcto.
Dale al agente: la ruta de la transcripción aplanada, la duración objetivo, la plataforma de output.platform, y cualquier dirección que el usuario haya dado en $ARGUMENTS. Devuelve bloques candidatos con decisiones y fundamentos. Tú sigues siendo el responsable de la decisión final — revisa sus descartes, y anula cualquier descarte que el usuario haya pedido explícitamente mantener.
Por debajo de 2500 palabras, lee la transcripción tú mismo.
Paso 3 — nombrar el video en una oración
Antes de cualquier decisión sobre bloques, escribe una oración en alemán que diga qué cree el espectador al final que no creía al principio. Muéstrasela al usuario.
Si esa oración no se puede escribir, el material aún no contiene un video. Dilo claramente y detente — recomienda una grabación de recuperación en lugar de ensamblar algo informe. Este es un resultado real y entregarlo honestamente es más útil que un video limpio de 6 minutos que no dice nada.
Cada decisión posterior responde a esa oración.
Paso 4 — dividir la transcripción en bloques
Un bloque es una unidad de significado que sobrevive al ser movida: de 30 segundos a 3 minutos, un punto. Los bloques son rangos de palabras contiguos que cubren la transcripción sin espacios ni superposiciones.
No cortes bloques en las pausas. Córtalos donde cambie el tema — las propias señales del hablante son fiables en alemán: also, jetzt zum Thema, das andere ist, kurz noch, um nochmal zurückzukommen, was viele nicht wissen.
Paso 5 — decidir, con tendencia a descartar
Expectativa por defecto: descarta el 40-60% de las palabras grabadas. Si sobrevive más del 70% del material, no se ha tomado ninguna decisión — vuelve atrás y aplica las pruebas de descarte con más rigor.
Pruebas de descarte, aplicadas en orden:
- La prueba de creencia. Elimina el bloque. ¿Cambia lo que el espectador cree al final? Si no, descártalo. Esta es la prueba principal; el resto son atajos hacia ella.
- La prueba del segundo ejemplo. Dos ejemplos del mismo punto: conserva el más concreto, descarta el otro. Los hablantes se repiten para pensar, no para enseñar.
- La prueba del huérfano. La preparación para una recompensa que fue descartada ahora es ruido. Descártala, y vuelve a verificar después de cada otro descarte — los huérfanos aparecen en cascadas.
- La prueba del calentamiento. Los primeros 60-90 segundos de casi cualquier grabación son un calentamiento. Descartarlos por defecto y dile al usuario que lo hiciste. Esta única regla mejora más videos que todas las eliminaciones de muletillas combinadas.
- La prueba del resumen. Los resúmenes hablados de lo que se acaba de decir ("also nochmal kurz zusammengefasst") son una muletilla al hablar, no una estructura. Descarta a menos que el video sea genuinamente instructivo y largo.
Señales para conservar, las más fuertes primero: un número, un nombre, una fecha, un error específico que el hablante admite, un ejemplo trabajado concreto. La especificidad es la señal más fuerte para conservar que existe. El marco abstracto es barato y se puede volver a grabar en diez segundos; una anécdota específica no.
Usa "decision": "maybe" para bloques cuyo destino depende de la duración final. Mantén maybe por debajo del 20% de los bloques — más allá de eso es indecisión, no matiz, y el usuario tiene que hacer el trabajo que se te pidió.
Si $target está establecido, haz una comprobación de cordura: suma los conteos de palabras de los bloques conservados y divide por la tasa medida del hablante (word_count / duración de la fuente en minutos). Informa la estimación antes de escribir nada. El habla de una persona frente a cámara en alemán va aproximadamente a 130-160 palabras por minuto.
Paso 6 — encontrar el gancho
El gancho casi nunca está al inicio de la grabación. La gente llega a su punto real tarde, después de haberse calentado y dejar de actuar.
Busca primero en el último tercio. Busca: una afirmación que suene incorrecta hasta que se explique, un número que sea más grande o más pequeño de lo esperado, un fracaso admitido, una apuesta ("das hat mich zwei Wochen gekostet"). Elige 15-25 segundos — una o dos oraciones, no un párrafo.
Escríbelo como story.hook con un word_range y una note en alemán que explique por qué se movió. Mover el gancho al inicio es la única reordenación que casi siempre es correcta.
Paso 7 — ordenar, y solo reordenar cuando puedas nombrar la razón
Hay exactamente dos razones legítimas para reordenar:
- El gancho va al inicio.
- Un bloque responde a una pregunta que plantea un bloque posterior, por lo que debe precederlo.
Todo lo demás mantiene el orden de grabación. Reordenar material hablado rompe referencias hacia atrás, y no notarás la ruptura hasta el renderizado — momento en el que ya se han ejecutado tres etapas.
Verificación de integridad de referencias, obligatoria para cada bloque movido. Vuelve a leer las dos primeras oraciones del bloque movido en busca de referencias hacia atrás. En alemán, estas se rompen silenciosamente: also, deswegen, deshalb, dadurch, dabei, wie gesagt, das, dieser/diese/dieses, außerdem, trotzdem, andererseits, wie eben erwähnt. Si un bloque movido comienza con una de ellas, comienza el bloque una oración después, o márcalo como maybe y dile al usuario que necesita una línea de transición. No lo muevas y esperes que funcione.
Paso 8 — escribir el bloque story
Escribe story.blocks[] y story.hook en projects/$project/project.json exactamente como lo define el esquema en docs/edl-schema.md: id, word_range (semiabierto, en índices de palabras), label (en alemán), decision (keep|drop|maybe), order (orden de salida, puede diferir del orden de grabación), rationale.
Reglas que no son negociables:
- Nada se elimina. Un bloque descartado permanece en el array con
"decision": "drop". Cada decisión debe ser reversible cambiando un solo campo. El usuario estará en desacuerdo con algunos de tus descartes y debe poder deshacerlos sin volver a ejecutar el pase. rationalees una cláusula en alemán y dice POR QUÉ, no QUÉ. "trägt das kernargument" es útil; "spricht über Frame-Snapping" es una etiqueta, no una razón.orderes denso sobre los bloques conservados comenzando en 0. Los bloques descartados obtienen su índice de orden de grabación; son inertes pero no deben colisionar.- Establece
stageen"story". No toquessegments[]— ese es territorio de cut-rough.
Luego muéstrale al usuario una tabla compacta: orden, etiqueta, decisión, minutos estimados. Esa tabla es el entregable, no el JSON.
Paso 9 — entregar
Di explícitamente que el corte mecánico ahora se ejecutará solo dentro de los bloques conservados, lo cual es tanto correcto como más eficiente — la detección de muletillas y retomas sobre material que está a punto de ser descartado es trabajo desperdiciado. Luego ofrece la habilidad cut-rough.
Modos de fallo
| Síntoma | Causa | Solución |
|---|---|---|
| Todo parece esencial | Leer la transcripción en línea cuando era larga | Envía a transcript-analyst; un contexto fresco corta más fuerte |
| Se conservó el 85% del material | No se tomó ninguna decisión editorial | Vuelve a aplicar la prueba de creencia a cada bloque |
| El video salta de manera extraña después de reordenar | Referencia hacia atrás rota | Ejecuta la verificación del Paso 7 en cada bloque movido |
word_range tiene espacios o superposiciones | Los bloques no cubren la transcripción | Los bloques deben ser contiguos y semiabiertos |
| El usuario rechaza la mayoría de los descartes | Oración incorrecta en el Paso 3 | Reescribe la tesis de una oración con el usuario, luego rehaz |