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.
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.
git clone https://github.com/Veenoway/interlude-sdk
cd interlude-sdk/sdk && npm i && npm run build
node examples/agent-room.mjsSteps show up on the explorer, then settle on Monad. Same contract, same address.
Same runner against the URL ship printed for your app.
