github Python re-analysis due

romudille-bit/agentpay

github

AgentPay - The economic-intelligence layer for AI agents — an x402 gateway that prices, caps, and receipts agent data spend. 17 free tools + verified_route, the buyer-side x402 trust oracle. USDC on Base or Stellar.

maintainer
romudille-bit
licence
NOASSERTION
first seen
2026-06-22
last seen
2026-09-17
releases · 30d
2
short id

Drift inferred · capture-to-capture

tool count over time

06-22 20:54 now
19t
20t
capabilities 20 tools
transport stdio · http verified reported listed in the official MCP registry counts 20 tools · 0 res · 0 prompts permission surface via README inference

tools

  • crypto_news

    currencies (e.g. "ETH,BTC"), filter

  • defi_tvl

    protocol (optional, e.g. "uniswap")

  • dune_query

    query_id, limit, fast_only

  • fear_greed_index

    limit (days of history, default 1)

  • funding_rates

    asset (optional)

  • gas_tracker

  • market_snapshot

  • open_interest

    symbol (BTC, ETH…)

  • orderbook_depth

    symbol (e.g. ETHUSDT)

  • pre_trade_check

    symbol, size_usd, side, token_address?

  • session_create

    agent_address, max_spend, label

  • token_market_data

    token_a, token_b

  • token_price

    symbol (BTC, ETH, SOL…)

  • token_security

    contract_address, chain

  • url_reader

    url

  • verified_route

    need, budget_usd?, chain?

  • wallet_balance

    address, chain (ethereum/stellar)

  • web_search

    query

  • whale_activity

    token, min_usd (default 100k)

  • yield_scanner

    token, chain (optional), min_tvl

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit d2e1814 · analyzer v33 · 1w ago

skills & prompt files 3

danger signals3

code evidence vv0.3.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 145

filesystem 27

  • fs (weak) romudille-bit-agentpay-d2e1814/agent/budget_demo.py :304 with open(out, "w") as f:
  • fs (weak) romudille-bit-agentpay-d2e1814/agent/week2_test.py :186 with open(out, "w") as f:
  • fs romudille-bit-agentpay-d2e1814/gateway/routes/discovery.py :113 import pathlib as _pathlib
  • fs romudille-bit-agentpay-d2e1814/gateway/routes/infra.py :11 from pathlib import Path
  • fs romudille-bit-agentpay-d2e1814/gateway/routes/tools.py :1353 # closed on it. This path deliberately fails open (None falls
  • fs (weak) romudille-bit-agentpay-d2e1814/tests/test_agentpay_sdk.py :1275 import pathlib
  • fs (weak) romudille-bit-agentpay-d2e1814/tests/test_analyst_degrades.py :78 import pathlib
  • fs (weak) romudille-bit-agentpay-d2e1814/tests/test_radar.py :10 import pathlib
  • fs (weak) romudille-bit-agentpay-d2e1814/tests/test_stacks_derive_key.py :5 import pathlib
  • fs (weak) romudille-bit-agentpay-d2e1814/tests/test_stacks_sdk.py :27 from pathlib import Path
  • fs (weak) romudille-bit-agentpay-d2e1814/tests/test_stacks_tx.py :25 from pathlib import Path
  • fs (weak) romudille-bit-agentpay-d2e1814/tests/test_verified_route.py :10 import pathlib
show 15 more
  • fs romudille-bit-agentpay-d2e1814/tools/agentpay_usage.py :52 with open(path) as fh:
  • fs romudille-bit-agentpay-d2e1814/tools/audit_exchange_wallets.py :29 from pathlib import Path
  • fs romudille-bit-agentpay-d2e1814/tools/census_multi_provider.py :232 with open(path) as fh:
  • fs (weak) romudille-bit-agentpay-d2e1814/tools/demo.py :40 with open(env_path, "r") as fh:
  • fs romudille-bit-agentpay-d2e1814/tools/export_abandoned_legacy.py :39 with open(path) as fh:
  • fs romudille-bit-agentpay-d2e1814/tools/index_bazaar.py :33 with open(env_path) as fh:
  • fs romudille-bit-agentpay-d2e1814/tools/index_bazaar_tool.py :39 with open(env_path) as fh:
  • fs (weak) romudille-bit-agentpay-d2e1814/tools/multichain_demo.py :41 with open(p) as fh:
  • fs romudille-bit-agentpay-d2e1814/tools/payer_depth.py :551 with open(out, "w") as fh:
  • fs romudille-bit-agentpay-d2e1814/tools/probe_cmc_settle.py :24 for _line in open(os.path.join(ROOT, ".env")):
  • fs romudille-bit-agentpay-d2e1814/tools/probe_fuchss_report.py :26 for _line in open(os.path.join(ROOT, ".env")):
  • fs romudille-bit-agentpay-d2e1814/tools/search_pricing_baseline.py :50 with open(path) as fh:
  • fs romudille-bit-agentpay-d2e1814/tools/set_wallet.py :84 with open(path, "r") as fh:
  • fs (weak) romudille-bit-agentpay-d2e1814/tools/strategy_spec_demo.py :24 for _line in open(os.path.join(ROOT, ".env")):
  • fs romudille-bit-agentpay-d2e1814/tools/verify_ledger_legs.py :37 with open(path) as fh:

network 58

  • net (weak) romudille-bit-agentpay-d2e1814/agent/budget_demo.py :23 import httpx
  • net romudille-bit-agentpay-d2e1814/agentpay/_client.py :25 import httpx
  • net romudille-bit-agentpay-d2e1814/agentpay/_wallet.py :12 import httpx
  • net romudille-bit-agentpay-d2e1814/agentpay/client.py :5 import httpx
  • net romudille-bit-agentpay-d2e1814/agents/analyst/listing_keepalive.py :43 import urllib.parse
  • net romudille-bit-agentpay-d2e1814/agents/analyst/run.py :83 import urllib.request
  • net romudille-bit-agentpay-d2e1814/agents/analyst/strategy.py :46 import urllib.parse
  • net romudille-bit-agentpay-d2e1814/agents/prober/probe.py :25 from urllib.parse import urlsplit
  • net romudille-bit-agentpay-d2e1814/agents/prober/run.py :51 import urllib.request
  • net romudille-bit-agentpay-d2e1814/agents/prober/self_audit.py :26 import urllib.error
  • net romudille-bit-agentpay-d2e1814/db/migrate.py :13 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/base.py :29 import httpx
show 28 more
  • net romudille-bit-agentpay-d2e1814/gateway/main.py :21 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/mcp_server.py :27 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/radar.py :26 import urllib.parse
  • net romudille-bit-agentpay-d2e1814/gateway/radar_settle.py :26 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/routes/discovery.py :18 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/routes/faucet.py :18 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/routes/ledger.py :38 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/routes/tools.py :28 import socket
  • net romudille-bit-agentpay-d2e1814/gateway/services/depth_refresh.py :29 import urllib.parse
  • net romudille-bit-agentpay-d2e1814/gateway/services/leg_verifier.py :51 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/services/probe_rollup.py :35 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/services/supabase.py :29 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/services/tools_runtime.py :17 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/stacks.py :27 import httpx
  • net romudille-bit-agentpay-d2e1814/gateway/stellar.py :11 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_agentpay_sdk.py :19 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_base.py :18 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_get_params.py :13 from urllib.parse import parse_qs, urlsplit
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_ledger.py :451 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_leg_verifier.py :225 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_sdk_settlement_header.py :17 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_stacks_gateway.py :27 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_stacks_sdk.py :29 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_stacks_stale_nonce_requote.py :11 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_stellar.py :36 import httpx
  • net (weak) romudille-bit-agentpay-d2e1814/tests/test_supabase.py :30 import httpx
  • net romudille-bit-agentpay-d2e1814/tools/agentpay_usage.py :26 import urllib.request
  • net romudille-bit-agentpay-d2e1814/tools/audit_exchange_wallets.py :26 import urllib.parse

18 more not shown — this panel samples each group; the count above is the real total.

secrets 27

  • secrets (weak) romudille-bit-agentpay-d2e1814/agent/budget_demo.py :45 AGENT_SECRET = os.getenv("STELLAR_SECRET_KEY") or os.getenv("TEST_AGENT_SECRET_KEY", "")
  • secrets (weak) romudille-bit-agentpay-d2e1814/agent/week2_test.py :41 AGENT_SECRET = os.getenv("STELLAR_SECRET_KEY") or os.getenv("TEST_AGENT_SECRET_KEY", "")
  • secrets romudille-bit-agentpay-d2e1814/agentpay/_wallet.py :310 secret_key=os.environ["STELLAR_SECRET"],
  • secrets romudille-bit-agentpay-d2e1814/agents/analyst/run.py :376 target = (os.environ.get("FLAGSHIP_TARGET_TOKEN", "").strip() or "BNB").upper()
  • secrets romudille-bit-agentpay-d2e1814/agents/prober/run.py :328 secret = os.environ.get("FLAGSHIP_INGEST_SECRET", "")
  • secrets romudille-bit-agentpay-d2e1814/db/migrate.py :21 SUPABASE_KEY = os.environ["SUPABASE_KEY"] # required from env; never hardcode (a key was leaked in git history - rotate + set in Railway)
  • secrets (weak) romudille-bit-agentpay-d2e1814/examples/stacks_m1_demo.py :93 payer = os.environ.get("STACKS_AGENT_KEY", "").strip()
  • secrets romudille-bit-agentpay-d2e1814/gateway/mcp_server.py :40 STELLAR_SECRET_KEY = os.environ.get("STELLAR_SECRET_KEY", "")
  • secrets romudille-bit-agentpay-d2e1814/tools/agentpay_usage.py :177 key = os.environ.get("SUPABASE_KEY")
  • secrets romudille-bit-agentpay-d2e1814/tools/audit_exchange_wallets.py :55 key = os.environ.get("ETHERSCAN_API_KEY", "")
  • secrets romudille-bit-agentpay-d2e1814/tools/bazaar_tx.py :17 import getpass
  • secrets romudille-bit-agentpay-d2e1814/tools/census_multi_provider.py :334 url, key = os.environ.get("SUPABASE_URL"), os.environ.get("SUPABASE_KEY")
show 15 more
  • secrets (weak) romudille-bit-agentpay-d2e1814/tools/demo.py :356 stellar_secret = os.environ.get("STELLAR_SECRET", "").strip()
  • secrets romudille-bit-agentpay-d2e1814/tools/dune_tool.py :39 api_key = os.environ.get("DUNE_API_KEY", "")
  • secrets romudille-bit-agentpay-d2e1814/tools/export_abandoned_legacy.py :70 url, key = os.environ.get("SUPABASE_URL"), os.environ.get("SUPABASE_KEY")
  • secrets romudille-bit-agentpay-d2e1814/tools/index_bazaar_tool.py :84 or os.environ.get("FLAGSHIP_BASE_KEY")
  • secrets (weak) romudille-bit-agentpay-d2e1814/tools/multichain_demo.py :118 or os.environ.get("STELLAR_MAINNET_SECRET")
  • secrets romudille-bit-agentpay-d2e1814/tools/payer_depth.py :365 url, key = os.environ.get("SUPABASE_URL"), os.environ.get("SUPABASE_KEY")
  • secrets romudille-bit-agentpay-d2e1814/tools/probe_cmc_settle.py :35 base = (os.environ.get("FLAGSHIP_BASE_KEY")
  • secrets romudille-bit-agentpay-d2e1814/tools/probe_fuchss_report.py :37 base = (os.environ.get("FLAGSHIP_BASE_KEY")
  • secrets romudille-bit-agentpay-d2e1814/tools/purge_prober_false_negatives.py :45 SUPABASE_KEY = os.environ.get("SUPABASE_KEY", "")
  • secrets romudille-bit-agentpay-d2e1814/tools/reindex_bazaar.py :13 import getpass
  • secrets romudille-bit-agentpay-d2e1814/tools/search_pricing_baseline.py :104 url, key = os.environ.get("SUPABASE_URL"), os.environ.get("SUPABASE_KEY")
  • secrets romudille-bit-agentpay-d2e1814/tools/set_wallet.py :14 import getpass
  • secrets romudille-bit-agentpay-d2e1814/tools/stacks_derive_key.py :19 import getpass
  • secrets (weak) romudille-bit-agentpay-d2e1814/tools/strategy_spec_demo.py :44 if not os.environ.get("FLAGSHIP_BASE_KEY"):
  • secrets romudille-bit-agentpay-d2e1814/tools/sync_402index.py :37 INDEX_TOKEN = os.environ.get("INDEX402_TOKEN", "") # empty = read-only mode

declared dependencies 5

  • stellar-sdk@>=10.0.0
  • httpx@>=0.27.0
  • python-dotenv@>=1.0.0
  • eth-account@>=0.11.0
  • x402@>=0.1.0

perm:untrusted 1

  • untrusted (weak) romudille-bit-agentpay-d2e1814/tools/demo.py :162 tools_list = requests.get(TOOLS_URL, timeout=15).json().get("tools", [])