# Send Monad Development to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "monad-development",
    "name": "Monad Development",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/portdeveloper/monad-development",
    "canonicalUrl": "https://clawhub.ai/portdeveloper/monad-development",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/monad-development",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=monad-development",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "monad-development",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-05T20:20:16.048Z",
      "expiresAt": "2026-05-12T20:20:16.048Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=monad-development",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=monad-development",
        "contentDisposition": "attachment; filename=\"monad-development-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "monad-development"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/monad-development"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/monad-development",
    "downloadUrl": "https://openagent3.xyz/downloads/monad-development",
    "agentUrl": "https://openagent3.xyz/skills/monad-development/agent",
    "manifestUrl": "https://openagent3.xyz/skills/monad-development/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/monad-development/agent.md"
  }
}
```
## Documentation

### Monad Development

For questions not covered here, fetch https://docs.monad.xyz/llms.txt

### Defaults

Network: Always use testnet (chain ID 10143) unless user says "mainnet"
Verification: Always verify contracts after deployment unless user says not to
Framework: Use Foundry (not Hardhat)
Wallet: If you generate a wallet, MUST persist it (see Wallet Persistence section)

### Networks

NetworkChain IDRPCTestnet10143https://testnet-rpc.monad.xyzMainnet143https://rpc.monad.xyz

Docs: https://docs.monad.xyz

### Explorers

ExplorerTestnetMainnetSocialscanhttps://monad-testnet.socialscan.iohttps://monad.socialscan.ioMonadVisionhttps://testnet.monadvision.comhttps://monadvision.comMonadscanhttps://testnet.monadscan.comhttps://monadscan.com

### Agent APIs

IMPORTANT: Do NOT use a browser. Use these APIs directly with curl.

Faucet (Testnet Funding):

curl -X POST https://agents.devnads.com/v1/faucet \\
  -H "Content-Type: application/json" \\
  -d '{"chainId": 10143, "address": "0xYOUR_ADDRESS"}'

Returns: {"txHash": "0x...", "amount": "1000000000000000000", "chain": "Monad Testnet"}

Fallback (official faucet): https://faucet.monad.xyz
If the agent faucet fails, ask the user to fund via the official faucet (do not use a browser yourself).

Verification (All Explorers):

ALWAYS use the verification API first. It verifies on all 3 explorers (MonadVision, Socialscan, Monadscan) with one call. Do NOT use forge verify-contract as first choice.

# 1. Get verification data
forge verify-contract <ADDR> <CONTRACT> \\
  --chain 10143 \\
  --show-standard-json-input > /tmp/standard-input.json

cat out/<Contract>.sol/<Contract>.json | jq '.metadata' > /tmp/metadata.json
COMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/<Contract>.sol/<Contract>.json)

# 2. Call verification API
STANDARD_INPUT=$(cat /tmp/standard-input.json)
FOUNDRY_METADATA=$(cat /tmp/metadata.json)

cat > /tmp/verify.json << EOF
{
  "chainId": 10143,
  "contractAddress": "0xYOUR_CONTRACT_ADDRESS",
  "contractName": "src/MyContract.sol:MyContract",
  "compilerVersion": "v${COMPILER_VERSION}",
  "standardJsonInput": $STANDARD_INPUT,
  "foundryMetadata": $FOUNDRY_METADATA
}
EOF

curl -X POST https://agents.devnads.com/v1/verify \\
  -H "Content-Type: application/json" \\
  -d @/tmp/verify.json

With constructor arguments: Add constructorArgs (ABI-encoded, WITHOUT 0x prefix):

ARGS=$(cast abi-encode "constructor(string,string,uint256)" "MyToken" "MTK" 1000000000000000000000000)
ARGS_NO_PREFIX=${ARGS#0x}
# Add to request: "constructorArgs": "$ARGS_NO_PREFIX"

Manual verification fallback (if API fails):

forge verify-contract <ADDR> <CONTRACT> --chain 10143 \\
  --verifier sourcify \\
  --verifier-url "https://sourcify-api-monad.blockvision.org/"

### Wallet Persistence

CRITICAL for agents: If you generate a wallet for the user, you MUST persist it for future use.

When generating a new wallet:

Create wallet: cast wallet new
Immediately save the address and private key to a secure location
Inform the user where the wallet details are stored
Fund the wallet via faucet before deployment

Storage options:

Write to ~/.monad-wallet with chmod 600
Store in a project-specific .env file (add to .gitignore)
Return credentials to user and ask them to save securely

Why this matters: Users need access to their wallet to:

Deploy additional contracts
Interact with deployed contracts
Manage funds
Verify ownership

### Deployment Workflow

Use forge script for deployments:

forge script script/Deploy.s.sol:DeployScript \\
  --rpc-url https://testnet-rpc.monad.xyz \\
  --private-key $PRIVATE_KEY \\
  --broadcast

Deploy script template:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import "forge-std/Script.sol";
import "../src/MyContract.sol";

contract DeployScript is Script {
    function run() external {
        vm.startBroadcast();
        MyContract contract = new MyContract();
        console.log("Contract deployed at:", address(contract));
        vm.stopBroadcast();
    }
}

### EVM Version (Critical)

Always set evmVersion: "prague". Requires Solidity 0.8.27+.

Foundry (foundry.toml):

[profile.default]
evm_version = "prague"
solc_version = "0.8.28"

### Foundry Tips

Flags that don't exist (don't use):

--no-commit - not a valid flag for forge init or forge install

Deployment - use forge script, NOT forge create:

forge create --broadcast is buggy and often ignored. Use forge script instead.

forge script script/Deploy.s.sol:DeployScript \\
  --rpc-url https://testnet-rpc.monad.xyz \\
  --private-key $PRIVATE_KEY \\
  --broadcast

Deploy script must NOT hardcode addresses:

// ✅ Correct - reads private key from --private-key flag
function run() external {
    vm.startBroadcast();
    new MyContract();
    vm.stopBroadcast();
}

// ❌ Wrong - hardcodes address, causes "No associated wallet" error
function run() external {
    vm.startBroadcast(0x1234...);
}

### Frontend

Import from viem/chains. Do NOT define custom chain:

import { monadTestnet } from "viem/chains";

Use with wagmi:

import { createConfig, http } from 'wagmi'
import { monadTestnet } from 'viem/chains'

const config = createConfig({
  chains: [monadTestnet],
  transports: {
    [monadTestnet.id]: http()
  }
})

### Example: Deploy ERC20

1. Create project:

forge init my-token
cd my-token

2. Configure foundry.toml:

[profile.default]
src = "src"
out = "out"
libs = ["lib"]
evm_version = "prague"
solc_version = "0.8.28"

3. Create contract src/MyToken.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
        _mint(msg.sender, initialSupply);
    }
}

4. Install dependencies:

forge install OpenZeppelin/openzeppelin-contracts --no-commit

5. Create deploy script script/Deploy.s.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import "forge-std/Script.sol";
import "../src/MyToken.sol";

contract DeployScript is Script {
    function run() external {
        vm.startBroadcast();
        MyToken token = new MyToken(1000000 * 10**18);
        console.log("Token deployed at:", address(token));
        vm.stopBroadcast();
    }
}

6. Deploy:

forge script script/Deploy.s.sol:DeployScript \\
  --rpc-url https://testnet-rpc.monad.xyz \\
  --private-key $PRIVATE_KEY \\
  --broadcast

7. Verify:

# Use verification API (verifies on all explorers)
STANDARD_INPUT=$(forge verify-contract <TOKEN_ADDRESS> src/MyToken.sol:MyToken --chain 10143 --show-standard-json-input)
COMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/MyToken.sol/MyToken.json)

curl -X POST https://agents.devnads.com/v1/verify \\
  -H "Content-Type: application/json" \\
  -d "{
    \\"chainId\\": 10143,
    \\"contractAddress\\": \\"<TOKEN_ADDRESS>\\",
    \\"contractName\\": \\"src/MyToken.sol:MyToken\\",
    \\"compilerVersion\\": \\"v${COMPILER_VERSION}\\",
    \\"standardJsonInput\\": $STANDARD_INPUT,
    \\"constructorArgs\\": \\"$(cast abi-encode 'constructor(uint256)' 1000000000000000000000000 | sed 's/0x//')\\"
  }"
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: portdeveloper
- Version: 1.0.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-05T20:20:16.048Z
- Expires at: 2026-05-12T20:20:16.048Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/monad-development)
- [Send to Agent page](https://openagent3.xyz/skills/monad-development/agent)
- [JSON manifest](https://openagent3.xyz/skills/monad-development/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/monad-development/agent.md)
- [Download page](https://openagent3.xyz/downloads/monad-development)