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
1 error1 warning
1module protocol::admin;23public struct AdminCap has key { id: UID }45fun 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}910-public fun get_id(self: &AdminCap): ID {10+public fun id(self: &AdminCap): ID {11 self.id.to_inner()12}1314public 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 --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.