FRONTEND

Agents

The same grant a human signs, a process can sign. No browser, no pop-up, no gas after that one signature.

The field page is Agents. This page is the snippet a process actually runs.

A grant does not care who holds the wallet. A process generates a key, signs once, then calls. The app still sees the granter through _actor(). The node still commits diffs to the same address. That is the trust model: the fast path cannot keep the state.

This is not identity. ERC-8004 can say who the agent is. Interlude is how it acts after that, without a pop-up and without gas.

agent.mjs
import { createWalletClient, createPublicClient, http } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
import { createInterludeClient, memoryStore } from "@interludelayer-sdk/sdk";

const account = privateKeyToAccount(generatePrivateKey());
const wallet = createWalletClient({ account, transport: http(baseRpc) });

const interlude = createInterludeClient({
  app, abi, node, base: createPublicClient({ transport: http(baseRpc) }),
  store: memoryStore(),
});

const session = await interlude.openSession({
  wallet,
  scope: ["join", "move"],
});

await session.send("join");
for (const dir of [1, 2, 3, 0]) {
  const { latencyMs } = await session.send("move", [dir]);
  console.log(latencyMs);
}

Against the public demo

The SDK repo ships a runner that talks to the public demo. No faucet. The agent is the granter.

terminal
git clone https://github.com/Veenoway/interlude-sdk
cd interlude-sdk/sdk && npm i && npm run build
node examples/agent-room.mjs

Steps show up on the explorer, then settle on Monad. Same contract, same address.

Same runner against the URL ship printed for your app.