A deterministic linter for Sui Move

Catches the convention, idiom, ability, and security mistakes the Sui compiler misses. Scored 0-100, every rule cited, built for coding agents.

Health scoregood
87/ 100
0errors3warnings9info
conventions/missing-edition-2024Move.toml:2
functions/getter-uses-get-prefixadmin.move:10
sources/admin.move
1 error1 warning
1module protocol::admin;
2
3public struct AdminCap has key { id: UID }
4
5fun init(ctx: &mut TxContext) {
6 let admin = AdminCap { id: object::new(ctx) };
7- transfer::public_share_object(admin);
7+ transfer::transfer(admin, ctx.sender());
8}
9
10-public fun get_id(self: &AdminCap): ID {
10+public fun id(self: &AdminCap): ID {
11 self.id.to_inner()
12}
13
14public fun delete(self: AdminCap) {
15 let AdminCap { id } = self;
16 id.delete();
17}

Every rule cited

Each finding links to the exact Move Book section or concept page behind it, so you can check the reasoning instead of trusting a black box.

Built for coding agents

move-doctor install drops a SKILL.md into Claude Code, Cursor, and more. Your agent fetches each rule's fix recipe and applies it for you.

Folds in sui --lint

With the Sui CLI on PATH, the compiler's own lints run in the same pass and fold into one score, so you read a single report.

Gate every pull request

The GitHub Action reviews each PR, comments the findings inline, and fails the build when the score regresses.

View on GitHub Marketplace
move-doctor / scanfailing
$move-doctor --diff origin/main
functions/getter-uses-get-prefixadmin.move:10
security/public-share-of-capadmin.move:7
score87 / 100· 1 error · 1 warning
$

Run it on your codebase

No install, no config. Scan in seconds.