Changelog

0.1.34

Codex MCP, multi-lane text & truer exports

Codex speaks to your MCP servers

The MCP servers you've configured in Woven now flow straight through to Codex, and every tool call Codex makes against them shows up inline in chat — the same one-line tool rows you already see for built-in tools. When a skill needs a clarifying answer or a server sends an elicitation request mid-call, both surface as a small inline form right inside the conversation instead of stalling silently in the background. The forms are fully keyboard-driven, and secret fields are scrubbed from the saved transcript.

Text on multiple timeline lanes

Drop a second caption while the first is still on screen and Woven places it on its own lane instead of fighting the overlap. You can drag text items vertically between lanes the same way you've been moving audio, trims clamp to whichever lane an item is on, and the layout you see in the editor is exactly what renders out at export.

Preview and export finally agree

If your reel has a top or bottom bar, the editor preview now shows exactly what the export will produce — no more "the preview cropped tighter than the file I got back." The render pipeline normalizes layout defaults once at the entry point, so preview and final render fall back to the same numbers.

Steadier audio preview

Audio preview no longer goes silent after the app sleeps or you switch away and back. The paths that used to leave preview audio half-initialized now reset cleanly before the next play, and clips that are still importing no longer block the rest of the timeline from playing through.

Hosted models for all of this are billed per request — see pricing.

0.1.33

v0.1.33

  • Send feedback from inside the app. A new Send Feedback entry in the sidebar — and ⌘⇧F from anywhere in the window — opens a sheet where you can describe what went wrong or what you want next. The reply lands in our inbox tagged with your account and the app version, so we can write back without you having to dig up build numbers. You can opt in per submission to attach the last slice of sidecar logs from the same run, which makes "this happened to me once" reports actually traceable. Logs are never attached unless you tick the box on that specific submission.
  • Reworked onboarding flow. First launch now walks through workspace setup before dropping you into the main window, then ends on a chooser that asks how you want to start your first reel — generate from a prompt, start from an existing video on disk, or pick a starter idea. Empty workspaces show the same chooser later so you can replay the path whenever the app feels blank. Model connection state is spelled out earlier so you can tell at a glance whether you're on Woven Credits, hosted, or your own key, and the full Welcome flow is now replayable from the Help menu if you want to walk a teammate through it.
  • Import an existing video as an editable reel. Pick any video from your workspace (or drag one in) and Woven hydrates it as a reel project with the original clip on the timeline — no re-encoding, no thumbnail dance, ready to caption, cut, or restyle from the first frame. Adding the same source video to a workspace twice no longer creates a duplicate copy on disk; the import recognizes the existing file and reuses it.
  • Starter prompts route straight into a new chat. Tapping a suggestion from the workspace empty state opens a fresh chat session with that prompt prefilled, scoped to the current workspace so a prefill set up in one folder doesn't bleed into another. Numbered chat-tab shortcuts (⌘1–⌘9) also got wired up so you can jump between recent chats without reaching for the sidebar.
  • Model picker cleanup. Kimi K2 is now hosted-only — there's no longer a BYOK row, so the model just appears if your account has access. Woven Credits is also promoted as the top option in the picker, so the easiest path (no keys, no setup) is also the most obvious one. Behavior of the rest of the picker is unchanged.
0.1.32

v0.1.32

  • Reworked text overlay coloring and alignment. Every preset now exposes its full secondary color palette as first-class slots — calligraphy outline, crossout strike line, pill / subtitle / calligraphy backdrops, watermark outline — instead of hardcoded constants. The toolbar's five separate color buttons collapsed into one Colors button whose popover renders only the slots that apply to the current preset. Highlight a span of text and you can color just that range, so different words within the same overlay can have different colors instead of forcing the whole text to one. A new alignment toggle (left / center / right) sets paragraph alignment inside the text box.
  • Watermark redesigned, plus per-preset text case. Watermark switched from a hollow text-stroke trick to filled translucent text with a color picker and an opacity slider (default 0.78), which is closer to how broadcast watermarks actually look. Every text preset also got a Case row in the Style popover (none / uppercase / lowercase) with sensible per-preset defaults — only watermark defaults to uppercase, the rest stay as authored unless you opt in.
  • Curated font picker for text overlays. Five hand-picked families — SF Pro Display, Montserrat, Inter, Playfair Display, Caveat — selectable from a chip-based picker in the text-style popover. Each chip renders its label in its own typeface so you can see the font before applying. Each preset keeps a sensible default font; the picker only overrides when you explicitly choose one.
  • Use any font installed on your Mac for text overlays. Pick an installed font in the reel editor and Woven imports its per-face bytes, deterministically aliases them, and registers them both with the native preview and the Remotion render pipeline — so the font you pick in the editor is the font that ships in the exported video. Stale imports whose source file has gone missing now fall back gracefully instead of breaking text rendering for the rest of the reel.
  • Smoother overlay editing. Scrubbing through a reel with video overlays no longer hitches on each seek. Replacing or removing an overlay's underlying media also retires the previous video/image immediately instead of leaving a detached preview layer behind the new one.
0.1.31

v0.1.31

  • Faster, calmer chat transcript. Long conversations now stay smooth as you scroll — offscreen messages render as lightweight placeholders sized from a cached row-height map, so only the rows near the viewport pay the full layout cost. Re-opening a chat (or switching between recent sessions) lands on a fully-virtualized first paint instead of mounting every row real, so the transcript appears instantly even on conversations with hundreds of turns.
  • No more thrash during window and pane resize. Dragging the window edge or the sidebar/preview divider now folds into the same freeze the editor uses for layout transitions — the chat content holds steady mid-drag and settles into the new width once you release, instead of relaying out on every pointer move.
0.1.30

v0.1.30

  • Reel-editor preview now plays back smoothly like a normal video editor. Earlier, after play/pause, seeking, selecting an overlay, or tweaking a visual property, the preview could briefly repeat the first moment of the clip — audio doubled syllables, video flickered, and styling an overlay sometimes flashed black even though the timeline time hadn't moved. The native preview now distinguishes "media/timeline" mutations from "live visual" mutations: changing selection chrome, caption style, text style, overlay geometry, radius, shadow, fit, color, or layer no longer touches the media clock, so playback continues from the current frame instead of restarting.
  • Dragging an overlay no longer flickers on pointer-up. The handoff from drag-preview back to the timeline now happens in the same frame the drag ends, so there's no in-between moment of stale layout.
0.1.29

v0.1.29

  • Add Ken Burns–style motion to any reel. A new effects lane in the timeline punches in, pulls out, drifts, or pushes across the stage during a time range you pick — text and captions stay un-zoomed so annotations remain readable. The agent maps natural prompts ("zoom in on the second clip", "slow push", "pan right") to the right preset on the first try.
  • Per-overlay layer ordering. Each visual overlay (video, image, motion clip) now has a Layer ▾ menu — Bring to Front / Forward / Backward / Send to Back — so a video can sit on top of an image, or a logo can sit on top of b-roll. The +/− sizing buttons become a continuous Size ▾ slider with Small / Medium / Large ticks, matching the Intensity slider. Click any empty stage area to deselect the active item and dismiss the toolbar.
  • Insufficient-balance now shows a native sheet. Caption generation that runs out of credit used to leak red inline error text into the timeline toolbar; it now opens a SwiftUI sheet with your current balance and an Add Credits button. A pre-check short-circuits before uploading audio if the last-known balance is already exhausted.
  • Native preview matches the editor. The macOS file-preview pane recognizes the unified video / image / motion / text / effects spec keys, so what you see in the side panel matches what the reel-editor stage renders.
  • Tighter reel player corner radius and a calmer feel — captions and selection state survive spec mutations and reel reloads instead of flickering off, and overlay videos prime themselves before playback so they don't show a black first frame.
  • Older reels open correctly. The reel-editor's legacy migration now preserves full-canvas overlay layout for clips[] / videoOverlays[] shapes, keeps voiceover order stable across all three legacy audio shapes, and carries migrated export state and unified-spec media behavior into the new shape.
0.1.28

v0.1.28

  • Brand extraction now drives a real shared Chrome browser in the background, so sites that previously blocked stateless fetches (cookie walls, bot protection, login-gated pages) work reliably.
0.1.27

v0.1.27

  • Send-into-chat no longer stutters. Your submitted message now snaps directly to its pinned position instead of animating into place, removing a brief jitter that could appear when the assistant began streaming mid-animation.
0.1.26

v0.1.26

  • Extract a brand kit from any URL. A new extract-brand skill lets the agent pull a website's palette, gradients, logo, fonts, and design tokens into a brand.md you can drop into a reel — switching brands across projects is now one prompt instead of building a kit by hand.
  • Motion clips can fill the full canvas. A new scene layout mode renders a motion component edge-to-edge for full-bleed brand intros and outros, instead of always being wrapped in a 1080×1080 square. Overlay-style motion clips (badges, count-ups, callouts) still behave exactly as before.
  • New reels default to 16:9. Reels created without an explicit aspect now come out horizontal instead of vertical, matching the tool default and most desktop/landscape use cases. Pass width/height explicitly to override.
  • Right-click the workspace sidebar. Right-click any empty area below your projects to create a new workspace or open an existing one — no more hunting through the File menu.
  • App opens at 90% of your primary display on first launch. Fresh installs land at a useful size instead of a tiny default window in the corner.
  • Thinking pill stays alive between events. The "thinking…" indicator no longer flickers off during quiet stretches mid-turn — you can see at a glance that the model is still working.
  • Smoother chat transcript scrolling. Scroll position now anchors through SwiftUI's native scroll-on-size-change API, so the transcript stays put instead of jumping while messages stream in.
0.1.25

v0.1.25

  • Codex (OpenAI's GPT-5.5-Codex) is now available as a coding agent. Sign in with your existing ChatGPT account from Settings → Account, then pick Codex from the composer's agent menu — switch per-turn between Codex and Claude, with reasoning summaries streaming into the thinking bubble while Codex works.
0.1.24

v0.1.24

  • Reel editor live-reloads when the spec is edited from another tool. Tweak the JSON in VS Code or Cursor and the timeline reflects the new spec the moment you switch back to Woven — no restart, no reopen.
  • Motion clips stay locked to the editor playhead while you scrub the timeline, instead of drifting out of sync as the surrounding clips shift.
  • Asset picker accepts files reached through symlinks (e.g. an iCloud Drive folder linked into your workspace) and now explains the workspace-only constraint when you try to pick something outside it, rather than silently rejecting it.
  • New reels are saved with the aspect ratio you chose for the project, instead of always defaulting to 9:16.
  • Welcome card after sign-in. A new one-screen intro explains how billing works — pay-as-you-go Woven credits, or bring your own keys, no subscription required — with one-click Add credits / Add your own keys actions. Replayable any time from Settings → Account.
  • Insufficient-balance state is now consistent. Whether you have $0 or a few cents left, you see the same "Insufficient Balance" banner above the composer with Add Credits / Add Own Keys buttons — instead of starting a turn that crashes into a red 402 error row mid-chat once the backend refuses it.
0.1.23

v0.1.23

  • Video URLs work reliably on fresh installs. The video downloader (yt-dlp) is now fetched on first launch in the background — typically done before you paste your first link. The app is also ~36 MB smaller as a result.
0.1.21

v0.1.21

  • Analyze any reference video. Paste an Instagram Reel, YouTube Short, TikTok, or X / Twitter URL — or drop in a local .mp4 — and Woven breaks down the hook, pacing, format archetype, and shot structure. Works on any aspect ratio (vertical 9:16, landscape 16:9, square, X's odd 4:3). Powered by a bundled, auto-updating yt-dlp, ElevenLabs Scribe for word-level transcripts, and Apple ShazamKit for song identification. The structured analysis.json hands off to the chained authoring step so you can build a reel in the same format.
  • Paste images into the chat composer. ⌘V or right-click Paste drops thumbnail chips above the input; they ship to the model alongside your text and persist across restart.
  • Friendlier Analyze Video errors. Short or voice-only audio that can't be Shazam'd now cleanly reports "No song match" — no more raw com.apple.ShazamKit error 201 leaking into chat.
  • Reasoning defaults to Medium. New chats with a reasoning-capable model start with the thinking pill on Medium instead of off. Your manual choice still persists across restart.
0.1.20

v0.1.20

  • Context-window meter now reflects each model's actual size. The little token counter under the composer reads the context length the Woven gateway publishes for each model, so Sonnet 4.6 / Haiku 4.5 show 200k, Grok 4.3 shows 1M, etc. — instead of the old 128k default that didn't match what the model actually accepts. Auto-compaction uses the same number, so it kicks in at the right point for high-context models.
0.1.19

v0.1.19

  • Reasoning effort per chat. A new "thinking" pill (bars icon) in the composer sets the model's reasoning effort for the current conversation — click to cycle off → low → medium → high. While the model is reasoning, the bubble shows a streaming "Thinking…" trace that collapses to "Thought" once the final answer arrives. Reasoning isn't replayed into later turns, so token spend stays predictable across long chats.
  • Model picker is now backend-driven. Hosted models come straight from the Woven gateway's /api/v1/models endpoint, so new providers and versions appear in the picker as soon as they're added server-side — no app release required. Grok 4.3 (xAI) is the first model to land this way. The picker also groups entries by provider in the backend's order.
0.1.18

v0.1.18

  • Reliable tool calls on hosted Claude. Tool calls with empty inputs (read_preview, save_memory) were getting silently dropped at the streaming layer, freezing the agentic loop after the first step. Woven now uses an OpenAI-compatible parser that finalizes unfinished tool calls at flush time, so the model can complete its loops end-to-end.
  • Switching providers mid-conversation no longer 400s. Some aggregators emit tool-call IDs with characters Anthropic rejects (`:`, `.`); switching from Kimi back to Claude in the same chat would invalidate the whole history. IDs are now normalized at the persistence boundary so cross-provider chats stay valid, and older mixed sessions self-heal on load.
  • First click on icon buttons works again. The popover-backed tooltip introduced in 0.1.17 was stealing the first click on sidebar toggle, preview toggle, new chat, approval mode, edit file, and shortcuts-panel close. Replaced with native macOS tooltips that still show the keyboard shortcut inline (full keycap pill UI lives in the Keyboard Shortcuts panel, ⌘/).
  • The tool activity dropdown no longer flickers open while the model retries a failing tool — it only auto-expands when there's a pending approval to act on.
  • Polished motion-clip defaults. Easings switch to easeOutQuint entrances and easeInQuart exits, slide distances trimmed for less travel, and the default bounce is off (still opt-in on scale and rotate). Motion clips the assistant authors land smoother out of the box.
0.1.17

v0.1.17

  • New per-seam transitions in the reel editor — click any seam between primary clips to pick from 13 effects (Fade, Slide, Whoosh, Flash, Zoom, Pull in/out, Smear, Glitch, TV glitch, and more) with a 0.05–2.0s duration stepper. Subsequent clips auto-shift to make room for the overlap and styles paint every frame instead of being skipped while the incoming video decodes.
  • Reorder primary clips by dragging them past their neighbors. Drag clip 2 past clip 3 to make the order clip 1 / clip 3 / clip 2 — multi-clip cascades work in a single drag, and reversing the motion restores any transitions that were on the moved seams.
  • Smoother timeline scrubbing on heavy clips. Woven encodes a lightweight 720p H.264 proxy on import (and on project open for older clips) and transparently swaps to it during editing; export still uses the original source.
  • Hover tooltips on shortcut-bearing icon buttons now show the keyboard shortcut as a keycap pill — sidebar toggle (⌘⌥B), preview toggle (⌘⌥I), new chat (⌘T), edit file (⌘E), approval mode (⇧Tab), and more. The Keyboard Shortcuts row in the sidebar settings popover now renders and opens the panel.
0.1.16

v0.1.16

  • The preview pane is now collapsible — toggle it with ⌘⌥I, the View menu, or the toolbar button. It auto-uncollapses when you select a file.
  • Fix the right divider being unreachable on narrower MacBook windows (e.g. 13-inch Air at default zoom). Chat and preview can now shrink further before the layout saturates, and the sidebar yields mid-drag instead of pinning the divider in place.
  • Reel editor toolbar is now responsive at narrow widths so it still fits when the preview pane is squeezed to its new minimum.
0.1.15

v0.1.15

  • Built-in reel editor: open any reel from the file browser to scrub the timeline, swap clips, edit captions and text overlays, switch between vertical/horizontal/square formats, and export to MP4. Captions auto-generate from the voiceover and any b-roll audio.
  • Programmable motion clips: Woven can now compose Remotion-style motion graphics inline as part of a reel, and edits hot-reload in the player without restarting playback.
  • Smoother chat transcript: native macOS scroller with the message you just sent pinned in place while the response streams.
  • Sessions resume on launch — Woven re-opens to the chat you last had focused.
  • Sandbox now enforces file-access rules at the kernel level. When a tool tries to touch something outside its allowed paths, you get a one-click prompt to grant access for that run.
0.1.14

v0.1.14

  • The "Allow Keychain access" prompts that fired on every app restart are gone for good. MCP secrets now live as a single entry in the macOS data-protection keychain, scoped by app identity instead of per-item ACL — no prompts, no per-restart noise. Existing secrets migrate automatically on first launch. (v0.1.12 and v0.1.13 were withdrawn for failing to launch on installation; this build is the proper fix and has been launch-tested before notarization.)
0.1.11

v0.1.11

  • The "Allow Keychain access" prompts that fired on every app restart are finally gone. MCP secrets now live as a single entry in the macOS data-protection keychain, which the OS authorizes by app identity instead of per-item ACL. Existing secrets migrate automatically on first launch — you may see one last round of "Always Allow" prompts that one time, then never again.
0.1.10

v0.1.10

  • Tighter follow-up to v0.1.9: editing or removing an MCP server, or testing one whose secret is in the Keychain, no longer pops a Touch ID / password prompt. The "Needs keychain · Unlock" button is now the only thing that ever asks for Keychain access.
0.1.9

v0.1.9

  • MCP servers no longer spam Keychain prompts at startup. Stored secrets are read silently in the background, and any server that actually needs your permission to unlock now shows a "Needs keychain" status with a one-click Unlock button instead of popping repeated authorization dialogs.
0.1.8

v0.1.8

  • New MCP server support. Add local (stdio) or remote (HTTP, with OAuth) MCP servers from Settings → MCP — paste a config snippet, import from Claude, or pick a local project. Woven exposes each server's tools to chat and lets you toggle them per server.
  • The sandbox now passes through your real $HOME so tools like git, gh, npm, brew, and agent-browser find their config and auth without per-call grants. Sensitive paths (~/.ssh, cloud creds, keychains) stay blocked at the OS level.
  • Reading files outside the workspace no longer asks. The sandbox is the actual gate now; protected files (.env, .npmrc, shell rcs) still ask on read. Writes outside the workspace still ask.
  • Browser automation and Docker get an escape hatch. Explicit host-required commands like agent-browser, docker, and watchman prompt "Run outside Woven's sandbox?" with allow-once or always-for-workspace. Unknown browser automation first runs sandboxed; if it fails with Chrome/Chromium sandbox crash evidence, Woven asks whether to rerun the invoking command outside the sandbox.
  • New "Commands run outside sandbox" section in Settings → Safety lets you add your own (e.g. puppeteer, colima, selenium-server).
  • New "Write-protected paths" tier. .git/config, .claude/**, .mcp.json, .codex/**, .agents/**, .woven/** now only prompt on writes — git status/log/diff stop hitting approval walls. Add and remove just like Protected and Restricted paths.
  • Sandbox failure recovery is more reliable. The auto-retry recognizes more error formats (Node EACCES, Python Permission denied, agent-browser-style "is not writable") and asks for the right permission (write, not read) when the operation isn't statically inferable.
  • Unix-domain sockets work in writable directories. Tools that listen on a local socket (agent-browser daemon, language servers, Docker clients) work without extra approval beyond the file-write grant.
  • Settings → Safety Add sheets now show the right examples per tier (e.g. puppeteer, colima for commands rather than path globs).
  • Moonshot is a first-class BYOK provider with Kimi K2.6 in the model picker. Paste your ak- key in Settings → Models; the row notes OpenAI-compatible support so you can point other Kimi-style endpoints at it.
  • New Advanced section per provider in Settings → Models, hidden by default. Expand to override the OpenAI-compatible base URL or pin a Moonshot model id.
  • Numbered tab shortcuts (⌘1–⌘9) jump between chat tabs.
  • Preview pane remembers its selection per chat, and now supports external preview targets so you can open arbitrary URLs alongside the conversation.
  • Pending tool approvals are easier to spot in the transcript, and scroll controls behave better while streaming.
0.1.7

v0.1.7

  • New web_search and web_fetch tools. The agent can search the web and read pages directly. Both go through Woven Hosted and debit your prepaid balance; if you run out, you'll see a clear top-up message.
  • Network-using commands like agent-browser, playwright, node, and python are now recognized so they prompt for approval instead of silently failing. Approve once and they run.
  • New "Allow external network" toggle in Settings → Safety. On by default; flip off if you want every network command to ask.
0.1.6

v0.1.6

  • Future updates show a small "Update to vX.Y.Z · Restart" banner above Settings in the sidebar instead of popping a modal. Sparkle now downloads new versions silently in the background; click the banner to restart and install.
  • Auto-update checks now run hourly instead of once a day, so updates land on your machine within an hour of publish.
0.1.5

v0.1.5

  • Fix hover tooltips on the context meter and "Conversation compacted" marker rendering as a giant empty popover on macOS Tahoe (was most visible on slower hardware like MacBook Air).
  • Approval-mode menu (shield icon at the top of chat) now uses macOS's native checkmark column for Auto / Always Ask, matching system menu conventions.
0.1.4

v0.1.4

  • New sandboxed permissions: bash and file tools now run in an OS-level sandbox per command, isolated from credentials, SSH keys, and the rest of your home folder. A redesigned Permissions tab in Settings shows what Auto vs Always Ask allow, ask, and block — and lets you manage Protected paths (Woven asks first) and Restricted paths (Woven blocks even after approval).
  • Approval prompts get keyboard shortcuts: ⌘↩ to Allow, ⌘⇧↩ to Always Allow for this workspace, ⌘. to Deny. Each button shows its shortcut as a keycap, and the row names the path Woven will remember so "Always" is no longer a black box.
  • Context compaction now works on both Anthropic and OpenAI — long chats summarize automatically regardless of which provider is active.
  • Sidebar gets a richer file outline with rename, delete, and drag actions. Preview pane navigation stops cleanly at the first and last item instead of wrapping.
0.1.3

v0.1.3

  • Sign-in stays active across long sessions: Woven tokens now refresh automatically before they expire instead of silently failing the next request.
  • If a session truly expires, you're cleanly signed out with a "session expired, sign in again" hint instead of seeing repeated server errors.
  • Backend error messages now display correctly when the server returns structured error payloads (previously some errors showed as blank).
0.1.2

v0.1.2

  • Show an out-of-credits notice above the composer when the API rejects a request, instead of failing silently.
  • Editing an API key in Settings now auto-restarts the engine (debounced) so new keys take effect without quitting the app; a transient "Saved · engine restarting…" hint confirms the restart.
  • Theme switching: window backgrounds stay opaque in light mode and split-pane dividers paint correctly across appearance changes.
  • Sidecar startup failures now surface a clear error (exit code or signal plus the last few stderr lines) after a 10-second timeout, instead of hanging the chat indefinitely.
0.1.1

v0.1.1

  • Polish DMG installer background.
0.1.0

v0.1.0

  • First public release.