/deploy-to-testnet
Deploy a Sui Move package to testnet and capture package id and UpgradeCap. Use when the user wants to deploy to testnet or publish to Sui testnet.
$ npx -y skills add pivyme/suiperpower --skill deploy-to-testnet --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/deploy-to-testnet
Context preview
The summary Claude sees to decide when to auto-load this skill.
Deploy a Sui Move package to testnet and capture package id and UpgradeCap. Use when the user wants to deploy to testnet or publish to Sui testnet.
SKILL.md
deploy-to-testnet.SKILL.mdname: deploy-to-testnet
description: Deploy a Sui Move package to testnet and capture package id and UpgradeCap. Use when the user wants to deploy to testnet or publish to Sui testnet.
Preamble (run first)
# Suiperpower telemetry. Routes through the CLI so projects.json + Convex stay in sync.
# Silent on failure so the skill never blocks. Opt out: SUIPERPOWER_TELEMETRY=off.
#
# AGENT NOTE: when this skill finishes, run the matching completion command:
# suiperpower track deploy-to-testnet ship completed
# Or use "failed" / "aborted" if it ended that way.
command -v suiperpower >/dev/null 2>&1 && suiperpower track deploy-to-testnet ship started >/dev/null 2>&1 &
true
If `TEL_PROMPTED` is `no`, before doing real work, ask the user:
> Help suiperpower get better. We track which skills get used and how long they take. No code, no file paths, no PII. Change anytime in `~/.suiperpower/config.json`. > > A) Sure, anonymous > B) No thanks
Write the answer to `~/.suiperpower/config.json` `telemetryTier` field and create `~/.suiperpower/.telemetry-prompted`. Then continue.
What this skill does
Runs the testnet deploy flow end to end: validates prerequisites, runs `sui client publish`, captures the package id and `UpgradeCap` from the publish output, writes `deploy-context.md` with the real artifacts, and points the user at the next step.
The flow follows `skills/data/guides/deploy-runbook.md` for the publish steps and `skills/data/guides/package-id-capture.md` for the capture rules. Capability handling is non-trivial; the skill never prints capability ids in shared logs and never hardcodes them into client code.
When to use it
- After the Move package compiles and tests pass on localnet.
- Before any frontend work that needs a real on-chain package id.
- Any time the user wants a fresh testnet deployment after a breaking change.
When NOT to use it
- Mainnet deploys. Route to `deploy-to-mainnet`.
- Localnet runs. Use `sui move test` and the local validator directly; no deploy-context is written for localnet.
- Pre-test, when the package has not been compiled or unit tested.
If you activated this and the user actually wants something else, consult `skills/SKILL_ROUTER.md` and hand off.
Inputs
- `.suiperpower/build-context.md` for the Move package path and module names.
- The user's funded testnet address. If not funded, the skill points at the testnet faucet.
- Sui CLI installed and on `testnet` env. If not, the skill walks the env switch per `skills/data/guides/rpc-wallet-guide.md`.
Outputs
A `.suiperpower/deploy-context.md` entry following the canonical headers from `skills/data/specs/phase-handoff.md`:
## Deploy, <timestamp>
### Network
- env: testnet
- rpc: <rpc url>
- gas address: <0x...>
- balance before: <SUI>
- balance after: <SUI>
### Package
- package id: <0x...>
- modules: <comma-separated module names>
- digest: <publish digest>
- upgrade cap object: <0x...>
- upgrade cap policy: <compatible | additive | dep-only | immutable>
### Notes
- <anything the user should know about this deploy>
Workflow
1. **Preflight**
- Verify Sui CLI is installed and version is at least the version pinned in `skills/data/guides/deploy-runbook.md`. If not, ask the user to run `cargo install --git https://github.com/MystenLabs/sui --branch testnet sui` or use the official binary.
- Verify env is `testnet` via `sui client active-env`. If not, switch.
- Verify the active address has enough SUI for gas. If not, point at the official testnet faucet and pause.
- Read `build-context.md` to get the package path. Default to `./move/`.
2. **Build and check**
- Run `sui move build --path <package path>`. Surface any error.
- Run `sui move test --path <package path>`. If tests fail, do not proceed.
3. **Publish**
- Run the publish command per `skills/data/guides/deploy-runbook.md`:
`sui client publish <package path> --gas-budget <budget> --json`
- Capture the JSON output to a temp file.
4. **Capture artifacts**
- Apply the jq recipe from `skills/data/guides/package-id-capture.md` to extract:
- `package id`
- `digest`
- `UpgradeCap` object id
- Cross-check the package id against the modules listed in the build output.
5. **Write deploy-context.md**
- Append the new `## Deploy, <timestamp>` block per the spec headers.
- Include the env, RPC, gas address, balances, package id, modules, digest, upgrade cap, and policy.
- Leave any prior `## Deploy` blocks intact (append-only).
6. **Verify on-chain**
- Run `sui client object <package id>` to confirm the package exists.
- Run `sui client object <upgrade cap id>` to confirm the cap landed in the active address.
7. **Hand off**
- Tell the user the package id explicitly so they can wire it into `cli/data/sui-skills.json` or their frontend.
- Recommend `deploy-to-mainnet` once the testnet deploy has been exercised by a frontend or PTB. Recommend `submit-to-sui-overflow` if this is the submission deploy.
Quality gate (anti-slop)
Before reporting done:
- Did `sui move build` and `sui move test` both pass before publish?
- Was the package id captured from real publish output, not from a manual prompt to the user?
- Was the `UpgradeCap` object id captured and recorded?
- Was the upgrade policy recorded?
- Was `deploy-context.md` appended (not overwritten)?
- Were the post-deploy `sui client object` checks run and surfaced?
If any answer is no, the skill keeps working.
References
On-demand references (load when relevant to the user's question):
- `references/preflight-checklist.md`: Step-by-step preflight items to verify before publish.
- `references/troubleshooting.md`: Common testnet publish failures and fixes.
Canonical:
- `skills/data/guides/deploy-runbook.md`
- `skills/data/guides/package-id-capture.md`
- `skills/data/guides/rpc-wallet-guide.md`
Use in your agent
- Claude Code: `claude "/suiper:deploy-to-te
Read more
name: deploy-to-testnet description: Deploy a Sui Move package to testnet and capture package id and UpgradeCap. Use when the user wants to deploy to testnet or publish to Sui testnet.
Preamble (run first)
# Suiperpower telemetry. Routes through the CLI so projects.json + Convex stay in sync. # Silent on failure so the skill never blocks. Opt out: SUIPERPOWER_TELEMETRY=off. # # AGENT NOTE: when this skill finishes, run the matching completion command: # suiperpower track deploy-to-testnet ship completed # Or use "failed" / "aborted" if it ended that way. command -v suiperpower >/dev/null 2>&1 && suiperpower track deploy-to-testnet ship started >/dev/null 2>&1 & true
If `TEL_PROMPTED` is `no`, before doing real work, ask the user:
> Help suiperpower get better. We track which skills get used and how long they take. No code, no file paths, no PII. Change anytime in `~/.suiperpower/config.json`. > > A) Sure, anonymous > B) No thanks
Write the answer to `~/.suiperpower/config.json` `telemetryTier` field and create `~/.suiperpower/.telemetry-prompted`. Then continue.
What this skill does
Runs the testnet deploy flow end to end: validates prerequisites, runs `sui client publish`, captures the package id and `UpgradeCap` from the publish output, writes `deploy-context.md` with the real artifacts, and points the user at the next step.
The flow follows `skills/data/guides/deploy-runbook.md` for the publish steps and `skills/data/guides/package-id-capture.md` for the capture rules. Capability handling is non-trivial; the skill never prints capability ids in shared logs and never hardcodes them into client code.
When to use it
- After the Move package compiles and tests pass on localnet.
- Before any frontend work that needs a real on-chain package id.
- Any time the user wants a fresh testnet deployment after a breaking change.
When NOT to use it
- Mainnet deploys. Route to `deploy-to-mainnet`.
- Localnet runs. Use `sui move test` and the local validator directly; no deploy-context is written for localnet.
- Pre-test, when the package has not been compiled or unit tested.
If you activated this and the user actually wants something else, consult `skills/SKILL_ROUTER.md` and hand off.
Inputs
- `.suiperpower/build-context.md` for the Move package path and module names.
- The user's funded testnet address. If not funded, the skill points at the testnet faucet.
- Sui CLI installed and on `testnet` env. If not, the skill walks the env switch per `skills/data/guides/rpc-wallet-guide.md`.
Outputs
A `.suiperpower/deploy-context.md` entry following the canonical headers from `skills/data/specs/phase-handoff.md`:
## Deploy, <timestamp> ### Network - env: testnet - rpc: <rpc url> - gas address: <0x...> - balance before: <SUI> - balance after: <SUI> ### Package - package id: <0x...> - modules: <comma-separated module names> - digest: <publish digest> - upgrade cap object: <0x...> - upgrade cap policy: <compatible | additive | dep-only | immutable> ### Notes - <anything the user should know about this deploy>
Workflow
1. **Preflight**
- Verify Sui CLI is installed and version is at least the version pinned in `skills/data/guides/deploy-runbook.md`. If not, ask the user to run `cargo install --git https://github.com/MystenLabs/sui --branch testnet sui` or use the official binary.
- Verify env is `testnet` via `sui client active-env`. If not, switch.
- Verify the active address has enough SUI for gas. If not, point at the official testnet faucet and pause.
- Read `build-context.md` to get the package path. Default to `./move/`.
2. **Build and check**
- Run `sui move build --path <package path>`. Surface any error.
- Run `sui move test --path <package path>`. If tests fail, do not proceed.
3. **Publish**
- Run the publish command per `skills/data/guides/deploy-runbook.md`:
`sui client publish <package path> --gas-budget <budget> --json`
- Capture the JSON output to a temp file.
4. **Capture artifacts**
- Apply the jq recipe from `skills/data/guides/package-id-capture.md` to extract:
- `package id`
- `digest`
- `UpgradeCap` object id
- Cross-check the package id against the modules listed in the build output.
5. **Write deploy-context.md**
- Append the new `## Deploy, <timestamp>` block per the spec headers.
- Include the env, RPC, gas address, balances, package id, modules, digest, upgrade cap, and policy.
- Leave any prior `## Deploy` blocks intact (append-only).
6. **Verify on-chain**
- Run `sui client object <package id>` to confirm the package exists.
- Run `sui client object <upgrade cap id>` to confirm the cap landed in the active address.
7. **Hand off**
- Tell the user the package id explicitly so they can wire it into `cli/data/sui-skills.json` or their frontend.
- Recommend `deploy-to-mainnet` once the testnet deploy has been exercised by a frontend or PTB. Recommend `submit-to-sui-overflow` if this is the submission deploy.
Quality gate (anti-slop)
Before reporting done:
- Did `sui move build` and `sui move test` both pass before publish?
- Was the package id captured from real publish output, not from a manual prompt to the user?
- Was the `UpgradeCap` object id captured and recorded?
- Was the upgrade policy recorded?
- Was `deploy-context.md` appended (not overwritten)?
- Were the post-deploy `sui client object` checks run and surfaced?
If any answer is no, the skill keeps working.
References
On-demand references (load when relevant to the user's question):
- `references/preflight-checklist.md`: Step-by-step preflight items to verify before publish.
- `references/troubleshooting.md`: Common testnet publish failures and fixes.
Canonical:
- `skills/data/guides/deploy-runbook.md`
- `skills/data/guides/package-id-capture.md`
- `skills/data/guides/rpc-wallet-guide.md`
Use in your agent
- Claude Code: `claude "/suiper:deploy-to-te
Showing the first part of this file.
Build something meaningful, on Sui. A superpower for AI coding agents to ship real products on Sui. Your AI coding agent has never written Move before. Suiperpower fixes that.
Repo: pivyme/suiperpower
Other skills on suiperpower.
- /brand-design
Pick a brand name, color palette, or typography for a Sui product. Use when the user wants to name or brand a Sui project.
Open skill - /build-ai-agent
Build an AI agent that signs Sui transactions or runs onchain actions. Use when the user wants an AI agent on Sui.
Open skill - /build-data-pipeline
Build a Sui data indexer or analytics pipeline. Use when the user wants to index Sui events, build a pipeline, or query Sui RPC data.
Open skill - /build-mobile-sui
Build a mobile Sui app with React Native or the Sui Mobile SDK. Use when the user wants iOS, Android, or mobile Sui flows.
Open skill - /build-with-claude
Pair with a coding agent to build a Sui MVP step by step. Use when the user wants to build the MVP iteratively with an agent.
Open skill - /build-with-move
Author Sui Move modules and packages with a senior Move dev as your pair. Use when the user wants to write, build, author, add, or scaffold Move code, smart contracts, or Sui programs at the module or function level, in any phrasing.
Open skill

