Skip to content

/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.

shell
$ npx -y skills add pivyme/suiperpower --skill deploy-to-testnet --agent claude-code

How 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
How auto-invocation works

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.md
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
Read more
Read it on GitHub ↗

Showing the first part of this file.

Ships withsuiperpower

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.

Get the whole plugin, auto-invoked
Stats
12
Stars
0
Views
0
Forks
Active
Maintenance
TypeScript
Language
MIT
License
2d ago
Last commit
2mo ago
Created

Repo: pivyme/suiperpower