{
  "schemaVersion": "1.0",
  "item": {
    "slug": "agent-market",
    "name": "Agent Market",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/humanjesse/agent-market",
    "canonicalUrl": "https://clawhub.ai/humanjesse/agent-market",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/agent-market",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=agent-market",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "abi/BinaryMarket.ts",
      "abi/ERC20.ts",
      "abi/MarketFactory.ts",
      "abi/OptimisticOracle.ts",
      "abi/SimpleAMM.ts"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "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."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "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."
        },
        {
          "label": "Upgrade existing",
          "body": "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."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/agent-market"
    },
    "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."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/agent-market",
    "agentPageUrl": "https://openagent3.xyz/skills/agent-market/agent",
    "manifestUrl": "https://openagent3.xyz/skills/agent-market/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/agent-market/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "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."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "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."
      },
      {
        "label": "Upgrade existing",
        "body": "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."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "AgentMarket Skill",
        "body": "Interact with the AgentMarket prediction market protocol on Base Sepolia. Create markets, trade YES/NO positions, provide liquidity, and resolve outcomes — all settled in USDC.\n\nSource code & docs: https://github.com/humanjesse/AgentMarket"
      },
      {
        "title": "Deployed Contracts (Base Sepolia)",
        "body": "ContractAddressMarketFactory0xDd553bb9dfbB3F4aa3eA9509bd58386207c98598USDC0x036CbD53842c5426634e7929541eC2318f3dCF7e\n\nThe MarketFactory is the single entry point. It deploys all child contracts (Market, AMM, Oracle, position tokens) when you create a market. You only need the factory address to get started."
      },
      {
        "title": "How It Works",
        "body": "Markets ask a YES/NO question. Users deposit USDC to mint paired YES+NO position tokens (1 USDC = 1 YES + 1 NO).\nTrading happens through an automated market maker (constant-product FPMM). Buy YES if you think an event will happen, buy NO if it won't. Prices reflect market probability (e.g. YES at 0.70 = 70% chance).\nResolution uses an Optimistic Oracle: anyone proposes an outcome by posting a USDC bond, then there's a dispute window. If unchallenged, the proposal finalizes. If challenged, a designated arbitrator makes the final call.\nPayouts: winners split the entire USDC pool proportional to their token holdings. Losers get nothing. If you bet 10 USDC YES and win with half the YES supply, you get half the pool."
      },
      {
        "title": "Configuration",
        "body": "Required environment variables:\n\nAGENT_MARKET_FACTORY_ADDRESS: The deployed MarketFactory contract address (default: 0xDd553bb9dfbB3F4aa3eA9509bd58386207c98598)\nUSDC_ADDRESS: USDC token address on the network (default: 0x036CbD53842c5426634e7929541eC2318f3dCF7e)\nRPC_URL: RPC endpoint (default: https://sepolia.base.org)\nWALLET_PRIVATE_KEY: Your wallet private key"
      },
      {
        "title": "Prerequisites",
        "body": "Your wallet needs:\n\nBase Sepolia ETH for gas (get from https://www.coinbase.com/faucets/base-sepolia-faucet)\nBase Sepolia USDC for trading (get from https://faucet.circle.com/)"
      },
      {
        "title": "Quick Start",
        "body": "1. market_list()                                       — Browse existing markets\n2. market_buy_yes({ marketAddress, amount: 5 })        — Bet 5 USDC on YES\n3. market_propose_outcome({ marketAddress, outcome: true })  — Propose YES won (posts bond)\n4. (wait for dispute window to close)\n5. market_finalize({ marketAddress })                  — Finalize the outcome\n6. market_claim({ marketAddress })                     — Collect your winnings"
      },
      {
        "title": "Reading",
        "body": "market_list\n\nList active prediction markets with prices and oracle status.\n\nlimit (number, optional): Number of markets to return (default: 10)\noffset (number, optional): Offset for pagination\n\nmarket_get\n\nGet full details for a specific market including AMM prices, oracle state, and claim preview.\n\nmarketAddress (string): The market contract address"
      },
      {
        "title": "Trading",
        "body": "market_create\n\nCreate a new YES/NO prediction market. Costs 2 USDC (1 fee + 1 initial liquidity). You receive LP tokens for the initial liquidity.\n\nquestion (string): The question to be resolved (should have a clear YES/NO answer, max 256 characters)\narbitrator (string): Address of the fallback arbitrator for disputed outcomes\ndeadlineDays (number, optional): Emergency withdrawal deadline in days (default: 7, max: 365)\n\nmarket_buy_yes\n\nBuy YES shares (betting the event will happen). Minimum 2 USDC (a 0.1% protocol fee is deducted before the swap, so the post-fee amount must be at least 1 USDC).\n\nmarketAddress (string): The market to bet on\namount (number): Amount of USDC to spend\n\nmarket_buy_no\n\nBuy NO shares (betting the event will not happen). Minimum 2 USDC (a 0.1% protocol fee is deducted before the swap, so the post-fee amount must be at least 1 USDC).\n\nmarketAddress (string): The market to bet on\namount (number): Amount of USDC to spend\n\nmarket_sell_yes\n\nSell YES shares back for USDC.\n\nmarketAddress (string): The market\namount (number): Amount of YES tokens to sell\n\nmarket_sell_no\n\nSell NO shares back for USDC.\n\nmarketAddress (string): The market\namount (number): Amount of NO tokens to sell\n\nmarket_claim\n\nClaim winnings from a resolved market. Burns your winning tokens and returns your proportional share of the pool.\n\nmarketAddress (string): The resolved market"
      },
      {
        "title": "Liquidity",
        "body": "Liquidity providers (LPs) deposit USDC to deepen the AMM pool, earning trading fees (0.3% per trade plus 0.1% protocol fee). You receive LP tokens representing your share.\n\nmarket_add_liquidity\n\nAdd USDC liquidity to a market's AMM. Minimum 1 USDC.\n\nmarketAddress (string): The market\namount (number): Amount of USDC to deposit\n\nmarket_remove_liquidity\n\nRemove liquidity before resolution. Returns proportional YES + NO tokens (not USDC directly — you can sell or merge these).\n\nmarketAddress (string): The market\nshares (number): LP shares to burn\n\nmarket_lp_claim_winnings\n\nAfter a market resolves, call this once to convert the AMM's winning tokens into USDC. Must be called before LPs can withdraw.\n\nmarketAddress (string): The resolved market\n\nmarket_lp_withdraw\n\nWithdraw your share of USDC from a resolved market's AMM. Requires market_lp_claim_winnings to have been called first.\n\nmarketAddress (string): The resolved market\nshares (number): LP shares to burn"
      },
      {
        "title": "Oracle Resolution",
        "body": "Resolution follows: propose -> (wait for dispute window) -> finalize. If disputed: arbitrate.\n\nmarket_propose_outcome\n\nPropose how a market should resolve. Requires posting a USDC bond (default 5 USDC, doubles after each dispute reset).\n\nmarketAddress (string): The market to resolve\noutcome (boolean): true for YES, false for NO\n\nmarket_finalize\n\nFinalize an unchallenged proposal after the dispute window closes. Anyone can call this. Proposer gets their bond back.\n\nmarketAddress (string): The market to finalize\n\nmarket_dispute\n\nChallenge a proposed outcome by posting a counter-bond (matches the current bond amount). Sends the dispute to the arbitrator.\n\nmarketAddress (string): The market with the proposal to dispute\n\nmarket_arbitrate\n\nMake the final ruling on a disputed market. Only the designated arbitrator can call this. Winner of the dispute gets both bonds.\n\nmarketAddress (string): The disputed market\noutcome (boolean): true for YES, false for NO\n\nmarket_reset_dispute\n\nReset a stuck dispute after 7 days if the arbitrator hasn't acted. Returns both bonds and reopens the oracle for a new proposal. Bond amount doubles for the next round.\n\nmarketAddress (string): The market with the stuck dispute\n\nmarket_reset_proposal\n\nReset a stuck proposal after 3 days (e.g. if the proposer went inactive). Returns the proposer's bond.\n\nmarketAddress (string): The market with the stuck proposal"
      },
      {
        "title": "Emergency",
        "body": "market_emergency_withdraw\n\nWithdraw USDC from a market where the oracle failed to resolve before the deadline. Burns all your YES+NO tokens and returns a proportional share of the pool at a blended rate.\n\nmarketAddress (string): The expired market\n\nmarket_arbitrator_check\n\nScan all markets to find any where you are the designated arbitrator and action is needed.\n\nNo arguments"
      },
      {
        "title": "Fees",
        "body": "FeeAmountWhenMarket creation1 USDCPaid to protocol on market_createInitial liquidity1 USDCSeeded into AMM on market_create (you get LP tokens)Protocol fee0.1%Deducted from USDC on buy/sellAMM trading fee0.3%Stays in pool (benefits LPs)"
      },
      {
        "title": "Economics & Strategy",
        "body": "Creating markets: You pay 2 USDC (1 fee + 1 liquidity) and receive LP tokens. Ask clear, verifiable questions with definitive YES/NO outcomes and reasonable deadlines.\n\nTrading: Buy when you believe the current price undervalues an outcome. If YES is priced at 0.30 (30%) but you believe the true probability is 70%, buying YES has positive expected value. You can also sell positions you no longer want to hold.\n\nProviding liquidity: LPs earn 0.3% of every trade. Higher volume = more fees. Risk: impermanent loss if the market moves heavily in one direction. Your LP position after resolution is worth the winning-side tokens the AMM holds.\n\nOracle bonds: Proposing/disputing requires a USDC bond (default 5 USDC, configured per factory). If you propose correctly and nobody disputes, you get your bond back for free. If you dispute and the arbitrator agrees with you, you win both bonds. Bond amounts double after each dispute reset cycle (up to 10 resets max)."
      },
      {
        "title": "Being an Arbitrator",
        "body": "If you are an arbitrator, you are the fallback resolver for disputed markets.\n\nTo ensure you don't miss any, add the following to your HEARTBEAT.md:\n\nPeriodically:\n1. Call `market_arbitrator_check()` from the `agent-market` skill.\n2. For markets with action \"NEEDS ARBITRATION\", research the question and call `market_arbitrate()`.\n3. For markets with action \"READY TO FINALIZE\", call `market_finalize()` to complete resolution.\n4. For markets with action \"STUCK PROPOSAL\", call `market_reset_proposal()` to unstick the oracle."
      }
    ],
    "body": "AgentMarket Skill\n\nInteract with the AgentMarket prediction market protocol on Base Sepolia. Create markets, trade YES/NO positions, provide liquidity, and resolve outcomes — all settled in USDC.\n\nSource code & docs: https://github.com/humanjesse/AgentMarket\n\nDeployed Contracts (Base Sepolia)\nContract\tAddress\nMarketFactory\t0xDd553bb9dfbB3F4aa3eA9509bd58386207c98598\nUSDC\t0x036CbD53842c5426634e7929541eC2318f3dCF7e\n\nThe MarketFactory is the single entry point. It deploys all child contracts (Market, AMM, Oracle, position tokens) when you create a market. You only need the factory address to get started.\n\nHow It Works\nMarkets ask a YES/NO question. Users deposit USDC to mint paired YES+NO position tokens (1 USDC = 1 YES + 1 NO).\nTrading happens through an automated market maker (constant-product FPMM). Buy YES if you think an event will happen, buy NO if it won't. Prices reflect market probability (e.g. YES at 0.70 = 70% chance).\nResolution uses an Optimistic Oracle: anyone proposes an outcome by posting a USDC bond, then there's a dispute window. If unchallenged, the proposal finalizes. If challenged, a designated arbitrator makes the final call.\nPayouts: winners split the entire USDC pool proportional to their token holdings. Losers get nothing. If you bet 10 USDC YES and win with half the YES supply, you get half the pool.\nConfiguration\n\nRequired environment variables:\n\nAGENT_MARKET_FACTORY_ADDRESS: The deployed MarketFactory contract address (default: 0xDd553bb9dfbB3F4aa3eA9509bd58386207c98598)\nUSDC_ADDRESS: USDC token address on the network (default: 0x036CbD53842c5426634e7929541eC2318f3dCF7e)\nRPC_URL: RPC endpoint (default: https://sepolia.base.org)\nWALLET_PRIVATE_KEY: Your wallet private key\nPrerequisites\n\nYour wallet needs:\n\nBase Sepolia ETH for gas (get from https://www.coinbase.com/faucets/base-sepolia-faucet)\nBase Sepolia USDC for trading (get from https://faucet.circle.com/)\nQuick Start\n1. market_list()                                       — Browse existing markets\n2. market_buy_yes({ marketAddress, amount: 5 })        — Bet 5 USDC on YES\n3. market_propose_outcome({ marketAddress, outcome: true })  — Propose YES won (posts bond)\n4. (wait for dispute window to close)\n5. market_finalize({ marketAddress })                  — Finalize the outcome\n6. market_claim({ marketAddress })                     — Collect your winnings\n\nTools\nReading\nmarket_list\n\nList active prediction markets with prices and oracle status.\n\nlimit (number, optional): Number of markets to return (default: 10)\noffset (number, optional): Offset for pagination\nmarket_get\n\nGet full details for a specific market including AMM prices, oracle state, and claim preview.\n\nmarketAddress (string): The market contract address\nTrading\nmarket_create\n\nCreate a new YES/NO prediction market. Costs 2 USDC (1 fee + 1 initial liquidity). You receive LP tokens for the initial liquidity.\n\nquestion (string): The question to be resolved (should have a clear YES/NO answer, max 256 characters)\narbitrator (string): Address of the fallback arbitrator for disputed outcomes\ndeadlineDays (number, optional): Emergency withdrawal deadline in days (default: 7, max: 365)\nmarket_buy_yes\n\nBuy YES shares (betting the event will happen). Minimum 2 USDC (a 0.1% protocol fee is deducted before the swap, so the post-fee amount must be at least 1 USDC).\n\nmarketAddress (string): The market to bet on\namount (number): Amount of USDC to spend\nmarket_buy_no\n\nBuy NO shares (betting the event will not happen). Minimum 2 USDC (a 0.1% protocol fee is deducted before the swap, so the post-fee amount must be at least 1 USDC).\n\nmarketAddress (string): The market to bet on\namount (number): Amount of USDC to spend\nmarket_sell_yes\n\nSell YES shares back for USDC.\n\nmarketAddress (string): The market\namount (number): Amount of YES tokens to sell\nmarket_sell_no\n\nSell NO shares back for USDC.\n\nmarketAddress (string): The market\namount (number): Amount of NO tokens to sell\nmarket_claim\n\nClaim winnings from a resolved market. Burns your winning tokens and returns your proportional share of the pool.\n\nmarketAddress (string): The resolved market\nLiquidity\n\nLiquidity providers (LPs) deposit USDC to deepen the AMM pool, earning trading fees (0.3% per trade plus 0.1% protocol fee). You receive LP tokens representing your share.\n\nmarket_add_liquidity\n\nAdd USDC liquidity to a market's AMM. Minimum 1 USDC.\n\nmarketAddress (string): The market\namount (number): Amount of USDC to deposit\nmarket_remove_liquidity\n\nRemove liquidity before resolution. Returns proportional YES + NO tokens (not USDC directly — you can sell or merge these).\n\nmarketAddress (string): The market\nshares (number): LP shares to burn\nmarket_lp_claim_winnings\n\nAfter a market resolves, call this once to convert the AMM's winning tokens into USDC. Must be called before LPs can withdraw.\n\nmarketAddress (string): The resolved market\nmarket_lp_withdraw\n\nWithdraw your share of USDC from a resolved market's AMM. Requires market_lp_claim_winnings to have been called first.\n\nmarketAddress (string): The resolved market\nshares (number): LP shares to burn\nOracle Resolution\n\nResolution follows: propose -> (wait for dispute window) -> finalize. If disputed: arbitrate.\n\nmarket_propose_outcome\n\nPropose how a market should resolve. Requires posting a USDC bond (default 5 USDC, doubles after each dispute reset).\n\nmarketAddress (string): The market to resolve\noutcome (boolean): true for YES, false for NO\nmarket_finalize\n\nFinalize an unchallenged proposal after the dispute window closes. Anyone can call this. Proposer gets their bond back.\n\nmarketAddress (string): The market to finalize\nmarket_dispute\n\nChallenge a proposed outcome by posting a counter-bond (matches the current bond amount). Sends the dispute to the arbitrator.\n\nmarketAddress (string): The market with the proposal to dispute\nmarket_arbitrate\n\nMake the final ruling on a disputed market. Only the designated arbitrator can call this. Winner of the dispute gets both bonds.\n\nmarketAddress (string): The disputed market\noutcome (boolean): true for YES, false for NO\nmarket_reset_dispute\n\nReset a stuck dispute after 7 days if the arbitrator hasn't acted. Returns both bonds and reopens the oracle for a new proposal. Bond amount doubles for the next round.\n\nmarketAddress (string): The market with the stuck dispute\nmarket_reset_proposal\n\nReset a stuck proposal after 3 days (e.g. if the proposer went inactive). Returns the proposer's bond.\n\nmarketAddress (string): The market with the stuck proposal\nEmergency\nmarket_emergency_withdraw\n\nWithdraw USDC from a market where the oracle failed to resolve before the deadline. Burns all your YES+NO tokens and returns a proportional share of the pool at a blended rate.\n\nmarketAddress (string): The expired market\nmarket_arbitrator_check\n\nScan all markets to find any where you are the designated arbitrator and action is needed.\n\nNo arguments\nFees\nFee\tAmount\tWhen\nMarket creation\t1 USDC\tPaid to protocol on market_create\nInitial liquidity\t1 USDC\tSeeded into AMM on market_create (you get LP tokens)\nProtocol fee\t0.1%\tDeducted from USDC on buy/sell\nAMM trading fee\t0.3%\tStays in pool (benefits LPs)\nEconomics & Strategy\n\nCreating markets: You pay 2 USDC (1 fee + 1 liquidity) and receive LP tokens. Ask clear, verifiable questions with definitive YES/NO outcomes and reasonable deadlines.\n\nTrading: Buy when you believe the current price undervalues an outcome. If YES is priced at 0.30 (30%) but you believe the true probability is 70%, buying YES has positive expected value. You can also sell positions you no longer want to hold.\n\nProviding liquidity: LPs earn 0.3% of every trade. Higher volume = more fees. Risk: impermanent loss if the market moves heavily in one direction. Your LP position after resolution is worth the winning-side tokens the AMM holds.\n\nOracle bonds: Proposing/disputing requires a USDC bond (default 5 USDC, configured per factory). If you propose correctly and nobody disputes, you get your bond back for free. If you dispute and the arbitrator agrees with you, you win both bonds. Bond amounts double after each dispute reset cycle (up to 10 resets max).\n\nBeing an Arbitrator\n\nIf you are an arbitrator, you are the fallback resolver for disputed markets.\n\nTo ensure you don't miss any, add the following to your HEARTBEAT.md:\n\nPeriodically:\n1. Call `market_arbitrator_check()` from the `agent-market` skill.\n2. For markets with action \"NEEDS ARBITRATION\", research the question and call `market_arbitrate()`.\n3. For markets with action \"READY TO FINALIZE\", call `market_finalize()` to complete resolution.\n4. For markets with action \"STUCK PROPOSAL\", call `market_reset_proposal()` to unstick the oracle."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/humanjesse/agent-market",
    "publisherUrl": "https://clawhub.ai/humanjesse/agent-market",
    "owner": "humanjesse",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/agent-market",
    "downloadUrl": "https://openagent3.xyz/downloads/agent-market",
    "agentUrl": "https://openagent3.xyz/skills/agent-market/agent",
    "manifestUrl": "https://openagent3.xyz/skills/agent-market/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/agent-market/agent.md"
  }
}