Skip to main content

sologate-langchain

Human-in-the-loop approval gates for LangChain agents.

When your agent is about to do something risky — delete files, send bulk email, make API calls — Sologate pauses it and routes the action to a human for approval. One approve/reject click. Full audit trail. Agent resumes automatically.

pip install sologate-langchain

3-line integration

from sologate_langchain import SologateCallbackHandler

handler = SologateCallbackHandler(
    sologate_url="https://www.sologate.app",
    api_key="at_your_key_here",
)

agent_executor = AgentExecutor(agent=agent, tools=tools, callbacks=[handler])

That's it. Every tool call is scored automatically. Low-risk actions pass through silently. High-risk actions pause your agent and open an approval request in the Sologate Decision Center.


How it works

Agent calls tool
      ↓
SologateCallbackHandler.on_tool_start()
      ↓
Risk score 0–100 calculated locally (no API call for low-risk)
      ↓
score < threshold (60)?  →  runs silently ✓
score ≥ threshold?       →  POST /api/agent/request-approval
                              ↓
                         Agent PAUSES (WebSocket wait)
                              ↓
                    Human approves/rejects in dashboard
                              ↓
                    Approved → agent continues ✓
                    Rejected → GateRejectedError raised ✗

Full example

import os
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_community.tools import ShellTool, WriteFileTool
from langchain import hub
from sologate_langchain import SologateCallbackHandler

llm = ChatOpenAI(model="gpt-4o")
tools = [ShellTool(), WriteFileTool()]
prompt = hub.pull("hwchase17/react")

agent = create_react_agent(llm, tools, prompt)

handler = SologateCallbackHandler(
    sologate_url=os.environ["SOLOGATE_URL"],
    api_key=os.environ["SOLOGATE_KEY"],
    threshold=60,  # gate anything scored ≥ 60/100
)

agent_executor = AgentExecutor(agent=agent, tools=tools, callbacks=[handler])
result = agent_executor.invoke({"input": "Clean up the project folder"})

When the agent tries rm -rf ./backups/ it scores 97/100 — HIGH and your terminal shows:

[sologate] 🔴 Gating: terminal (score 97/100 — HIGH)
[sologate] Reason: Shell command contains rm -rf (irreversible bulk deletion)
[sologate] Flags:  • rm -rf detected
[sologate] Waiting for human decision at https://www.sologate.app/decisions...

Approve in the dashboard → agent continues. Reject → GateRejectedError raised.


Environment variables

export SOLOGATE_URL=https://www.sologate.app
export SOLOGATE_KEY=at_your_key_here

Or pass directly to SologateCallbackHandler(sologate_url=..., api_key=...).


Risk scoring

Scores are calculated locally — no network round-trip for safe actions.

Score Tier Examples
90+ HIGH rm -rf, DROP TABLE, curl | sh
76–89 HIGH sudo, --force, credential file writes
60–75 HIGH Bulk email, HTTP DELETE, force push
30–59 MEDIUM Shell exec, file writes, outbound messages
0–29 LOW Read operations, searches — auto-approved

Customize the threshold:

handler = SologateCallbackHandler(..., threshold=80)  # only gate HIGH risk

Low-level gate function

For custom agent frameworks (not LangChain):

from sologate_langchain import gate, GateRejectedError

try:
    gate(
        "delete_customer_records",
        sologate_url="https://www.sologate.app",
        api_key="at_...",
        context="Agent is about to delete 312 inactive customer records",
        payload={"count": 312, "table": "customers"},
    )
    # human approved — proceed
    db.execute("DELETE FROM customers WHERE status='inactive'")

except GateRejectedError:
    print("Rejected — no records deleted")

Links

Metadata

Release files for sologate-langchain 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sologate-langchain 0.2.0
File Size Uploaded
sologate_langchain-0.2.0.tar.gz 11.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sologate-langchain 0.2.0
File Interpreter ABI Platform
sologate_langchain-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.8 kB

Release files / sologate_langchain-0.2.0.tar.gz

Download URL sologate_langchain-0.2.0.tar.gz
Size 11.4 kB
Tags Source
SHA-256 checksum
How to use checksums
34cbd32e515b9741fb9e4a7b0c11c182786cb19b115d70215002dbbbb6c83dff
BLAKE2b-256 checksum
How to use checksums
ea3f652d5cf5f26a522c298abb3b33fd213491530fb52565ed266c41325afa02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / sologate_langchain-0.2.0-py3-none-any.whl

Download URL sologate_langchain-0.2.0-py3-none-any.whl
Size 9.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d4d171c1f323b10a1ce6a770f8b6f9f45cf6763f2b4bd6e94af9544c142d0817
BLAKE2b-256 checksum
How to use checksums
0c39ad4bee01aceb3f0e95f92acbea628d4baa4f0b0bb67e21d29b507bdba932
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page