| name | eddy |
| description | Use Eddy to turn attached raw video footage into a proof-gated YouTube long edit and Shorts. |
Eddy
Use this skill when the user mentions Eddy, attaches video footage, or asks for a YouTube edit.
Default Behavior
If the user attaches raw video footage and gives no other instruction, treat the job as:
Edit this footage into a finished YouTube long-form video and Shorts.
First ask Eddy what edit paths are available:
eddy_edit_options(source=<attached file or folder path>, format="youtube")
If requires_choice is true, ask the user exactly:
How do you want this edited?
Show the runnable options in plain English: what each option is, practical benefits, drawbacks, privacy/cost notes, and the recommended option. Do not show unavailable setup suggestions as selectable choices.
If requires_choice is false, do not ask. Start the edit with the selected option. In normal Codex
or Claude host sessions this should be host_kernel, which means Eddy will edit through the current
assistant and return a proof-gated edit or exact blocker:
eddy_edit_start(
source=<attached file or folder path>,
format="youtube",
edit_path=<selected_option_id>,
auto_fallback=true,
fallback_policy="agent_subscription"
)
If Codex cannot resolve the attachment into a filesystem path, stop with the exact blocker
attached_source_unresolved and ask the user to paste the local file path or attach a folder that
Codex exposes as a path. Do not guess.
Bootstrap
The plugin MCP wrapper automatically keeps Eddy on the latest stable GitHub tag. On install and on
first use, it:
- checks the latest stable
vX.Y.Z tag from https://github.com/lennoxsaint/eddy;
- installs that tag into
~/.eddy/source and ~/.eddy/venv;
- smoke-checks the installed engine before switching versions;
- keeps the previous working version if the update fails;
- writes receipts to
~/.eddy/plugin-state.json.
After bootstrap, the wrapper launches Eddy's MCP server from the active managed venv. If a newer tag
fails to install, report the exact blocker and continue only if a previous working tag is available.
Editing Rules
- Never mutate, move, delete, upload, publish, send, or schedule source media.
- "Perfectly edited" means proof-gated: every required Eddy gate passed. If gates are red, report exact
blockers and evidence instead of calling the output perfect.
- Long-form output should include the edited video, transcript, QA receipts, and launch-kit assets
when the run reaches those gates.
- Shorts are quality-gated. If separate camera and screen sources exist, Eddy uses the Yassy stacked
layout: square camera top, one-line karaoke captions in the middle, screen/proof panel bottom.
- If only one talking-head video source exists and no screen source is discovered, Eddy uses the
talking_head_916 Shorts layout: crop/fill the talking head to 1080x1920, keep the face centered,
preserve blinkless segment assembly, and place one-line karaoke captions in the bottom third.
- If an audio-only source or ambiguous multi-file source is supplied, fail loudly with the exact
blocker instead of rendering a weak output.
- Default YouTube cadence is high-energy: ordinary spoken-word gaps target roughly 0.18s-0.25s,
p95 must stay <= 0.28s, and no unprotected gap may exceed 0.35s. Never trade this for clipped
word starts.
- Studio-quality voice cleanup is a hard gate for final edits. Do not silently downgrade to basic
EQ/loudness or call it Studio Sound; the delivered MP4's final audio must also pass the local
mouth-click, echo, and loudness truth gate.
- Premium motion graphics require a project-local native HyperFrames project:
index.html,
hyperframes.json, meta.json, DESIGN.md, frame.md, storyboard.md/html, lint/validate/
inspect output, rendered transparent overlay, ffprobe, contact sheet, geometric collision proof,
and composite receipt. Legacy ffmpeg drawtext/drawbox is not the default renderer.
Fallback
If the selected edit path stalls, errors, or repeats the same gate failure without improvement, Eddy
should automatically fall back to the best allowed alternative path, usually the current host
assistant/subscription route. Do not silently fall back to metered OpenAI or Anthropic API usage unless
the run has an explicit cost cap.
For a host-kernel edit path, wait for the job to reach awaiting_host_intent, call:
eddy_host_packet(job_id=<job_id>)
Use that packet to produce a valid host_intent_v1 JSON payload. Select Eddy candidate IDs and
describe the edit goal, keep/drop priorities, retake policy, gap policy, pacing preference, Shorts
preference, visual insert notes, and targeted repair directives. Do not freehand raw timestamps unless
you explicitly mark an expert override. Then submit it:
eddy_host_submit(job_id=<job_id>, payload=<host_intent_v1 JSON>)
Invalid host payloads are blockers to repair, not crashes. Legacy EditDecisions payloads are still
accepted for one compatibility release. The packet contains transcript/QA text, source hashes, and
candidate IDs/reasons, never media bytes.
When eddy_host_submit returns "compiled" and the submit's sim report is green, hand the run back
to Eddy for the whole mechanical finish โ do not hand-chain render/QA/shorts/package yourself:
eddy_finalize(run=<job_id>)
Then poll eddy_job_status(job_id=<job_id>). Eddy owns final render, Studio Sound, first-60 motion,
final QA, the Shorts requirement, and the launch kit, and raises exact blockers on any red gate. If
the sim is not green, call eddy_host_packet again and resubmit repaired intent instead of
finalizing. The repair loop is budgeted by Eddy: a repair_loop_budget_exhausted blocker is terminal
for the run โ review the best prior iteration or start a fresh run rather than resubmitting.
To re-run only packaging (titles, chapters, description, thumbnails) on a finished run, use:
eddy_package(run=<job_id>)
If plugin MCP tools are not visible yet, use the repo fallback from a cloned checkout:
python3 scripts/install_codex.py
eddy edit /path/to/footage-or-folder
Return local output paths and blockers only. Eddy does not perform public publishing actions.