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.
npx skills add https://github.com/nexu-io/open-design --skill 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.
diff-review resolved withdecision: 'accept' | 'partial').
surface enum values fromArtifactManifest.exportTargets[].surface).
| 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 <catalog> |
| 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 |
Updates ArtifactManifest.exportTargets[] with a row per push,
appending — never replacing — so the artifact's distribution
history stays append-only.
The atom completes when at least one exportTargets[] entry
matches the user's intent or the user explicitly skipped via the
confirmation GenUI surface.
intent list.
sourcePluginSnapshotId (it's immutable; the exporttrail is additive).
figma as a no-op when the user's source was a Figmafile — round-trip is the whole point of the figma-migration
scenario.
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.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.
Build agentic applications with GitHub Copilot SDK. Use when embedding AI agents in apps, creating custom tools, implementing streaming responses, managing sessions, connecting to MCP servers, or creating custom agents. Triggers on Copilot SDK, GitHub SDK, agentic app, embed Copilot, programmable agent, MCP server, custom agent.
Coding Agent Session Search - unified CLI/TUI to index and search local coding agent history from Claude Code, Codex, Gemini, Cursor, Aider, ChatGPT, Pi-Agent, Factory, and more. Purpose-built for AI agent consumption with robot mode.
Destructive Command Guard - High-performance Rust hook for Claude Code that blocks dangerous commands before execution. SIMD-accelerated, modular pack system, whitelist-first architecture. Essential safety layer for agent workflows.
Makepad UI development skills for Rust apps: setup, patterns, shaders, packaging, and troubleshooting.
Secure environment variable management ensuring secrets are never exposed in Claude sessions, terminals, logs, or git commits
Prompt for generating an AGENTS.md file for a repository
Take nexu-io/handoff from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.