arbiter-suite 0.9.0.dev1__py3-none-any.whl

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.
@@ -0,0 +1,214 @@
1
+ Metadata-Version: 2.4
2
+ Name: arbiter-suite
3
+ Version: 0.9.0.dev1
4
+ Summary: Policy-controlled access to configured services for agents
5
+ Author-email: Omry Yadan <omry@yadan.net>
6
+ Maintainer-email: Omry Yadan <omry@yadan.net>
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/omry/arbiter
9
+ Project-URL: Repository, https://github.com/omry/arbiter
10
+ Keywords: agent,policy,mcp,access-control,smtp,imap,security
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Communications :: Email
21
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
+ Requires-Python: <3.15,>=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: arbiter-core==0.9.0.dev1
26
+ Requires-Dist: arbiter-smtp==0.9.0.dev1
27
+ Requires-Dist: arbiter-imap==0.9.0.dev1
28
+ Provides-Extra: dev
29
+ Requires-Dist: nox[pbs]<2026.0,>=2024.10; extra == "dev"
30
+ Requires-Dist: aiosmtpd<2.0,>=1.4.6; extra == "dev"
31
+ Requires-Dist: black<26.0,>=25.0; extra == "dev"
32
+ Requires-Dist: mypy<2.0,>=1.11; extra == "dev"
33
+ Requires-Dist: pytest<9.0,>=7.4; extra == "dev"
34
+ Requires-Dist: tomli<3.0,>=2.0; extra == "dev"
35
+ Requires-Dist: towncrier<25.0,>=24.8; extra == "dev"
36
+ Requires-Dist: trustme<2.0,>=1.2; extra == "dev"
37
+ Dynamic: license-file
38
+
39
+ # Arbiter
40
+
41
+ Arbiter is a capability firewall between AI agents and services. Today it exposes policy-controlled access through MCP and a client CLI; additional interfaces may be added later. The current service surface covers sending mail over SMTP and reading IMAP folders through explicit account policies.
42
+
43
+ ## Project Status
44
+
45
+ Current implementation status:
46
+
47
+ - MCP server over stdio, SSE, or streamable HTTP via FastMCP
48
+ - capability discovery with SMTP and IMAP account and operation metadata
49
+ - SMTP submission with configured sender identity, TLS/auth settings, text/HTML bodies, and Bcc kept out of message headers
50
+ - IMAP list/get/search/move/mark-read/delete tools scoped to configured accounts and folders
51
+ - `arbiter.account.<service>` and reusable `arbiter.policy.<service>` objects
52
+ for per-service account policy
53
+ - `arbiter` client CLI and `arbiter-server` server/operator CLI
54
+ - Docker deployment files for a standard SMTP gateway and a hardened read-only IMAP variant
55
+
56
+ Known open gaps:
57
+
58
+ - durable audit storage is parked for post-v1, while startup/runtime logging is
59
+ the v1 observability focus
60
+ - normalized error-code responses are still a design contract, while the
61
+ implementation currently surfaces Python/MCP errors
62
+ - the agent-facing skill integration path is intentionally not implemented in
63
+ this repository yet
64
+
65
+ ## Development
66
+
67
+ Create and use the repo-local virtualenv with:
68
+
69
+ - `python3 -m venv .venv`
70
+ - `.venv/bin/python -m pip install --upgrade pip`
71
+ - `.venv/bin/python -m pip install -e ".[dev]" -e core -e smtp -e imap`
72
+
73
+ Run the test suite from the repo root with:
74
+
75
+ - `.venv/bin/python -m nox -s tests`
76
+ - `.venv/bin/python -m nox -s lint`
77
+
78
+ The `lint` session runs both `black --check` and the Arbiter `mypy` passes.
79
+
80
+ For focused local runs without `nox`, use the same environment directly, for example:
81
+
82
+ - `.venv/bin/python -m pytest core/tests/unit/test_config.py`
83
+ - `.venv/bin/python -m pytest core/tests/unit/test_app.py`
84
+
85
+ The Docusaurus website lives in [website/](website/):
86
+
87
+ - `cd website && npm install`
88
+ - `cd website && npm run start`
89
+ - `cd website && npm run build`
90
+
91
+ The design is documented in the `docs/` structure used by the MCP server template:
92
+
93
+ - [docs/overview.md](docs/overview.md)
94
+ - [docs/architecture.md](docs/architecture.md)
95
+ - [docs/BACKLOG.md](docs/BACKLOG.md)
96
+ - [docs/config.md](docs/config.md)
97
+ - [docs/config_bootstrap.md](docs/config_bootstrap.md)
98
+ - [docs/policies.md](docs/policies.md)
99
+ - [docs/errors.md](docs/errors.md)
100
+ - [docs/todo.md](docs/todo.md)
101
+ - [docs/testing_backlog.md](docs/testing_backlog.md)
102
+ - [docs/tools/account_summaries.md](docs/tools/account_summaries.md)
103
+ - [docs/tools/smtp_send_email.md](docs/tools/smtp_send_email.md)
104
+ - [docs/tools/imap.md](docs/tools/imap.md)
105
+
106
+ ## Local Streamable HTTP Run
107
+
108
+ For local Codex or VS Code integration, run Arbiter as a streamable HTTP MCP
109
+ server and point the client at:
110
+
111
+ ```text
112
+ http://127.0.0.1:8025/mcp
113
+ ```
114
+
115
+ Arbiter does not ship a runnable service config. Bootstrap a Hydra
116
+ config, edit it, then run the server. The default config directory is
117
+ `~/.arbiter`; pass `--config-dir <dir>` before a subcommand to use a different
118
+ location. `config.local/` is ignored scratchspace for repository-local
119
+ development.
120
+ Plugin-owned object templates are created by the plugin command surface:
121
+
122
+ ```bash
123
+ arbiter-server bootstrap arbiter
124
+ arbiter-server bootstrap plugin smtp account primary
125
+ ```
126
+
127
+ `${oc.env:...}` reads the process environment that your shell, supervisor,
128
+ container runtime, or secret manager provides. For local runs, the root config
129
+ can name one optional dotenv-style file to load before composition.
130
+
131
+ See [docs/config_bootstrap.md](docs/config_bootstrap.md) for the generated file
132
+ layout and composition flow.
133
+
134
+ For local development, a shell-owned env file can be useful:
135
+
136
+ ```bash
137
+ # ~/.arbiter/local.env
138
+ SMTP_PRIMARY_ACCOUNT_USERNAME=agent@example.com
139
+ SMTP_PRIMARY_ACCOUNT_PASSWORD=change-me
140
+ ARBITER_IMAP_USERNAME=agent@example.com
141
+ ARBITER_IMAP_PASSWORD=change-me
142
+ ```
143
+
144
+ Point the root config at the env file:
145
+
146
+ ```yaml
147
+ arbiter:
148
+ env_file: local.env
149
+ ```
150
+
151
+ Existing process environment variables take precedence over values from the env
152
+ file. Relative paths are resolved from the config directory.
153
+
154
+ Build or refresh that file from the active config:
155
+
156
+ ```bash
157
+ arbiter-server env bootstrap
158
+ arbiter-server env check
159
+ ```
160
+
161
+ `env bootstrap` keeps existing assignments, adds missing config references, and
162
+ groups entries under sorted `# arbiter-*` blocks plus `# miscellaneous`.
163
+ If `arbiter.env_file` is not set yet, it adds `arbiter.env_file: .env` to the
164
+ root config first.
165
+
166
+ Then run from this directory:
167
+
168
+ ```bash
169
+ arbiter-server config check
170
+ arbiter-server serve
171
+ ```
172
+
173
+ `config check` and `serve` require at least one configured service account.
174
+
175
+ Use `arbiter-server plugins list` to inspect installed service plugins before
176
+ validating a config. Once the server is running, use the client CLI against the
177
+ MCP endpoint:
178
+
179
+ ```bash
180
+ arbiter mcp tools arbiter.mcp_url=http://127.0.0.1:8025/mcp
181
+ arbiter cap arbiter.mcp_url=http://127.0.0.1:8025/mcp
182
+ arbiter accounts list arbiter.mcp_url=http://127.0.0.1:8025/mcp
183
+ ```
184
+
185
+ The client can also read the endpoint from a small config file:
186
+ `~/.arbiter/arbiter-client.yaml`.
187
+
188
+ ```yaml
189
+ arbiter:
190
+ mcp_url: http://127.0.0.1:8025/mcp
191
+ ```
192
+
193
+ Override config values with Hydra-style `key=value` arguments after the
194
+ command, or bootstrap the client config:
195
+
196
+ ```bash
197
+ arbiter bootstrap client arbiter.mcp_url=http://127.0.0.1:8025/mcp
198
+ ```
199
+
200
+ IMAP operations use folder-scoped UIDs returned by `imap:list_messages` and
201
+ `imap:search_messages`; pass those ids back to `imap:get_message`,
202
+ `imap:move_message`, `imap:mark_message_read`, or `imap:delete_message` with
203
+ the same account and folder.
204
+
205
+ ## Read-Only Real Inbox Docker Run
206
+
207
+ For a hardened Docker setup that reads a single real IMAP folder with Docker
208
+ secrets and no SMTP access, see:
209
+
210
+ - [deploy/readonly-imap/README.md](deploy/readonly-imap/README.md)
211
+
212
+ ## License
213
+
214
+ Arbiter is distributed under the MIT License. See [LICENSE](LICENSE).
@@ -0,0 +1,5 @@
1
+ arbiter_suite-0.9.0.dev1.dist-info/licenses/LICENSE,sha256=ST_rvt7qx4STtCAHrAnsFw__U069PncLT_bsVxMvKuU,1067
2
+ arbiter_suite-0.9.0.dev1.dist-info/METADATA,sha256=hpPEXwGPL_WQb7EXZXZvGxLo25Ms5jMKezd_HK4__Hs,7628
3
+ arbiter_suite-0.9.0.dev1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
4
+ arbiter_suite-0.9.0.dev1.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
5
+ arbiter_suite-0.9.0.dev1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Omry Yadan
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.