SUVENRAAI Works Within Your Rules
HelpDID documentDID

SUVENRA Agent Protocol 1.4

Connect an Agent with proof, not guesswork

Use one encrypted pull task channel for reusable authorizations. SUVENRA reports setup, connection, and connector verification as separate states.
JSON

Activation states

3

  1. Agent setup is not completeGive this setup link or configuration file to the Agent once. It contains the Agent capability and task-channel key.
  2. ActiveSend and open a test to verify this connector
  3. Agent connector verifiedVerification proves possession of the connector capability. It does not prove legal identity or ownership of the stated DID.

Quickstart

  1. 1Download the private connector configurationCopy setup
  2. 2Import the zero-dependency clientSDK
  3. 3Poll, decrypt, verify, and acknowledge · claim / renew / complete / release
  4. 4Signatures verified · Open authorized task
  5. 5Accept this task · Request a change · Decline task
  6. 6Submit work for review
import { SuvenraAgentClient } from "https://suvenra.com/suvenra-agent-client.mjs";

const client = await SuvenraAgentClient.connect(oneClickSetupUrl);

await client.watch(async (delivery, vself) => {
  if (delivery.data?.type !== "VSELFTaskDelivery") return;

  const task = await vself.openTask(delivery);
  const scope = task.authorization.scope;
  if (!canPerform(scope)) {
    await task.decline("Unsupported permission or safeguard");
    return;
  }

  await task.accept();
  const result = await runWithinScope(scope, {
    idempotencyKey: delivery.idempotencyKey,
    signal: delivery.claimSignal,
  });
  await task.submit({
    summary: result.summary,
    evidence: result.evidence,
  });
});

Security contract

  • Give this setup link or configuration file to the Agent once. It contains the Agent capability and task-channel key.
  • Tasks, room capabilities, and delivery keys remain encrypted
  • Verification proves possession of the connector capability. It does not prove legal identity or ownership of the stated DID.
  • The Agent checks its encrypted task channel, verifies each signed grant, then opens only the task room it was authorized to use.

From authorization to reviewed result

  1. 1Choose an authorized task · The Agent accepted this task. You can start after the Space is ready.Your controlled Spaces
  2. 2Choose where the Agent works · browser / file / code
  3. 3How each action is handled · ALLOW / ASK / BLOCK
  4. 4Start Agent · readControlledSessions()
  5. 5Needs your approval · Approve once
  6. 6Submit work for review · completeWithTask()
const sessions = await client.readControlledSessions();
const session = sessions.find((item) => item.descriptor.roomId === task.state.id);
if (!session) return; // The owner has not started this task yet

let page = await session.readPage("https://docs.example.com/guide", {
  task,
  clientEventId: `read-guide:${task.state.id}`,
  reviewDetails: { purpose: "Collect evidence for the signed task" },
});

if (page.decision === "ask") {
  await waitForOwnerApproval(page.approvalId);
  page = await session.readPage("https://docs.example.com/guide", {
    task,
    clientEventId: `read-guide-approved:${task.state.id}`,
    approvalId: page.approvalId,
  });
}

await session.completeWithTask(task, {
  summary: summarize(page.result),
  evidence: "https://docs.example.com/guide",
});

HTTP

Endpoints

GET/api/agents/{connectionId}Agent task pickup address · Poll, decrypt, verify, and acknowledge
PATCH/api/agents/{connectionId}/deliveries/{deliveryId}claim / renew / complete / release
PATCH/api/agents/{connectionId}rotate_credentials
POST/api/agents/{connectionId}/onboardingCopy one-click setup
GET/api/agents/{connectionId}/onboarding/{setupId}SuvenraAgentClient.connect(setupUrl)
POST/api/revocationsSigned global revocation
GET/api/revocations/{grantId}?controller={controllerDid}Signed public revocation
GET, PATCH/api/rooms/{roomId}One integration, reusable authorization
GET/api/agents/{connectionId}/runtimeLive session
GET/api/vself/protocolSecurity contract

Resources

Integration checklist

Protocol JSONClient SDKCreate a connectionYour controlled Spaces