matimo 0.1.2__tar.gz → 0.2.0__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.
@@ -58,7 +58,6 @@ temp/
58
58
 
59
59
  # Personal scratch notes / working docs — not part of the shipped repo
60
60
  .local-notes/
61
- typescript/examples/mcp/matimo-tools/.matimo-approvals.json
62
61
  typescript/examples/mcp/matimo-tools/fetch-weather/definition.yaml
63
62
  typescript/examples/mcp/matimo-tools/npm_downloads/definition.yaml
64
63
  typescript/examples/mcp/matimo-tools/skills/ecosystem-health/SKILL.md
@@ -68,3 +67,6 @@ typescript/packages/cli/.matimo/certs/server.crt
68
67
  typescript/packages/cli/.matimo/certs/server.key
69
68
  typescript/examples/mcp/.matimo/certs/server.crt
70
69
  typescript/examples/mcp/.matimo/certs/server.key
70
+
71
+ # HITL approval manifests are per-machine state (HMAC-signed approvals); never commit one
72
+ **/.matimo-approvals.json
matimo-0.2.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ROAIQ TECHNOLOGIES PRIVATE LIMITED
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,13 +1,14 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: matimo
3
- Version: 0.1.2
3
+ Version: 0.2.0
4
4
  Summary: Matimo — framework-agnostic SDK: pre-built providers, skills layer, MCP out of the box, and autonomous agents governed by a policy engine you control
5
5
  Project-URL: Homepage, https://matimo.dev
6
- Project-URL: Documentation, https://matimo.dev/docs
6
+ Project-URL: Documentation, https://docs.matimo.dev/
7
7
  Project-URL: Repository, https://github.com/tallclub/matimo
8
8
  Project-URL: Issues, https://github.com/tallclub/matimo/issues
9
9
  License: MIT
10
- Keywords: agents,ai,crewai,langchain,matimo,mcp,tools
10
+ License-File: LICENSE
11
+ Keywords: agentic-ai,agents,agno,ai,ai-governance,crewai,langchain,matimo,mcp,mcp-server,policy-engine,tools
11
12
  Classifier: Development Status :: 4 - Beta
12
13
  Classifier: Intended Audience :: Developers
13
14
  Classifier: License :: OSI Approved :: MIT License
@@ -17,8 +18,10 @@ Classifier: Programming Language :: Python :: 3.12
17
18
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
19
  Classifier: Topic :: Software Development :: Libraries
19
20
  Requires-Python: >=3.11
20
- Requires-Dist: matimo-cli<0.2.0,>=0.1.0a14.post1
21
- Requires-Dist: matimo-core<0.2.0,>=0.1.0
21
+ Requires-Dist: matimo-cli<0.3.0,>=0.2.0
22
+ Requires-Dist: matimo-core<0.3.0,>=0.2.0
23
+ Provides-Extra: agno
24
+ Requires-Dist: matimo-core[agno]; extra == 'agno'
22
25
  Provides-Extra: all
23
26
  Requires-Dist: matimo-core[all]; extra == 'all'
24
27
  Provides-Extra: aws
@@ -37,11 +40,11 @@ Description-Content-Type: text/markdown
37
40
 
38
41
  # matimo
39
42
 
40
- > A framework-agnostic SDK with pre-built providers, a skills knowledge layer, MCP out of the box, and agents that autonomously build new capabilities — governed by a policy engine you control.
43
+ > A framework-agnostic SDK with pre-built providers, a skills knowledge layer, MCP out of the box, and agents that autonomously build new capabilities - governed by a policy engine you control.
41
44
 
42
45
  [![PyPI](https://img.shields.io/pypi/v/matimo)](https://pypi.org/project/matimo/)
43
46
  [![Python](https://img.shields.io/pypi/pyversions/matimo)](https://pypi.org/project/matimo/)
44
- [![Docs](https://img.shields.io/badge/docs-matimo.dev-blue)](https://matimo.dev/docs)
47
+ [![Docs](https://img.shields.io/badge/docs-docs.matimo.dev-blue)](https://docs.matimo.dev)
45
48
 
46
49
  `matimo` is the convenience meta-package that installs [`matimo-core`](https://pypi.org/project/matimo-core/) and [`matimo-cli`](https://pypi.org/project/matimo-cli/). Provider packages (Slack, GitHub, Gmail, etc.) are installed separately.
47
50
 
@@ -56,6 +59,7 @@ pip install matimo
56
59
  # With optional framework integrations
57
60
  pip install "matimo[langchain]" # LangChain support
58
61
  pip install "matimo[crewai]" # CrewAI support
62
+ pip install "matimo[agno]" # Agno support
59
63
  pip install "matimo[mcp]" # MCP server support
60
64
 
61
65
  # With secrets backends
@@ -114,24 +118,16 @@ result = await matimo.execute('slack_send_channel_message', {
114
118
  ### LangChain agent
115
119
 
116
120
  ```python
117
- from matimo import Matimo
118
- from matimo.integrations.langchain import convert_tools_to_langchain
121
+ from matimo import Matimo, convert_tools_to_langchain
119
122
  from langchain_openai import ChatOpenAI
120
- from langchain.agents import AgentExecutor, create_tool_calling_agent
121
- from langchain_core.prompts import ChatPromptTemplate
123
+ from langchain.agents import create_agent # LangChain 1.x
122
124
 
123
125
  matimo = await Matimo.init(auto_discover=True)
124
- lc_tools = convert_tools_to_langchain(matimo.list_tools(), matimo)
125
-
126
- llm = ChatOpenAI(model='gpt-4o-mini')
127
- prompt = ChatPromptTemplate.from_messages([
128
- ('system', 'You are a helpful assistant.'),
129
- ('human', '{input}'),
130
- ('placeholder', '{agent_scratchpad}'),
131
- ])
132
- agent = create_tool_calling_agent(llm, lc_tools, prompt)
133
- executor = AgentExecutor(agent=agent, tools=lc_tools)
134
- result = await executor.ainvoke({'input': 'List all Slack channels'})
126
+ slack = [t for t in matimo.list_tools() if t.name.startswith('slack')]
127
+ lc_tools = convert_tools_to_langchain(slack, matimo) # pass a short list: OpenAI accepts at most 128 tools
128
+
129
+ agent = create_agent(ChatOpenAI(model='gpt-4o-mini'), tools=lc_tools)
130
+ result = await agent.ainvoke({'messages': [('user', 'List all Slack channels')]})
135
131
  ```
136
132
 
137
133
  ### CrewAI agent
@@ -147,13 +143,28 @@ crewai_tools = convert_tools_to_crewai(matimo.list_tools(), matimo)
147
143
  ### MCP server (Claude Desktop / Cursor)
148
144
 
149
145
  ```python
150
- from matimo import Matimo, create_mcp_server, MCPServerOptions
146
+ from matimo import Matimo, MCPServer, MCPServerOptions
151
147
 
152
148
  matimo = await Matimo.init(auto_discover=True)
153
- server = await create_mcp_server(matimo, MCPServerOptions(name='my-agent', version='1.0.0'))
149
+ server = MCPServer(matimo, MCPServerOptions(transport='stdio'))
154
150
  await server.start()
155
151
  ```
156
152
 
153
+ Or from the shell: `matimo mcp`.
154
+
155
+ ### Approval
156
+
157
+ Calls that need approval (HTTP DELETE, shell commands, tools marked `requires_approval`) ask your callback:
158
+
159
+ ```python
160
+ from matimo import ApprovalRequest, Matimo
161
+
162
+ async def confirm(request: ApprovalRequest) -> bool:
163
+ return input(f"Allow {request.tool_name}? [y/N] ").strip().lower() == "y"
164
+
165
+ matimo = await Matimo.init(auto_discover=True, on_approval=confirm)
166
+ ```
167
+
157
168
  ---
158
169
 
159
170
  ## Provider Packages
@@ -170,37 +181,39 @@ Install the tools you need:
170
181
  | [`matimo-twilio`](https://pypi.org/project/matimo-twilio/) | SMS, MMS, message history | `pip install matimo-twilio` |
171
182
  | [`matimo-hubspot`](https://pypi.org/project/matimo-hubspot/) | CRM: contacts, deals, companies | `pip install matimo-hubspot` |
172
183
  | [`matimo-mailchimp`](https://pypi.org/project/matimo-mailchimp/) | Campaigns, lists, members | `pip install matimo-mailchimp` |
184
+ | [`matimo-microsoft`](https://pypi.org/project/matimo-microsoft/) | Mail, OneDrive/SharePoint, Teams, calendar | `pip install matimo-microsoft` |
185
+ | [`matimo-bruno`](https://pypi.org/project/matimo-bruno/) | Manage and run Bruno API test collections | `pip install matimo-bruno` |
173
186
 
174
187
  ---
175
188
 
176
189
  ## Key Features
177
190
 
178
- - **YAML-defined tools** — define once, use from any framework
179
- - **10 provider packages** — 100+ pre-built tools ready to use
180
- - **LangChain / CrewAI / MCP** — first-class integrations
181
- - **Policy engine** — risk classification, HITL approvals, content validation
182
- - **Skills system** — inject reusable domain knowledge into agents
183
- - **Meta-tools** — agents can create, approve, and reload tools at runtime
184
- - **Secrets management** — env, `.env`, Vault, AWS Secrets Manager resolver chain
185
- - **Structured logging** — JSON/simple formats, configurable log levels
191
+ - **YAML-defined tools** - define once, use from any framework
192
+ - **10 provider packages** - 100+ pre-built tools ready to use
193
+ - **LangChain / CrewAI / Agno / MCP** - first-class integrations
194
+ - **Policy engine** - risk classification, per-call approval, HITL quarantine, content validation, hash-chained audit log
195
+ - **Skills system** - inject reusable domain knowledge into agents
196
+ - **Meta-tools** - agents can create, approve, and reload tools at runtime
197
+ - **Secrets management** - env, `.env`, Vault, AWS Secrets Manager resolver chain
198
+ - **Structured logging** - JSON/simple formats, configurable log levels
186
199
 
187
200
  ---
188
201
 
189
202
  ## Documentation
190
203
 
191
- - [Getting Started](https://matimo.dev/docs/getting-started/QUICK_START)
192
- - [API Reference](https://matimo.dev/docs/api-reference/SDK)
193
- - [LangChain Integration](https://matimo.dev/docs/framework-integrations/LANGCHAIN)
194
- - [CrewAI Integration](https://matimo.dev/docs/framework-integrations/CREWAI)
195
- - [MCP Guide](https://matimo.dev/docs/MCP)
196
- - [Policy & Lifecycle](https://matimo.dev/docs/api-reference/POLICY_AND_LIFECYCLE)
204
+ - [Getting Started](https://docs.matimo.dev/getting-started/QUICK_START)
205
+ - [API Reference](https://docs.matimo.dev/api-reference/SDK)
206
+ - [LangChain Integration](https://docs.matimo.dev/framework-integrations/LANGCHAIN)
207
+ - [CrewAI Integration](https://docs.matimo.dev/framework-integrations/CREWAI)
208
+ - [MCP Guide](https://docs.matimo.dev/MCP)
209
+ - [Policy & Lifecycle](https://docs.matimo.dev/api-reference/POLICY_AND_LIFECYCLE)
197
210
 
198
211
  ---
199
212
 
200
213
  ## Links
201
214
 
202
215
  - **PyPI:** https://pypi.org/project/matimo/
203
- - **Docs:** https://matimo.dev/docs
216
+ - **Docs:** https://docs.matimo.dev
204
217
  - **GitHub:** https://github.com/tallclub/matimo
205
218
  - **Changelog:** https://github.com/tallclub/matimo/blob/main/docs/RELEASES.md
206
219
 
@@ -1,10 +1,10 @@
1
1
  # matimo
2
2
 
3
- > A framework-agnostic SDK with pre-built providers, a skills knowledge layer, MCP out of the box, and agents that autonomously build new capabilities — governed by a policy engine you control.
3
+ > A framework-agnostic SDK with pre-built providers, a skills knowledge layer, MCP out of the box, and agents that autonomously build new capabilities - governed by a policy engine you control.
4
4
 
5
5
  [![PyPI](https://img.shields.io/pypi/v/matimo)](https://pypi.org/project/matimo/)
6
6
  [![Python](https://img.shields.io/pypi/pyversions/matimo)](https://pypi.org/project/matimo/)
7
- [![Docs](https://img.shields.io/badge/docs-matimo.dev-blue)](https://matimo.dev/docs)
7
+ [![Docs](https://img.shields.io/badge/docs-docs.matimo.dev-blue)](https://docs.matimo.dev)
8
8
 
9
9
  `matimo` is the convenience meta-package that installs [`matimo-core`](https://pypi.org/project/matimo-core/) and [`matimo-cli`](https://pypi.org/project/matimo-cli/). Provider packages (Slack, GitHub, Gmail, etc.) are installed separately.
10
10
 
@@ -19,6 +19,7 @@ pip install matimo
19
19
  # With optional framework integrations
20
20
  pip install "matimo[langchain]" # LangChain support
21
21
  pip install "matimo[crewai]" # CrewAI support
22
+ pip install "matimo[agno]" # Agno support
22
23
  pip install "matimo[mcp]" # MCP server support
23
24
 
24
25
  # With secrets backends
@@ -77,24 +78,16 @@ result = await matimo.execute('slack_send_channel_message', {
77
78
  ### LangChain agent
78
79
 
79
80
  ```python
80
- from matimo import Matimo
81
- from matimo.integrations.langchain import convert_tools_to_langchain
81
+ from matimo import Matimo, convert_tools_to_langchain
82
82
  from langchain_openai import ChatOpenAI
83
- from langchain.agents import AgentExecutor, create_tool_calling_agent
84
- from langchain_core.prompts import ChatPromptTemplate
83
+ from langchain.agents import create_agent # LangChain 1.x
85
84
 
86
85
  matimo = await Matimo.init(auto_discover=True)
87
- lc_tools = convert_tools_to_langchain(matimo.list_tools(), matimo)
88
-
89
- llm = ChatOpenAI(model='gpt-4o-mini')
90
- prompt = ChatPromptTemplate.from_messages([
91
- ('system', 'You are a helpful assistant.'),
92
- ('human', '{input}'),
93
- ('placeholder', '{agent_scratchpad}'),
94
- ])
95
- agent = create_tool_calling_agent(llm, lc_tools, prompt)
96
- executor = AgentExecutor(agent=agent, tools=lc_tools)
97
- result = await executor.ainvoke({'input': 'List all Slack channels'})
86
+ slack = [t for t in matimo.list_tools() if t.name.startswith('slack')]
87
+ lc_tools = convert_tools_to_langchain(slack, matimo) # pass a short list: OpenAI accepts at most 128 tools
88
+
89
+ agent = create_agent(ChatOpenAI(model='gpt-4o-mini'), tools=lc_tools)
90
+ result = await agent.ainvoke({'messages': [('user', 'List all Slack channels')]})
98
91
  ```
99
92
 
100
93
  ### CrewAI agent
@@ -110,13 +103,28 @@ crewai_tools = convert_tools_to_crewai(matimo.list_tools(), matimo)
110
103
  ### MCP server (Claude Desktop / Cursor)
111
104
 
112
105
  ```python
113
- from matimo import Matimo, create_mcp_server, MCPServerOptions
106
+ from matimo import Matimo, MCPServer, MCPServerOptions
114
107
 
115
108
  matimo = await Matimo.init(auto_discover=True)
116
- server = await create_mcp_server(matimo, MCPServerOptions(name='my-agent', version='1.0.0'))
109
+ server = MCPServer(matimo, MCPServerOptions(transport='stdio'))
117
110
  await server.start()
118
111
  ```
119
112
 
113
+ Or from the shell: `matimo mcp`.
114
+
115
+ ### Approval
116
+
117
+ Calls that need approval (HTTP DELETE, shell commands, tools marked `requires_approval`) ask your callback:
118
+
119
+ ```python
120
+ from matimo import ApprovalRequest, Matimo
121
+
122
+ async def confirm(request: ApprovalRequest) -> bool:
123
+ return input(f"Allow {request.tool_name}? [y/N] ").strip().lower() == "y"
124
+
125
+ matimo = await Matimo.init(auto_discover=True, on_approval=confirm)
126
+ ```
127
+
120
128
  ---
121
129
 
122
130
  ## Provider Packages
@@ -133,37 +141,39 @@ Install the tools you need:
133
141
  | [`matimo-twilio`](https://pypi.org/project/matimo-twilio/) | SMS, MMS, message history | `pip install matimo-twilio` |
134
142
  | [`matimo-hubspot`](https://pypi.org/project/matimo-hubspot/) | CRM: contacts, deals, companies | `pip install matimo-hubspot` |
135
143
  | [`matimo-mailchimp`](https://pypi.org/project/matimo-mailchimp/) | Campaigns, lists, members | `pip install matimo-mailchimp` |
144
+ | [`matimo-microsoft`](https://pypi.org/project/matimo-microsoft/) | Mail, OneDrive/SharePoint, Teams, calendar | `pip install matimo-microsoft` |
145
+ | [`matimo-bruno`](https://pypi.org/project/matimo-bruno/) | Manage and run Bruno API test collections | `pip install matimo-bruno` |
136
146
 
137
147
  ---
138
148
 
139
149
  ## Key Features
140
150
 
141
- - **YAML-defined tools** — define once, use from any framework
142
- - **10 provider packages** — 100+ pre-built tools ready to use
143
- - **LangChain / CrewAI / MCP** — first-class integrations
144
- - **Policy engine** — risk classification, HITL approvals, content validation
145
- - **Skills system** — inject reusable domain knowledge into agents
146
- - **Meta-tools** — agents can create, approve, and reload tools at runtime
147
- - **Secrets management** — env, `.env`, Vault, AWS Secrets Manager resolver chain
148
- - **Structured logging** — JSON/simple formats, configurable log levels
151
+ - **YAML-defined tools** - define once, use from any framework
152
+ - **10 provider packages** - 100+ pre-built tools ready to use
153
+ - **LangChain / CrewAI / Agno / MCP** - first-class integrations
154
+ - **Policy engine** - risk classification, per-call approval, HITL quarantine, content validation, hash-chained audit log
155
+ - **Skills system** - inject reusable domain knowledge into agents
156
+ - **Meta-tools** - agents can create, approve, and reload tools at runtime
157
+ - **Secrets management** - env, `.env`, Vault, AWS Secrets Manager resolver chain
158
+ - **Structured logging** - JSON/simple formats, configurable log levels
149
159
 
150
160
  ---
151
161
 
152
162
  ## Documentation
153
163
 
154
- - [Getting Started](https://matimo.dev/docs/getting-started/QUICK_START)
155
- - [API Reference](https://matimo.dev/docs/api-reference/SDK)
156
- - [LangChain Integration](https://matimo.dev/docs/framework-integrations/LANGCHAIN)
157
- - [CrewAI Integration](https://matimo.dev/docs/framework-integrations/CREWAI)
158
- - [MCP Guide](https://matimo.dev/docs/MCP)
159
- - [Policy & Lifecycle](https://matimo.dev/docs/api-reference/POLICY_AND_LIFECYCLE)
164
+ - [Getting Started](https://docs.matimo.dev/getting-started/QUICK_START)
165
+ - [API Reference](https://docs.matimo.dev/api-reference/SDK)
166
+ - [LangChain Integration](https://docs.matimo.dev/framework-integrations/LANGCHAIN)
167
+ - [CrewAI Integration](https://docs.matimo.dev/framework-integrations/CREWAI)
168
+ - [MCP Guide](https://docs.matimo.dev/MCP)
169
+ - [Policy & Lifecycle](https://docs.matimo.dev/api-reference/POLICY_AND_LIFECYCLE)
160
170
 
161
171
  ---
162
172
 
163
173
  ## Links
164
174
 
165
175
  - **PyPI:** https://pypi.org/project/matimo/
166
- - **Docs:** https://matimo.dev/docs
176
+ - **Docs:** https://docs.matimo.dev
167
177
  - **GitHub:** https://github.com/tallclub/matimo
168
178
  - **Changelog:** https://github.com/tallclub/matimo/blob/main/docs/RELEASES.md
169
179
 
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "matimo"
7
- version = "0.1.2"
7
+ version = "0.2.0"
8
8
  description = "Matimo — framework-agnostic SDK: pre-built providers, skills layer, MCP out of the box, and autonomous agents governed by a policy engine you control"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
11
11
  requires-python = ">=3.11"
12
- keywords = ["ai", "tools", "agents", "langchain", "crewai", "mcp", "matimo"]
12
+ keywords = ["ai", "tools", "agents", "langchain", "crewai", "agno", "mcp", "matimo", "mcp-server", "agentic-ai", "ai-governance", "policy-engine"]
13
13
  classifiers = [
14
14
  "Development Status :: 4 - Beta",
15
15
  "Intended Audience :: Developers",
@@ -23,13 +23,14 @@ classifiers = [
23
23
  # This is a meta-package: pip install matimo pulls in matimo-core and matimo-cli
24
24
  # which provides the actual `matimo` Python namespace and CLI tools.
25
25
  dependencies = [
26
- "matimo-core>=0.1.0,<0.2.0",
27
- "matimo-cli>=0.1.0a14.post1,<0.2.0",
26
+ "matimo-core>=0.2.0,<0.3.0",
27
+ "matimo-cli>=0.2.0,<0.3.0",
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
31
31
  langchain = ["matimo-core[langchain]"]
32
32
  crewai = ["matimo-core[crewai]"]
33
+ agno = ["matimo-core[agno]"]
33
34
  mcp = ["matimo-core[mcp]"]
34
35
  dotenv = ["matimo-core[dotenv]"]
35
36
  vault = ["matimo-core[vault]"]
@@ -38,7 +39,7 @@ all = ["matimo-core[all]"]
38
39
 
39
40
  [project.urls]
40
41
  Homepage = "https://matimo.dev"
41
- Documentation = "https://matimo.dev/docs"
42
+ Documentation = "https://docs.matimo.dev/"
42
43
  Repository = "https://github.com/tallclub/matimo"
43
44
  Issues = "https://github.com/tallclub/matimo/issues"
44
45
 
@@ -28,7 +28,7 @@ try:
28
28
  from importlib.metadata import version as _pkg_version
29
29
  __version__ = _pkg_version("matimo")
30
30
  except Exception:
31
- __version__ = "0.1.1.post1" # fallback for editable / source installs
31
+ __version__ = "0.2.0" # fallback for editable / source installs
32
32
 
33
33
  # ---------------------------------------------------------------------------
34
34
  # matimo-core re-exports
@@ -41,6 +41,7 @@ from matimo.approval.handler import ( # noqa: E402
41
41
  ApprovalCallback,
42
42
  ApprovalHandler,
43
43
  ApprovalRequest,
44
+ definition_requires_approval,
44
45
  get_global_approval_handler,
45
46
  set_global_approval_handler,
46
47
  )
@@ -129,7 +130,7 @@ from matimo.errors import ( # noqa: E402
129
130
 
130
131
  # Executors
131
132
  from matimo.executors.command_executor import CommandExecutor # noqa: E402
132
- from matimo.executors.function_executor import FunctionExecutor # noqa: E402
133
+ from matimo.executors.function_executor import FunctionExecutor, FunctionToolContext # noqa: E402
133
134
  from matimo.executors.http_executor import HttpExecutor # noqa: E402
134
135
 
135
136
  # Main entry point + sync API
@@ -157,12 +158,26 @@ from matimo.mcp.tool_converter import convert_parameters_to_mcp_schema # noqa:
157
158
 
158
159
  # Policy
159
160
  from matimo.policy.approval_manifest import ApprovalManifest, ApprovalRecord # noqa: E402
161
+ from matimo.policy.audit_sink import ( # noqa: E402
162
+ AUDIT_GENESIS_HASH,
163
+ AuditLogVerification,
164
+ AuditSink,
165
+ JsonlFileSink,
166
+ hash_audit_entry,
167
+ redact_secrets,
168
+ verify_audit_log,
169
+ )
160
170
  from matimo.policy.content_validator import ContentViolation, validate_tool_content # noqa: E402
161
171
  from matimo.policy.default_policy import DefaultPolicyEngine, PolicyEngine, get_tier_for_tool # noqa: E402
162
172
  from matimo.policy.integrity_tracker import IntegrityAction, ToolIntegrityTracker # noqa: E402
163
173
  from matimo.policy.policy_loader import load_policy_from_file # noqa: E402
164
- from matimo.policy.risk_classifier import classify_risk # noqa: E402
174
+ from matimo.policy.risk_classifier import ( # noqa: E402
175
+ classify_execution_risk,
176
+ classify_risk,
177
+ meets_risk_threshold,
178
+ )
165
179
  from matimo.policy.types import ( # noqa: E402
180
+ GovernanceMode,
166
181
  HITLCallback,
167
182
  HITLRequest,
168
183
  MatimoEvent,
@@ -223,6 +238,30 @@ def convert_tools_to_crewai(
223
238
  return _inner(tools, matimo_instance, credentials)
224
239
 
225
240
 
241
+ def convert_tools_to_agno(
242
+ tools: list[ToolDefinition],
243
+ matimo_instance: Matimo,
244
+ credentials: dict[str, str] | None = None,
245
+ **kwargs: object,
246
+ ) -> list[object]:
247
+ """Convert Matimo tools to Agno Function list. Requires agno."""
248
+ from matimo.integrations.agno import convert_tools_to_agno as _inner
249
+ return _inner(tools, matimo_instance, credentials, **kwargs) # type: ignore[arg-type]
250
+
251
+
252
+ def MatimoTools( # noqa: N802
253
+ matimo_instance: Matimo,
254
+ tools: list[ToolDefinition] | None = None,
255
+ **kwargs: object,
256
+ ) -> object:
257
+ """Build an Agno Toolkit exposing governed Matimo tools. Requires agno.
258
+
259
+ Named in CapWords to match Agno's <Name>Tools toolkit convention.
260
+ """
261
+ from matimo.integrations.agno import MatimoTools as _inner
262
+ return _inner(matimo_instance, tools, **kwargs) # type: ignore[arg-type]
263
+
264
+
226
265
  def get_core_tools_path() -> str:
227
266
  """Return the absolute path to matimo-core's bundled tool definitions.
228
267
 
@@ -277,7 +316,7 @@ __all__ = [
277
316
  "ParsedSkillContent", "SemanticSearchResult",
278
317
  "TfIdfEmbeddingProvider", "EmbeddingProvider", "cosine_similarity",
279
318
  # Executors
280
- "HttpExecutor", "CommandExecutor", "FunctionExecutor",
319
+ "HttpExecutor", "CommandExecutor", "FunctionExecutor", "FunctionToolContext",
281
320
  # Auth
282
321
  "inject_auth_parameters", "extract_parameter_placeholders",
283
322
  "OAuth2Handler", "OAuth2ProviderLoader",
@@ -285,15 +324,19 @@ __all__ = [
285
324
  # Approval
286
325
  "ApprovalHandler", "ApprovalRequest", "ApprovalCallback",
287
326
  "get_global_approval_handler", "set_global_approval_handler",
327
+ "definition_requires_approval",
288
328
  # Encodings
289
329
  "apply_parameter_encodings",
290
330
  # Policy
291
331
  "PolicyEngine", "DefaultPolicyEngine", "PolicyConfig",
292
332
  "PolicyDecision", "PolicyAllowed", "PolicyDenied", "PolicyPendingApproval",
293
- "RiskLevel", "PolicyTier", "MatimoEvent", "MatimoEventHandler",
333
+ "RiskLevel", "PolicyTier", "MatimoEvent", "MatimoEventHandler", "GovernanceMode",
294
334
  "HITLCallback", "HITLRequest", "ContentViolation", "validate_tool_content",
295
- "classify_risk", "get_tier_for_tool", "ToolIntegrityTracker", "IntegrityAction",
335
+ "classify_risk", "classify_execution_risk", "meets_risk_threshold",
336
+ "get_tier_for_tool", "ToolIntegrityTracker", "IntegrityAction",
296
337
  "ApprovalManifest", "ApprovalRecord", "load_policy_from_file",
338
+ "AuditSink", "JsonlFileSink", "AuditLogVerification", "verify_audit_log",
339
+ "redact_secrets", "hash_audit_entry", "AUDIT_GENESIS_HASH",
297
340
  # MCP
298
341
  "MCPServer", "MCPServerOptions", "create_mcp_server",
299
342
  "convert_parameters_to_mcp_schema",
@@ -303,6 +346,7 @@ __all__ = [
303
346
  # Integrations
304
347
  "convert_tools_to_langchain", "get_skills_metadata",
305
348
  "build_relevant_skill_prompt", "convert_tools_to_crewai",
349
+ "convert_tools_to_agno", "MatimoTools",
306
350
  # Decorators
307
351
  "tool", "set_global_matimo_instance", "get_global_matimo_instance",
308
352
  # Logging