--- name: handoff description: Push the run's accepted artifact to a downstream collaboration surface (cli, other code agents, cloud, desktop) and stamp the artifact manifest with the export target. od: scenario: tune-collab mode: handoff --- # Handoff Spec §11.5.1 / §21.5: an OD run isn't done when the artifact exists — it's done when the artifact reaches the surface the user will keep iterating on. This atom is the "push it somewhere" stage. It's the natural counterpart to `diff-review`. ## Inputs - The accepted artifact set (after `diff-review` resolved with `decision: 'accept' | 'partial'`). - The export target (one of the `surface` enum values from `ArtifactManifest.exportTargets[].surface`). ## Surfaces | surface | typical follow-on | | --- | --- | | `cli` | the user runs `od files read` against the project; no extra push | | `desktop` | open the project in the OD desktop app | | `web` | publish to the public marketplace via spec §13's `od://` deep link | | `docker` | wrap the artifact into a self-contained container (calls the §15.4 image) | | `github` | open a PR via `od plugin publish --to ` | | `figma` | round-trip back into the figma-migration source file | | `code-agent` | hand off to Cursor / Claude Code / Codex sitting on top of the project cwd | ## Output Updates `ArtifactManifest.exportTargets[]` with a row per push, appending — never replacing — so the artifact's distribution history stays append-only. ## Convergence The atom completes when at least one `exportTargets[]` entry matches the user's intent or the user explicitly skipped via the `confirmation` GenUI surface. ## Anti-patterns the prompt fragment forbids - Pushing the artifact to a surface that wasn't on the user's intent list. - Mutating `sourcePluginSnapshotId` (it's immutable; the export trail is additive). - Treating `figma` as a no-op when the user's source was a Figma file — round-trip is the whole point of the figma-migration scenario. ## Status Implemented by the daemon runner in `apps/daemon/src/plugins/atoms/handoff.ts`. It records provenance, `handoffKind`, and export targets, then persists the updated artifact manifest.