Documentation

Governed agent actions across LLMs, APIs, and tools.

How it works

Sorin sits between your agents and the services they call (LLMs, GitHub, and other tools). Your upstream credentials are stored in Sorin — your code only ever uses a scoped Sorin agent key.

Every agent action is authorized against your org's permission rules, logged, and optionally held for human approval before execution.

Installation

bash
pip install sorin-sdk

Requires Python 3.8+.

Agent keys

Get your agent key from the Sorin dashboard after creating an agent. Your upstream API credentials (GitHub, Anthropic, OpenAI) are stored in Sorin — your code only ever sees the Sorin agent key.

MCP Server

Connect Sorin to any MCP-compatible AI coding tool. The SDK ships with a sorin mcp install CLI that handles setup for you.

bash
pip install sorin-sdk
sorin mcp install --key <your-agent-key>

Restart Claude Code after running the command to connect.

Using Cursor, Windsurf, or VS Code? Pass --json to print the JSON config block to paste into your editor's MCP settings instead:

bash
sorin mcp install --key <your-agent-key> --json

GitHub Actions

GitHub operations through Sorin are authorized against your org's permission rules, logged, and optionally held for human approval. Your upstream GitHub token never leaves Sorin — your code only uses the scoped agent key.

python
from sorin import SorinClient

sorin = SorinClient(agent_key="<your-agent-key>")

# Read a file
file = sorin.github.read_file("your-org", "your-repo", "README.md")

# Push a file to a branch
sorin.github.push_file("your-org", "your-repo", "notes.md", "# Hello", "add notes", "my-feature")

# Open a PR
pr = sorin.github.create_pr("your-org", "your-repo", "My PR", "body", "my-feature")

LLM Inference

One-line swap — replace your existing Anthropic or OpenAI client with the Sorin drop-in. Every inference call is authenticated, logged, and governed. No other code changes required.

python
from sorin import SorinLLM

client = SorinLLM(agent_key="<your-agent-key>")

# Identical to anthropic.Anthropic().messages.create(...)
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}]
)

Permissions & Approvals

Every agent has a permission set that controls which actions it can take and which require human approval. Actions not explicitly permitted are blocked. For sensitive actions, Sorin pauses execution and notifies an approver — the agent resumes only after explicit approval or denial.

Ready to integrate?

Get full API reference, connector setup, and permission configuration tailored to your org.

Request a demo