[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aptos-move-replay":3,"mdc-qs1s19-key":29,"related-org-aptos-move-replay":1737,"related-repo-aptos-move-replay":1905},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":20,"topics":24,"repo":25,"sourceUrl":27,"mdContent":28},"move-replay","replay and debug Aptos transactions","Replay a committed on-chain Aptos transaction locally to debug its outcome. Use when investigating a failed or unexpected transaction, reproducing an abort, or testing a local Move patch against a historical transaction.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aptos","Aptos Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faptos.png","aptos-labs",[13,17],{"name":14,"slug":15,"type":16},"Web3","web3","tag",{"name":18,"slug":19,"type":16},"Debugging","debugging",0,"https:\u002F\u002Fgithub.com\u002Faptos-labs\u002Faptos-ai","2026-07-19T06:03:11.562048",null,[],{"repoUrl":21,"stars":20,"forks":20,"topics":26,"description":23},[],"https:\u002F\u002Fgithub.com\u002Faptos-labs\u002Faptos-ai\u002Ftree\u002FHEAD\u002Fplugins\u002Fmove-flow\u002Fskills\u002Fmove-replay","---\nname: move-replay\ndescription: Replay a committed on-chain Aptos transaction locally to debug its outcome. Use when investigating a failed or unexpected transaction, reproducing an abort, or testing a local Move patch against a historical transaction.\n---\n\n## When to Use This Skill\n\nUse this skill whenever the user wants to:\n\n- Understand why an on-chain transaction succeeded or failed (Move abort, execution failure, out-of-gas).\n- Reproduce a transaction's behavior locally without re-submitting it.\n- Test whether a *local* Move package fix would change the outcome of a committed transaction (regression check for a proposed patch).\n- Inspect the storage reads a single transaction issued through the debugger.\n\nThe underlying tool is read-only: it fetches the committed transaction and aux info from the network, then executes it against the historical state. It does **not** mutate any on-chain state.\n\n## Tool\n\nUse the `move_replay_transaction` MCP tool. Do not invoke the Aptos CLI's `aptos move replay` directly — this tool wraps it and returns structured JSON.\n\n### Required Parameters\n\n- **`txn_id`** (`u64`) — Committed ledger version of the transaction to replay.\n- **`network`** (`string`) — One of `\"mainnet\"`, `\"testnet\"`, `\"devnet\"`, or a full REST endpoint URL (e.g. `\"https:\u002F\u002Fmy-node.example.com\u002Fv1\"`).\n\n### Optional Parameters\n\n- **`local_package_paths`** (`string[]`, default `[]`) — Paths to local Move packages whose modules override the on-chain versions during replay. Each path must point to a directory containing `Move.toml`. Use this to simulate a fix.\n- **`named_addresses`** (`object`, default `{}`) — Named-address bindings (`{\"name\": \"0xADDR\"}`) used when compiling the local packages. Only consulted when `local_package_paths` is non-empty.\n- **`node_api_key`** (`string`) — Bearer token sent as `Authorization: Bearer \u003Ckey>` to the node. Use this when the public endpoint is rate-limited.\n- **`trace`** (`bool`, default `false`) — When `true`, record a structured trace of debugger state-view requests (one `state_view { version, with_overrides }` entry per call) into the response. Off by default; tracing adds overhead. Only state-view requests are intercepted — the wrapper does not introspect Move bytecode execution itself.\n- **`trace_storage_reads`** (`bool`, default `false`) — When `true`, additionally record one `storage_read` entry per state-view read. Off by default because a single replay typically issues hundreds of reads, which crowd out the higher-signal events. Only consulted when `trace` is `true`.\n- **`max_trace_events`** (`usize`, default `500`) — Trace truncation limit. Only consulted when `trace` is `true`. Must be between `1` and the server-side cap of `100_000` (inclusive); requests outside that range fail fast with an `invalid_params` error. Raise it only if `truncated > 0` in the response.\n- **`redact_storage_keys`** (`bool`, default `true`) — When `true`, storage-read trace entries omit the `Debug`-formatted `StateKey`. Only consulted when both `trace` and `trace_storage_reads` are `true`. Disable only when the key contents themselves are needed for debugging.\n\n### Constraints\n\n- Only **user** transactions are supported. Genesis, BlockMetadata, BlockEpilogue, StateCheckpoint, and ValidatorTransaction variants are rejected with a structured `invalid_params` error.\n- The tool enforces a server-side timeout. If replay times out, suggest turning `trace_storage_reads` back off, dropping local overrides, or raising the server's `--tool-timeout`.\n\n## Interpreting the Response\n\nThe tool returns a JSON object with these fields:\n\n| Field | Meaning |\n|---|---|\n| `success` | `true` = `Keep(Success)`. `false` = `Keep(\u003Cany failure>)`. `null` = `Discard` or `Retry` (transaction was not committed in the normal sense). |\n| `vm_status` | Human-readable VM status, same formatting as the Aptos CLI's `replay` command. |\n| `abort` | Present only when the status is `MoveAbort`. Includes `location` (`\"0xADDR::module_name\"` or `\"script\"`), `code`, and optional `reason` \u002F `description` if the module shipped abort metadata. |\n| `execution_failure` | Present only when the status is `ExecutionFailure`. Includes `location`, `function` index, and `code_offset` within that function. |\n| `transaction_hash` | Hex hash of the signed transaction. |\n| `version` | Echo of the input `txn_id`. |\n| `sender` | Sender address as a `0x…` hex literal. |\n| `sequence_number` | Present when the transaction uses sequence-number replay protection; absent for orderless (nonce-based) transactions. |\n| `gas_used`, `gas_unit_price` | Same as on-chain. |\n| `local_override_in_use` | `true` iff `local_package_paths` was non-empty — i.e. the replay diverged from on-chain bytecode. |\n| `trace` | Captured trace entries, only when `trace: true` was set on the request. Each entry is one of `state_view` (always exactly one per replay) or `storage_read` (zero by default; many when `trace_storage_reads: true`). |\n\n### Reading the Status\n\n1. **`success == true`** → transaction would commit normally. If the user expected a failure, double-check the inputs.\n2. **`success == false` with `abort` populated** → a Move `abort` was hit. Report:\n   - `abort.location` (which module),\n   - `abort.code` (raw code),\n   - `abort.reason` \u002F `abort.description` if available (these come from `#[error]` \u002F abort-info metadata in the module),\n   - The matching constant in the source if the reason name is symbolic (e.g. `EINSUFFICIENT_BALANCE`).\n3. **`success == false` with `execution_failure` populated** → a non-abort runtime failure (arithmetic overflow, type error, vector bounds, etc.). Report `location`, `function`, and `code_offset`; offer to disassemble the module if the user wants the exact bytecode site.\n4. **`success == false` with neither populated** → likely `OutOfGas` or `MiscellaneousError`. The `vm_status` string carries the detail.\n5. **`success == null`** → transaction was `Discard`ed or marked `Retry`. The `vm_status` string explains why; common causes are signature\u002Fvalidation issues that prevent execution.\n\n## Workflows\n\n### A. Plain Debugging — \"Why did this transaction fail?\"\n\n1. Confirm with the user which `network` the transaction lives on.\n2. Call `move_replay_transaction` with just `txn_id` and `network`.\n3. Read `success` first; then drill into `abort` or `execution_failure`.\n4. If the user wants the source-level reason, query the module with `move_package_query` (or read the module source) to find the constant matching `abort.code` \u002F the function at `execution_failure.function`.\n\n### B. Patch Testing — \"Would my fix change this transaction's outcome?\"\n\n1. Ask for (or locate) the local Move package that re-implements the relevant module(s). It must be a buildable package with a `Move.toml`.\n2. Determine the named-address bindings required to compile it. They must resolve every named address used in the package's source.\n3. Call the tool with:\n   - `local_package_paths` set to the package directory (or list of directories),\n   - `named_addresses` mapping each name to its on-chain address,\n   - the same `txn_id` and `network` as the failing transaction.\n4. The response will have `local_override_in_use: true`. Compare its `success` \u002F `abort` \u002F `execution_failure` against the unmodified replay (workflow A) to see whether the patch changed behavior.\n5. **Important**: if the patched module's bytecode is type-incompatible with the on-chain version (different public function signatures, removed structs, etc.), the VM will fail at link time — surface this clearly rather than treating it as a Move bug.\n\n### C. Tracing — \"Show me what the VM did step by step\"\n\n1. Start with `trace: true` alone. You will get exactly one `state_view { version, with_overrides }` entry — the state view the VM consumed for the run. With `with_overrides: false` you can confirm the on-chain path was taken; with `with_overrides: true` you can confirm the local-override path was taken. For most \"why did this fail\" questions this entry plus the structured `abort` \u002F `execution_failure` fields are all you need.\n2. Only set `trace_storage_reads: true` when you specifically need to see which `StateKey`s were touched during execution. Expect hundreds of entries per replay; raise `max_trace_events` (e.g. to `5000`) when you do this. Leave `redact_storage_keys: true` unless you need the `Debug`-formatted key bytes.\n3. When reporting back, **enumerate the actual entries verbatim** — never collapse them to counts. The single `state_view` entry should always appear in the output you show the user; quote the `storage_read` entries one by one when the user asked for them.\n4. If the response shows `truncated > 0`, the cap was hit. Either raise `max_trace_events` or turn `trace_storage_reads` back off.\n5. The trace is at debugger-wrapper granularity — it does **not** introspect Move bytecode execution itself, so it cannot show the in-Move call frame that hit an abort. Use the structured `abort` \u002F `execution_failure` fields plus a module query for that.\n\n## Reporting Results\n\nWhen summarizing for the user:\n\n- Always quote `success`, `vm_status`, and the structured `abort` \u002F `execution_failure` fields verbatim — these are the ground truth.\n- When citing an abort, give both the symbolic reason (if present) **and** the raw code; the symbolic name can be absent for older modules.\n- If `local_override_in_use == true`, label the result as \"replayed with local overrides\" so the user does not confuse it with the on-chain outcome.\n- Do not speculate about state changes beyond what the tool returned. If the user wants deeper post-state inspection, suggest re-running with tracing enabled rather than guessing.\n",{"data":30,"body":31},{"name":4,"description":6},{"type":32,"children":33},"root",[34,43,49,82,95,101,123,130,207,213,564,570,611,617,622,1037,1043,1265,1271,1277,1367,1373,1480,1486,1662,1668,1673],{"type":35,"tag":36,"props":37,"children":39},"element","h2",{"id":38},"when-to-use-this-skill",[40],{"type":41,"value":42},"text","When to Use This Skill",{"type":35,"tag":44,"props":45,"children":46},"p",{},[47],{"type":41,"value":48},"Use this skill whenever the user wants to:",{"type":35,"tag":50,"props":51,"children":52},"ul",{},[53,59,64,77],{"type":35,"tag":54,"props":55,"children":56},"li",{},[57],{"type":41,"value":58},"Understand why an on-chain transaction succeeded or failed (Move abort, execution failure, out-of-gas).",{"type":35,"tag":54,"props":60,"children":61},{},[62],{"type":41,"value":63},"Reproduce a transaction's behavior locally without re-submitting it.",{"type":35,"tag":54,"props":65,"children":66},{},[67,69,75],{"type":41,"value":68},"Test whether a ",{"type":35,"tag":70,"props":71,"children":72},"em",{},[73],{"type":41,"value":74},"local",{"type":41,"value":76}," Move package fix would change the outcome of a committed transaction (regression check for a proposed patch).",{"type":35,"tag":54,"props":78,"children":79},{},[80],{"type":41,"value":81},"Inspect the storage reads a single transaction issued through the debugger.",{"type":35,"tag":44,"props":83,"children":84},{},[85,87,93],{"type":41,"value":86},"The underlying tool is read-only: it fetches the committed transaction and aux info from the network, then executes it against the historical state. It does ",{"type":35,"tag":88,"props":89,"children":90},"strong",{},[91],{"type":41,"value":92},"not",{"type":41,"value":94}," mutate any on-chain state.",{"type":35,"tag":36,"props":96,"children":98},{"id":97},"tool",[99],{"type":41,"value":100},"Tool",{"type":35,"tag":44,"props":102,"children":103},{},[104,106,113,115,121],{"type":41,"value":105},"Use the ",{"type":35,"tag":107,"props":108,"children":110},"code",{"className":109},[],[111],{"type":41,"value":112},"move_replay_transaction",{"type":41,"value":114}," MCP tool. Do not invoke the Aptos CLI's ",{"type":35,"tag":107,"props":116,"children":118},{"className":117},[],[119],{"type":41,"value":120},"aptos move replay",{"type":41,"value":122}," directly — this tool wraps it and returns structured JSON.",{"type":35,"tag":124,"props":125,"children":127},"h3",{"id":126},"required-parameters",[128],{"type":41,"value":129},"Required Parameters",{"type":35,"tag":50,"props":131,"children":132},{},[133,155],{"type":35,"tag":54,"props":134,"children":135},{},[136,145,147,153],{"type":35,"tag":88,"props":137,"children":138},{},[139],{"type":35,"tag":107,"props":140,"children":142},{"className":141},[],[143],{"type":41,"value":144},"txn_id",{"type":41,"value":146}," (",{"type":35,"tag":107,"props":148,"children":150},{"className":149},[],[151],{"type":41,"value":152},"u64",{"type":41,"value":154},") — Committed ledger version of the transaction to replay.",{"type":35,"tag":54,"props":156,"children":157},{},[158,167,168,174,176,182,184,190,191,197,199,205],{"type":35,"tag":88,"props":159,"children":160},{},[161],{"type":35,"tag":107,"props":162,"children":164},{"className":163},[],[165],{"type":41,"value":166},"network",{"type":41,"value":146},{"type":35,"tag":107,"props":169,"children":171},{"className":170},[],[172],{"type":41,"value":173},"string",{"type":41,"value":175},") — One of ",{"type":35,"tag":107,"props":177,"children":179},{"className":178},[],[180],{"type":41,"value":181},"\"mainnet\"",{"type":41,"value":183},", ",{"type":35,"tag":107,"props":185,"children":187},{"className":186},[],[188],{"type":41,"value":189},"\"testnet\"",{"type":41,"value":183},{"type":35,"tag":107,"props":192,"children":194},{"className":193},[],[195],{"type":41,"value":196},"\"devnet\"",{"type":41,"value":198},", or a full REST endpoint URL (e.g. ",{"type":35,"tag":107,"props":200,"children":202},{"className":201},[],[203],{"type":41,"value":204},"\"https:\u002F\u002Fmy-node.example.com\u002Fv1\"",{"type":41,"value":206},").",{"type":35,"tag":124,"props":208,"children":210},{"id":209},"optional-parameters",[211],{"type":41,"value":212},"Optional Parameters",{"type":35,"tag":50,"props":214,"children":215},{},[216,253,296,324,368,422,495],{"type":35,"tag":54,"props":217,"children":218},{},[219,228,229,235,237,243,245,251],{"type":35,"tag":88,"props":220,"children":221},{},[222],{"type":35,"tag":107,"props":223,"children":225},{"className":224},[],[226],{"type":41,"value":227},"local_package_paths",{"type":41,"value":146},{"type":35,"tag":107,"props":230,"children":232},{"className":231},[],[233],{"type":41,"value":234},"string[]",{"type":41,"value":236},", default ",{"type":35,"tag":107,"props":238,"children":240},{"className":239},[],[241],{"type":41,"value":242},"[]",{"type":41,"value":244},") — Paths to local Move packages whose modules override the on-chain versions during replay. Each path must point to a directory containing ",{"type":35,"tag":107,"props":246,"children":248},{"className":247},[],[249],{"type":41,"value":250},"Move.toml",{"type":41,"value":252},". Use this to simulate a fix.",{"type":35,"tag":54,"props":254,"children":255},{},[256,265,266,272,273,279,281,287,289,294],{"type":35,"tag":88,"props":257,"children":258},{},[259],{"type":35,"tag":107,"props":260,"children":262},{"className":261},[],[263],{"type":41,"value":264},"named_addresses",{"type":41,"value":146},{"type":35,"tag":107,"props":267,"children":269},{"className":268},[],[270],{"type":41,"value":271},"object",{"type":41,"value":236},{"type":35,"tag":107,"props":274,"children":276},{"className":275},[],[277],{"type":41,"value":278},"{}",{"type":41,"value":280},") — Named-address bindings (",{"type":35,"tag":107,"props":282,"children":284},{"className":283},[],[285],{"type":41,"value":286},"{\"name\": \"0xADDR\"}",{"type":41,"value":288},") used when compiling the local packages. Only consulted when ",{"type":35,"tag":107,"props":290,"children":292},{"className":291},[],[293],{"type":41,"value":227},{"type":41,"value":295}," is non-empty.",{"type":35,"tag":54,"props":297,"children":298},{},[299,308,309,314,316,322],{"type":35,"tag":88,"props":300,"children":301},{},[302],{"type":35,"tag":107,"props":303,"children":305},{"className":304},[],[306],{"type":41,"value":307},"node_api_key",{"type":41,"value":146},{"type":35,"tag":107,"props":310,"children":312},{"className":311},[],[313],{"type":41,"value":173},{"type":41,"value":315},") — Bearer token sent as ",{"type":35,"tag":107,"props":317,"children":319},{"className":318},[],[320],{"type":41,"value":321},"Authorization: Bearer \u003Ckey>",{"type":41,"value":323}," to the node. Use this when the public endpoint is rate-limited.",{"type":35,"tag":54,"props":325,"children":326},{},[327,336,337,343,344,350,352,358,360,366],{"type":35,"tag":88,"props":328,"children":329},{},[330],{"type":35,"tag":107,"props":331,"children":333},{"className":332},[],[334],{"type":41,"value":335},"trace",{"type":41,"value":146},{"type":35,"tag":107,"props":338,"children":340},{"className":339},[],[341],{"type":41,"value":342},"bool",{"type":41,"value":236},{"type":35,"tag":107,"props":345,"children":347},{"className":346},[],[348],{"type":41,"value":349},"false",{"type":41,"value":351},") — When ",{"type":35,"tag":107,"props":353,"children":355},{"className":354},[],[356],{"type":41,"value":357},"true",{"type":41,"value":359},", record a structured trace of debugger state-view requests (one ",{"type":35,"tag":107,"props":361,"children":363},{"className":362},[],[364],{"type":41,"value":365},"state_view { version, with_overrides }",{"type":41,"value":367}," entry per call) into the response. Off by default; tracing adds overhead. Only state-view requests are intercepted — the wrapper does not introspect Move bytecode execution itself.",{"type":35,"tag":54,"props":369,"children":370},{},[371,380,381,386,387,392,393,398,400,406,408,413,415,420],{"type":35,"tag":88,"props":372,"children":373},{},[374],{"type":35,"tag":107,"props":375,"children":377},{"className":376},[],[378],{"type":41,"value":379},"trace_storage_reads",{"type":41,"value":146},{"type":35,"tag":107,"props":382,"children":384},{"className":383},[],[385],{"type":41,"value":342},{"type":41,"value":236},{"type":35,"tag":107,"props":388,"children":390},{"className":389},[],[391],{"type":41,"value":349},{"type":41,"value":351},{"type":35,"tag":107,"props":394,"children":396},{"className":395},[],[397],{"type":41,"value":357},{"type":41,"value":399},", additionally record one ",{"type":35,"tag":107,"props":401,"children":403},{"className":402},[],[404],{"type":41,"value":405},"storage_read",{"type":41,"value":407}," entry per state-view read. Off by default because a single replay typically issues hundreds of reads, which crowd out the higher-signal events. Only consulted when ",{"type":35,"tag":107,"props":409,"children":411},{"className":410},[],[412],{"type":41,"value":335},{"type":41,"value":414}," is ",{"type":35,"tag":107,"props":416,"children":418},{"className":417},[],[419],{"type":41,"value":357},{"type":41,"value":421},".",{"type":35,"tag":54,"props":423,"children":424},{},[425,434,435,441,442,448,450,455,456,461,463,469,471,477,479,485,487,493],{"type":35,"tag":88,"props":426,"children":427},{},[428],{"type":35,"tag":107,"props":429,"children":431},{"className":430},[],[432],{"type":41,"value":433},"max_trace_events",{"type":41,"value":146},{"type":35,"tag":107,"props":436,"children":438},{"className":437},[],[439],{"type":41,"value":440},"usize",{"type":41,"value":236},{"type":35,"tag":107,"props":443,"children":445},{"className":444},[],[446],{"type":41,"value":447},"500",{"type":41,"value":449},") — Trace truncation limit. Only consulted when ",{"type":35,"tag":107,"props":451,"children":453},{"className":452},[],[454],{"type":41,"value":335},{"type":41,"value":414},{"type":35,"tag":107,"props":457,"children":459},{"className":458},[],[460],{"type":41,"value":357},{"type":41,"value":462},". Must be between ",{"type":35,"tag":107,"props":464,"children":466},{"className":465},[],[467],{"type":41,"value":468},"1",{"type":41,"value":470}," and the server-side cap of ",{"type":35,"tag":107,"props":472,"children":474},{"className":473},[],[475],{"type":41,"value":476},"100_000",{"type":41,"value":478}," (inclusive); requests outside that range fail fast with an ",{"type":35,"tag":107,"props":480,"children":482},{"className":481},[],[483],{"type":41,"value":484},"invalid_params",{"type":41,"value":486}," error. Raise it only if ",{"type":35,"tag":107,"props":488,"children":490},{"className":489},[],[491],{"type":41,"value":492},"truncated > 0",{"type":41,"value":494}," in the response.",{"type":35,"tag":54,"props":496,"children":497},{},[498,507,508,513,514,519,520,525,527,533,535,541,543,548,550,555,557,562],{"type":35,"tag":88,"props":499,"children":500},{},[501],{"type":35,"tag":107,"props":502,"children":504},{"className":503},[],[505],{"type":41,"value":506},"redact_storage_keys",{"type":41,"value":146},{"type":35,"tag":107,"props":509,"children":511},{"className":510},[],[512],{"type":41,"value":342},{"type":41,"value":236},{"type":35,"tag":107,"props":515,"children":517},{"className":516},[],[518],{"type":41,"value":357},{"type":41,"value":351},{"type":35,"tag":107,"props":521,"children":523},{"className":522},[],[524],{"type":41,"value":357},{"type":41,"value":526},", storage-read trace entries omit the ",{"type":35,"tag":107,"props":528,"children":530},{"className":529},[],[531],{"type":41,"value":532},"Debug",{"type":41,"value":534},"-formatted ",{"type":35,"tag":107,"props":536,"children":538},{"className":537},[],[539],{"type":41,"value":540},"StateKey",{"type":41,"value":542},". Only consulted when both ",{"type":35,"tag":107,"props":544,"children":546},{"className":545},[],[547],{"type":41,"value":335},{"type":41,"value":549}," and ",{"type":35,"tag":107,"props":551,"children":553},{"className":552},[],[554],{"type":41,"value":379},{"type":41,"value":556}," are ",{"type":35,"tag":107,"props":558,"children":560},{"className":559},[],[561],{"type":41,"value":357},{"type":41,"value":563},". Disable only when the key contents themselves are needed for debugging.",{"type":35,"tag":124,"props":565,"children":567},{"id":566},"constraints",[568],{"type":41,"value":569},"Constraints",{"type":35,"tag":50,"props":571,"children":572},{},[573,592],{"type":35,"tag":54,"props":574,"children":575},{},[576,578,583,585,590],{"type":41,"value":577},"Only ",{"type":35,"tag":88,"props":579,"children":580},{},[581],{"type":41,"value":582},"user",{"type":41,"value":584}," transactions are supported. Genesis, BlockMetadata, BlockEpilogue, StateCheckpoint, and ValidatorTransaction variants are rejected with a structured ",{"type":35,"tag":107,"props":586,"children":588},{"className":587},[],[589],{"type":41,"value":484},{"type":41,"value":591}," error.",{"type":35,"tag":54,"props":593,"children":594},{},[595,597,602,604,610],{"type":41,"value":596},"The tool enforces a server-side timeout. If replay times out, suggest turning ",{"type":35,"tag":107,"props":598,"children":600},{"className":599},[],[601],{"type":41,"value":379},{"type":41,"value":603}," back off, dropping local overrides, or raising the server's ",{"type":35,"tag":107,"props":605,"children":607},{"className":606},[],[608],{"type":41,"value":609},"--tool-timeout",{"type":41,"value":421},{"type":35,"tag":36,"props":612,"children":614},{"id":613},"interpreting-the-response",[615],{"type":41,"value":616},"Interpreting the Response",{"type":35,"tag":44,"props":618,"children":619},{},[620],{"type":41,"value":621},"The tool returns a JSON object with these fields:",{"type":35,"tag":623,"props":624,"children":625},"table",{},[626,645],{"type":35,"tag":627,"props":628,"children":629},"thead",{},[630],{"type":35,"tag":631,"props":632,"children":633},"tr",{},[634,640],{"type":35,"tag":635,"props":636,"children":637},"th",{},[638],{"type":41,"value":639},"Field",{"type":35,"tag":635,"props":641,"children":642},{},[643],{"type":41,"value":644},"Meaning",{"type":35,"tag":646,"props":647,"children":648},"tbody",{},[649,716,741,811,856,873,896,921,938,962,991],{"type":35,"tag":631,"props":650,"children":651},{},[652,662],{"type":35,"tag":653,"props":654,"children":655},"td",{},[656],{"type":35,"tag":107,"props":657,"children":659},{"className":658},[],[660],{"type":41,"value":661},"success",{"type":35,"tag":653,"props":663,"children":664},{},[665,670,672,678,680,685,686,692,693,699,700,706,708,714],{"type":35,"tag":107,"props":666,"children":668},{"className":667},[],[669],{"type":41,"value":357},{"type":41,"value":671}," = ",{"type":35,"tag":107,"props":673,"children":675},{"className":674},[],[676],{"type":41,"value":677},"Keep(Success)",{"type":41,"value":679},". ",{"type":35,"tag":107,"props":681,"children":683},{"className":682},[],[684],{"type":41,"value":349},{"type":41,"value":671},{"type":35,"tag":107,"props":687,"children":689},{"className":688},[],[690],{"type":41,"value":691},"Keep(\u003Cany failure>)",{"type":41,"value":679},{"type":35,"tag":107,"props":694,"children":696},{"className":695},[],[697],{"type":41,"value":698},"null",{"type":41,"value":671},{"type":35,"tag":107,"props":701,"children":703},{"className":702},[],[704],{"type":41,"value":705},"Discard",{"type":41,"value":707}," or ",{"type":35,"tag":107,"props":709,"children":711},{"className":710},[],[712],{"type":41,"value":713},"Retry",{"type":41,"value":715}," (transaction was not committed in the normal sense).",{"type":35,"tag":631,"props":717,"children":718},{},[719,728],{"type":35,"tag":653,"props":720,"children":721},{},[722],{"type":35,"tag":107,"props":723,"children":725},{"className":724},[],[726],{"type":41,"value":727},"vm_status",{"type":35,"tag":653,"props":729,"children":730},{},[731,733,739],{"type":41,"value":732},"Human-readable VM status, same formatting as the Aptos CLI's ",{"type":35,"tag":107,"props":734,"children":736},{"className":735},[],[737],{"type":41,"value":738},"replay",{"type":41,"value":740}," command.",{"type":35,"tag":631,"props":742,"children":743},{},[744,753],{"type":35,"tag":653,"props":745,"children":746},{},[747],{"type":35,"tag":107,"props":748,"children":750},{"className":749},[],[751],{"type":41,"value":752},"abort",{"type":35,"tag":653,"props":754,"children":755},{},[756,758,764,766,772,773,779,780,786,788,793,795,801,803,809],{"type":41,"value":757},"Present only when the status is ",{"type":35,"tag":107,"props":759,"children":761},{"className":760},[],[762],{"type":41,"value":763},"MoveAbort",{"type":41,"value":765},". Includes ",{"type":35,"tag":107,"props":767,"children":769},{"className":768},[],[770],{"type":41,"value":771},"location",{"type":41,"value":146},{"type":35,"tag":107,"props":774,"children":776},{"className":775},[],[777],{"type":41,"value":778},"\"0xADDR::module_name\"",{"type":41,"value":707},{"type":35,"tag":107,"props":781,"children":783},{"className":782},[],[784],{"type":41,"value":785},"\"script\"",{"type":41,"value":787},"), ",{"type":35,"tag":107,"props":789,"children":791},{"className":790},[],[792],{"type":41,"value":107},{"type":41,"value":794},", and optional ",{"type":35,"tag":107,"props":796,"children":798},{"className":797},[],[799],{"type":41,"value":800},"reason",{"type":41,"value":802}," \u002F ",{"type":35,"tag":107,"props":804,"children":806},{"className":805},[],[807],{"type":41,"value":808},"description",{"type":41,"value":810}," if the module shipped abort metadata.",{"type":35,"tag":631,"props":812,"children":813},{},[814,823],{"type":35,"tag":653,"props":815,"children":816},{},[817],{"type":35,"tag":107,"props":818,"children":820},{"className":819},[],[821],{"type":41,"value":822},"execution_failure",{"type":35,"tag":653,"props":824,"children":825},{},[826,827,833,834,839,840,846,848,854],{"type":41,"value":757},{"type":35,"tag":107,"props":828,"children":830},{"className":829},[],[831],{"type":41,"value":832},"ExecutionFailure",{"type":41,"value":765},{"type":35,"tag":107,"props":835,"children":837},{"className":836},[],[838],{"type":41,"value":771},{"type":41,"value":183},{"type":35,"tag":107,"props":841,"children":843},{"className":842},[],[844],{"type":41,"value":845},"function",{"type":41,"value":847}," index, and ",{"type":35,"tag":107,"props":849,"children":851},{"className":850},[],[852],{"type":41,"value":853},"code_offset",{"type":41,"value":855}," within that function.",{"type":35,"tag":631,"props":857,"children":858},{},[859,868],{"type":35,"tag":653,"props":860,"children":861},{},[862],{"type":35,"tag":107,"props":863,"children":865},{"className":864},[],[866],{"type":41,"value":867},"transaction_hash",{"type":35,"tag":653,"props":869,"children":870},{},[871],{"type":41,"value":872},"Hex hash of the signed transaction.",{"type":35,"tag":631,"props":874,"children":875},{},[876,885],{"type":35,"tag":653,"props":877,"children":878},{},[879],{"type":35,"tag":107,"props":880,"children":882},{"className":881},[],[883],{"type":41,"value":884},"version",{"type":35,"tag":653,"props":886,"children":887},{},[888,890,895],{"type":41,"value":889},"Echo of the input ",{"type":35,"tag":107,"props":891,"children":893},{"className":892},[],[894],{"type":41,"value":144},{"type":41,"value":421},{"type":35,"tag":631,"props":897,"children":898},{},[899,908],{"type":35,"tag":653,"props":900,"children":901},{},[902],{"type":35,"tag":107,"props":903,"children":905},{"className":904},[],[906],{"type":41,"value":907},"sender",{"type":35,"tag":653,"props":909,"children":910},{},[911,913,919],{"type":41,"value":912},"Sender address as a ",{"type":35,"tag":107,"props":914,"children":916},{"className":915},[],[917],{"type":41,"value":918},"0x…",{"type":41,"value":920}," hex literal.",{"type":35,"tag":631,"props":922,"children":923},{},[924,933],{"type":35,"tag":653,"props":925,"children":926},{},[927],{"type":35,"tag":107,"props":928,"children":930},{"className":929},[],[931],{"type":41,"value":932},"sequence_number",{"type":35,"tag":653,"props":934,"children":935},{},[936],{"type":41,"value":937},"Present when the transaction uses sequence-number replay protection; absent for orderless (nonce-based) transactions.",{"type":35,"tag":631,"props":939,"children":940},{},[941,957],{"type":35,"tag":653,"props":942,"children":943},{},[944,950,951],{"type":35,"tag":107,"props":945,"children":947},{"className":946},[],[948],{"type":41,"value":949},"gas_used",{"type":41,"value":183},{"type":35,"tag":107,"props":952,"children":954},{"className":953},[],[955],{"type":41,"value":956},"gas_unit_price",{"type":35,"tag":653,"props":958,"children":959},{},[960],{"type":41,"value":961},"Same as on-chain.",{"type":35,"tag":631,"props":963,"children":964},{},[965,974],{"type":35,"tag":653,"props":966,"children":967},{},[968],{"type":35,"tag":107,"props":969,"children":971},{"className":970},[],[972],{"type":41,"value":973},"local_override_in_use",{"type":35,"tag":653,"props":975,"children":976},{},[977,982,984,989],{"type":35,"tag":107,"props":978,"children":980},{"className":979},[],[981],{"type":41,"value":357},{"type":41,"value":983}," iff ",{"type":35,"tag":107,"props":985,"children":987},{"className":986},[],[988],{"type":41,"value":227},{"type":41,"value":990}," was non-empty — i.e. the replay diverged from on-chain bytecode.",{"type":35,"tag":631,"props":992,"children":993},{},[994,1002],{"type":35,"tag":653,"props":995,"children":996},{},[997],{"type":35,"tag":107,"props":998,"children":1000},{"className":999},[],[1001],{"type":41,"value":335},{"type":35,"tag":653,"props":1003,"children":1004},{},[1005,1007,1013,1015,1021,1023,1028,1030,1036],{"type":41,"value":1006},"Captured trace entries, only when ",{"type":35,"tag":107,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":41,"value":1012},"trace: true",{"type":41,"value":1014}," was set on the request. Each entry is one of ",{"type":35,"tag":107,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":41,"value":1020},"state_view",{"type":41,"value":1022}," (always exactly one per replay) or ",{"type":35,"tag":107,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":41,"value":405},{"type":41,"value":1029}," (zero by default; many when ",{"type":35,"tag":107,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":41,"value":1035},"trace_storage_reads: true",{"type":41,"value":206},{"type":35,"tag":124,"props":1038,"children":1040},{"id":1039},"reading-the-status",[1041],{"type":41,"value":1042},"Reading the Status",{"type":35,"tag":1044,"props":1045,"children":1046},"ol",{},[1047,1061,1154,1194,1231],{"type":35,"tag":54,"props":1048,"children":1049},{},[1050,1059],{"type":35,"tag":88,"props":1051,"children":1052},{},[1053],{"type":35,"tag":107,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":41,"value":1058},"success == true",{"type":41,"value":1060}," → transaction would commit normally. If the user expected a failure, double-check the inputs.",{"type":35,"tag":54,"props":1062,"children":1063},{},[1064,1082,1084,1089,1091],{"type":35,"tag":88,"props":1065,"children":1066},{},[1067,1073,1075,1080],{"type":35,"tag":107,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":41,"value":1072},"success == false",{"type":41,"value":1074}," with ",{"type":35,"tag":107,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":41,"value":752},{"type":41,"value":1081}," populated",{"type":41,"value":1083}," → a Move ",{"type":35,"tag":107,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":41,"value":752},{"type":41,"value":1090}," was hit. Report:\n",{"type":35,"tag":50,"props":1092,"children":1093},{},[1094,1105,1116,1142],{"type":35,"tag":54,"props":1095,"children":1096},{},[1097,1103],{"type":35,"tag":107,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":41,"value":1102},"abort.location",{"type":41,"value":1104}," (which module),",{"type":35,"tag":54,"props":1106,"children":1107},{},[1108,1114],{"type":35,"tag":107,"props":1109,"children":1111},{"className":1110},[],[1112],{"type":41,"value":1113},"abort.code",{"type":41,"value":1115}," (raw code),",{"type":35,"tag":54,"props":1117,"children":1118},{},[1119,1125,1126,1132,1134,1140],{"type":35,"tag":107,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":41,"value":1124},"abort.reason",{"type":41,"value":802},{"type":35,"tag":107,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":41,"value":1131},"abort.description",{"type":41,"value":1133}," if available (these come from ",{"type":35,"tag":107,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":41,"value":1139},"#[error]",{"type":41,"value":1141}," \u002F abort-info metadata in the module),",{"type":35,"tag":54,"props":1143,"children":1144},{},[1145,1147,1153],{"type":41,"value":1146},"The matching constant in the source if the reason name is symbolic (e.g. ",{"type":35,"tag":107,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":41,"value":1152},"EINSUFFICIENT_BALANCE",{"type":41,"value":206},{"type":35,"tag":54,"props":1155,"children":1156},{},[1157,1172,1174,1179,1180,1185,1187,1192],{"type":35,"tag":88,"props":1158,"children":1159},{},[1160,1165,1166,1171],{"type":35,"tag":107,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":41,"value":1072},{"type":41,"value":1074},{"type":35,"tag":107,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":41,"value":822},{"type":41,"value":1081},{"type":41,"value":1173}," → a non-abort runtime failure (arithmetic overflow, type error, vector bounds, etc.). Report ",{"type":35,"tag":107,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":41,"value":771},{"type":41,"value":183},{"type":35,"tag":107,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":41,"value":845},{"type":41,"value":1186},", and ",{"type":35,"tag":107,"props":1188,"children":1190},{"className":1189},[],[1191],{"type":41,"value":853},{"type":41,"value":1193},"; offer to disassemble the module if the user wants the exact bytecode site.",{"type":35,"tag":54,"props":1195,"children":1196},{},[1197,1207,1209,1215,1216,1222,1224,1229],{"type":35,"tag":88,"props":1198,"children":1199},{},[1200,1205],{"type":35,"tag":107,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":41,"value":1072},{"type":41,"value":1206}," with neither populated",{"type":41,"value":1208}," → likely ",{"type":35,"tag":107,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":41,"value":1214},"OutOfGas",{"type":41,"value":707},{"type":35,"tag":107,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":41,"value":1221},"MiscellaneousError",{"type":41,"value":1223},". The ",{"type":35,"tag":107,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":41,"value":727},{"type":41,"value":1230}," string carries the detail.",{"type":35,"tag":54,"props":1232,"children":1233},{},[1234,1243,1245,1250,1252,1257,1258,1263],{"type":35,"tag":88,"props":1235,"children":1236},{},[1237],{"type":35,"tag":107,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":41,"value":1242},"success == null",{"type":41,"value":1244}," → transaction was ",{"type":35,"tag":107,"props":1246,"children":1248},{"className":1247},[],[1249],{"type":41,"value":705},{"type":41,"value":1251},"ed or marked ",{"type":35,"tag":107,"props":1253,"children":1255},{"className":1254},[],[1256],{"type":41,"value":713},{"type":41,"value":1223},{"type":35,"tag":107,"props":1259,"children":1261},{"className":1260},[],[1262],{"type":41,"value":727},{"type":41,"value":1264}," string explains why; common causes are signature\u002Fvalidation issues that prevent execution.",{"type":35,"tag":36,"props":1266,"children":1268},{"id":1267},"workflows",[1269],{"type":41,"value":1270},"Workflows",{"type":35,"tag":124,"props":1272,"children":1274},{"id":1273},"a-plain-debugging-why-did-this-transaction-fail",[1275],{"type":41,"value":1276},"A. Plain Debugging — \"Why did this transaction fail?\"",{"type":35,"tag":1044,"props":1278,"children":1279},{},[1280,1292,1316,1340],{"type":35,"tag":54,"props":1281,"children":1282},{},[1283,1285,1290],{"type":41,"value":1284},"Confirm with the user which ",{"type":35,"tag":107,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":41,"value":166},{"type":41,"value":1291}," the transaction lives on.",{"type":35,"tag":54,"props":1293,"children":1294},{},[1295,1297,1302,1304,1309,1310,1315],{"type":41,"value":1296},"Call ",{"type":35,"tag":107,"props":1298,"children":1300},{"className":1299},[],[1301],{"type":41,"value":112},{"type":41,"value":1303}," with just ",{"type":35,"tag":107,"props":1305,"children":1307},{"className":1306},[],[1308],{"type":41,"value":144},{"type":41,"value":549},{"type":35,"tag":107,"props":1311,"children":1313},{"className":1312},[],[1314],{"type":41,"value":166},{"type":41,"value":421},{"type":35,"tag":54,"props":1317,"children":1318},{},[1319,1321,1326,1328,1333,1334,1339],{"type":41,"value":1320},"Read ",{"type":35,"tag":107,"props":1322,"children":1324},{"className":1323},[],[1325],{"type":41,"value":661},{"type":41,"value":1327}," first; then drill into ",{"type":35,"tag":107,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":41,"value":752},{"type":41,"value":707},{"type":35,"tag":107,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":41,"value":822},{"type":41,"value":421},{"type":35,"tag":54,"props":1341,"children":1342},{},[1343,1345,1351,1353,1358,1360,1366],{"type":41,"value":1344},"If the user wants the source-level reason, query the module with ",{"type":35,"tag":107,"props":1346,"children":1348},{"className":1347},[],[1349],{"type":41,"value":1350},"move_package_query",{"type":41,"value":1352}," (or read the module source) to find the constant matching ",{"type":35,"tag":107,"props":1354,"children":1356},{"className":1355},[],[1357],{"type":41,"value":1113},{"type":41,"value":1359}," \u002F the function at ",{"type":35,"tag":107,"props":1361,"children":1363},{"className":1362},[],[1364],{"type":41,"value":1365},"execution_failure.function",{"type":41,"value":421},{"type":35,"tag":124,"props":1368,"children":1370},{"id":1369},"b-patch-testing-would-my-fix-change-this-transactions-outcome",[1371],{"type":41,"value":1372},"B. Patch Testing — \"Would my fix change this transaction's outcome?\"",{"type":35,"tag":1044,"props":1374,"children":1375},{},[1376,1387,1392,1438,1470],{"type":35,"tag":54,"props":1377,"children":1378},{},[1379,1381,1386],{"type":41,"value":1380},"Ask for (or locate) the local Move package that re-implements the relevant module(s). It must be a buildable package with a ",{"type":35,"tag":107,"props":1382,"children":1384},{"className":1383},[],[1385],{"type":41,"value":250},{"type":41,"value":421},{"type":35,"tag":54,"props":1388,"children":1389},{},[1390],{"type":41,"value":1391},"Determine the named-address bindings required to compile it. They must resolve every named address used in the package's source.",{"type":35,"tag":54,"props":1393,"children":1394},{},[1395,1397],{"type":41,"value":1396},"Call the tool with:\n",{"type":35,"tag":50,"props":1398,"children":1399},{},[1400,1410,1420],{"type":35,"tag":54,"props":1401,"children":1402},{},[1403,1408],{"type":35,"tag":107,"props":1404,"children":1406},{"className":1405},[],[1407],{"type":41,"value":227},{"type":41,"value":1409}," set to the package directory (or list of directories),",{"type":35,"tag":54,"props":1411,"children":1412},{},[1413,1418],{"type":35,"tag":107,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":41,"value":264},{"type":41,"value":1419}," mapping each name to its on-chain address,",{"type":35,"tag":54,"props":1421,"children":1422},{},[1423,1425,1430,1431,1436],{"type":41,"value":1424},"the same ",{"type":35,"tag":107,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":41,"value":144},{"type":41,"value":549},{"type":35,"tag":107,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":41,"value":166},{"type":41,"value":1437}," as the failing transaction.",{"type":35,"tag":54,"props":1439,"children":1440},{},[1441,1443,1449,1451,1456,1457,1462,1463,1468],{"type":41,"value":1442},"The response will have ",{"type":35,"tag":107,"props":1444,"children":1446},{"className":1445},[],[1447],{"type":41,"value":1448},"local_override_in_use: true",{"type":41,"value":1450},". Compare its ",{"type":35,"tag":107,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":41,"value":661},{"type":41,"value":802},{"type":35,"tag":107,"props":1458,"children":1460},{"className":1459},[],[1461],{"type":41,"value":752},{"type":41,"value":802},{"type":35,"tag":107,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":41,"value":822},{"type":41,"value":1469}," against the unmodified replay (workflow A) to see whether the patch changed behavior.",{"type":35,"tag":54,"props":1471,"children":1472},{},[1473,1478],{"type":35,"tag":88,"props":1474,"children":1475},{},[1476],{"type":41,"value":1477},"Important",{"type":41,"value":1479},": if the patched module's bytecode is type-incompatible with the on-chain version (different public function signatures, removed structs, etc.), the VM will fail at link time — surface this clearly rather than treating it as a Move bug.",{"type":35,"tag":124,"props":1481,"children":1483},{"id":1482},"c-tracing-show-me-what-the-vm-did-step-by-step",[1484],{"type":41,"value":1485},"C. Tracing — \"Show me what the VM did step by step\"",{"type":35,"tag":1044,"props":1487,"children":1488},{},[1489,1537,1586,1612,1638],{"type":35,"tag":54,"props":1490,"children":1491},{},[1492,1494,1499,1501,1506,1508,1514,1516,1522,1524,1529,1530,1535],{"type":41,"value":1493},"Start with ",{"type":35,"tag":107,"props":1495,"children":1497},{"className":1496},[],[1498],{"type":41,"value":1012},{"type":41,"value":1500}," alone. You will get exactly one ",{"type":35,"tag":107,"props":1502,"children":1504},{"className":1503},[],[1505],{"type":41,"value":365},{"type":41,"value":1507}," entry — the state view the VM consumed for the run. With ",{"type":35,"tag":107,"props":1509,"children":1511},{"className":1510},[],[1512],{"type":41,"value":1513},"with_overrides: false",{"type":41,"value":1515}," you can confirm the on-chain path was taken; with ",{"type":35,"tag":107,"props":1517,"children":1519},{"className":1518},[],[1520],{"type":41,"value":1521},"with_overrides: true",{"type":41,"value":1523}," you can confirm the local-override path was taken. For most \"why did this fail\" questions this entry plus the structured ",{"type":35,"tag":107,"props":1525,"children":1527},{"className":1526},[],[1528],{"type":41,"value":752},{"type":41,"value":802},{"type":35,"tag":107,"props":1531,"children":1533},{"className":1532},[],[1534],{"type":41,"value":822},{"type":41,"value":1536}," fields are all you need.",{"type":35,"tag":54,"props":1538,"children":1539},{},[1540,1542,1547,1549,1554,1556,1561,1563,1569,1571,1577,1579,1584],{"type":41,"value":1541},"Only set ",{"type":35,"tag":107,"props":1543,"children":1545},{"className":1544},[],[1546],{"type":41,"value":1035},{"type":41,"value":1548}," when you specifically need to see which ",{"type":35,"tag":107,"props":1550,"children":1552},{"className":1551},[],[1553],{"type":41,"value":540},{"type":41,"value":1555},"s were touched during execution. Expect hundreds of entries per replay; raise ",{"type":35,"tag":107,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":41,"value":433},{"type":41,"value":1562}," (e.g. to ",{"type":35,"tag":107,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":41,"value":1568},"5000",{"type":41,"value":1570},") when you do this. Leave ",{"type":35,"tag":107,"props":1572,"children":1574},{"className":1573},[],[1575],{"type":41,"value":1576},"redact_storage_keys: true",{"type":41,"value":1578}," unless you need the ",{"type":35,"tag":107,"props":1580,"children":1582},{"className":1581},[],[1583],{"type":41,"value":532},{"type":41,"value":1585},"-formatted key bytes.",{"type":35,"tag":54,"props":1587,"children":1588},{},[1589,1591,1596,1598,1603,1605,1610],{"type":41,"value":1590},"When reporting back, ",{"type":35,"tag":88,"props":1592,"children":1593},{},[1594],{"type":41,"value":1595},"enumerate the actual entries verbatim",{"type":41,"value":1597}," — never collapse them to counts. The single ",{"type":35,"tag":107,"props":1599,"children":1601},{"className":1600},[],[1602],{"type":41,"value":1020},{"type":41,"value":1604}," entry should always appear in the output you show the user; quote the ",{"type":35,"tag":107,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":41,"value":405},{"type":41,"value":1611}," entries one by one when the user asked for them.",{"type":35,"tag":54,"props":1613,"children":1614},{},[1615,1617,1622,1624,1629,1631,1636],{"type":41,"value":1616},"If the response shows ",{"type":35,"tag":107,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":41,"value":492},{"type":41,"value":1623},", the cap was hit. Either raise ",{"type":35,"tag":107,"props":1625,"children":1627},{"className":1626},[],[1628],{"type":41,"value":433},{"type":41,"value":1630}," or turn ",{"type":35,"tag":107,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":41,"value":379},{"type":41,"value":1637}," back off.",{"type":35,"tag":54,"props":1639,"children":1640},{},[1641,1643,1647,1649,1654,1655,1660],{"type":41,"value":1642},"The trace is at debugger-wrapper granularity — it does ",{"type":35,"tag":88,"props":1644,"children":1645},{},[1646],{"type":41,"value":92},{"type":41,"value":1648}," introspect Move bytecode execution itself, so it cannot show the in-Move call frame that hit an abort. Use the structured ",{"type":35,"tag":107,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":41,"value":752},{"type":41,"value":802},{"type":35,"tag":107,"props":1656,"children":1658},{"className":1657},[],[1659],{"type":41,"value":822},{"type":41,"value":1661}," fields plus a module query for that.",{"type":35,"tag":36,"props":1663,"children":1665},{"id":1664},"reporting-results",[1666],{"type":41,"value":1667},"Reporting Results",{"type":35,"tag":44,"props":1669,"children":1670},{},[1671],{"type":41,"value":1672},"When summarizing for the user:",{"type":35,"tag":50,"props":1674,"children":1675},{},[1676,1707,1719,1732],{"type":35,"tag":54,"props":1677,"children":1678},{},[1679,1681,1686,1687,1692,1694,1699,1700,1705],{"type":41,"value":1680},"Always quote ",{"type":35,"tag":107,"props":1682,"children":1684},{"className":1683},[],[1685],{"type":41,"value":661},{"type":41,"value":183},{"type":35,"tag":107,"props":1688,"children":1690},{"className":1689},[],[1691],{"type":41,"value":727},{"type":41,"value":1693},", and the structured ",{"type":35,"tag":107,"props":1695,"children":1697},{"className":1696},[],[1698],{"type":41,"value":752},{"type":41,"value":802},{"type":35,"tag":107,"props":1701,"children":1703},{"className":1702},[],[1704],{"type":41,"value":822},{"type":41,"value":1706}," fields verbatim — these are the ground truth.",{"type":35,"tag":54,"props":1708,"children":1709},{},[1710,1712,1717],{"type":41,"value":1711},"When citing an abort, give both the symbolic reason (if present) ",{"type":35,"tag":88,"props":1713,"children":1714},{},[1715],{"type":41,"value":1716},"and",{"type":41,"value":1718}," the raw code; the symbolic name can be absent for older modules.",{"type":35,"tag":54,"props":1720,"children":1721},{},[1722,1724,1730],{"type":41,"value":1723},"If ",{"type":35,"tag":107,"props":1725,"children":1727},{"className":1726},[],[1728],{"type":41,"value":1729},"local_override_in_use == true",{"type":41,"value":1731},", label the result as \"replayed with local overrides\" so the user does not confuse it with the on-chain outcome.",{"type":35,"tag":54,"props":1733,"children":1734},{},[1735],{"type":41,"value":1736},"Do not speculate about state changes beyond what the tool returned. If the user wants deeper post-state inspection, suggest re-running with tracing enabled rather than guessing.",{"items":1738,"total":1904},[1739,1757,1774,1788,1802,1816,1830,1845,1859,1874,1884,1894],{"slug":1740,"name":1740,"fn":1741,"description":1742,"org":1743,"tags":1744,"stars":1754,"repoUrl":1755,"updatedAt":1756},"analyze-gas-optimization","optimize Aptos Move contracts for gas","Analyze and optimize Aptos Move contracts for gas efficiency, identifying expensive operations and suggesting optimizations. Triggers on: 'optimize gas', 'reduce gas costs', 'gas analysis', 'make contract cheaper', 'gas efficiency', 'analyze gas usage', 'reduce transaction costs'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1745,1748,1751],{"name":1746,"slug":1747,"type":16},"Blockchain","blockchain",{"name":1749,"slug":1750,"type":16},"Performance","performance",{"name":1752,"slug":1753,"type":16},"Smart Contracts","smart-contracts",18,"https:\u002F\u002Fgithub.com\u002Faptos-labs\u002Faptos-agent-skills","2026-07-12T08:07:14.117466",{"slug":1758,"name":1758,"fn":1759,"description":1760,"org":1761,"tags":1762,"stars":1754,"repoUrl":1755,"updatedAt":1773},"create-aptos-project","scaffold new Aptos dApp projects","Scaffolds new Aptos projects using npx create-aptos-dapp. Supports fullstack (Vite or Next.js) and contract-only templates with network selection and optional API key. Triggers on: 'build app', 'create app', 'make app', 'new app', 'build dApp', 'create dApp', 'new dApp', 'build project', 'new project', 'create project', 'scaffold', 'start project', 'set up project', 'build me a', 'I want to build', 'make me a', 'help me build'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1763,1766,1769,1772],{"name":1764,"slug":1765,"type":16},"Next.js","next-js",{"name":1767,"slug":1768,"type":16},"TypeScript","typescript",{"name":1770,"slug":1771,"type":16},"Vite","vite",{"name":14,"slug":15,"type":16},"2026-07-12T08:07:30.595111",{"slug":1775,"name":1775,"fn":1776,"description":1777,"org":1778,"tags":1779,"stars":1754,"repoUrl":1755,"updatedAt":1787},"deploy-contracts","deploy Move contracts to Aptos networks","Safely deploys Move contracts to Aptos networks (devnet, testnet, mainnet) with pre-deployment verification. Triggers on: 'deploy contract', 'publish to testnet', 'deploy to mainnet', 'how to deploy', 'publish module', 'deployment checklist', 'deploy to devnet'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1780,1783,1786],{"name":1781,"slug":1782,"type":16},"Deployment","deployment",{"name":1784,"slug":1785,"type":16},"Engineering","engineering",{"name":1752,"slug":1753,"type":16},"2026-07-12T08:07:16.798352",{"slug":1789,"name":1789,"fn":1790,"description":1791,"org":1792,"tags":1793,"stars":1754,"repoUrl":1755,"updatedAt":1801},"generate-tests","generate test suites for Move contracts","Creates comprehensive test suites for Move contracts with 100% coverage requirement. Triggers on: 'generate tests', 'create tests', 'write test suite', 'test this contract', 'how to test', 'add test coverage', 'write unit tests'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1794,1795,1798],{"name":1784,"slug":1785,"type":16},{"name":1796,"slug":1797,"type":16},"QA","qa",{"name":1799,"slug":1800,"type":16},"Testing","testing","2026-07-12T08:07:18.0205",{"slug":1803,"name":1803,"fn":1804,"description":1805,"org":1806,"tags":1807,"stars":1754,"repoUrl":1755,"updatedAt":1815},"modernize-move","modernize Move V1 contracts to V2","Detects and modernizes outdated Move V1 syntax, patterns, and APIs to Move V2+. Use when upgrading legacy contracts, migrating to modern syntax, or converting old patterns to current best practices. NOT for writing new contracts (use write-contracts) or fixing bugs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1808,1811,1812],{"name":1809,"slug":1810,"type":16},"Code Analysis","code-analysis",{"name":1784,"slug":1785,"type":16},{"name":1813,"slug":1814,"type":16},"Migration","migration","2026-07-12T08:07:10.226223",{"slug":1817,"name":1817,"fn":1818,"description":1819,"org":1820,"tags":1821,"stars":1754,"repoUrl":1755,"updatedAt":1829},"search-aptos-examples","search Aptos reference implementations","Searches aptos-core and daily-move for reference implementations before writing contracts. Triggers on: 'search examples', 'find example', 'check aptos-core', 'is there an example', 'reference implementation', 'how does aptos implement', 'similar contract', 'daily-move'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1822,1823,1826],{"name":1746,"slug":1747,"type":16},{"name":1824,"slug":1825,"type":16},"Documentation","documentation",{"name":1827,"slug":1828,"type":16},"Search","search","2026-07-12T08:07:15.382039",{"slug":1831,"name":1831,"fn":1832,"description":1833,"org":1834,"tags":1835,"stars":1754,"repoUrl":1755,"updatedAt":1844},"security-audit","audit Move smart contracts for security","Audits Move contracts for security vulnerabilities before deployment using 7-category checklist. Triggers on: 'audit contract', 'security check', 'review security', 'check for vulnerabilities', 'security audit', 'is this secure', 'find security issues'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1836,1839,1840,1843],{"name":1837,"slug":1838,"type":16},"Audit","audit",{"name":1809,"slug":1810,"type":16},{"name":1841,"slug":1842,"type":16},"Security","security",{"name":1752,"slug":1753,"type":16},"2026-07-12T08:07:11.680215",{"slug":1846,"name":1846,"fn":1847,"description":1848,"org":1849,"tags":1850,"stars":1754,"repoUrl":1755,"updatedAt":1858},"smoothsend-gasless","sponsor gas fees for Aptos dApps","How to sponsor gas fees for Aptos dApp users using SmoothSend. Paid commercial service: free on testnet, credit-based on mainnet. Covers 3-line wallet adapter integration (transactionSubmitter), Script Composer for fee-in-token stablecoin transfers. Triggers on: 'gasless', 'sponsor gas', 'users pay no APT', 'transactionSubmitter', 'SmoothSend', 'fee payer', 'pay gas for users', 'no gas required'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1851,1854,1857],{"name":1852,"slug":1853,"type":16},"API Development","api-development",{"name":1855,"slug":1856,"type":16},"Payments","payments",{"name":14,"slug":15,"type":16},"2026-07-12T08:07:31.843242",{"slug":1860,"name":1860,"fn":1861,"description":1862,"org":1863,"tags":1864,"stars":1754,"repoUrl":1755,"updatedAt":1873},"ts-sdk-account","manage Aptos accounts with TS SDK","How to create and use Account (signer) in @aptos-labs\u002Fts-sdk. Covers Account.generate(), fromPrivateKey(), fromDerivationPath(), Ed25519 vs SingleKey vs MultiKey vs Keyless, serialization (fromHex\u002FtoHex). Triggers on: 'Account.generate', 'Account.fromPrivateKey', 'Ed25519PrivateKey', 'SDK account', 'mnemonic', 'SingleKeyAccount', 'KeylessAccount'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1865,1868,1869,1872],{"name":1866,"slug":1867,"type":16},"Auth","auth",{"name":1746,"slug":1747,"type":16},{"name":1870,"slug":1871,"type":16},"SDK","sdk",{"name":1767,"slug":1768,"type":16},"2026-07-12T08:07:29.297415",{"slug":1875,"name":1875,"fn":1876,"description":1877,"org":1878,"tags":1879,"stars":1754,"repoUrl":1755,"updatedAt":1883},"ts-sdk-address","manage AccountAddress in Aptos TypeScript SDK","How to create and use AccountAddress in @aptos-labs\u002Fts-sdk. Covers address format (AIP-40), from\u002FfromString\u002FfromStrict, special addresses, LONG vs SHORT form, and derived addresses (object, resource, token, user-derived). Triggers on: 'AccountAddress', 'AccountAddress.from', 'AIP-40', 'derived address', 'createObjectAddress', 'createResourceAddress', 'createTokenAddress'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1880,1881,1882],{"name":1746,"slug":1747,"type":16},{"name":1870,"slug":1871,"type":16},{"name":1767,"slug":1768,"type":16},"2026-07-12T08:07:26.430378",{"slug":1885,"name":1885,"fn":1886,"description":1887,"org":1888,"tags":1889,"stars":1754,"repoUrl":1755,"updatedAt":1893},"ts-sdk-client","configure Aptos SDK clients","How to create and configure the Aptos client (Aptos, AptosConfig) in @aptos-labs\u002Fts-sdk. Covers Network, fullnode\u002Findexer\u002Ffaucet URLs, singleton pattern, and Bun compatibility. Triggers on: 'Aptos client', 'AptosConfig', 'SDK client', 'client setup', 'new Aptos(', 'Network.TESTNET', 'Network.MAINNET'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1890,1891,1892],{"name":1852,"slug":1853,"type":16},{"name":1870,"slug":1871,"type":16},{"name":1767,"slug":1768,"type":16},"2026-07-12T08:07:21.933342",{"slug":1895,"name":1895,"fn":1896,"description":1897,"org":1898,"tags":1899,"stars":1754,"repoUrl":1755,"updatedAt":1903},"ts-sdk-transactions","manage Aptos blockchain transactions","How to build, sign, submit, and simulate transactions in @aptos-labs\u002Fts-sdk. Covers build.simple(), signAndSubmitTransaction(), waitForTransaction(), simulate, sponsored (fee payer), and multi-agent. Triggers on: 'build.simple', 'signAndSubmitTransaction', 'transaction.build', 'waitForTransaction', 'signAsFeePayer', 'SDK transaction', 'sponsored transaction', 'multi-agent transaction'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1900,1901,1902],{"name":1852,"slug":1853,"type":16},{"name":1767,"slug":1768,"type":16},{"name":14,"slug":15,"type":16},"2026-07-12T08:07:23.774257",24,{"items":1906,"total":1970},[1907,1916,1925,1936,1947,1956,1961],{"slug":1908,"name":1908,"fn":1909,"description":1910,"org":1911,"tags":1912,"stars":20,"repoUrl":21,"updatedAt":1915},"move","develop applications on Aptos","Move development on Aptos",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1913,1914],{"name":1746,"slug":1747,"type":16},{"name":14,"slug":15,"type":16},"2026-07-19T06:03:46.40898",{"slug":1917,"name":1917,"fn":1918,"description":1919,"org":1920,"tags":1921,"stars":20,"repoUrl":21,"updatedAt":1924},"move-check","check Move packages for compilation errors","Check a Move package for compilation errors",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1922,1923],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},"2026-07-19T06:03:09.843322",{"slug":1926,"name":1926,"fn":1927,"description":1928,"org":1929,"tags":1930,"stars":20,"repoUrl":21,"updatedAt":1935},"move-inf","infer specifications for Move packages","Infer specifications for a Move package",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1931,1934],{"name":1932,"slug":1933,"type":16},"Data Modeling","data-modeling",{"name":14,"slug":15,"type":16},"2026-07-19T06:03:10.203983",{"slug":1937,"name":1937,"fn":1938,"description":1939,"org":1940,"tags":1941,"stars":20,"repoUrl":21,"updatedAt":1946},"move-init","initialize Move workflow routing","Initialize Move workflow routing in the project CLAUDE.md",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1942,1945],{"name":1943,"slug":1944,"type":16},"Configuration","configuration",{"name":14,"slug":15,"type":16},"2026-07-19T06:03:48.382736",{"slug":1948,"name":1948,"fn":1949,"description":1950,"org":1951,"tags":1952,"stars":20,"repoUrl":21,"updatedAt":1955},"move-prove","verify Move specifications with Move Prover","Run the Move Prover to formally verify specifications",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1953,1954],{"name":1799,"slug":1800,"type":16},{"name":14,"slug":15,"type":16},"2026-07-19T06:03:10.663492",{"slug":4,"name":4,"fn":5,"description":6,"org":1957,"tags":1958,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1959,1960],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":1962,"name":1962,"fn":1963,"description":1964,"org":1965,"tags":1966,"stars":20,"repoUrl":21,"updatedAt":1969},"move-test","generate unit tests for Move code","Generate unit tests for Move code. Use for test generation, writing tests, or improving coverage.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1967,1968],{"name":1799,"slug":1800,"type":16},{"name":14,"slug":15,"type":16},"2026-07-19T06:03:11.019744",7]