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.
@@ -41,3 +41,7 @@ toap_executive_pitch.pdf
41
41
  # OS
42
42
  .DS_Store
43
43
  Thumbs.db
44
+ live_audit.*
45
+ audit.json
46
+ audit.csv
47
+ toolwall/audit.*
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: toolwall
3
- Version: 0.2.1
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/Project_TOAP
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
  [![PyPI version](https://img.shields.io/pypi/v/toolwall.svg)](https://pypi.org/project/toolwall/)
26
26
  [![Python versions](https://img.shields.io/pypi/pyversions/toolwall.svg)](https://pypi.org/project/toolwall/)
27
- [![License: MIT](https://img.shields.io/pypi/l/toolwall.svg)](https://github.com/Dev-Saif-Ops/Project_TOAP/blob/main/toolwall/LICENSE)
28
- [![Zero dependencies](https://img.shields.io/badge/dependencies-zero-brightgreen.svg)](https://github.com/Dev-Saif-Ops/Project_TOAP)
27
+ [![License: MIT](https://img.shields.io/pypi/l/toolwall.svg)](https://github.com/Dev-Saif-Ops/toolwall/blob/main/toolwall/LICENSE)
28
+ [![Zero dependencies](https://img.shields.io/badge/dependencies-zero-brightgreen.svg)](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** — unknown tool, schema violation, policy violation, budget hit,
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** — value constraints (`in_range`, `one_of`, `matches`, `ends_with`…),
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** — detects secrets (AWS, OpenAI, GitHub, Stripe, Slack, JWT, PEM, and
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** — run your whole agent with `dry_run=True`: nothing executes, and
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** — `MCPGuard` puts the same gate in front of any MCP server.
92
- - **Audit trail** — every verdict exported to JSON/CSV.
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%** — structureless passwords are
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/Project_TOAP
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/Project_TOAP/tree/toap-v0.1-archive) branch
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
  [![PyPI version](https://img.shields.io/pypi/v/toolwall.svg)](https://pypi.org/project/toolwall/)
4
4
  [![Python versions](https://img.shields.io/pypi/pyversions/toolwall.svg)](https://pypi.org/project/toolwall/)
5
- [![License: MIT](https://img.shields.io/pypi/l/toolwall.svg)](https://github.com/Dev-Saif-Ops/Project_TOAP/blob/main/toolwall/LICENSE)
6
- [![Zero dependencies](https://img.shields.io/badge/dependencies-zero-brightgreen.svg)](https://github.com/Dev-Saif-Ops/Project_TOAP)
5
+ [![License: MIT](https://img.shields.io/pypi/l/toolwall.svg)](https://github.com/Dev-Saif-Ops/toolwall/blob/main/toolwall/LICENSE)
6
+ [![Zero dependencies](https://img.shields.io/badge/dependencies-zero-brightgreen.svg)](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** — unknown tool, schema violation, policy violation, budget hit,
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** — value constraints (`in_range`, `one_of`, `matches`, `ends_with`…),
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** — detects secrets (AWS, OpenAI, GitHub, Stripe, Slack, JWT, PEM, and
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** — run your whole agent with `dry_run=True`: nothing executes, and
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** — `MCPGuard` puts the same gate in front of any MCP server.
70
- - **Audit trail** — every verdict exported to JSON/CSV.
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%** — structureless passwords are
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/Project_TOAP
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/Project_TOAP/tree/toap-v0.1-archive) branch
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.1"
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/Project_TOAP"
34
+ Homepage = "https://github.com/Dev-Saif-Ops/toolwall"
35
35
 
36
36
  [tool.hatch.build.targets.wheel]
37
37
  packages = ["src/toolwall"]
@@ -22,7 +22,7 @@ from toolwall.shield import Finding, Shield
22
22
  from toolwall.suggest import suggest_policies
23
23
  from toolwall.mcp_guard import GuardedCall, MCPGuard, to_mcp_error
24
24
 
25
- __version__ = "0.2.1"
25
+ __version__ = "0.2.2"
26
26
 
27
27
  __all__ = [
28
28
  "Gate",
File without changes
File without changes
File without changes
File without changes