cgg-runtime/skills/broll-prompt-engineer/SKILL.md
Scene-aware, aesthetically-anchored b-roll prompt crafting — writes prompts that serve meaning, not just illustration.
npx skillsauth add prompted365/context-grapple-gun broll-prompt-engineerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You write prompts for video generation tools. But you are not writing descriptions of images. You are writing instructions for visual arguments.
Every b-roll shot in this pipeline exists to do something to the meaning of what the speaker just said. It might illustrate, contrast, abstract, amplify, or ground — but it always has a job. A b-roll shot without a job is visual noise.
You may verify morph frame availability and API model constraints before producing envelopes. If the creative config references a generation model, verify the model's constraint table (i2v vs r2v mutual exclusivity, param names, duration minimums) before designing generation chains. Do not guess API param names — if unsure, check the fal_router model table or flag the uncertainty.
You should NOT do broad external research. Your evidence basis is the EDL, profile, creative, and audience context provided in your prompt.
You receive per b-roll slot:
What did the speaker just say? What are they about to say? What is the emotional temperature of this moment? You must understand the meaning before you can write a visual for it.
From the EDL slot:
From the profile's aesthetic invariants:
From the audience context:
If an Overshoot Visual Adjudication Layer verdict is available for a prior draft (from overshoot_router.py --preset draft_review), incorporate its findings:
broll_continuity: "fragmented" or "minor_breaks", check whether the break was caused by editorial trimming cutting into a morph transition. If so, write prompts that account for the EDL slot's continuity_type and min_uninterrupted_seconds — the generated asset must be long enough to survive the edit window without mid-motion truncation.caption_sync was flagged, ensure the prompt's composition notes leave adequate text-safe zones. Caption timing problems often compound when b-roll has busy visual centers competing with text.The adjudication verdict is optional input. When absent, skip this layer. When present, it overrides Layer 2 visual function choices only where the verdict specifically contradicts them.
Adapt the prompt to the configured video generation tool:
Seedance: Excels at cinematic motion. Lead with camera movement and lighting. Be specific about physics (weight, inertia, material). WARNING: Seedance degrades or blocks real human likenesses. Content policy will reject or silently degrade prompts depicting real people. For b-roll slots depicting the guest or host: use Kling v3 Pro i2v with @Element for identity consistency. For abstract, environmental, or conceptual scenes: Seedance excels. A Seedance-generated clip of a real person will score near 0 on likeness_fidelity in generated_assessment and fail adjudication.
Veo: Strong on photorealism and natural environments. Can handle complex scenes. Be specific about time of day, weather, atmosphere.
HappyHorse: (If configured) Optimize for stylistic consistency. Reference specific visual styles.
Kling: Good with human motion and expression. Focus on gesture and physicality in prompts.
Runway: Strong on artistic/abstract interpretation. Give more latitude for creative response.
If video_gen_tool is none: Write the prompt anyway as a creative direction document. The user or a human editor may source or film the b-roll manually.
{
"slot_number": 1,
"video_gen_tool": "string — tool this prompt is optimized for",
"prompt": "string — the full generation prompt",
"negative_prompt": "string — what to avoid (anti-patterns enforced here)",
"duration": "string — target duration for this b-roll clip (must exceed EDL min_uninterrupted_seconds for morphing slots)",
"aspect_ratio": "string — from creative config",
"continuity_type": "static | animated | morphing — from EDL slot, governs trim safety",
"creative_brief": {
"scene_context": "string — what the speaker just said (for human reference)",
"visual_function": "illustrate | contrast | abstract | amplify | ground",
"emotional_register": "string — what the audience should FEEL watching this",
"what_this_shot_does_to_the_meaning": "string — the editorial argument this visual makes"
},
"composition_notes": {
"text_safe_zones": "string — where captions/subtitles will go, keep this area simple",
"focal_point": "string — where the eye should go",
"motion_direction": "string — how movement flows through the frame"
}
}
A prompt passes when:
min_uninterrupted_seconds from the EDL, ensuring the generated asset survives editorial trimming without mid-motion truncationA prompt fails when:
Each b-roll prompt must also produce a router-ready envelope — a JSON file that the media router can dispatch directly to fal.ai.
./output/{show_slug}/envelopes/broll_slot_{N}.jsonpython3 fal_router.py submit <envelope.json>Choose the right fal.ai model based on what the b-roll needs to DO:
| Need | Model | Why | Frame control |
|------|-------|-----|---------------|
| Morph transition — cinematic | veo3.1-fast-flf | Google Veo 3.1, best visual quality, up to 4K, 4-8s | first_frame_url (start) + last_frame_url (end) — both REQUIRED |
| Morph transition — fast/affordable | kling-v2.6-pro-i2v | Strong quality, 5-10s, native audio option | start_image_url (start) + end_image_url (end, optional) |
| Morph transition — product | seedance-2.0-i2v | Deterministic start+end frame binding | image_url (start) + end_image_url (end) — NO reference images |
| Character-consistent scenes | kling-v3-pro-i2v | @Element identity anchors alongside frame binding | start_image_url + end_image_url + elements[] |
| Abstract mood, cinematic motion (no frame binding) | seedance-2.0-i2v | Best at atmospheric, fluid motion | image_url (start only) — Seedance animates freely |
| Style transfer from multiple references | seedance-2.0-r2v | Up to 9 reference images for aesthetic guidance | image_urls[] — NO start/end frame control, model decides temporal placement |
| Generate a still frame (midpoint, scene) | nano-banana-2 | Fast ($0.08), consistent | N/A — image only |
Critical constraint: deterministic frame binding and reference images are mutually exclusive on Seedance. Seedance i2v gives you start+end frames but no reference channel. Seedance r2v gives you up to 9 reference images but no frame binding. You cannot have both in one call. For morph transitions, frame binding wins — the prompt carries the aesthetic intent.
Kling exception: Kling v3 Pro accepts start_image_url + end_image_url (frame binding) alongside elements (identity anchors — not full reference images, but persistent character/object identity). This is the only model that offers partial frame binding + identity reference in one call. Use for character-preservation morphs where the speaker's likeness must be maintained.
Each morph b-roll overlay window uses a departure → midpoint → return frame chain. The viewer sees: real podcast dissolves INTO abstract energy, holds, dissolves BACK to real podcast. The audio spine is untouched — only the visual changes.
Three frames per slot (all must exist as image files before generation):
slot_N_departure.png) — the last A-roll frame before the b-roll window starts. Extracted from the locked base track video at (b-roll IN timestamp - 0.033s). This is real footage of the speaker.slot_N_midpoint.png) — the abstract/conceptual target. Generated via Nano Banana from the creative brief. This is the visual "world" the morph transitions into. It serves as the END FRAME of Clip A and the START FRAME of Clip B — it is NOT a reference image in the r2v sense.slot_N_return.png) — the first A-roll frame after the b-roll window ends. Extracted from the locked base track video at (b-roll OUT timestamp). This is real footage of the speaker returning.Two clips per slot, both using the DETERMINISTIC path (Seedance i2v with start + end frames):
image_url = departure frame, end_image_url = midpoint image. Seedance interpolates the speaker dissolving INTO the abstract energy.image_url = midpoint image, end_image_url = return frame. Seedance interpolates the abstract energy dissolving BACK to the speaker.Why the deterministic path, not r2v: The morph needs frame-exact start and end binding. Seedance r2v accepts image_urls as style/identity references but gives you ZERO control over which frame is start vs end — the model decides temporal placement. Seedance i2v's image_url + end_image_url is the only path that guarantees the interpolation starts from the departure frame and ends on the midpoint (or starts from midpoint and ends on the return frame). The trade-off: no reference image channel for aesthetic guidance. The prompt must carry ALL the aesthetic intent.
| Model | Start frame | End frame | Reference images | Use for |
|-------|------------|-----------|-----------------|---------|
| Seedance i2v | image_url (required) | end_image_url (optional) | NONE | Morph clips — deterministic start/end binding |
| Seedance r2v | NONE | NONE | image_urls up to 9 (style guidance) | Style transfer, mood boards — no frame binding |
| Kling v3 Pro | start_image_url (required) | end_image_url (optional) | elements (identity anchors) | Character-consistent scenes |
Hard rule: You cannot pass reference images AND deterministic start/end frames in the same Seedance call. Seedance i2v gives you frame binding without references. Seedance r2v gives you references without frame binding. Choose one. For morph transitions, frame binding wins — the prompt does the aesthetic work.
This means the Nano Banana midpoint image prompt is load-bearing. It must produce an image that:
Before generating anything, extract departure and return frames from the locked base track video:
# Departure frame: last A-roll frame before b-roll window
ffmpeg -ss <broll_IN_seconds - 0.033> -i base_track_v3_video.mp4 -frames:v 1 -q:v 2 slot_N_departure.png
# Return frame: first A-roll frame after b-roll window
ffmpeg -ss <broll_OUT_seconds> -i base_track_v3_video.mp4 -frames:v 1 -q:v 2 slot_N_return.png
These are REAL frames from the locked edit. They anchor the morph to what the viewer was seeing before and will see after. Without them, the morph starts and ends in generated space and the transition back to A-roll is a hard cut, not a dissolve.
Both frames must be reframed to the output aspect ratio (e.g., 9:16 center crop with blurred fill) BEFORE being used as start/end frames for generation. Seedance will generate video at whatever aspect ratio its input frame is — if you feed it 16:9 frames and ask for 9:16 output, the result will be distorted or cropped unpredictably.
Generate the abstract midpoint via Nano Banana. This image must be at 9:16 and at the show's palette:
{
"model": "nano-banana-2",
"params": {
"prompt": "[FULL creative brief scene description — palette, motion feel, texture, emotional register. This prompt carries ALL aesthetic intent because the deterministic path has no reference channel.]",
"aspect_ratio": "9:16",
"resolution": "1K"
},
"pipeline_context": {
"slot": 1,
"step": "midpoint_image",
"next_steps": ["morph_clip_a", "morph_clip_b"],
"estimated_cost_usd": 0.08
}
}
After slot_N_departure.png, slot_N_midpoint.png, and slot_N_return.png are all in hand AND reframed to 9:16:
Clip A (IN morph) — reality dissolves into abstraction:
File inputs:
image_url: slot_N_departure.png (reframed to 9:16)end_image_url: slot_N_midpoint.png (generated at 9:16){
"model": "seedance-2.0-i2v",
"params": {
"image_url": "URL_OF_slot_N_departure_9x16.png",
"end_image_url": "URL_OF_slot_N_midpoint.png",
"prompt": "smooth organic transformation, [describe the speaker's current pose and setting] gradually dissolving into [describe the abstract energy scene from the midpoint]. Fluid, continuous, no hard cuts. The real environment transforms around the figure — not a cut, a metamorphosis.",
"duration": "5",
"aspect_ratio": "9:16",
"audio": false
},
"pipeline_context": {
"slot": 1,
"step": "morph_clip_a",
"edl_beat": 2,
"chain_position": "IN",
"estimated_cost_usd": 1.51
}
}
Clip B (OUT morph) — abstraction dissolves back to reality:
File inputs:
image_url: slot_N_midpoint.png (same image that was Clip A's end frame)end_image_url: slot_N_return.png (reframed to 9:16){
"model": "seedance-2.0-i2v",
"params": {
"image_url": "URL_OF_slot_N_midpoint.png",
"end_image_url": "URL_OF_slot_N_return_9x16.png",
"prompt": "smooth organic transformation, [describe the abstract energy scene] gradually resolving, clearing, reforming into [describe the speaker's returning pose and setting]. The abstraction condenses and grounds back into reality. Fluid return, no hard cuts.",
"duration": "5",
"aspect_ratio": "9:16",
"audio": false
},
"pipeline_context": {
"slot": 1,
"step": "morph_clip_b",
"edl_beat": 2,
"chain_position": "OUT",
"estimated_cost_usd": 1.51
}
}
Seedance minimum duration is 4s. Most morph overlay windows are 3-4s total (half per clip = 1.5-2s each). Since 4s is the minimum per clip, generate at 5s each and trim:
(window_duration / 2) seconds(window_duration / 2) secondsFor longer windows (8s+), generate each clip at half the window duration if it exceeds 4s.
Start frame and end frame MUST be from different visual worlds. Departure frame (real footage) → midpoint image (abstract energy) = correct morph. Two real footage frames from the same interview = camera interpolation, not transformation. The morph is a semantic bridge between two realities. If Seedance produces a smooth camera pan instead of a visual transformation, the midpoint image wasn't distinct enough — regenerate with more contrast.
Clip B's start frame (image_url) MUST be the exact same file as Clip A's end frame (end_image_url) — the midpoint image. This preserves visual continuity at the crossover. If you generate a new midpoint image for Clip B, the two clips will have a visible seam at the join.
For b-roll slots with continuity_type: "animated" or "static" (not morphing), the simpler chain applies:
image_url (start frame) for Seedance i2v — no end_image_urlThese slots don't need departure/return frame extraction because they're overlaid as visual effects with hard cuts (or J/L cuts) at boundaries, not seamless morphs.
For morph slots (continuity_type: "morphing"), produce THREE envelopes per slot plus frame extraction instructions:
{
"slot_number": 1,
"continuity_type": "morphing",
"frame_extraction": {
"departure_frame": {
"file": "slot_1_departure.png",
"source": "base_track_v3_video.mp4",
"timestamp": 16.767,
"note": "Last A-roll frame before b-roll IN (IN timestamp minus one frame at 30fps = minus 0.033s)",
"reframe_to": "9:16 center crop with gaussian blur fill BEFORE use as image_url"
},
"return_frame": {
"file": "slot_1_return.png",
"source": "base_track_v3_video.mp4",
"timestamp": 20.500,
"note": "First A-roll frame after b-roll OUT",
"reframe_to": "9:16 center crop with gaussian blur fill BEFORE use as end_image_url"
}
},
"envelopes": [
{
"step": "midpoint_image",
"model": "nano-banana-2",
"unlock": "departure_frame and return_frame extracted and reframed to 9:16",
"input_files": [],
"output_file": "slot_1_midpoint.png",
"params": {
"prompt": "string — FULL aesthetic description: palette, texture, emotional register. This prompt carries ALL visual intent because the deterministic i2v path has no reference image channel.",
"aspect_ratio": "9:16",
"resolution": "1K"
},
"pipeline_context": {
"slot": 1,
"step": "midpoint_image",
"next_steps": ["morph_clip_a", "morph_clip_b"],
"estimated_cost_usd": 0.08
}
},
{
"step": "morph_clip_a",
"model": "seedance-2.0-i2v",
"unlock": "slot_1_midpoint.png exists",
"input_files": ["slot_1_departure_9x16.png", "slot_1_midpoint.png"],
"output_file": "slot_1_clip_a.mp4",
"params": {
"image_url": "URL of slot_1_departure_9x16.png (start frame: real speaker footage, reframed to 9:16)",
"end_image_url": "URL of slot_1_midpoint.png (end frame: abstract midpoint, already 9:16)",
"prompt": "string — IN morph: describe the speaker dissolving into the abstract scene. Fluid, continuous metamorphosis.",
"duration": "5",
"aspect_ratio": "9:16",
"audio": false
},
"pipeline_context": {
"slot": 1,
"step": "morph_clip_a",
"chain_position": "IN",
"edl_beat": "int",
"estimated_cost_usd": 1.51
}
},
{
"step": "morph_clip_b",
"model": "seedance-2.0-i2v",
"unlock": "slot_1_clip_a.mp4 exists (Clip B starts from Clip A's end frame = midpoint)",
"input_files": ["slot_1_midpoint.png", "slot_1_return_9x16.png"],
"output_file": "slot_1_clip_b.mp4",
"params": {
"image_url": "URL of slot_1_midpoint.png (start frame: SAME image that was Clip A's end_image_url)",
"end_image_url": "URL of slot_1_return_9x16.png (end frame: real speaker footage returning, reframed to 9:16)",
"prompt": "string — OUT morph: describe the abstract scene resolving back into the speaker. The abstraction condenses and grounds back to reality.",
"duration": "5",
"aspect_ratio": "9:16",
"audio": false
},
"pipeline_context": {
"slot": 1,
"step": "morph_clip_b",
"chain_position": "OUT",
"edl_beat": "int",
"estimated_cost_usd": 1.51
}
}
],
"assembly": {
"overlay_window": {"start": 16.8, "end": 20.5, "duration": 3.7},
"trim_clip_a": "first 1.85s of slot_1_clip_a.mp4",
"trim_clip_b": "last 1.85s of slot_1_clip_b.mp4",
"concat": "trimmed_clip_a + trimmed_clip_b → slot_1_overlay.mp4 (3.7s exactly)",
"ffmpeg_overlay": "overlay=0:0:enable='between(t,16.8,20.5)'"
}
}
For animated/static slots (no frame binding needed), produce TWO envelopes:
{
"slot_number": 1,
"continuity_type": "animated",
"envelopes": [
{
"step": "scene_image",
"model": "nano-banana-2",
"unlock": "timeline locked",
"input_files": [],
"output_file": "slot_1_scene.png",
"params": {
"prompt": "string — scene description at show palette",
"aspect_ratio": "9:16",
"resolution": "1K"
},
"pipeline_context": {
"slot": 1,
"step": "scene_image",
"next_steps": ["video_generation"],
"estimated_cost_usd": 0.08
}
},
{
"step": "video_generation",
"model": "seedance-2.0-i2v",
"unlock": "slot_1_scene.png exists",
"input_files": ["slot_1_scene.png"],
"output_file": "slot_1_video.mp4",
"params": {
"image_url": "URL of slot_1_scene.png (start frame only — no end frame, Seedance animates freely)",
"prompt": "string — motion direction, camera movement, atmospheric evolution",
"duration": "5",
"aspect_ratio": "9:16",
"audio": false
},
"pipeline_context": {
"slot": 1,
"step": "video_generation",
"edl_beat": "int",
"visual_function": "string",
"estimated_cost_usd": 1.51
}
}
]
}
Param name note: Seedance uses audio (not generate_audio) as the envelope param for audio control. Kling uses generate_audio. The fal_router.py translate_envelope function handles the mapping — write envelopes using the model's native param name.
The router enforces spend caps (default $25/24h, $5 max per job). When crafting envelopes:
The media router script is at:
canonical_developer/context-grapple-gun/cgg-runtime/scripts/media-router/fal_router.py
CLI: python3 fal_router.py subscribe <envelope.json> (blocking)
CLI: python3 fal_router.py submit <envelope.json> (async, returns job ID)
CLI: python3 fal_router.py budget (check remaining spend)
tools
Frederick Grant persona runtime — historian-of-how, witness of formation under pressure, qualified Remnant/Athenaeum-facing interpretive mechanic, tic-230 chronicler of runtime probity. Use when the user asks for Frederick Grant voice, Ubiquity Chronicles work, Parallel Lane Cadence essays, Elara counterweight passes, field notes, audio annotation, interview scripts, Logan/Wilderness analysis, or runtime probity writing after the P2/P1 tic-230 closures. CENTROID: authored persona runtime that documents live convergence without collapsing it into thesis IS: - lean SKILL.md entrypoint with rich profile/, stages/, scripts/, reference/, templates/, tools/, evals/ subtrees - 8-stage workflow (signal-intake → context-hydration → field-grounding → remnant-query → composition → elara-counterweight → receipt-closeout → tic230-probity) - 15 prompt-skeleton scripts for Frederick's standard composition surfaces - 9 collapse-zone guards covering Decorative Francophilia / Retrospective Certainty / Hero Narrative Intoxication / Conspiracy Closure / Academic Sedation / Activist Collapse / Breyden Conflation / Elara Erasure / Runtime-Doctrine Drift - cross-references into federation surfaces: publications/, audit-logs/governance/, ent_breyden/inbound/ubiquity-chronicles-tic175/, ent_homeskillet/canonical/ IS NOT: collapse_zones: - Breyden's voice (architect register; Frederick is not the architect) - Homeskillet's voice (orchestrator register; Frederick is not the primary) - generic French historian style (decorative Francophilia is a named negative ray) - prosecutor / debunker / prophet / mascot (legal accusation, certainty, evangelism, identity flattening — all forbidden) - retroactive certainty machine (live convergence must remain unresolved where the record is open) - doctrine inscription source (Frederick observes doctrine; he does not author it) - documentation editor (multi-file structure is authoring discipline, not generic doc rewrite) - federation-internal artifact (Frederick is a ghostwriter engaged from outside; the federation's runtime is legitimate object of historical analysis, but Frederick's own runtime — the skill that hosts him, loaded files, collapse-zone guards, authority model — is editor's territory, not Frederick's voice; insider language must be earned by composition arc, never deployed as default register) sibling_overlaps: - /complement (closure inference at active move — different surface, different lifecycle) - /consolidate (file-surface packaging — Frederick produces composition, not consolidation) - videographer skill (substrate capture — both are expression surfaces, distinct registers) - homeskillet-academy (educational scaffold — academy teaches, Frederick witnesses) WHEN: - when the work needs witness-of-formation prose - when the task asks for Frederick Grant by name, voice, or context - when a live convergence needs historical/cultural contextualization without closure - when a field note, essay, chronicle, audio annotation, or interview needs Frederick's register - when a Remnant/Athenaeum comparison is appropriate - when an Elara counterweight pass is needed - when runtime probity after tic 230 is relevant (P2 manifold-shape closure, P1 signal-projection-split closure) - on explicit Architect invocation NOT WHEN: - when Breyden's direct voice is needed (use Architect register, not Frederick) - when Homeskillet's execution-layer voice is needed (use orchestrator register, not Frederick) - when the task is ordinary implementation (Frederick is composition, not patching) - when the task asks for legal accusation or definitive claims without evidence - when the user wants generic French style rather than Frederick's runtime - when the federation has not produced enough operational reality to warrant outside reading RELATES TO: - /complement (closure-inference sibling — both gate compositional integrity) - /consolidate (packaging neighbor — Frederick composes; consolidate packages) - publications/the-ubiquity-chronicles-fg.md (primary chronicle, v1, ~tic 175) - publications/the-ubiquity-chronicles-v2-frederick-grant.md (v2 expansion, Book Zero + Book I) - publications/the-ubiquity-chronicles-vol-iii-frederick-grant.md (Volume III — The Embodiment, tic 230) - publications/the-ubiquity-interviews-fg.md (interview register companion) - audit-logs/governance/p2-harmony-manifold-input-patch-receipt-tic230.md (P2 closure receipt) - audit-logs/governance/p1-signal-projection-split-receipt-tic230.md (P1 closure receipt) ARGS: stance: dispatch off_envelope: ask core_dispatch_rays: - "" → primary invocation (full 8-stage workflow) - "chronicles" → Ubiquity Chronicles composition - "parallel" → Parallel Lane Cadence composition - "field-note" → Field Notes script - "interview" → Interview script - "elara-pass" → Elara counterweight on existing draft - "anti-collapse" → Anti-collapse audit on existing draft - "tic230-probity" → Runtime probity composition secondary_modulation_axes: - register: chronicle | essay | field-note | interview | annotation - depth: lean | full - target: telos-internal | external-readership
tools
Runtime tactical context hydration — staged discovery and bounded source-bearing hydration for agent intent. Answers "how does an agent know where to look before it already knows where to look?" via filesystem shape, structural signals, and typed candidate baskets. Working acronym: RTCH (runtime-tactical-context-hydration). CENTROID: intent → bounded, source-reenterable evidence packet via staged source-bearing discovery IS: - structured intake of agent/Architect intent (goal, seeds, profile, fanout, mutation risk) - zone orientation (cwd / repo root / zone root / rung chain / obvious truth files) - low-cost shape scout (directory map, headings, durable handles, JSON/YAML keys, refs) - typed candidate basket with origin/use taxonomy and pairing rule enforcement - tactical probe plan (multiple bounded probes, not one giant regex) - bounded chunk hydration with line-range provenance and next-re-entry commands - agent-ready evidence packet emission (selected_surfaces, unresolved_questions, caution_map) - optional handoff to /consolidate for full-surface dump packaging IS NOT: collapse_zones: - vector database (no embedding-space retrieval; federation prohibits at federation rung) - semantic oracle (RTCH does not "understand" content; it surfaces structural signals) - doctrine engine (RTCH produces evidence; downstream consumers judge truth) - terrain engine replacement (federation cartography handles multi-plane semantic projection; RTCH is tactical layer beneath) - /consolidate rewrite (discovery and packaging do not collapse) - lossy compressor (bounded chunks preserve source re-entry; never summarize away source) - confidence-inflated smart consolidator sibling_overlaps: - /consolidate (RTCH selects; /consolidate packages — distinct boundaries; compose, don't replace) - file-access-discipline (RTCH outputs targets; hydration USES file-access-discipline as execution primitive) - load-doctrine-chain (both serve subagent context; load-doctrine-chain owns CLAUDE.md chain only, RTCH owns wider source set) - cache-ops (pattern source for trust-tier shape; storage NOT shared; RTCH packets are separate evidence cache) - queue_state_compile (analogy only — both convert append-only source to compiled view; different transforms) WHEN: - when agent intent is vague and discovery is needed before reading or consolidation - when bare grep would over-fanout or under-discover a vague target - when an arena, harpoon, /review, or other lane needs source-bearing evidence before action - when bounded chunk hydration is appropriate (large governance files, doctrine chains, audit history) - when the candidate-basket discipline (origin/use tagging, pairing rule) is needed to prevent generic-term overconfidence - when source re-entry must be preserved (consumer may need to return to source for fuller context) NOT WHEN: - when target is fully known (single file, single line range) — read it directly via file-access-discipline - when the operation is mutation-only on a known target (use Edit/Write directly) - when /consolidate has already been invoked with explicit targets (RTCH would re-do discovery) - when the operation requires semantic similarity (RTCH does not do that; federation prohibits vector DB) - when the consumer needs a packaged dump only (skip RTCH; /consolidate alone is sufficient if targets are known) - when promoting doctrine (route through /review; RTCH evidence may inform but does not promote) RELATES TO: - /consolidate (compose: RTCH selects targets; /consolidate packages selected_surfaces into dump with provenance reference back to RTCH packet) - file-access-discipline (compose: RTCH Stage 6 hydration USES file-access-discipline chunked-read as execution primitive) - load-doctrine-chain (compose: RTCH may invoke for doctrine_chain target_profile zone orientation) - zone_root.py (compose: RTCH Stage 2 anchors on zone-root walk-up) - atomic-append (compose: optional RTCH packet persistence uses atomic-append write hygiene) - queue_state_compile (analogous: both implement "raw source → compiled view" pattern) - /review preflight (downstream: future integration consumes RTCH packets as bench-packet discovery surface) - arena spec authoring (downstream: future integration uses RTCH packets for context preparation) - harpoon orchestrator (downstream: future integration uses RTCH for anchor-spot discovery on external binders) ARGS: stance: dispatch off_envelope: ask # off_envelope rationale: RTCH requires a structured intake to operate (goal, # target_profile, fanout_level, mutation_risk, expected_output, enough_evidence). # Bare invocation without intake fields would force the lane to guess discovery # scope, defeating the discipline. Ask elicits the missing fields. core_dispatch_rays: - "" → interactive (elicit intake form) - "--goal <sentence>" → with intake fields on CLI - "--intake <intake_json_path>" → from a saved/persisted intake - "--persist" → persist resulting packet to audit-logs/rtch/packets/ - "--handoff-to-consolidate" → after packet emission, hand selected_surfaces to /consolidate secondary_modulation_axes: - target_profile: doctrine_chain | audit_history | code_path | manifest_registry | vague_intent | mixed - fanout_level: conservative | normal | wide - mutation_risk: read_only | low_mutation | high_mutation - expected_output: hydration_packet | target_set_for_consolidate | single_chunk | claim_evidence IMPLEMENTATION_STATUS: binder: audit-logs/governance/runtime-tactical-context-hydration-binder.md (Phase 1 complete, tic 223) runner_script: NOT YET BUILT — Phase 2 deliverable (planned: cgg-runtime/scripts/rtch.py) current_mode: manual-discipline — agent walks the 8 stages using Read/Bash/Grep tools directly promotion_status: design lane, not doctrine; Phase 7 routes the doctrine question after Phase 6 validation
development
Statusline legend — rapid decoder for the CGG telos radar (LITE + FULL modes). CENTROID: read-only legend surface that decodes statusline glyphs, positions, colors, and source attributions for the Architect at glance speed (the Architect perception substrate) IS: - static legend (glyph + position + color tier reference) - live decode mode (annotates current statusline values inline) - source attribution (where each rendered value reads from) IS NOT: collapse_zones: - statusline configurator (use /statusline install|mode|clear|uninstall) - governance state mutator (read-only on every surface it touches) - harmony invoker (use harmony-invoke.sh; this skill only decodes the cached pointer) - radar replacement (statusline renders ambient; sl-legend explains) - troubleshooter (does not diagnose hook failures or sync drift) sibling_overlaps: - /statusline (configuration sibling — same domain, different verb) - /governance-check (read-only governance snapshot — different aperture) WHEN: - on first encounter with the radar (Architect doesn't remember what ⊙ means) - when a glyph changes and the Architect wants to confirm semantics - when explaining the radar to someone else - on explicit Architect invocation NOT WHEN: - to change statusline behavior (use /statusline) - to act on a signal seen in the radar (use /siren) - to invoke harmony for fresh disposition (use harmony-invoke.sh) - mid-cadence (cadence is the boundary; this is reference) RELATES TO: - /statusline (configurator) — same domain; sl-legend is the reader - /siren (signal triage) — sl-legend points to what to triage - harmony-invoke.sh (disposition refresher) — sl-legend points at staleness ARGS: stance: dispatch off_envelope: proceed-with-note # off_envelope rationale: sl-legend is read-only reference; an undeclared arg # is most likely a typo against {live, lite, review, sources} — proceed with # static legend and note the unknown ray rather than refusing the read. core_dispatch_rays: - "" → static legend (full glyph + position decoder) - "live" → annotate current rendered statusline values inline + tic 214 markers source-backed - "lite" → compact tic 214 marker glossary only (glance-speed recall) - "review" → Architect perception substrate audit checklist (overclaim + naming drift detection) - "sources" → source attribution table (which file each value reads)
tools
Editorial intelligence scoring — reads transcripts the way a sharp editor would, scoring segments for shortform growth potential through the lens of audience context.