github TypeScript analyzed f071244

Meridian402/meridian

github

Autonomous AI market-making agent platform for tokenized equities on Robinhood Chain, built on OpenHermit and metered with x402.

maintainer
Meridian402
licence
first seen
2026-08-02
last seen
2026-09-07
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 20 tools
transport streamable-http · http counts 20 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • meridian_agent_thoughts
  • meridian_basis_feed
  • meridian_bridge_execute
  • meridian_bridge_quote
  • meridian_carry_quote
  • meridian_index_execute
  • meridian_index_yield
  • meridian_index_yield_execute
  • meridian_launch_token_pons
  • meridian_list_assets
  • meridian_list_chains
  • meridian_lp_score
  • meridian_market_data
  • meridian_market_universe
  • meridian_perp_feed
  • meridian_propose_lp_action
  • meridian_settle_x402
  • meridian_submit_research
  • meridian_suggest_route
  • meridian_universe_status
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit f071244 · analyzer v33 · 1w ago

skills & prompt files 4

danger signals1

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

code files: 277

filesystem 100

  • fs Meridian402-meridian-f071244/agent/_merd-autopilot.mts :9 import { existsSync, readFileSync, appendFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-bridge.mts :18 import { appendFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-burn.mts :15 import { appendFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-commission.mts :12 import { readFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-daily-print.mts :19 import { writeFileSync, readFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-daily.mts :12 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-engage.mts :18 import { existsSync, readFileSync, writeFileSync, rmSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-outreach.mts :20 import { existsSync, readFileSync, writeFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-payout.mts :15 import { readFileSync, writeFileSync, appendFileSync, existsSync, unlinkSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-telegram.mts :10 import { readFileSync, writeFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-thread.mts :6 import { existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_merd-treasury.mts :15 import { readFileSync, writeFileSync, appendFileSync, existsSync, unlinkSync } from "node:fs";
show 28 more
  • fs Meridian402-meridian-f071244/agent/_sk-1-deploy-safe.mjs :10 import { readFileSync, writeFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_sk-2-deploy-roles.mjs :7 import { readFileSync, writeFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_sk-3-enable-module.mjs :7 import { readFileSync, writeFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_sk-4-scope-session.mjs :7 import { readFileSync, writeFileSync, appendFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_sk-5-prove-containment.mjs :7 import { readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_sk-7-prove-revocation.mjs :7 import { readFileSync, writeFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_sk-8-owner-setup.mjs :8 import { readFileSync, writeFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/_sk-9-prove-swap.mts :7 import { readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/accounts.ts :8 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/agentProposals.ts :15 import { readFileSync, writeFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/assetScorecard.ts :8 import { readFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/attribution.ts :21 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/attributionBackfill.ts :7 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/backtest/simulate.legacy-momentum.ts :31 import { readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/backtest/simulate.ts :27 import { readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/backup.ts :14 import { existsSync, readFileSync, writeFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/bookSnapshot.ts :10 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/consistency.ts :6 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/credits.ts :6 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/dailyReconcile.ts :10 import { readFileSync, writeFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/dataDir.ts :1 import { existsSync, mkdirSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/deploy/fleets.ts :10 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/deploy/userAgents.ts :6 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/dumpWatch.ts :26 import { readFileSync, writeFileSync, existsSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/earn/scout.ts :10 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/earn/xTalk.ts :21 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/earningsHistory.ts :11 import { existsSync, readFileSync } from "node:fs";
  • fs Meridian402-meridian-f071244/agent/src/executionsLog.ts :7 import { existsSync, readFileSync } from "node:fs";

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

shell / exec 4

  • shell Meridian402-meridian-f071244/agent/_merd-daily-print.mts :18 import { execFileSync } from "node:child_process";
  • shell (weak) Meridian402-meridian-f071244/agent/test/mcp-server.test.ts :3 import { spawn, type ChildProcess } from "node:child_process";
  • shell (weak) Meridian402-meridian-f071244/agent/test/risk-limiter.test.ts :6 import { spawnSync } from "node:child_process";
  • shell (weak) Meridian402-meridian-f071244/agent/test/signer-assert.test.ts :4 import { spawnSync } from "node:child_process";

network 29

  • net Meridian402-meridian-f071244/agent/_feegrowthprobe.mjs :38 const ethRes = await fetch("https://query1.finance.yahoo.com/v8/finance/chart/ETH-USD?range=1d&interval=1d", { headers: { "User-Agent": "Mozilla/5.0 (Meridian probe)" } });
  • net Meridian402-meridian-f071244/agent/_indexlpbacktest.mjs :59 const ethRes = await fetch("https://query1.finance.yahoo.com/v8/finance/chart/ETH-USD?range=1d&interval=1d", { headers: { "User-Agent": "Mozilla/5.0 (Meridian probe)" } });
  • net Meridian402-meridian-f071244/agent/_indexlpprobe.mjs :40 const ethRes = await fetch("https://query1.finance.yahoo.com/v8/finance/chart/ETH-USD?range=1d&interval=1d", { headers: { "User-Agent": "Mozilla/5.0 (Meridian probe)" } });
  • net Meridian402-meridian-f071244/agent/_merd-autopilot.mts :32 return await (await fetch(API + p, { signal: AbortSignal.timeout(20_000) })).json();
  • net Meridian402-meridian-f071244/agent/_merd-bridge.mts :65 const res = await fetch("https://api.relay.link/quote", {
  • net Meridian402-meridian-f071244/agent/_merd-daily-print.mts :52 const j = async (path: string) => (await fetch(`${API}${path}`, { signal: AbortSignal.timeout(20000) })).json();
  • net Meridian402-meridian-f071244/agent/_merd-daily.mts :48 return await (await fetch(API + p, { signal: AbortSignal.timeout(20_000) })).json();
  • net Meridian402-meridian-f071244/agent/_merd-milestone.mts :17 (await fetch(u, { headers: { "User-Agent": "Mozilla/5.0" }, signal: AbortSignal.timeout(30000) })).json();
  • net Meridian402-meridian-f071244/agent/_merd-payout.mts :95 const pending = (await (await fetch(`${API}/api/admin/pending-payouts`, { headers, signal: AbortSignal.timeout(20_000) })).json()) as {
  • net Meridian402-meridian-f071244/agent/_merd-steward.mts :29 return await (await fetch(`${API}${path}`, { headers: auth ? headers : undefined, signal: AbortSignal.timeout(20_000) })).json();
  • net Meridian402-meridian-f071244/agent/_merd-telegram.mts :33 const j = async (path: string) => (await fetch(`${API}${path}`, { signal: AbortSignal.timeout(20000) })).json();
  • net Meridian402-meridian-f071244/agent/src/assetScorecard.ts :92 const info = (await fetch(`https://robinhoodchain.blockscout.com/api/v2/tokens/${p.token}`, {
show 17 more
  • net Meridian402-meridian-f071244/agent/src/attributionBackfill.ts :31 const res = await fetch("https://query1.finance.yahoo.com/v8/finance/chart/ETH-USD?range=3mo&interval=1d", {
  • net Meridian402-meridian-f071244/agent/src/capitalFlows.ts :62 const res = await fetch(`${EXPLORER_API}?${params}`, { signal: AbortSignal.timeout(20_000) });
  • net Meridian402-meridian-f071244/agent/src/deploy/myAgent.ts :101 if (init?.signal) return fetch(input, init);
  • net Meridian402-meridian-f071244/agent/src/earn/xTalk.ts :141 const r = await fetch(`https://cdn.syndication.twimg.com/tweet-result?id=${id}&token=a`, {
  • net Meridian402-meridian-f071244/agent/src/indexYield.ts :103 const res = await fetch(url, { ...init, signal: AbortSignal.timeout(8000) });
  • net Meridian402-meridian-f071244/agent/src/launch/watch.ts :161 const r = await fetch(`${PUSH_URL}/api/launch-venues`, { method: "POST", headers: { "content-type": "application/json", authorization: `Bearer ${PUSH_TOKEN}` }, body: JSON.stringify(body), signal: Abo
  • net Meridian402-meridian-f071244/agent/src/marketData.ts :137 const res = await fetch(url, {
  • net Meridian402-meridian-f071244/agent/src/research/basisLogger.ts :74 const res = await fetch(`https://query1.finance.yahoo.com/v8/finance/chart/${symbol}?interval=1d&range=1d`, {
  • net Meridian402-meridian-f071244/agent/src/research/lighterLogger.ts :18 const res = await fetch(`${API}${path}`, { signal: AbortSignal.timeout(20_000) });
  • net Meridian402-meridian-f071244/agent/src/signals/basis.ts :23 const res = await fetch(
  • net Meridian402-meridian-f071244/agent/src/signals/flowScan.ts :74 sink(await fetch(cur, end));
  • net Meridian402-meridian-f071244/agent/src/signals/perpFeed.ts :36 const res = await fetch(`${API}${path}`, { signal: AbortSignal.timeout(15_000) });
  • net Meridian402-meridian-f071244/agent/src/signals/tokenAnalyst.ts :54 sink(await fetch(cur, end));
  • net Meridian402-meridian-f071244/agent/src/social/xOAuth.ts :150 const tr = await fetch(TOKEN, {
  • net Meridian402-meridian-f071244/agent/src/venues/uniswapV4.ts :110 const res = await fetch("https://query1.finance.yahoo.com/v8/finance/chart/ETH-USD?range=1d&interval=1d", {
  • net (weak) Meridian402-meridian-f071244/agent/test/mcp-server.test.ts :34 const res = await fetch(`http://127.0.0.1:${PORT}/health`);
  • net (weak) Meridian402-meridian-f071244/contracts/test/rpcproxy.mjs :3 import http from "node:http";

secrets 32

  • secrets Meridian402-meridian-f071244/agent/_merd-autopilot.mts :11 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/_merd-bridge.mts :40 const key = (process.env.MERD_TREASURY_WALLET_KEY ?? "").trim();
  • secrets Meridian402-meridian-f071244/agent/_merd-burn.mts :45 const key = (process.env.MERD_TREASURY_WALLET_KEY ?? "").trim();
  • secrets Meridian402-meridian-f071244/agent/_merd-commission.mts :19 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/_merd-daily.mts :20 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/_merd-engage.mts :20 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/_merd-outreach.mts :22 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/_merd-payout.mts :23 const TOKEN = (process.env.MERIDIAN_MCP_TOKEN ?? "").trim();
  • secrets Meridian402-meridian-f071244/agent/_merd-steward.mts :12 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/_merd-telegram.mts :13 const TOKEN = process.env.MERD_TG_BOT_TOKEN;
  • secrets Meridian402-meridian-f071244/agent/_merd-treasury.mts :49 const key = (process.env.MERD_TREASURY_WALLET_KEY ?? "").trim();
  • secrets Meridian402-meridian-f071244/agent/_ohschedule.mjs :2 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
show 20 more
  • secrets Meridian402-meridian-f071244/agent/_ohsetup.mjs :2 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/_sk-1-deploy-safe.mjs :23 const key = process.env.AGENT_SIGNER_PRIVATE_KEY;
  • secrets Meridian402-meridian-f071244/agent/_sk-2-deploy-roles.mjs :23 const key = process.env.AGENT_SIGNER_PRIVATE_KEY;
  • secrets Meridian402-meridian-f071244/agent/_sk-3-enable-module.mjs :19 const account = privateKeyToAccount((process.env.AGENT_SIGNER_PRIVATE_KEY.startsWith("0x") ? "" : "0x") + process.env.AGENT_SIGNER_PRIVATE_KEY);
  • secrets Meridian402-meridian-f071244/agent/_sk-4-scope-session.mjs :20 const account = privateKeyToAccount((process.env.AGENT_SIGNER_PRIVATE_KEY.startsWith("0x") ? "" : "0x") + process.env.AGENT_SIGNER_PRIVATE_KEY);
  • secrets Meridian402-meridian-f071244/agent/_sk-5-prove-containment.mjs :20 const session = privateKeyToAccount(process.env.SPIKE_SESSION_KEY);
  • secrets Meridian402-meridian-f071244/agent/_sk-7-prove-revocation.mjs :21 const owner = privateKeyToAccount((process.env.AGENT_SIGNER_PRIVATE_KEY.startsWith("0x") ? "" : "0x") + process.env.AGENT_SIGNER_PRIVATE_KEY);
  • secrets Meridian402-meridian-f071244/agent/_sk-8-owner-setup.mjs :22 const owner = privateKeyToAccount((process.env.AGENT_SIGNER_PRIVATE_KEY.startsWith("0x") ? "" : "0x") + process.env.AGENT_SIGNER_PRIVATE_KEY);
  • secrets Meridian402-meridian-f071244/agent/_sk-9-prove-swap.mts :18 const owner = privateKeyToAccount(((process.env.AGENT_SIGNER_PRIVATE_KEY!.startsWith("0x") ? "" : "0x") + process.env.AGENT_SIGNER_PRIVATE_KEY) as `0x${string}`);
  • secrets Meridian402-meridian-f071244/agent/src/accounts.ts :23 const SESSION_SECRET = process.env.MERIDIAN_SESSION_SECRET || randomBytes(32).toString("hex");
  • secrets Meridian402-meridian-f071244/agent/src/config.ts :104 mcpToken: process.env.MERIDIAN_MCP_TOKEN ?? "",
  • secrets Meridian402-meridian-f071244/agent/src/deploy/fleets.ts :173 const gw = new GatewayClient({ baseUrl: process.env.OPENHERMIT_GATEWAY_URL, token: process.env.GATEWAY_ADMIN_TOKEN });
  • secrets Meridian402-meridian-f071244/agent/src/launch/custodialLaunch.ts :81 const key = (process.env.MERD_LAUNCH_WALLET_KEY ?? "").trim();
  • secrets Meridian402-meridian-f071244/agent/src/launch/watch.ts :142 const PUSH_TOKEN = process.env.MERIDIAN_MCP_TOKEN ?? "";
  • secrets Meridian402-meridian-f071244/agent/src/social/xClient.ts :20 const appKey = process.env.X_API_KEY;
  • secrets Meridian402-meridian-f071244/agent/src/social/xOAuth.ts :26 return Boolean(process.env.X_OAUTH_CLIENT_ID && process.env.X_OAUTH_CLIENT_SECRET);
  • secrets Meridian402-meridian-f071244/agent/src/venues/signer.ts :69 const key = process.env.AGENT_SIGNER_PRIVATE_KEY;
  • secrets (weak) Meridian402-meridian-f071244/agent/test/custodial-launch.test.ts :31 delete process.env.MERD_LAUNCH_WALLET_KEY;
  • secrets (weak) Meridian402-meridian-f071244/agent/test/launch-from-x.test.ts :9 delete process.env.MERD_LAUNCH_WALLET_KEY; // dormant
  • secrets (weak) Meridian402-meridian-f071244/agent/test/signer-assert.test.ts :18 delete process.env.AGENT_SIGNER_PRIVATE_KEY;

database 2

  • db Meridian402-meridian-f071244/agent/src/backup.ts :16 import type pg from "pg";
  • db Meridian402-meridian-f071244/agent/src/db.ts :5 import pg from "pg";

tool registrations 20

  • meridian_list_chains Meridian402-meridian-f071244/agent/src/mcp/server.ts :96
  • meridian_list_assets Meridian402-meridian-f071244/agent/src/mcp/server.ts :107
  • meridian_market_data Meridian402-meridian-f071244/agent/src/mcp/server.ts :118
  • meridian_suggest_route Meridian402-meridian-f071244/agent/src/mcp/server.ts :135
  • meridian_index_yield Meridian402-meridian-f071244/agent/src/mcp/server.ts :151
  • meridian_basis_feed Meridian402-meridian-f071244/agent/src/mcp/server.ts :162
  • meridian_perp_feed Meridian402-meridian-f071244/agent/src/mcp/server.ts :173
  • meridian_carry_quote Meridian402-meridian-f071244/agent/src/mcp/server.ts :184
  • meridian_propose_lp_action Meridian402-meridian-f071244/agent/src/mcp/server.ts :201
  • meridian_lp_score Meridian402-meridian-f071244/agent/src/mcp/server.ts :235
  • meridian_agent_thoughts Meridian402-meridian-f071244/agent/src/mcp/server.ts :246
  • meridian_bridge_quote Meridian402-meridian-f071244/agent/src/mcp/server.ts :257
show 8 more
  • meridian_bridge_execute Meridian402-meridian-f071244/agent/src/mcp/server.ts :293
  • meridian_index_execute Meridian402-meridian-f071244/agent/src/mcp/server.ts :338
  • meridian_index_yield_execute Meridian402-meridian-f071244/agent/src/mcp/server.ts :355
  • meridian_settle_x402 Meridian402-meridian-f071244/agent/src/mcp/server.ts :386
  • meridian_market_universe Meridian402-meridian-f071244/agent/src/mcp/server.ts :404
  • meridian_universe_status Meridian402-meridian-f071244/agent/src/mcp/server.ts :430
  • meridian_submit_research Meridian402-meridian-f071244/agent/src/mcp/server.ts :455
  • meridian_launch_token_pons Meridian402-meridian-f071244/agent/src/mcp/server.ts :483

declared dependencies 12

  • @modelcontextprotocol/sdk@^1.18.0
  • @openhermit/sdk@^0.7.0
  • express@^4.21.2
  • pg@^8.22.0
  • twitter-api-v2@^1.29.0
  • viem@^2.55.0
  • zod@^3.24.1
  • @types/express@^4.17.21
  • @types/node@^20.14.10
  • @types/pg@^8.20.0
  • tsx@^4.16.2
  • typescript@^5.5.4

perm:untrusted 7

  • untrusted Meridian402-meridian-f071244/agent/_merd-autopilot.mts :32 return await (await fetch(API + p, { signal: AbortSignal.timeout(20_000) })).json();
  • untrusted Meridian402-meridian-f071244/agent/_merd-daily-print.mts :52 const j = async (path: string) => (await fetch(`${API}${path}`, { signal: AbortSignal.timeout(20000) })).json();
  • untrusted Meridian402-meridian-f071244/agent/_merd-daily.mts :48 return await (await fetch(API + p, { signal: AbortSignal.timeout(20_000) })).json();
  • untrusted Meridian402-meridian-f071244/agent/_merd-milestone.mts :17 (await fetch(u, { headers: { "User-Agent": "Mozilla/5.0" }, signal: AbortSignal.timeout(30000) })).json();
  • untrusted Meridian402-meridian-f071244/agent/_merd-payout.mts :95 const pending = (await (await fetch(`${API}/api/admin/pending-payouts`, { headers, signal: AbortSignal.timeout(20_000) })).json()) as {
  • untrusted Meridian402-meridian-f071244/agent/_merd-steward.mts :29 return await (await fetch(`${API}${path}`, { headers: auth ? headers : undefined, signal: AbortSignal.timeout(20_000) })).json();
  • untrusted Meridian402-meridian-f071244/agent/_merd-telegram.mts :33 const j = async (path: string) => (await fetch(`${API}${path}`, { signal: AbortSignal.timeout(20000) })).json();