From suiper
Surveys Move packages and rewrites code paths to use OpenZeppelin's audited Sui libraries for safe ownership transfer, integer math, and fixed-point decimal arithmetic.
How this skill is triggered — by the user, by Claude, or both
Slash command
/suiper:openzeppelin-sui-libsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
```bash
# 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 openzeppelin-sui-libs build completed
# Or use "failed" / "aborted" if it ended that way.
command -v suiperpower >/dev/null 2>&1 && suiperpower track openzeppelin-sui-libs build 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.
Surveys the user's Move package for hand-rolled patterns that OZ Contracts for Sui (v1.1.0) replaces, pulls in the right OZ packages via MVR, and rewrites the affected code paths. The library covers three areas:
openzeppelin_access): two-step transfer and time-locked delayed transfer wrappers for key + store objects.openzeppelin_math): overflow-safe mul_div, sqrt, log2, log10, average, shift ops, modular arithmetic, u512 wide type, and decimal scaling.openzeppelin_fp_math): UD30x9 (unsigned) and SD29x9 (signed) decimal types with 9 decimal places, matching Sui coin precision.That is the complete scope. There is no access_control role registry, no pausable, no ownable, no upgradeable wrapper in OZ Sui. If the user needs those patterns, they stay hand-rolled.
mul_div or fixed-point math is a liability.If you activated this and the user actually wants something else, consult skills/SKILL_ROUTER.md and hand off.
.suiperpower/build-context.md and any prior review-move output.If unclear, interview the user for:
Updated Move.toml with MVR dependencies for the adopted OZ packages.
Move modules rewritten to use OZ primitives.
Tests updated and passing.
Append to .suiperpower/build-context.md:
## openzeppelin-sui-libs session, <timestamp>
- oz version: 1.1.0 (contracts-sui)
- packages adopted: <list of openzeppelin_access, openzeppelin_math, openzeppelin_fp_math>
- hand-rolled patterns removed: <list>
- test count before / after: <n> / <n>
- open issues: <list>
The skill never deletes files outside the integration source path without explicit user confirmation.
Context gathering
.suiperpower/build-context.md if present.OZ package survey
references/oz-modules-quickref.md.Add MVR dependencies
Move.toml:
openzeppelin_access = { r.mvr = "@openzeppelin-move/access" }
openzeppelin_math = { r.mvr = "@openzeppelin-move/integer-math" }
openzeppelin_fp_math = { r.mvr = "@openzeppelin-move/fixed-point-math" }
sui move build. Resolve any conflicts.Migration plan
Refactor
API check
two_step_transfer wraps objects, not storage slots. delayed_transfer needs a Clock reference.Option<T>, not abort-on-overflow. Handle the None case.Test pass
sui move test suite. Refuse to declare done if anything is red.Writeback
.suiperpower/build-context.md.Closing handoff
.suiperpower/intent.md exists and the session was non-trivial (OZ modules pinned in Move.toml, hand-rolled patterns migrated to OZ-backed paths, capability-by-reference refactors), recommend verify-against-intent as the next step so the new OZ-backed surface is checked before shipping.intent.md exists and the session was non-trivial, surface that gap once: offer clarify-intent to backfill, do not force it.Before reporting done, the skill asks itself the following and refuses to declare success if any answer is no:
sui move build produce zero errors after the migration?two_step_transfer: is the wrapper owned by the correct address, and is accept_transfer tested?delayed_transfer: is the min_delay_ms set to a sane value, and is the Clock passed correctly?Option return values from mul_div/inv_mod handled (not blindly unwrapped)?build-context.md so future audits can trace them?If any answer is no, the skill reports the gap and works through it before claiming the migration is complete.
On-demand references (load when relevant to the user's question):
references/oz-modules-quickref.md: All three OZ packages, their modules, types, and function signatures.references/migration-from-handrolled.md: Step-by-step pattern migrations with before/after code.references/oz-pitfalls.md: API parity surprises, version discipline, common mistakes.Knowledge docs (load when scope expands beyond what is in references):
skills/data/sui-knowledge/sponsor-docs/openzeppelin-sui.md: Overview, correct repo URLs, deeper integration notes.claude "/suiper:openzeppelin-sui-libs <your message>"codex "/openzeppelin-sui-libs <your message>"~/.cursor/rules/openzeppelin-sui-libs.mdc and reference it.If you activated this and the user actually wants something else, consult skills/SKILL_ROUTER.md and hand off.
npx claudepluginhub pivyme/suiperpower --plugin suiperCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.