Skip to main content
The validator dashboard at validators.mev-commit.xyz is deprecated. Every opt-in path (vanilla, EigenLayer, Symbiotic) lives in the mev-commit-opt-in skill. Manual contract calls on the path pages remain valid if you want them.
Opt L1 validator BLS pubkeys into mev-commit from Claude, ChatGPT, or Grok. The skill uses your RPC and wallet, verifies on the ValidatorOptInHub, computes real on-chain ETH stake, and can opt out. Homepage: primev.xyz/ai (also mev-commit.xyz, which redirects here). Any mev-boost relay set is fine. There is no relay configuration step.

Install the skill

Source: github.com/primev/claude-plugin

Complete the registry

Skill install is not registration. Walk this list to a Hub-true result. Agents should execute it in order and ask before every write.
  1. Pick one method. Vanilla, EigenLayer, or Symbiotic. One pubkey, one method. Do not double-register.
  2. Parse keys. Accept .txt, .csv, paste, commas, or newlines. Normalize to 0x + 96 hex. Confirm count and first/last pubkey with the operator.
  3. Confirm signer and RPC. Use their ETH_RPC_URL (mainnet chain id 1, or Hoodi 560048). Wallet is Foundry keystore, hardware, or PRIVATE_KEY only if they insist. Never print a private key.
  4. Prerequisites.
    • Vanilla: read minStake(). msg.value is split evenly. Extra ETH is a slash buffer. Hoodi vanilla is whitelisted. Mainnet whitelist is coming.
    • EigenLayer: caller is the pod owner or the delegated AVS operator. Function name is plural: registerValidatorsByPodOwners.
    • Symbiotic: vault and operator must already be registered. If not, stop and name the gap.
  5. Simulate, then send. Batch 40 to 60 keys. Wait for the receipt. A receipt is not opted in.
  6. Verify on the Hub. ValidatorOptInHub.areValidatorsOptedIn(bytes[]) at 0x1059155bD5854224bF58e43CD3EEC6B07b4F30Ad. Every key must be true.
  7. Report. Method, key count, tx hash, Etherscan or Hoodi link, Hub booleans, next step. For stake, sum real on-chain balances. Never 32 ETH × key count.
If a write reverts, name the contract, function, revert, and the address or pubkey that failed. If the vault or operator is missing, tell them to ping Primev with that address.

What to say

After install:
  • “Opt these validator pubkeys into mev-commit with simple staking.”
  • “Register these keys on the EigenLayer AVS as this pod owner.”
  • “Check whether these pubkeys are opted in, and sum my on-chain ETH stake.”
  • “Unstake these vanilla keys and withdraw when the period is done.”
Upload a .txt or .csv of BLS pubkeys (0x + 96 hex, comma or newline separated). Batch 40 to 60 keys per transaction.

How it works

The skill follows the same registry calls the old dashboard used after a wallet was connected.
  1. Choose a method: vanilla, EigenLayer, or Symbiotic.
  2. Parse your key file.
  3. Simulate, then send on your Ethereum RPC and wallet (Foundry keystore, hardware, or PRIVATE_KEY in the environment).
  4. Wait for the receipt, then verify ValidatorOptInHub.areValidatorsOptedIn.
Mainnet Hub: 0x1059155bD5854224bF58e43CD3EEC6B07b4F30Ad Read minStake() on-chain before vanilla staking. Extra ETH in that tx is a slash buffer, not prepaid capacity. Hoodi vanilla is whitelisted (mainnet whitelist coming). Prerequisites that are not the skill’s job (vault registration, AVS operator registration, EigenLayer delegation) stay on the path pages. If a revert says the vault or operator is missing, the skill names that step so you can ping Primev with the exact address.

Opt out

  • Vanilla: unstake, wait unstakePeriodBlocks, then withdraw
  • EigenLayer: requestValidatorsDeregistration, wait, then deregisterValidators
  • Symbiotic: requestValDeregistrations, wait, then deregisterValidators

On-chain stake

Ask the skill for your total ETH stake. It sums beacon effective balances (beacon node or beaconcha.in; a BEACONCHAIN_API_KEY is fine) plus VanillaRegistry getStakedAmount and real EigenLayer / Symbiotic collateral. It will not use 32 ETH × key count.

Manual calls

Path pages still document cast / Foundry for operators who do not want an agent: