pyproject.toml
Rama main · réplica de lectura del repositorio original.
[build-system]
requires = ["hatchling>=1.24"]
build-backend = "hatchling.build"
[project]
name = "squidbrake"
dynamic = ["version"]
description = "Change control for AI agents. Everyday work runs on its own; anything an agent can't take back waits for a teammate's sign-off, and every action lands on a tamper-evident record. Open source."
readme = "README.md"
license = "Apache-2.0"
license-files = ["LICENSE"]
requires-python = ">=3.10"
authors = [{ name = "Pulkit Batra" }]
keywords = ["ai-agents", "mcp", "claude-code", "guardrails", "human-in-the-loop", "approval", "audit", "security"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Topic :: Security",
"Topic :: Software Development :: Libraries :: Application Frameworks",
]
dependencies = [
"fastapi>=0.110",
"uvicorn[standard]>=0.29; platform_machine != 'ARM64'",
"uvicorn>=0.29; platform_machine == 'ARM64'", # Windows on ARM: httptools has no wheel for it (Python's own parser is used)
"sqlalchemy>=2.0",
"httpx>=0.27",
"pyyaml>=6.0",
"python-dotenv>=1.0",
"mcp>=2.2,<3",
"segno>=1.6",
]
[project.optional-dependencies]
postgres = ["psycopg[binary]>=3.1"]
s3 = ["boto3>=1.28"]
ai = ["anthropic>=1.0"] # AI approval briefs (Settings > AI briefs), with your own Anthropic key
[project.scripts]
squidbrake = "squidbrake.cli:main"
[project.urls]
Homepage = "https://github.com/batrapulkit/squidbrake"
Source = "https://github.com/batrapulkit/squidbrake"
Issues = "https://github.com/batrapulkit/squidbrake/issues"
Demo = "https://codespaces.new/batrapulkit/squidbrake"
[tool.hatch.version]
path = "squidbrake/__init__.py"
# The gateway is a set of plain scripts in the repo root (python server.py, python connect.py ...).
# The wheel puts them inside the squidbrake package so they don't clash with other top-level modules.
[tool.hatch.build.targets.wheel]
packages = ["squidbrake"]
[tool.hatch.build.targets.wheel.force-include]
"server.py" = "squidbrake/server.py"
"commands.py" = "squidbrake/commands.py"
"taint.py" = "squidbrake/taint.py"
"risk.py" = "squidbrake/risk.py"
"mcp_hub.py" = "squidbrake/mcp_hub.py"
"mcp_catalog.py" = "squidbrake/mcp_catalog.py"
"outbound.py" = "squidbrake/outbound.py"
"mcp_oauth.py" = "squidbrake/mcp_oauth.py"
"policy_edit.py" = "squidbrake/policy_edit.py"
"siem.py" = "squidbrake/siem.py"
"selfguard.py" = "squidbrake/selfguard.py"
"weekly.py" = "squidbrake/weekly.py"
"integrity.py" = "squidbrake/integrity.py"
"onboard.py" = "squidbrake/onboard.py"
"pilot.py" = "squidbrake/pilot.py"
"telemetry.py" = "squidbrake/telemetry.py"
"flow.py" = "squidbrake/flow.py"
"verify.py" = "squidbrake/verify.py"
"signing.py" = "squidbrake/signing.py"
"offline.py" = "squidbrake/offline.py"
"proof.py" = "squidbrake/proof.py"
"brief.py" = "squidbrake/brief.py"
"passkeys.py" = "squidbrake/passkeys.py"
"sso.py" = "squidbrake/sso.py"
"evidence.py" = "squidbrake/evidence.py"
"lockdown.py" = "squidbrake/lockdown.py"
"license.py" = "squidbrake/license.py"
"effects.py" = "squidbrake/effects.py"
"undo.py" = "squidbrake/undo.py"
"shell_guard.py" = "squidbrake/shell_guard.py"
"runs.py" = "squidbrake/runs.py"
"hooklog.py" = "squidbrake/hooklog.py"
"connect.py" = "squidbrake/connect.py"
"service.py" = "squidbrake/service.py"
"claude_hook.py" = "squidbrake/claude_hook.py"
"agent_hook.py" = "squidbrake/agent_hook.py"
"gw_async.py" = "squidbrake/gw_async.py"
"gateway_proxy.py" = "squidbrake/gateway_proxy.py"
"gateway_mcp.py" = "squidbrake/gateway_mcp.py"
"demo_apps_mcp.py" = "squidbrake/demo_apps_mcp.py"
"client.py" = "squidbrake/client.py"
"rules.yaml" = "squidbrake/rules.yaml"
"rules.shipped" = "squidbrake/rules.shipped"
"dashboard.html" = "squidbrake/dashboard.html"
"approve.html" = "squidbrake/approve.html"
[tool.hatch.build.targets.sdist]
only-include = ["squidbrake", "server.py", "commands.py", "risk.py", "mcp_hub.py", "mcp_catalog.py", "outbound.py", "mcp_oauth.py", "policy_edit.py", "siem.py", "selfguard.py", "weekly.py", "integrity.py", "onboard.py", "taint.py", "pilot.py", "telemetry.py", "flow.py", "verify.py", "signing.py", "offline.py", "proof.py", "brief.py", "passkeys.py", "sso.py", "evidence.py", "lockdown.py", "license.py", "effects.py", "undo.py", "shell_guard.py", "runs.py", "hooklog.py", "connect.py", "service.py", "claude_hook.py", "agent_hook.py",
"gw_async.py", "gateway_proxy.py", "gateway_mcp.py", "demo_apps_mcp.py", "client.py", "rules.yaml", "rules.shipped",
"dashboard.html", "approve.html", "README.md", "LICENSE", "pyproject.toml"]