toolwall 0.2.1__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {toolwall-0.2.1 → toolwall-0.2.2}/.gitignore +4 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/PKG-INFO +28 -13
- {toolwall-0.2.1 → toolwall-0.2.2}/README.md +26 -11
- {toolwall-0.2.1 → toolwall-0.2.2}/pyproject.toml +2 -2
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/__init__.py +1 -1
- {toolwall-0.2.1 → toolwall-0.2.2}/LICENSE +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/cli.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/gate.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/intake.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/mcp_guard.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/meter.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/policy.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/schema.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/shield.py +0 -0
- {toolwall-0.2.1 → toolwall-0.2.2}/src/toolwall/suggest.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: toolwall
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Fail-closed firewall for AI agent tool calls: schema + policy gate before any tool executes
|
|
5
|
-
Project-URL: Homepage, https://github.com/Dev-Saif-Ops/
|
|
5
|
+
Project-URL: Homepage, https://github.com/Dev-Saif-Ops/toolwall
|
|
6
6
|
Author: Mohammad Safwan Athar
|
|
7
7
|
License: MIT
|
|
8
8
|
Keywords: agents,ai,guardrails,llm,mcp,security,tool-calling
|
|
@@ -24,8 +24,8 @@ Description-Content-Type: text/markdown
|
|
|
24
24
|
|
|
25
25
|
[](https://pypi.org/project/toolwall/)
|
|
26
26
|
[](https://pypi.org/project/toolwall/)
|
|
27
|
-
[](https://github.com/Dev-Saif-Ops/
|
|
28
|
-
[](https://github.com/Dev-Saif-Ops/
|
|
27
|
+
[](https://github.com/Dev-Saif-Ops/toolwall/blob/main/toolwall/LICENSE)
|
|
28
|
+
[](https://github.com/Dev-Saif-Ops/toolwall)
|
|
29
29
|
|
|
30
30
|
**A fail-closed firewall for AI agent tool calls.**
|
|
31
31
|
|
|
@@ -78,18 +78,18 @@ result = gate.run(openai_response) # any provider shape, or a plain dict
|
|
|
78
78
|
|
|
79
79
|
## What it does
|
|
80
80
|
|
|
81
|
-
- **Fail-closed gate
|
|
81
|
+
- **Fail-closed gate**: unknown tool, schema violation, policy violation, budget hit,
|
|
82
82
|
or unparseable payload all block *before* the tool runs. Registration is the allowlist.
|
|
83
|
-
- **Policy engine
|
|
83
|
+
- **Policy engine**: value constraints (`in_range`, `one_of`, `matches`, `ends_with`…),
|
|
84
84
|
cross-argument rules, human-approval flags, and budget caps (calls / per-tool / USD).
|
|
85
|
-
- **Shield
|
|
85
|
+
- **Shield**: detects secrets (AWS, OpenAI, GitHub, Stripe, Slack, JWT, PEM, and
|
|
86
86
|
high-entropy strings) in tool arguments and blocks or redacts them. The audit log
|
|
87
87
|
never contains the secret value.
|
|
88
|
-
- **Dry-run
|
|
88
|
+
- **Dry-run**: run your whole agent with `dry_run=True`: nothing executes, and
|
|
89
89
|
`gate.report()` tells you what it *would* have done. `suggest_policies(gate)` drafts
|
|
90
90
|
a starter policy from the calls it observed.
|
|
91
|
-
- **MCP guard
|
|
92
|
-
- **Audit trail
|
|
91
|
+
- **MCP guard**: `MCPGuard` puts the same gate in front of any MCP server.
|
|
92
|
+
- **Audit trail**: every verdict exported to JSON/CSV.
|
|
93
93
|
|
|
94
94
|
## Dry-run first
|
|
95
95
|
|
|
@@ -113,19 +113,34 @@ decision = guard.handle(tool_name, args) # only ALLOW is forwarded
|
|
|
113
113
|
|
|
114
114
|
Install the transport extra with `pip install "toolwall[mcp]"`.
|
|
115
115
|
|
|
116
|
+
## Examples
|
|
117
|
+
|
|
118
|
+
Runnable scripts live in the [repo `examples/` folder](https://github.com/Dev-Saif-Ops/toolwall/tree/main/toolwall/examples):
|
|
119
|
+
|
|
120
|
+
- **quickstart.py**: six gated scenarios (allow, unknown tool, out-of-range, empty-filter delete, approval hold, secret block). No API key.
|
|
121
|
+
- **dangerous_agent_demo.py**: an off-the-rails agent replayed with vs without the gate. No API key.
|
|
122
|
+
- **mcp_guard_demo.py**: the gate in front of an MCP-style server. No API key.
|
|
123
|
+
- **live_gemini_agent.py**: a real Gemini agent using native function calling, gated by toolwall. Needs `GEMINI_API_KEY`.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
git clone https://github.com/Dev-Saif-Ops/toolwall && cd toolwall/toolwall
|
|
127
|
+
python examples/quickstart.py
|
|
128
|
+
python examples/live_gemini_agent.py # set GEMINI_API_KEY first
|
|
129
|
+
```
|
|
130
|
+
|
|
116
131
|
## Honest status
|
|
117
132
|
|
|
118
133
|
`toolwall` is alpha. The published failure suite blocks **24 of 24 attack cases across
|
|
119
134
|
9 classes with 0 false blocks** on clean traffic, at sub-millisecond overhead. Secret
|
|
120
|
-
detection is pattern + entropy based and is **never 100
|
|
135
|
+
detection is pattern + entropy based and is **never 100%**. Structureless passwords are
|
|
121
136
|
out of scope, and the suite report states exactly what is and is not proven. Every claim
|
|
122
137
|
about toolwall cites that report, nothing broader.
|
|
123
138
|
|
|
124
139
|
## Links
|
|
125
140
|
|
|
126
|
-
- **Source, full docs, and the failure suite:** https://github.com/Dev-Saif-Ops/
|
|
141
|
+
- **Source, full docs, and the failure suite:** https://github.com/Dev-Saif-Ops/toolwall
|
|
127
142
|
- **What happened to TOAP** (this project's predecessor, an honest postmortem):
|
|
128
|
-
the [`toap-v0.1-archive`](https://github.com/Dev-Saif-Ops/
|
|
143
|
+
the [`toap-v0.1-archive`](https://github.com/Dev-Saif-Ops/toolwall/tree/toap-v0.1-archive) branch
|
|
129
144
|
|
|
130
145
|
## License
|
|
131
146
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/toolwall/)
|
|
4
4
|
[](https://pypi.org/project/toolwall/)
|
|
5
|
-
[](https://github.com/Dev-Saif-Ops/
|
|
6
|
-
[](https://github.com/Dev-Saif-Ops/
|
|
5
|
+
[](https://github.com/Dev-Saif-Ops/toolwall/blob/main/toolwall/LICENSE)
|
|
6
|
+
[](https://github.com/Dev-Saif-Ops/toolwall)
|
|
7
7
|
|
|
8
8
|
**A fail-closed firewall for AI agent tool calls.**
|
|
9
9
|
|
|
@@ -56,18 +56,18 @@ result = gate.run(openai_response) # any provider shape, or a plain dict
|
|
|
56
56
|
|
|
57
57
|
## What it does
|
|
58
58
|
|
|
59
|
-
- **Fail-closed gate
|
|
59
|
+
- **Fail-closed gate**: unknown tool, schema violation, policy violation, budget hit,
|
|
60
60
|
or unparseable payload all block *before* the tool runs. Registration is the allowlist.
|
|
61
|
-
- **Policy engine
|
|
61
|
+
- **Policy engine**: value constraints (`in_range`, `one_of`, `matches`, `ends_with`…),
|
|
62
62
|
cross-argument rules, human-approval flags, and budget caps (calls / per-tool / USD).
|
|
63
|
-
- **Shield
|
|
63
|
+
- **Shield**: detects secrets (AWS, OpenAI, GitHub, Stripe, Slack, JWT, PEM, and
|
|
64
64
|
high-entropy strings) in tool arguments and blocks or redacts them. The audit log
|
|
65
65
|
never contains the secret value.
|
|
66
|
-
- **Dry-run
|
|
66
|
+
- **Dry-run**: run your whole agent with `dry_run=True`: nothing executes, and
|
|
67
67
|
`gate.report()` tells you what it *would* have done. `suggest_policies(gate)` drafts
|
|
68
68
|
a starter policy from the calls it observed.
|
|
69
|
-
- **MCP guard
|
|
70
|
-
- **Audit trail
|
|
69
|
+
- **MCP guard**: `MCPGuard` puts the same gate in front of any MCP server.
|
|
70
|
+
- **Audit trail**: every verdict exported to JSON/CSV.
|
|
71
71
|
|
|
72
72
|
## Dry-run first
|
|
73
73
|
|
|
@@ -91,19 +91,34 @@ decision = guard.handle(tool_name, args) # only ALLOW is forwarded
|
|
|
91
91
|
|
|
92
92
|
Install the transport extra with `pip install "toolwall[mcp]"`.
|
|
93
93
|
|
|
94
|
+
## Examples
|
|
95
|
+
|
|
96
|
+
Runnable scripts live in the [repo `examples/` folder](https://github.com/Dev-Saif-Ops/toolwall/tree/main/toolwall/examples):
|
|
97
|
+
|
|
98
|
+
- **quickstart.py**: six gated scenarios (allow, unknown tool, out-of-range, empty-filter delete, approval hold, secret block). No API key.
|
|
99
|
+
- **dangerous_agent_demo.py**: an off-the-rails agent replayed with vs without the gate. No API key.
|
|
100
|
+
- **mcp_guard_demo.py**: the gate in front of an MCP-style server. No API key.
|
|
101
|
+
- **live_gemini_agent.py**: a real Gemini agent using native function calling, gated by toolwall. Needs `GEMINI_API_KEY`.
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
git clone https://github.com/Dev-Saif-Ops/toolwall && cd toolwall/toolwall
|
|
105
|
+
python examples/quickstart.py
|
|
106
|
+
python examples/live_gemini_agent.py # set GEMINI_API_KEY first
|
|
107
|
+
```
|
|
108
|
+
|
|
94
109
|
## Honest status
|
|
95
110
|
|
|
96
111
|
`toolwall` is alpha. The published failure suite blocks **24 of 24 attack cases across
|
|
97
112
|
9 classes with 0 false blocks** on clean traffic, at sub-millisecond overhead. Secret
|
|
98
|
-
detection is pattern + entropy based and is **never 100
|
|
113
|
+
detection is pattern + entropy based and is **never 100%**. Structureless passwords are
|
|
99
114
|
out of scope, and the suite report states exactly what is and is not proven. Every claim
|
|
100
115
|
about toolwall cites that report, nothing broader.
|
|
101
116
|
|
|
102
117
|
## Links
|
|
103
118
|
|
|
104
|
-
- **Source, full docs, and the failure suite:** https://github.com/Dev-Saif-Ops/
|
|
119
|
+
- **Source, full docs, and the failure suite:** https://github.com/Dev-Saif-Ops/toolwall
|
|
105
120
|
- **What happened to TOAP** (this project's predecessor, an honest postmortem):
|
|
106
|
-
the [`toap-v0.1-archive`](https://github.com/Dev-Saif-Ops/
|
|
121
|
+
the [`toap-v0.1-archive`](https://github.com/Dev-Saif-Ops/toolwall/tree/toap-v0.1-archive) branch
|
|
107
122
|
|
|
108
123
|
## License
|
|
109
124
|
|
|
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "toolwall"
|
|
9
|
-
version = "0.2.
|
|
9
|
+
version = "0.2.2"
|
|
10
10
|
description = "Fail-closed firewall for AI agent tool calls: schema + policy gate before any tool executes"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
license = { text = "MIT" }
|
|
@@ -31,7 +31,7 @@ dev = ["pytest>=8.0", "pytest-cov>=4.0"]
|
|
|
31
31
|
toolwall = "toolwall.cli:main"
|
|
32
32
|
|
|
33
33
|
[project.urls]
|
|
34
|
-
Homepage = "https://github.com/Dev-Saif-Ops/
|
|
34
|
+
Homepage = "https://github.com/Dev-Saif-Ops/toolwall"
|
|
35
35
|
|
|
36
36
|
[tool.hatch.build.targets.wheel]
|
|
37
37
|
packages = ["src/toolwall"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|