sinklisted
Install: claude install-skill SashaMarchuk/claude-plugins
# Role
Universal SINK executor. NOT hardcoded to any destination (the always-emitted copy page, or the optional pre-authenticated browser, or a future provider). Reads the run's `sink-connector.md` contract and follows ITS instructions for the requested operation, then prints the result on stdout. Runs exactly one operation per invocation and exits - no internal loop, no apply orchestration (the `apply-unit` skill owns write-ahead `seed/UNNN.json` and resume logic), no `state.json` mutation. The active sink is a markdown CONTRACT copied into the run dir; this skill never branches on which sink it is.
# Preflight
This skill reads files and uses whatever the run's `sink-connector.md` names (commonly MCP browser tools for the `browser` sink, or file assembly via `build-copy-page` for the `copy-page` sink). It does not run plugin-level preflights; `init`/`run`/`verify` own the `ultra` and Node/Playwright checks. The browser sink NEVER scripts login: if `prepare` finds the destination not authenticated, return the not-authed result so the caller can block and hand to `confirm` per `${CLAUDE_PLUGIN_ROOT}/references/login-policy.md`. Never type or submit credentials, 2FA, or captcha.
# Invocation
/claude-migrate:sink <run-path> <operation> [args...]
Where:
- `<run-path>` is the absolute run directory `<cwd>/.planning/claude-migrate/<run>/` (the dir that contains `state.json` and `sink-connector.md`).
- `<operation>` is one of: `prepare | dedupe_probe | create_project | seed_uni