Skip to main content
This quickstart assumes you’ve already run the top-level quickstart and have the gateway running on localhost:3100. Now we’ll build against it.

Install an SDK

pnpm add @sint/sdk

Your first intercept

import { SintClient } from "@sint/sdk";

const client = new SintClient({
  gatewayUrl: "http://localhost:3100",
  agentDID:   "did:key:z6MkExample"
});

// Issue a capability token
const token = await client.tokens.issue({
  scope: {
    resources: ["mcp://weather/*"],
    actions:   ["read"]
  },
  expiresIn: 3600
});

// Intercept a request
const decision = await client.intercept({
  tokenRef: token.tokenId,
  resource: "mcp://weather/current",
  action:   "read",
  parameters: { location: "Los Angeles" }
});

if (decision.decision === "ALLOW") {
  // Proceed with the action
}

What just happened

1

Token issued

The gateway generated an Ed25519-signed capability token bound to your agent DID and scoped to mcp://weather/*.
2

Request intercepted

The intercept call sent a SintRequest to the gateway. The gateway validated the token, checked scope, computed the effective tier via the escalation function, and returned a PolicyDecision.
3

Ledger entry

The decision was written to the evidence ledger with a SHA-256 hash linking it to the previous entry. You can verify the chain via /v1/ledger/verify.

Wiring up your agent

The intercept pattern works with any agentic framework. Wrap every tool call with an intercept check.
async function governedToolCall(tool: string, args: any) {
  const decision = await client.intercept({
    tokenRef: currentToken.tokenId,
    resource: `tool://${tool}`,
    action:   "invoke",
    parameters: args
  });

  if (decision.decision === "ALLOW") {
    return executeTool(tool, args);
  }

  if (decision.decision === "ESCALATE") {
    const approval = await client.approvals.await(decision.approvalId, {
      timeout: 30000
    });
    if (approval.resolved === "approved") {
      return executeTool(tool, args);
    }
    throw new Error("Action not approved");
  }

  throw new Error(`Action denied: ${decision.rationale.matchedRule}`);
}

Framework integrations

LangChain

Use @sint/integration-langchain to wrap every LangChain tool in a SINT-governed callback.

MCP

Deploy the SINT MCP bridge in front of any MCP server. See bridges.

ROS 2

Deploy the ROS 2 bridge node to intercept topics, services, and actions with physics-aware policy.

OpenClaw

Drop in @sint/openclaw-adapter. Every OpenClaw tool call passes through the Gateway.

SDKs

Per-language SDK reference.

API reference

All gateway endpoints.

Deployment

Production deployment recipes.

Contributing

Contribute to the protocol.