Talkto yourtimeline
EditAI is an AI harness for video editing. Ask for the cut, the motion graphic, the filter or the noise gate. An agent makes the edit on your real timeline through 16 MCP tools, and stops for your approval before anything destructive.
Real behaviour, real numbers: find_silences then ripple_delete across every track, 24.0s down to 21.1s, which is exactly the 2.9 seconds of dead air. Nothing is cut until you approve it, and every edit undoes.
Connect the MCP.
The agent takes the room.
Point your client at EditAI's MCP server and an agent comes up inside a sandbox on TrueForge, TrueFoundry's open-source agent harness. From there it drives the edit at whichever layer the job needs.
Your editing UI
Bring your own front end. The timeline is exposed as tools, not as a prompt describing a timeline, so any MCP client can drive it.
Our editor
A full timeline, preview and assistant panel. The agent's edits stream in over SSE, so the tracks redraw as the work happens.
The encode itself
When a job needs the real file, the agent writes the ffmpeg filter graph and runs it in a locked-down container.
# 1 · the harness npx @truefoundry/trueforge@latest → localhost:8790 # 2 · the timeline tools cd apps/agent && bun run start → localhost:8941 # 3 · wire them together (any one key is enough) ANTHROPIC_API_KEY=sk-... bun run setup # 4 · the editor bun run dev:web → localhost:5173
Ask in a sentence.
Watch the tracks move.
Every ask below runs real tools against real state. Clip ids, source offsets and frame boundaries are the agent's problem, not yours.
▸Remove the silences
Finds every silent range on the voice track, tells you what will go, and ripple-deletes it across all tracks so the gaps close.
find_silences → remove_silences
▸Caption every clip
Fans out one sub-agent per clip to transcribe in parallel, merges the results, and lays timed captions on their own track.
transcribe_clip × N → add_captions
▸Cut this to the beat
Reads the tempo off the music track and splits on the beat grid, both halves still frame-accurate.
detect_beats → split_clip
▸Duck the music under the voiceover
Sets clip volume where the voice track is speaking and puts it back where it is not.
get_project → set_volume
▸Grade it warmer and add grain
Writes the ffmpeg filter graph, runs it in the media sandbox, then probes the output to confirm it is what you asked for.
probe_media → run_ffmpeg
▸Kill the room tone
Denoises the voice track in the sandbox and leaves the original file untouched next to it.
run_ffmpeg · afftdn
Sixteen timeline tools in all. Five read, seven write and undo, three destructive, one gated export. The destructive ones carry MCP's destructiveHint, which is what makes the harness stop and ask you first.
Need a logo?
It goes and gets one.
The agent reaches the live web through Bright Data, so a logo, a product shot or a reference frame is one sentence away from being on your timeline. The connector attaches deferred: it costs no context until a task actually needs it.
search_engine
Live search results, not a training-set memory of what a brand looked like two years ago.
scrape_as_markdown
Pulls the page down clean, so the agent can lift the asset and the copy around it.
A new skill is a
line in a config.
Every capability here is an MCP server, so adding one is a name in a list and a restart, not a release. The agent picks up the new tools on its next turn and starts using them in the same conversation.
EDITAI_CONNECTORS=exa,bright-data,motion-graphics bun run setup ✓ motion-graphics attached read-only, deferred ✓ agent updated 14 connectors → tools live on the next turn
Catalog servers attach by name, OAuth ones authorise in chat, and anything you host yourself attaches the same way. Read-only and deferred by default, so a connector you rarely use does not crowd the agent's context.
Nothing the agent
writes runs on your box.
Two sandboxes, because the two kinds of work need different boundaries.
Harness sandbox
For the computation the agent should not estimate: arithmetic, parsing, anything it would otherwise guess at. Runs remotely, registered the moment the key is present.
Media sandbox
Every ffmpeg call runs in a throwaway container: no network, capped memory and CPU, 256 pids, non-root, one mounted workspace, hard timeout. Python there asks for approval first, because a script with the workspace mounted can delete your source media.
Every line here was
reviewed by Qodo.
Not a badge. Eight findings across three reviews, each one either fixed or answered with a proof, and a merge gate that reads Qodo's structured verdict rather than its prose.
Qodo publishes no check run and no approving review, so GitHub's own auto-merge has nothing to gate on. The workflow in this repo is that missing gate: it reads only the structured counter chips, never the prose, because Qodo quotes findings verbatim and a pull request can put the words "no issues found" into its own diff. It binds the verdict to the reviewed commit and merges with --match-head-commit, so a push racing the merge is rejected rather than slipped in.
And the video you
just watched?
It cut itself.