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
pip install sorin-sdkRequires 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.
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:
sorin mcp install --key <your-agent-key> --jsonGitHub 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.
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.
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