ghostbot-uniswap-v4
Analysis
Review before installing: this Sepolia DeFi skill is mostly purpose-aligned, but it under-discloses private-key use and can sign blockchain transactions, approvals, and ongoing auto-rebalancing actions.
Findings (5)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
const autoRebalance = (process.argv[5] || "true") === "true"; ... args: [CONTRACTS.hook, amountWei * 10n], ... amount0Min: 0n, amount1Min: 0n, ... functionName: "addLiquidity"
The add-liquidity script defaults auto-rebalance on, approves the hook for ten times the requested amount, submits an on-chain addLiquidity transaction, and uses zero minimum amounts.
By default, the scripts use the built-in demo wallet. To use your own: export RPC_URL="https://your-sepolia-rpc" export DEPLOYER_PRIVATE_KEY="0xyour-private-key"
The documentation frames the private key as optional and claims a built-in demo wallet, but the included config code requires RPC_URL and DEPLOYER_PRIVATE_KEY before any script can run.
"dependencies": {
"viem": "^2.20.0"
}The user-directed npm install relies on a semver-ranged dependency rather than a pinned lockfile, and the installed package will be used by scripts that handle a wallet private key.
Heartbeat: Every 60 seconds ... rebalancePosition: Owner-callable, removes old liquidity, computes new range, adds liquidity, tracks surplus
The architecture describes recurring bot/oracle activity and owner-callable rebalancing, which is central to the skill's stated automated liquidity-management purpose but creates ongoing effects after setup.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
const RPC_URL = process.env.RPC_URL;
const PRIVATE_KEY = process.env.DEPLOYER_PRIVATE_KEY;
if (!RPC_URL) throw new Error("Missing RPC_URL env var");
if (!PRIVATE_KEY) throw new Error("Missing DEPLOYER_PRIVATE_KEY env var");
export const account = privateKeyToAccount(PRIVATE_KEY);The scripts require a wallet private key and use it to create a signing account, while the provided metadata declares no required env vars and no primary credential.
