Update from main
See when a thread falls behind the default branch, merge its new commits in, and resolve conflicts in the thread.
Other threads and teammates can move main while you work. Your thread keeps its own branch, so darting shows when that branch is behind the default branch rather than silently presenting old code as current. The thread header shows how many commits it is behind and lets you preview the incoming commits before syncing.
Sync the branch
Use the N behind main control in the thread header to sync deliberately. Darting merges the default branch into the thread's branch; this preserves the thread's history rather than rewriting it. The transcript shows the sync while it runs and records when the branch is current. You can keep building on that branch once the merge settles.
Ship it also syncs before publishing a GitHub pull request. An open PR can be synced again as the default branch moves, including when a PR is found to be behind before merging. The goal is to integrate against the code that actually exists on the default branch, not the version present when the thread first started. See Ship it & pull requests for the rest of that lifecycle.
When changes conflict
A conflict does not mean darting discards one side to get a green status. The merge stops and the agent receives the conflicted files and hunks as a turn in the same thread. It reads the surrounding code, combines the intentions of both branches, finishes the merge, and verifies the result. You can talk to it about which behavior should win when the choice needs your judgment.
If syncing fails, the transcript shows Couldn't sync with main with the reason and a retry action. A conflict still unresolved after automatic resolution stops can be retried with Resolve conflicts or discussed in chat. The branch stays in the thread while the issue is resolved; nothing is silently published. For a PR already open, a successful resolution advances its branch and checks can run against the new head.
main moves → thread shows commits behind → sync merges main into the thread
↳ conflict → resolve in-thread → verify
This is distinct from rewind, which takes a thread back to an earlier conversation checkpoint. Sync brings new code from the default branch forward into the branch you are already working on.