systems-manager 2.2.2__tar.gz → 2.2.3__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.
Files changed (88) hide show
  1. {systems_manager-2.2.2 → systems_manager-2.2.3}/PKG-INFO +5 -5
  2. {systems_manager-2.2.2 → systems_manager-2.2.3}/README.md +1 -1
  3. {systems_manager-2.2.2 → systems_manager-2.2.3}/pyproject.toml +4 -4
  4. {systems_manager-2.2.2 → systems_manager-2.2.3}/release-readiness.json +47 -47
  5. {systems_manager-2.2.2 → systems_manager-2.2.3}/requirements.txt +1 -1
  6. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/mcp_server.py +4 -20
  7. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/systems_manager.py +1 -1
  8. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager.egg-info/PKG-INFO +5 -5
  9. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager.egg-info/SOURCES.txt +1 -0
  10. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager.egg-info/requires.txt +3 -3
  11. systems_manager-2.2.3/tests/test_tools_classified.py +33 -0
  12. {systems_manager-2.2.2 → systems_manager-2.2.3}/.pre-commit-config.yaml +0 -0
  13. {systems_manager-2.2.2 → systems_manager-2.2.3}/AGENTS.md +0 -0
  14. {systems_manager-2.2.2 → systems_manager-2.2.3}/CHANGELOG.md +0 -0
  15. {systems_manager-2.2.2 → systems_manager-2.2.3}/CLAUDE.md +0 -0
  16. {systems_manager-2.2.2 → systems_manager-2.2.3}/LICENSE +0 -0
  17. {systems_manager-2.2.2 → systems_manager-2.2.3}/MANIFEST.in +0 -0
  18. {systems_manager-2.2.2 → systems_manager-2.2.3}/connector_manifest.yml +0 -0
  19. {systems_manager-2.2.2 → systems_manager-2.2.3}/mcp_config.json +0 -0
  20. {systems_manager-2.2.2 → systems_manager-2.2.3}/mkdocs.yml +0 -0
  21. {systems_manager-2.2.2 → systems_manager-2.2.3}/opencode.json +0 -0
  22. {systems_manager-2.2.2 → systems_manager-2.2.3}/scripts/check_release_artifacts.py +0 -0
  23. {systems_manager-2.2.2 → systems_manager-2.2.3}/scripts/security_sanitizer.py +0 -0
  24. {systems_manager-2.2.2 → systems_manager-2.2.3}/setup.cfg +0 -0
  25. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/__init__.py +0 -0
  26. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/__main__.py +0 -0
  27. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/agent_data/CRON.md +0 -0
  28. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/agent_data/HEARTBEAT.md +0 -0
  29. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/agent_data/IDENTITY.md +0 -0
  30. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/agent_data/NODE_AGENTS.md +0 -0
  31. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/agent_data/icon.png +0 -0
  32. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/bmc_credentials.py +0 -0
  33. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/connectors/__init__.py +0 -0
  34. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/connectors/mcp_source_presets.json +0 -0
  35. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/connectors/tool_schema_fingerprints.json +0 -0
  36. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/k8s_detect.py +0 -0
  37. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/kg_ingest.py +0 -0
  38. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/mcp/__init__.py +0 -0
  39. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/models.py +0 -0
  40. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/ontology/__init__.py +0 -0
  41. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/ontology/certification.json +0 -0
  42. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/ontology/fixtures/records.json +0 -0
  43. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/ontology/mappings/source.yaml +0 -0
  44. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/ontology/migrations/manifest.json +0 -0
  45. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/ontology/shapes/connector.shacl.ttl +0 -0
  46. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/ontology/systems.ttl +0 -0
  47. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/os_provider.py +0 -0
  48. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/os_provider_tools.py +0 -0
  49. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/prompts/__init__.py +0 -0
  50. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/__init__.py +0 -0
  51. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/ipmi-bmc-manager/SKILL.md +0 -0
  52. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/ipmi-bmc-manager/references/cheatsheet.md +0 -0
  53. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/nic-bond-provisioner/SKILL.md +0 -0
  54. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/nic-bond-provisioner/references/recovery.md +0 -0
  55. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/nic-bond-provisioner/scripts/apply-bond.sh +0 -0
  56. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/nic-bond-provisioner/scripts/gen-bond-config.sh +0 -0
  57. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/systems-manager-operations/SKILL.md +0 -0
  58. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/systems-manager-operations/agents/openai.yaml +0 -0
  59. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/skills/systems-manager-operations/references/catalog.md +0 -0
  60. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/storage_health.py +0 -0
  61. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/storage_tools.py +0 -0
  62. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager/sudo_helper.py +0 -0
  63. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager.egg-info/dependency_links.txt +0 -0
  64. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager.egg-info/entry_points.txt +0 -0
  65. {systems_manager-2.2.2 → systems_manager-2.2.3}/systems_manager.egg-info/top_level.txt +0 -0
  66. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/__init__.py +0 -0
  67. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/conftest.py +0 -0
  68. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/health_check2.py +0 -0
  69. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_file_manager.py +0 -0
  70. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_fleet_name.py +0 -0
  71. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_init.py +0 -0
  72. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_init_dynamics.py +0 -0
  73. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_k8s_detect.py +0 -0
  74. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_k8s_lifecycle_guard.py +0 -0
  75. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_kg_ingest.py +0 -0
  76. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_linux_managers.py +0 -0
  77. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_main.py +0 -0
  78. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_mcp_routing.py +0 -0
  79. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_mcp_security_policy.py +0 -0
  80. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_mcp_server.py +0 -0
  81. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_os_provider.py +0 -0
  82. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_os_provider_tools.py +0 -0
  83. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_platform_managers.py +0 -0
  84. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_security_boundaries.py +0 -0
  85. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_storage_health.py +0 -0
  86. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_sudo_helper.py +0 -0
  87. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_systems_manager_base.py +0 -0
  88. {systems_manager-2.2.2 → systems_manager-2.2.3}/tests/test_windows_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: systems-manager
3
- Version: 2.2.2
3
+ Version: 2.2.3
4
4
  Summary: Systems Manager will update your system and install/upgrade applications. Additionally, as allow AI to perform these activities as an MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,15 +12,15 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.15
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18
16
16
  Requires-Dist: pydantic>=2.14.1
17
17
  Requires-Dist: psutil>=7.2.2
18
18
  Requires-Dist: distro>=1.9.0
19
19
  Requires-Dist: requests>=2.34.2
20
20
  Provides-Extra: mcp
21
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == "mcp"
21
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
22
22
  Provides-Extra: all
23
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == "all"
23
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "all"
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pytest>=9.1.1; extra == "test"
26
26
  Requires-Dist: pytest-asyncio>=1.4.0; extra == "test"
@@ -28,7 +28,7 @@ Dynamic: license-file
28
28
 
29
29
  # systems-manager
30
30
 
31
- Version: 2.2.2
31
+ Version: 2.2.3
32
32
 
33
33
  `systems-manager` is the typed host-operations provider for Agent Connector SDK and
34
34
  Arbora. It exposes cross-platform package, service, process, network, disk,
@@ -1,6 +1,6 @@
1
1
  # systems-manager
2
2
 
3
- Version: 2.2.2
3
+ Version: 2.2.3
4
4
 
5
5
  `systems-manager` is the typed host-operations provider for Agent Connector SDK and
6
6
  Arbora. It exposes cross-platform package, service, process, network, disk,
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "systems-manager"
7
- version = "2.2.2"
7
+ version = "2.2.3"
8
8
  description = "Systems Manager will update your system and install/upgrade applications. Additionally, as allow AI to perform these activities as an MCP Server"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 5 - Production/Stable", "License :: Public Domain", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.12,<3.15"
12
- dependencies = [ "agent-connector-sdk[mcp]>=0.3.15,<1.0.0", "pydantic>=2.14.1", "psutil>=7.2.2", "distro>=1.9.0", "requests>=2.34.2",]
12
+ dependencies = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0", "pydantic>=2.14.1", "psutil>=7.2.2", "distro>=1.9.0", "requests>=2.34.2",]
13
13
  [[project.authors]]
14
14
  name = "Project Maintainers"
15
15
  email = "maintainers@users.noreply.github.com"
@@ -18,8 +18,8 @@ email = "maintainers@users.noreply.github.com"
18
18
  text = "MIT"
19
19
 
20
20
  [project.optional-dependencies]
21
- mcp = [ "agent-connector-sdk[mcp]>=0.3.15,<1.0.0",]
22
- all = [ "agent-connector-sdk[mcp]>=0.3.15,<1.0.0",]
21
+ mcp = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",]
22
+ all = [ "agent-connector-sdk[mcp]>=0.3.18,<1.0.0",]
23
23
  test = [ "pytest>=9.1.1", "pytest-asyncio>=1.4.0",]
24
24
 
25
25
  [project.scripts]
@@ -1376,8 +1376,8 @@
1376
1376
  },
1377
1377
  "index": "https://pypi.org/simple",
1378
1378
  "scope": "all-runtime-dependencies",
1379
- "source_commit": "f64e05906abd06174592043b48fa16a5f8937b4b",
1380
- "contract_commit": "2026537828391d234d4d63544559236a0cc7303b",
1379
+ "source_commit": "7a47499055fa25b31cbab0fed091e0177617d9b7",
1380
+ "contract_commit": "6a8f62af68a6972dc3d76bca9051738c6fe9389e",
1381
1381
  "interpreter": {
1382
1382
  "implementation": "CPython",
1383
1383
  "version": "3.14.4",
@@ -1387,11 +1387,11 @@
1387
1387
  "source_builds": [],
1388
1388
  "wheels": [
1389
1389
  {
1390
- "file": "systems_manager-2.2.2-py3-none-any.whl",
1391
- "sha256": "f0d60ab435aed9974db6474f1c0c1e1f6e277a4ffce1fb7e9e47326d9dc10de9",
1390
+ "file": "systems_manager-2.2.3-py3-none-any.whl",
1391
+ "sha256": "3acc024bbf04f65397b3bf43b0dd1fd52c75bc793c9bac4375e9c62106293449",
1392
1392
  "metadata": {
1393
1393
  "name": "systems-manager",
1394
- "version": "2.2.2",
1394
+ "version": "2.2.3",
1395
1395
  "requires_python": "<3.15,>=3.12",
1396
1396
  "provides_extra": [
1397
1397
  "mcp",
@@ -1399,13 +1399,13 @@
1399
1399
  "test"
1400
1400
  ],
1401
1401
  "requires_dist": [
1402
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15",
1402
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18",
1403
1403
  "pydantic>=2.14.1",
1404
1404
  "psutil>=7.2.2",
1405
1405
  "distro>=1.9.0",
1406
1406
  "requests>=2.34.2",
1407
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"mcp\"",
1408
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"all\"",
1407
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"mcp\"",
1408
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"all\"",
1409
1409
  "pytest>=9.1.1; extra == \"test\"",
1410
1410
  "pytest-asyncio>=1.4.0; extra == \"test\""
1411
1411
  ]
@@ -1424,11 +1424,11 @@
1424
1424
  "install": [
1425
1425
  {
1426
1426
  "download_info": {
1427
- "url": "file:///tmp/wheel-readiness-de961_ph/systems_manager-2.2.2-py3-none-any.whl",
1427
+ "url": "file:///tmp/wheel-readiness-ls5igx0b/systems_manager-2.2.3-py3-none-any.whl",
1428
1428
  "archive_info": {
1429
- "hash": "sha256=f0d60ab435aed9974db6474f1c0c1e1f6e277a4ffce1fb7e9e47326d9dc10de9",
1429
+ "hash": "sha256=3acc024bbf04f65397b3bf43b0dd1fd52c75bc793c9bac4375e9c62106293449",
1430
1430
  "hashes": {
1431
- "sha256": "f0d60ab435aed9974db6474f1c0c1e1f6e277a4ffce1fb7e9e47326d9dc10de9"
1431
+ "sha256": "3acc024bbf04f65397b3bf43b0dd1fd52c75bc793c9bac4375e9c62106293449"
1432
1432
  }
1433
1433
  }
1434
1434
  },
@@ -1438,12 +1438,12 @@
1438
1438
  "metadata": {
1439
1439
  "metadata_version": "2.4",
1440
1440
  "name": "systems-manager",
1441
- "version": "2.2.2",
1441
+ "version": "2.2.3",
1442
1442
  "dynamic": [
1443
1443
  "license-file"
1444
1444
  ],
1445
1445
  "summary": "Systems Manager will update your system and install/upgrade applications. Additionally, as allow AI to perform these activities as an MCP Server",
1446
- "description": "# systems-manager\n\nVersion: 2.2.2\n\n`systems-manager` is the typed host-operations provider for Agent Connector SDK and\nArbora. It exposes cross-platform package, service, process, network, disk,\nmanaged-file, firewall, physical-storage, Agent OS, and privacy-safe host-ingestion\ncapabilities without exposing a raw command tool.\n\nThe current package requires Python 3.11\u20133.14 and\n`agent-connector-sdk>=2.0.0,<3.0.0`.\n\n## Install and run\n\nInstall only the interface the operator need:\n\n```bash\npip install \"systems-manager[mcp]\"\nsystems-manager-mcp --transport stdio\n```\n\nThe optional extras are:\n\n| Extra | Capability |\n| --- | --- |\n| `mcp` | FastMCP provider runtime |\n| `agent` | Agent server and Logfire integration |\n| `all` | MCP plus agent runtime |\n| `test` | Test dependencies |\n\nFor an ephemeral MCP start:\n\n```bash\nuvx --from \"systems-manager[mcp]\" systems-manager-mcp --transport stdio\n```\n\nThe checked-in `mcp_config.json` is a reference-only client catalog. It contains\n`env://` references and safe deny defaults, never deployment endpoints, credentials,\ncertificate paths, filesystem paths, hostnames, or identities. Project-specific values\nbelong in AgentConfig or the process launcher.\n\n## Security contract\n\n- Network MCP listeners require configured authentication. Non-loopback listeners also\n require direct TLS or a trusted TLS-stop proxy, exact allowed hosts, and the\n current Agent Connector SDK transport checks.\n- Host mutations are denied unless `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS=true` and the\n individual request receives destructive-operation approval.\n- Managed-file writes also require\n `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS=true`.\n- Sensitive reads and active probes have independent default-deny gates.\n- Managed paths are confined beneath an explicit\n `SYSTEMS_MANAGER_FILESYSTEM_ROOT`; there is no working-directory fallback.\n- Raw shell, arbitrary commands, plaintext credentials, model-authored cron creation,\n and compatibility command aliases are not capabilities.\n- Logs and observability are metadata-only. Keep `LANGFUSE_CAPTURE_CONTENT=false`.\n\n## AgentConfig, secrets, and TLS\n\nUse `TLS_PROFILE` / `TLS_PROFILE_REF` with `TLS_PROFILES_REF` for shared checked\noutbound trust. Service-specific profiles such as `OIDC_TLS_PROFILE_REF`,\n`MODEL_TLS_PROFILE_REF`, and `LANGFUSE_TLS_PROFILE_REF` may select entries from the\nsame runtime catalog. Do not hardcode CA paths or verification flags in application\ncode, and do not disable verification for incomplete certificate chains.\n\nOut-of-band BMC health reads consume one runtime secret projection from\n`SYSTEMS_MANAGER_BMC_CREDENTIALS`. AgentConfig resolves the checked `env://` or secret\nreference before start; the provider accepts exactly a JSON object with `host`, `user`,\nand `password`. No secret-store vendor, secret path, token, or credential value is\nembedded in this package.\n\nThe MCP listener's own certificate or trusted-proxy boundary uses the current Agent\nUtilities `MCP_TLS_*` configuration. The optional agent listener uses `SERVER_TLS_*`\nand requires JWT configuration for non-loopback serving.\n\n## MCP tools\n\nThe default `MCP_TOOL_MODE=intent` exposes the small intent-verb surface. Backing\naction-routed tools stay available for governed discovery and on-demand loading. Tool\nand tag filters can further reduce the visible surface.\n\n_Auto-generated from the live MCP server; do not edit between the markers._\n\n<!-- MCP-TOOLS-TABLE:START -->\n\n#### Condensed action-routed tools (`MCP_TOOL_MODE=condensed`)\n\n| MCP Tool | Toggle Env Var | Description |\n|----------|----------------|-------------|\n| `capture_system_snapshot` | `OS_PROVIDERTOOL` | Takes a point-in-time snapshot of the system state (CPU, RAM, Processes). |\n| `get_management_capabilities` | \u2014 | |\n| `get_network_connections` | `OS_PROVIDERTOOL` | Maps active TCP/UDP endpoints directly to owning processes. |\n| `get_process_details` | `OS_PROVIDERTOOL` | Retrieves deep cross-platform process details (threads, modules, memory). |\n| `health_check` | \u2014 | |\n| `list_kernel_modules` | `OS_PROVIDERTOOL` | List loaded drivers/modules (lsmod or driverquery). |\n| `list_services` | `OS_PROVIDERTOOL` | Cross-platform service enumeration (systemctl or Get-Service). |\n| `manage_service` | `OS_PROVIDERTOOL` | Start/Stop/Restart/Enable/Disable services cross-platform. |\n| `query_system_logs` | `OS_PROVIDERTOOL` | Cross-platform log querying (journalctl or Get-WinEvent). |\n| `sm_advanced_operations` | \u2014 | Operations for SSH and specialized managers |\n| `sm_agent_identity_operations` | `IDENTITYTOOL` | Issues or verifies privacy-preserving agent identities. |\n| `sm_agent_scheduler_operations` | `AGENT_HEALTHTOOL` | Manages the cognitive scheduler: get stats, list processes, preempt, or reset quota. |\n| `sm_agent_specialist_operations` | `SPECIALIST_REGISTRYTOOL` | Manages specialist packages: install, uninstall, list, or search. |\n| `sm_agent_watchdog_operations` | `WATCHDOGTOOL` | Manages file watchdog triggers: check file change, list active watchers, or drain triggers. |\n| `sm_cron_operations` | \u2014 | Operations for cron jobs |\n| `sm_disk_operations` | \u2014 | Operations for managing system disks |\n| `sm_file_operations` | \u2014 | Operations for file and log management |\n| `sm_firewall_operations` | \u2014 | Operations for firewall management |\n| `sm_network_operations` | \u2014 | Operations for network analysis |\n| `sm_process_operations` | \u2014 | Operations for managing system processes |\n| `sm_service_operations` | \u2014 | Operations for managing system services |\n| `sm_storage_health` | `STORAGE_HEALTHTOOL` | Physical disk + BMC drive-fault health: SMART (incl. megaraid passthrough), |\n| `sm_system_operations` | \u2014 | System operations for managing packages, system health, and updates |\n| `sm_user_operations` | \u2014 | Operations for user and group management |\n| `start_system_trace` | `OS_PROVIDERTOOL` | Start a kernel-level event trace (ETW on Windows, or strace on Linux). |\n| `stop_system_trace` | `OS_PROVIDERTOOL` | Stop a kernel-level event trace. |\n| `systems_ingest_host` | \u2014 | Ingest a keyed host telemetry projection through the governed ChangeEnvelope boundary as typed HardwareNode, NetworkInterface, and DiskVolume nodes. |\n\n_27 action-routed tool(s) \u00b7 0 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (**`intent` default** \u2014 the six verb-tools, granular set loaded on demand \u00b7 `condensed` action-routed \u00b7 `verbose` 1:1 \u00b7 `both`). Auto-generated \u2014 do not edit._\n<!-- MCP-TOOLS-TABLE:END -->\n\nTypical backing domains include OS/package lifecycle, services, processes, networks,\ndisks, managed files, cron removal, structured firewall rules, storage/BMC diagnostics,\nAgent OS administration, and governed host telemetry ingestion. Discover an action\nschema before calling it; unavailable operations must not be emulated with another\ntool.\n\n## Knowledge-graph ingestion\n\n`systems_ingest_host` reads local typed telemetry and submits an allowlisted projection\nthrough the Agent Connector SDK native governed ingestion boundary. It emits only:\n\n- `HardwareNode`, `NetworkInterface`, and `DiskVolume` nodes;\n- `hasInterface` and `hasVolume` relationships;\n- HMAC-SHA-256 opaque identifiers derived with the deployment-owned\n `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY`.\n\nHostnames, network addresses, hardware addresses, usernames, local paths, credentials,\nand arbitrary extra fields are rejected or excluded. Missing graph authority, invalid\ncontent, and unavailable ingestion fail explicitly; they are not silent no-ops.\n\n## Arbora delegation\n\nHost operations run inside the service's local operating-system boundary. For\nfleet work, Arbora delegates to an authenticated systems-manager service on the target\nboundary. Inventory, endpoints, credentials, TLS profiles, and target aliases remain\nexternal deployment configuration. Persist only opaque, non-personal references.\n\nThe bundled `systems-manager-operations` skill covers every current provider workflow.\nOlder BMC command and NIC-bond script skills were consolidated because those raw-script\nsurfaces are not part of the typed current contract.\n\n## Agent server\n\nInstall the agent extra and start:\n\n```bash\nsystems-manager-agent --help\n```\n\nWorkspace, MCP catalog, and custom-skill paths are accepted only when explicitly\nconfigured and present. There is no packaged-config or current-directory fallback.\nA non-loopback listener requires an explicit allow gate, direct or trusted-proxy TLS,\nJWT issuer/JWKS/audience configuration, and debug mode disabled.\n\n## Environment variables\n\nThe generated table is sourced from the value-free `.env.example` plus the inherited\nAgent Connector SDK contract.\n\n<!-- ENV-VARS-TABLE:START -->\n\n#### Package environment variables\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `SYSTEMS_MANAGER_FILESYSTEM_ROOT` | \u2014 | Required managed filesystem boundary |\n| `SYSTEMS_MANAGER_TEMP_ROOT` | \u2014 | Optional cleanup root beneath the managed boundary |\n| `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY` | secret-injected | Deployment-owned secret, at least 32 bytes |\n| `SYSTEMS_MANAGER_BMC_CREDENTIALS` | \u2014 | Secret-projected JSON with host/user/password |\n| `TLS_PROFILE` | \u2014 | Shared mandatory-verification transport profile |\n| `TLS_PROFILES_REF` | \u2014 | Runtime reference to the transport profile catalog |\n| `LANGFUSE_TLS_PROFILE_REF` | \u2014 | Runtime reference to verified Langfuse trust |\n| `MCP_TOOL_MODE` | `intent` | Current intent-first tool surface |\n| `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS` | `false` | Default-deny host mutations |\n| `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS` | `false` | Default-deny file mutations |\n| `SYSTEMS_MANAGER_ALLOW_SENSITIVE_READS` | `false` | Default-deny sensitive inventory |\n| `SYSTEMS_MANAGER_ALLOW_NETWORK_PROBES` | `false` | Default-deny active probes |\n| `SYSTEMS_MANAGER_MAX_BLOCKING_OPERATIONS` | `2` | Bounded host-operation concurrency |\n| `SYSTEMS_MANAGER_HEALTH_INGEST` | `true` | Enable governed health trend ingestion |\n| `SYSTEMS_MANAGER_HEALTH_AGGREGATE_S` | `3600` | Health trend aggregation window |\n| `SYSTEMS_MANAGER_NODE_REF` | \u2014 | Runtime node alias; only a keyed digest persists |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE` | \u2014 | Optional inline mandatory-verification notification TLS profile |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE_REF` | \u2014 | Runtime reference to the notification TLS profile |\n| `SYSTEMS_MANAGER_MCP_IMAGE_DIGEST` | \u2014 | Required immutable MCP image digest |\n| `SYSTEMS_MANAGER_REPOSITORY_ALLOWLIST_JSON` | `[]` | Approved credential-free repositories |\n| `SYSTEMS_MANAGER_LOCAL_PACKAGE_SHA256_MAP` | `{}` | Approved package paths and digests |\n| `SYSTEMS_MANAGER_COMMAND_TIMEOUT_SECONDS` | `120` | Default command timeout |\n| `SYSTEMS_MANAGER_ENV_METADATA_ALLOWLIST` | \u2014 | Non-sensitive environment names readable as metadata |\n| `SYSTEMS_MANAGER_UV_VERSION` | \u2014 | Exact approved uv release |\n| `SYSTEMS_MANAGER_NVM_COMMIT` | \u2014 | Exact approved NVM commit |\n| `SYSTEMS_MANAGER_NVM_DIR` | \u2014 | NVM directory beneath the managed filesystem root |\n| `ALLOW_UPDATE_ON_K8S` | `false` | Keep Kubernetes lifecycle guard enabled |\n| `MISCTOOL` | `true` | Register base health/readiness tools |\n| `OS_PROVIDERTOOL` | `true` | Register operating-system provider tools |\n| `STORAGE_HEALTHTOOL` | `true` | Register storage health tools |\n| `TRANSPORT` | `stdio` | Local MCP transport |\n| `HOST` | `127.0.0.1` | Loopback bind for HTTP transports |\n| `PORT` | `8000` | Bind port for HTTP transports |\n| `ENABLE_OTEL` | `false` | Enable only with an approved collector |\n\n#### Inherited agent-connector-sdk variables (apply to every connector)\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `MCP_ENABLED_TOOLS` | \u2014 | Comma-separated tool allow-list |\n| `MCP_DISABLED_TOOLS` | \u2014 | Comma-separated tool deny-list |\n| `MCP_ENABLED_TAGS` | \u2014 | Comma-separated tag allow-list |\n| `MCP_DISABLED_TAGS` | \u2014 | Comma-separated tag deny-list |\n| `EUNOMIA_TYPE` | `none` | Authorization mode: `none` \\| `embedded` \\| `remote` |\n| `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | Embedded Eunomia policy file |\n| `EUNOMIA_REMOTE_URL` | \u2014 | Remote Eunomia authorization server URL |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | \u2014 | OTLP collector endpoint |\n| `MCP_CLIENT_AUTH` | \u2014 | Outbound MCP child auth: `oidc-client-credentials` \\| `basic` \\| `none` |\n| `OIDC_CLIENT_ID` | \u2014 | OIDC client id (service-account auth) |\n| `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |\n| `MCP_BASIC_AUTH_USERNAME` | \u2014 | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |\n| `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |\n| `DEBUG` | `False` | Verbose logging |\n| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |\n| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |\n| `PROVIDER` | `openai` | LLM provider for the agent |\n| `MODEL_ID` | `gpt-4o` | Model id for the agent |\n| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |\n\n_51 package + 19 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set \u2014 do not edit._\n<!-- ENV-VARS-TABLE:END -->\n\n## Development and release gates\n\n```bash\npytest -q\nruff check systems_manager tests\nblack --check systems_manager tests\nmkdocs build --strict\npre-commit run --all-files\n```\n\nRun host operations only through mocks during tests. Do not run native builds or live\nhost mutations as a validation shortcut. The source dependency floor is intentionally\n`agent-connector-sdk>=2.0.0`; regenerate and commit a neutral lock only after that release\nis available from the configured package index. Never commit an editable local source\nor a stale dependency resolution.\n\nSee [the documentation](docs/index.md) for installation, deployment, configuration,\nusage, multi-host delegation, and security details.\n\n\n\n<!-- GOVERNED-CAPABILITY:START -->\n## Governed capability contract\n\nThis package ships a compact canonical skill surface with specialist procedures\nkept as referenced workflows. The current MCP tools, skill metadata,\n`connector_manifest.yml`, ontology, mappings, shapes, fixtures, migrations,\ntool-schema fingerprints, and certification metadata form one versioned\ncapability contract. Validate them together; do not rely on stale tool names or\nhistorical per-task skill wrappers.\n\nRuntime endpoints, credentials, certificate trust, tenant identity, retention,\nand observability policy are deployment inputs and are never packaged values.\nSee [Configuration, trust, and privacy](docs/configuration.md) before enabling a\nnetwork transport, connector ingestion, Arbora delegation, or trace export.\n<!-- GOVERNED-CAPABILITY:END -->\n",
1446
+ "description": "# systems-manager\n\nVersion: 2.2.3\n\n`systems-manager` is the typed host-operations provider for Agent Connector SDK and\nArbora. It exposes cross-platform package, service, process, network, disk,\nmanaged-file, firewall, physical-storage, Agent OS, and privacy-safe host-ingestion\ncapabilities without exposing a raw command tool.\n\nThe current package requires Python 3.11\u20133.14 and\n`agent-connector-sdk>=2.0.0,<3.0.0`.\n\n## Install and run\n\nInstall only the interface the operator need:\n\n```bash\npip install \"systems-manager[mcp]\"\nsystems-manager-mcp --transport stdio\n```\n\nThe optional extras are:\n\n| Extra | Capability |\n| --- | --- |\n| `mcp` | FastMCP provider runtime |\n| `agent` | Agent server and Logfire integration |\n| `all` | MCP plus agent runtime |\n| `test` | Test dependencies |\n\nFor an ephemeral MCP start:\n\n```bash\nuvx --from \"systems-manager[mcp]\" systems-manager-mcp --transport stdio\n```\n\nThe checked-in `mcp_config.json` is a reference-only client catalog. It contains\n`env://` references and safe deny defaults, never deployment endpoints, credentials,\ncertificate paths, filesystem paths, hostnames, or identities. Project-specific values\nbelong in AgentConfig or the process launcher.\n\n## Security contract\n\n- Network MCP listeners require configured authentication. Non-loopback listeners also\n require direct TLS or a trusted TLS-stop proxy, exact allowed hosts, and the\n current Agent Connector SDK transport checks.\n- Host mutations are denied unless `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS=true` and the\n individual request receives destructive-operation approval.\n- Managed-file writes also require\n `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS=true`.\n- Sensitive reads and active probes have independent default-deny gates.\n- Managed paths are confined beneath an explicit\n `SYSTEMS_MANAGER_FILESYSTEM_ROOT`; there is no working-directory fallback.\n- Raw shell, arbitrary commands, plaintext credentials, model-authored cron creation,\n and compatibility command aliases are not capabilities.\n- Logs and observability are metadata-only. Keep `LANGFUSE_CAPTURE_CONTENT=false`.\n\n## AgentConfig, secrets, and TLS\n\nUse `TLS_PROFILE` / `TLS_PROFILE_REF` with `TLS_PROFILES_REF` for shared checked\noutbound trust. Service-specific profiles such as `OIDC_TLS_PROFILE_REF`,\n`MODEL_TLS_PROFILE_REF`, and `LANGFUSE_TLS_PROFILE_REF` may select entries from the\nsame runtime catalog. Do not hardcode CA paths or verification flags in application\ncode, and do not disable verification for incomplete certificate chains.\n\nOut-of-band BMC health reads consume one runtime secret projection from\n`SYSTEMS_MANAGER_BMC_CREDENTIALS`. AgentConfig resolves the checked `env://` or secret\nreference before start; the provider accepts exactly a JSON object with `host`, `user`,\nand `password`. No secret-store vendor, secret path, token, or credential value is\nembedded in this package.\n\nThe MCP listener's own certificate or trusted-proxy boundary uses the current Agent\nUtilities `MCP_TLS_*` configuration. The optional agent listener uses `SERVER_TLS_*`\nand requires JWT configuration for non-loopback serving.\n\n## MCP tools\n\nThe default `MCP_TOOL_MODE=intent` exposes the small intent-verb surface. Backing\naction-routed tools stay available for governed discovery and on-demand loading. Tool\nand tag filters can further reduce the visible surface.\n\n_Auto-generated from the live MCP server; do not edit between the markers._\n\n<!-- MCP-TOOLS-TABLE:START -->\n\n#### Condensed action-routed tools (`MCP_TOOL_MODE=condensed`)\n\n| MCP Tool | Toggle Env Var | Description |\n|----------|----------------|-------------|\n| `capture_system_snapshot` | `OS_PROVIDERTOOL` | Takes a point-in-time snapshot of the system state (CPU, RAM, Processes). |\n| `get_management_capabilities` | \u2014 | |\n| `get_network_connections` | `OS_PROVIDERTOOL` | Maps active TCP/UDP endpoints directly to owning processes. |\n| `get_process_details` | `OS_PROVIDERTOOL` | Retrieves deep cross-platform process details (threads, modules, memory). |\n| `health_check` | \u2014 | |\n| `list_kernel_modules` | `OS_PROVIDERTOOL` | List loaded drivers/modules (lsmod or driverquery). |\n| `list_services` | `OS_PROVIDERTOOL` | Cross-platform service enumeration (systemctl or Get-Service). |\n| `manage_service` | `OS_PROVIDERTOOL` | Start/Stop/Restart/Enable/Disable services cross-platform. |\n| `query_system_logs` | `OS_PROVIDERTOOL` | Cross-platform log querying (journalctl or Get-WinEvent). |\n| `sm_advanced_operations` | \u2014 | Operations for SSH and specialized managers |\n| `sm_agent_identity_operations` | `IDENTITYTOOL` | Issues or verifies privacy-preserving agent identities. |\n| `sm_agent_scheduler_operations` | `AGENT_HEALTHTOOL` | Manages the cognitive scheduler: get stats, list processes, preempt, or reset quota. |\n| `sm_agent_specialist_operations` | `SPECIALIST_REGISTRYTOOL` | Manages specialist packages: install, uninstall, list, or search. |\n| `sm_agent_watchdog_operations` | `WATCHDOGTOOL` | Manages file watchdog triggers: check file change, list active watchers, or drain triggers. |\n| `sm_cron_operations` | \u2014 | Operations for cron jobs |\n| `sm_disk_operations` | \u2014 | Operations for managing system disks |\n| `sm_file_operations` | \u2014 | Operations for file and log management |\n| `sm_firewall_operations` | \u2014 | Operations for firewall management |\n| `sm_network_operations` | \u2014 | Operations for network analysis |\n| `sm_process_operations` | \u2014 | Operations for managing system processes |\n| `sm_service_operations` | \u2014 | Operations for managing system services |\n| `sm_storage_health` | `STORAGE_HEALTHTOOL` | Physical disk + BMC drive-fault health: SMART (incl. megaraid passthrough), |\n| `sm_system_operations` | \u2014 | System operations for managing packages, system health, and updates |\n| `sm_user_operations` | \u2014 | Operations for user and group management |\n| `start_system_trace` | `OS_PROVIDERTOOL` | Start a kernel-level event trace (ETW on Windows, or strace on Linux). |\n| `stop_system_trace` | `OS_PROVIDERTOOL` | Stop a kernel-level event trace. |\n| `systems_ingest_host` | \u2014 | Ingest a keyed host telemetry projection through the governed ChangeEnvelope boundary as typed HardwareNode, NetworkInterface, and DiskVolume nodes. |\n\n_27 action-routed tool(s) \u00b7 0 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (**`intent` default** \u2014 the six verb-tools, granular set loaded on demand \u00b7 `condensed` action-routed \u00b7 `verbose` 1:1 \u00b7 `both`). Auto-generated \u2014 do not edit._\n<!-- MCP-TOOLS-TABLE:END -->\n\nTypical backing domains include OS/package lifecycle, services, processes, networks,\ndisks, managed files, cron removal, structured firewall rules, storage/BMC diagnostics,\nAgent OS administration, and governed host telemetry ingestion. Discover an action\nschema before calling it; unavailable operations must not be emulated with another\ntool.\n\n## Knowledge-graph ingestion\n\n`systems_ingest_host` reads local typed telemetry and submits an allowlisted projection\nthrough the Agent Connector SDK native governed ingestion boundary. It emits only:\n\n- `HardwareNode`, `NetworkInterface`, and `DiskVolume` nodes;\n- `hasInterface` and `hasVolume` relationships;\n- HMAC-SHA-256 opaque identifiers derived with the deployment-owned\n `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY`.\n\nHostnames, network addresses, hardware addresses, usernames, local paths, credentials,\nand arbitrary extra fields are rejected or excluded. Missing graph authority, invalid\ncontent, and unavailable ingestion fail explicitly; they are not silent no-ops.\n\n## Arbora delegation\n\nHost operations run inside the service's local operating-system boundary. For\nfleet work, Arbora delegates to an authenticated systems-manager service on the target\nboundary. Inventory, endpoints, credentials, TLS profiles, and target aliases remain\nexternal deployment configuration. Persist only opaque, non-personal references.\n\nThe bundled `systems-manager-operations` skill covers every current provider workflow.\nOlder BMC command and NIC-bond script skills were consolidated because those raw-script\nsurfaces are not part of the typed current contract.\n\n## Agent server\n\nInstall the agent extra and start:\n\n```bash\nsystems-manager-agent --help\n```\n\nWorkspace, MCP catalog, and custom-skill paths are accepted only when explicitly\nconfigured and present. There is no packaged-config or current-directory fallback.\nA non-loopback listener requires an explicit allow gate, direct or trusted-proxy TLS,\nJWT issuer/JWKS/audience configuration, and debug mode disabled.\n\n## Environment variables\n\nThe generated table is sourced from the value-free `.env.example` plus the inherited\nAgent Connector SDK contract.\n\n<!-- ENV-VARS-TABLE:START -->\n\n#### Package environment variables\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `SYSTEMS_MANAGER_FILESYSTEM_ROOT` | \u2014 | Required managed filesystem boundary |\n| `SYSTEMS_MANAGER_TEMP_ROOT` | \u2014 | Optional cleanup root beneath the managed boundary |\n| `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY` | secret-injected | Deployment-owned secret, at least 32 bytes |\n| `SYSTEMS_MANAGER_BMC_CREDENTIALS` | \u2014 | Secret-projected JSON with host/user/password |\n| `TLS_PROFILE` | \u2014 | Shared mandatory-verification transport profile |\n| `TLS_PROFILES_REF` | \u2014 | Runtime reference to the transport profile catalog |\n| `LANGFUSE_TLS_PROFILE_REF` | \u2014 | Runtime reference to verified Langfuse trust |\n| `MCP_TOOL_MODE` | `intent` | Current intent-first tool surface |\n| `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS` | `false` | Default-deny host mutations |\n| `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS` | `false` | Default-deny file mutations |\n| `SYSTEMS_MANAGER_ALLOW_SENSITIVE_READS` | `false` | Default-deny sensitive inventory |\n| `SYSTEMS_MANAGER_ALLOW_NETWORK_PROBES` | `false` | Default-deny active probes |\n| `SYSTEMS_MANAGER_MAX_BLOCKING_OPERATIONS` | `2` | Bounded host-operation concurrency |\n| `SYSTEMS_MANAGER_HEALTH_INGEST` | `true` | Enable governed health trend ingestion |\n| `SYSTEMS_MANAGER_HEALTH_AGGREGATE_S` | `3600` | Health trend aggregation window |\n| `SYSTEMS_MANAGER_NODE_REF` | \u2014 | Runtime node alias; only a keyed digest persists |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE` | \u2014 | Optional inline mandatory-verification notification TLS profile |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE_REF` | \u2014 | Runtime reference to the notification TLS profile |\n| `SYSTEMS_MANAGER_MCP_IMAGE_DIGEST` | \u2014 | Required immutable MCP image digest |\n| `SYSTEMS_MANAGER_REPOSITORY_ALLOWLIST_JSON` | `[]` | Approved credential-free repositories |\n| `SYSTEMS_MANAGER_LOCAL_PACKAGE_SHA256_MAP` | `{}` | Approved package paths and digests |\n| `SYSTEMS_MANAGER_COMMAND_TIMEOUT_SECONDS` | `120` | Default command timeout |\n| `SYSTEMS_MANAGER_ENV_METADATA_ALLOWLIST` | \u2014 | Non-sensitive environment names readable as metadata |\n| `SYSTEMS_MANAGER_UV_VERSION` | \u2014 | Exact approved uv release |\n| `SYSTEMS_MANAGER_NVM_COMMIT` | \u2014 | Exact approved NVM commit |\n| `SYSTEMS_MANAGER_NVM_DIR` | \u2014 | NVM directory beneath the managed filesystem root |\n| `ALLOW_UPDATE_ON_K8S` | `false` | Keep Kubernetes lifecycle guard enabled |\n| `MISCTOOL` | `true` | Register base health/readiness tools |\n| `OS_PROVIDERTOOL` | `true` | Register operating-system provider tools |\n| `STORAGE_HEALTHTOOL` | `true` | Register storage health tools |\n| `TRANSPORT` | `stdio` | Local MCP transport |\n| `HOST` | `127.0.0.1` | Loopback bind for HTTP transports |\n| `PORT` | `8000` | Bind port for HTTP transports |\n| `ENABLE_OTEL` | `false` | Enable only with an approved collector |\n\n#### Inherited agent-connector-sdk variables (apply to every connector)\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `MCP_ENABLED_TOOLS` | \u2014 | Comma-separated tool allow-list |\n| `MCP_DISABLED_TOOLS` | \u2014 | Comma-separated tool deny-list |\n| `MCP_ENABLED_TAGS` | \u2014 | Comma-separated tag allow-list |\n| `MCP_DISABLED_TAGS` | \u2014 | Comma-separated tag deny-list |\n| `EUNOMIA_TYPE` | `none` | Authorization mode: `none` \\| `embedded` \\| `remote` |\n| `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | Embedded Eunomia policy file |\n| `EUNOMIA_REMOTE_URL` | \u2014 | Remote Eunomia authorization server URL |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | \u2014 | OTLP collector endpoint |\n| `MCP_CLIENT_AUTH` | \u2014 | Outbound MCP child auth: `oidc-client-credentials` \\| `basic` \\| `none` |\n| `OIDC_CLIENT_ID` | \u2014 | OIDC client id (service-account auth) |\n| `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |\n| `MCP_BASIC_AUTH_USERNAME` | \u2014 | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |\n| `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |\n| `DEBUG` | `False` | Verbose logging |\n| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |\n| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |\n| `PROVIDER` | `openai` | LLM provider for the agent |\n| `MODEL_ID` | `gpt-4o` | Model id for the agent |\n| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |\n\n_51 package + 19 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set \u2014 do not edit._\n<!-- ENV-VARS-TABLE:END -->\n\n## Development and release gates\n\n```bash\npytest -q\nruff check systems_manager tests\nblack --check systems_manager tests\nmkdocs build --strict\npre-commit run --all-files\n```\n\nRun host operations only through mocks during tests. Do not run native builds or live\nhost mutations as a validation shortcut. The source dependency floor is intentionally\n`agent-connector-sdk>=2.0.0`; regenerate and commit a neutral lock only after that release\nis available from the configured package index. Never commit an editable local source\nor a stale dependency resolution.\n\nSee [the documentation](docs/index.md) for installation, deployment, configuration,\nusage, multi-host delegation, and security details.\n\n\n\n<!-- GOVERNED-CAPABILITY:START -->\n## Governed capability contract\n\nThis package ships a compact canonical skill surface with specialist procedures\nkept as referenced workflows. The current MCP tools, skill metadata,\n`connector_manifest.yml`, ontology, mappings, shapes, fixtures, migrations,\ntool-schema fingerprints, and certification metadata form one versioned\ncapability contract. Validate them together; do not rely on stale tool names or\nhistorical per-task skill wrappers.\n\nRuntime endpoints, credentials, certificate trust, tenant identity, retention,\nand observability policy are deployment inputs and are never packaged values.\nSee [Configuration, trust, and privacy](docs/configuration.md) before enabling a\nnetwork transport, connector ingestion, Arbora delegation, or trace export.\n<!-- GOVERNED-CAPABILITY:END -->\n",
1447
1447
  "description_content_type": "text/markdown",
1448
1448
  "author_email": "Project Maintainers <maintainers@users.noreply.github.com>",
1449
1449
  "license": "MIT",
@@ -1458,13 +1458,13 @@
1458
1458
  "Programming Language :: Python :: 3"
1459
1459
  ],
1460
1460
  "requires_dist": [
1461
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15",
1461
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18",
1462
1462
  "pydantic>=2.14.1",
1463
1463
  "psutil>=7.2.2",
1464
1464
  "distro>=1.9.0",
1465
1465
  "requests>=2.34.2",
1466
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"mcp\"",
1467
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"all\"",
1466
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"mcp\"",
1467
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"all\"",
1468
1468
  "pytest>=9.1.1; extra == \"test\"",
1469
1469
  "pytest-asyncio>=1.4.0; extra == \"test\""
1470
1470
  ],
@@ -1481,11 +1481,11 @@
1481
1481
  },
1482
1482
  {
1483
1483
  "download_info": {
1484
- "url": "https://files.pythonhosted.org/packages/d6/7a/3a6e3cf1651bd809f541cbfd669c5d1ede89c7e780ee42bed8b396f44d94/agent_connector_sdk-0.3.15-py3-none-any.whl",
1484
+ "url": "https://files.pythonhosted.org/packages/9d/9c/542f187c014e50cf24171a33d10ed4959c4616fa62a08477981b649407b0/agent_connector_sdk-0.3.18-py3-none-any.whl",
1485
1485
  "archive_info": {
1486
- "hash": "sha256=4f8fad4e0359a8e906db36e0a8220cc3d222958dbd59c991d8a821b46d514b06",
1486
+ "hash": "sha256=7ee79bb2680490e047d25eaa6349b8778f427e2a09870aab6f342b7c8f677eec",
1487
1487
  "hashes": {
1488
- "sha256": "4f8fad4e0359a8e906db36e0a8220cc3d222958dbd59c991d8a821b46d514b06"
1488
+ "sha256": "7ee79bb2680490e047d25eaa6349b8778f427e2a09870aab6f342b7c8f677eec"
1489
1489
  }
1490
1490
  }
1491
1491
  },
@@ -1495,12 +1495,12 @@
1495
1495
  "metadata": {
1496
1496
  "metadata_version": "2.4",
1497
1497
  "name": "agent-connector-sdk",
1498
- "version": "0.3.15",
1498
+ "version": "0.3.18",
1499
1499
  "dynamic": [
1500
1500
  "license-file"
1501
1501
  ],
1502
1502
  "summary": "Connector SDK for the agent-packages fleet: MCP server scaffolding, connector manifests, and typed source/content extension ports",
1503
- "description": "# Agent Connector SDK\n\n<p align=\"center\">\n <img src=\"docs/assets/brands/agent-connector-sdk-logo-v1.png\" alt=\"Agent Connector SDK logo\" width=\"180\">\n</p>\n\n<p align=\"center\">\n <b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>\n <sub>The typed source-integration boundary for MCP services and Epistemic Graph.</sub>\n</p>\n\n[![PyPI - Version](https://img.shields.io/pypi/v/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![Build](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml)\n[![Documentation](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/pages.yml/badge.svg)](https://knuckles-team.github.io/agent-connector-sdk/)\n[![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/forks)\n[![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/Knuckles-Team/agent-connector-sdk)](LICENSE)\n[![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/commits/main)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls)\n[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls?q=is%3Apr+is%3Aclosed)\n[![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/issues)\n[![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![PyPI - Downloads](https://img.shields.io/pypi/dd/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - License](https://img.shields.io/pypi/l/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n\n<p align=\"center\">\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/\">Documentation</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/capabilities/\">Capabilities</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/extension-ports/\">Interfaces</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/status/\">Status</a>\n</p>\n\n---\n\n## Quick Start\n\nCreate a project and install the SDK:\n\n```bash\nuv init --bare demo-connector\ncd demo-connector\nuv add agent-connector-sdk\nuv sync\nuv run connector-sync --help\n```\n\nThe command prints the supervised synchronization options without opening a\nsource session. Continue with the\n[connector tutorial](https://knuckles-team.github.io/agent-connector-sdk/tutorial/)\nto build and run a one-file MCP connector, observe its health response, add\ndeclarative content, certify the live schema, and join source synchronization.\n\n## Overview\n\nAgent Connector SDK is the ecosystem's source-integration boundary. It turns\nvendor APIs and domain tools into secure MCP connectors, transports bounded\nsource evidence into Epistemic Graph, indexes immutable repository snapshots,\nand applies authorized changes back to source systems.\n\nConnector packages retain vendor behavior. The SDK owns transport, lifecycle,\ncertification, and effect execution. Generated Epistemic Graph contracts own\ndurable graph records, checkpoints, content identity, and receipts.\n\nPackage version: 0.3.15.\n\n## Key Capabilities\n\n- Build FastMCP servers with authentication, safe exposure, health, visibility,\n rate limits, change subscriptions, and consistent tool surfaces.\n- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as\n typed MCP content.\n- Extract bounded source pages and advance checkpoints only from matching\n durable Epistemic Graph receipts.\n- Import deterministic ConnectorPack archives without copying graph DTOs or\n digest algorithms into connector packages.\n- Stream authenticated immutable repository snapshots into the generated\n `IndexRepository` boundary without becoming a semantic writer.\n- Govern write-back through dry-run, authorization, source-version checks,\n idempotency, and uncertain-effect reconciliation.\n- Certify extension identity, live MCP schemas, pagination, and safety behavior\n before activation.\n\n## Documentation\n\nStart with [Build the operator's first connector](https://knuckles-team.github.io/agent-connector-sdk/tutorial/),\nthen choose the reference that matches the work:\n\n- [Documentation home](https://knuckles-team.github.io/agent-connector-sdk/)\n- [Capabilities](https://knuckles-team.github.io/agent-connector-sdk/capabilities/)\n- [Architecture](https://knuckles-team.github.io/agent-connector-sdk/architecture/)\n- [Connector servers](https://knuckles-team.github.io/agent-connector-sdk/connector-servers/)\n- [Schema disclosure](https://knuckles-team.github.io/agent-connector-sdk/schema-disclosure/)\n- [Source synchronization](https://knuckles-team.github.io/agent-connector-sdk/connector-sync/)\n- [Repository ingestion](https://knuckles-team.github.io/agent-connector-sdk/repository-ingestion/)\n- [Extension interfaces](https://knuckles-team.github.io/agent-connector-sdk/extension-ports/)\n- [Current status](https://knuckles-team.github.io/agent-connector-sdk/status/)\n\nSibling authorities: [Epistemic Graph](https://knuckles-team.github.io/epistemic-graph/)\nowns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)\nowns authenticated runtime composition.\n\n## Architecture\n\n[![Runtime architecture: people and clients enter through Arbora. Source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n| Boundary | Owned here | Owned elsewhere |\n|---|---|---|\n| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |\n| Source ingest | Discovery, bounded extraction, transport, receipt verification | Epistemic Graph owns mapping, checkpoints, provenance, and commit receipts. |\n| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Epistemic Graph owns indexing, graph projection, and semantic interpretation. |\n| Write-back | Preview, source-version checks, apply, and reconciliation | Epistemic Graph owns change sets, authorization decisions, and durable outcomes. |\n| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |\n\nThe SDK depends directly on `epistemic-graph>=2.27.0`. Generated SourceIngest,\nConnectorPack, IndexRepository, and WriteBack clients and models are the graph\nboundary; the SDK adds no parallel graph contract.\n\n## Contributing\n\nIssues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,\nisolation, and validation rules, and run the affected tests and public-surface\ngates before submitting a change.\n\n## License\n\nAgent Connector SDK is released under the [MIT License](LICENSE).\n",
1503
+ "description": "# Agent Connector SDK\n\n<p align=\"center\">\n <img src=\"docs/assets/brands/agent-connector-sdk-logo-v1.png\" alt=\"Agent Connector SDK logo\" width=\"180\">\n</p>\n\n<p align=\"center\">\n <b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>\n <sub>The typed source-integration boundary for MCP services and Epistemic Graph.</sub>\n</p>\n\n[![PyPI - Version](https://img.shields.io/pypi/v/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![Build](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml)\n[![Documentation](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/pages.yml/badge.svg)](https://knuckles-team.github.io/agent-connector-sdk/)\n[![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/forks)\n[![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/Knuckles-Team/agent-connector-sdk)](LICENSE)\n[![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/commits/main)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls)\n[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls?q=is%3Apr+is%3Aclosed)\n[![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/issues)\n[![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![PyPI - Downloads](https://img.shields.io/pypi/dd/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - License](https://img.shields.io/pypi/l/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n\n<p align=\"center\">\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/\">Documentation</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/capabilities/\">Capabilities</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/extension-ports/\">Interfaces</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/status/\">Status</a>\n</p>\n\n---\n\n## Quick Start\n\nCreate a project and install the SDK:\n\n```bash\nuv init --bare demo-connector\ncd demo-connector\nuv add agent-connector-sdk\nuv sync\nuv run connector-sync --help\n```\n\nThe command prints the supervised synchronization options without opening a\nsource session. Continue with the\n[connector tutorial](https://knuckles-team.github.io/agent-connector-sdk/tutorial/)\nto build and run a one-file MCP connector, observe its health response, add\ndeclarative content, certify the live schema, and join source synchronization.\n\n## Overview\n\nAgent Connector SDK is the ecosystem's source-integration boundary. It turns\nvendor APIs and domain tools into secure MCP connectors, transports bounded\nsource evidence into Epistemic Graph, indexes immutable repository snapshots,\nand applies authorized changes back to source systems.\n\nConnector packages retain vendor behavior. The SDK owns transport, lifecycle,\ncertification, and effect execution. Generated Epistemic Graph contracts own\ndurable graph records, checkpoints, content identity, and receipts.\n\nPackage version: 0.3.18.\n\n## Key Capabilities\n\n- Build FastMCP servers with authentication, safe exposure, health, visibility,\n rate limits, change subscriptions, and consistent tool surfaces.\n- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as\n typed MCP content.\n- Extract bounded source pages and advance checkpoints only from matching\n durable Epistemic Graph receipts.\n- Import deterministic ConnectorPack archives without copying graph DTOs or\n digest algorithms into connector packages.\n- Stream authenticated immutable repository snapshots into the generated\n `IndexRepository` boundary without becoming a semantic writer.\n- Govern write-back through dry-run, authorization, source-version checks,\n idempotency, and uncertain-effect reconciliation.\n- Certify extension identity, live MCP schemas, pagination, and safety behavior\n before activation.\n\n## Documentation\n\nStart with [Build the operator's first connector](https://knuckles-team.github.io/agent-connector-sdk/tutorial/),\nthen choose the reference that matches the work:\n\n- [Documentation home](https://knuckles-team.github.io/agent-connector-sdk/)\n- [Capabilities](https://knuckles-team.github.io/agent-connector-sdk/capabilities/)\n- [Architecture](https://knuckles-team.github.io/agent-connector-sdk/architecture/)\n- [Connector servers](https://knuckles-team.github.io/agent-connector-sdk/connector-servers/)\n- [Schema disclosure](https://knuckles-team.github.io/agent-connector-sdk/schema-disclosure/)\n- [Source synchronization](https://knuckles-team.github.io/agent-connector-sdk/connector-sync/)\n- [Repository ingestion](https://knuckles-team.github.io/agent-connector-sdk/repository-ingestion/)\n- [Extension interfaces](https://knuckles-team.github.io/agent-connector-sdk/extension-ports/)\n- [Current status](https://knuckles-team.github.io/agent-connector-sdk/status/)\n\nSibling authorities: [Epistemic Graph](https://knuckles-team.github.io/epistemic-graph/)\nowns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)\nowns authenticated runtime composition.\n\n## Architecture\n\n[![Runtime architecture: people and clients enter through Arbora. Source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n| Boundary | Owned here | Owned elsewhere |\n|---|---|---|\n| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |\n| Source ingest | Discovery, bounded extraction, transport, receipt verification | Epistemic Graph owns mapping, checkpoints, provenance, and commit receipts. |\n| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Epistemic Graph owns indexing, graph projection, and semantic interpretation. |\n| Write-back | Preview, source-version checks, apply, and reconciliation | Epistemic Graph owns change sets, authorization decisions, and durable outcomes. |\n| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |\n\nThe SDK depends directly on `epistemic-graph>=2.27.0`. Generated SourceIngest,\nConnectorPack, IndexRepository, and WriteBack clients and models are the graph\nboundary; the SDK adds no parallel graph contract.\n\n## Contributing\n\nIssues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,\nisolation, and validation rules, and run the affected tests and public-surface\ngates before submitting a change.\n\n## License\n\nAgent Connector SDK is released under the [MIT License](LICENSE).\n",
1504
1504
  "description_content_type": "text/markdown",
1505
1505
  "author_email": "Repository Maintainers <maintainers@knuckles.team>",
1506
1506
  "license_expression": "MIT",
@@ -6786,11 +6786,11 @@
6786
6786
  "install": [
6787
6787
  {
6788
6788
  "download_info": {
6789
- "url": "file:///tmp/wheel-readiness-de961_ph/systems_manager-2.2.2-py3-none-any.whl",
6789
+ "url": "file:///tmp/wheel-readiness-ls5igx0b/systems_manager-2.2.3-py3-none-any.whl",
6790
6790
  "archive_info": {
6791
- "hash": "sha256=f0d60ab435aed9974db6474f1c0c1e1f6e277a4ffce1fb7e9e47326d9dc10de9",
6791
+ "hash": "sha256=3acc024bbf04f65397b3bf43b0dd1fd52c75bc793c9bac4375e9c62106293449",
6792
6792
  "hashes": {
6793
- "sha256": "f0d60ab435aed9974db6474f1c0c1e1f6e277a4ffce1fb7e9e47326d9dc10de9"
6793
+ "sha256": "3acc024bbf04f65397b3bf43b0dd1fd52c75bc793c9bac4375e9c62106293449"
6794
6794
  }
6795
6795
  }
6796
6796
  },
@@ -6800,12 +6800,12 @@
6800
6800
  "metadata": {
6801
6801
  "metadata_version": "2.4",
6802
6802
  "name": "systems-manager",
6803
- "version": "2.2.2",
6803
+ "version": "2.2.3",
6804
6804
  "dynamic": [
6805
6805
  "license-file"
6806
6806
  ],
6807
6807
  "summary": "Systems Manager will update your system and install/upgrade applications. Additionally, as allow AI to perform these activities as an MCP Server",
6808
- "description": "# systems-manager\n\nVersion: 2.2.2\n\n`systems-manager` is the typed host-operations provider for Agent Connector SDK and\nArbora. It exposes cross-platform package, service, process, network, disk,\nmanaged-file, firewall, physical-storage, Agent OS, and privacy-safe host-ingestion\ncapabilities without exposing a raw command tool.\n\nThe current package requires Python 3.11\u20133.14 and\n`agent-connector-sdk>=2.0.0,<3.0.0`.\n\n## Install and run\n\nInstall only the interface the operator need:\n\n```bash\npip install \"systems-manager[mcp]\"\nsystems-manager-mcp --transport stdio\n```\n\nThe optional extras are:\n\n| Extra | Capability |\n| --- | --- |\n| `mcp` | FastMCP provider runtime |\n| `agent` | Agent server and Logfire integration |\n| `all` | MCP plus agent runtime |\n| `test` | Test dependencies |\n\nFor an ephemeral MCP start:\n\n```bash\nuvx --from \"systems-manager[mcp]\" systems-manager-mcp --transport stdio\n```\n\nThe checked-in `mcp_config.json` is a reference-only client catalog. It contains\n`env://` references and safe deny defaults, never deployment endpoints, credentials,\ncertificate paths, filesystem paths, hostnames, or identities. Project-specific values\nbelong in AgentConfig or the process launcher.\n\n## Security contract\n\n- Network MCP listeners require configured authentication. Non-loopback listeners also\n require direct TLS or a trusted TLS-stop proxy, exact allowed hosts, and the\n current Agent Connector SDK transport checks.\n- Host mutations are denied unless `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS=true` and the\n individual request receives destructive-operation approval.\n- Managed-file writes also require\n `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS=true`.\n- Sensitive reads and active probes have independent default-deny gates.\n- Managed paths are confined beneath an explicit\n `SYSTEMS_MANAGER_FILESYSTEM_ROOT`; there is no working-directory fallback.\n- Raw shell, arbitrary commands, plaintext credentials, model-authored cron creation,\n and compatibility command aliases are not capabilities.\n- Logs and observability are metadata-only. Keep `LANGFUSE_CAPTURE_CONTENT=false`.\n\n## AgentConfig, secrets, and TLS\n\nUse `TLS_PROFILE` / `TLS_PROFILE_REF` with `TLS_PROFILES_REF` for shared checked\noutbound trust. Service-specific profiles such as `OIDC_TLS_PROFILE_REF`,\n`MODEL_TLS_PROFILE_REF`, and `LANGFUSE_TLS_PROFILE_REF` may select entries from the\nsame runtime catalog. Do not hardcode CA paths or verification flags in application\ncode, and do not disable verification for incomplete certificate chains.\n\nOut-of-band BMC health reads consume one runtime secret projection from\n`SYSTEMS_MANAGER_BMC_CREDENTIALS`. AgentConfig resolves the checked `env://` or secret\nreference before start; the provider accepts exactly a JSON object with `host`, `user`,\nand `password`. No secret-store vendor, secret path, token, or credential value is\nembedded in this package.\n\nThe MCP listener's own certificate or trusted-proxy boundary uses the current Agent\nUtilities `MCP_TLS_*` configuration. The optional agent listener uses `SERVER_TLS_*`\nand requires JWT configuration for non-loopback serving.\n\n## MCP tools\n\nThe default `MCP_TOOL_MODE=intent` exposes the small intent-verb surface. Backing\naction-routed tools stay available for governed discovery and on-demand loading. Tool\nand tag filters can further reduce the visible surface.\n\n_Auto-generated from the live MCP server; do not edit between the markers._\n\n<!-- MCP-TOOLS-TABLE:START -->\n\n#### Condensed action-routed tools (`MCP_TOOL_MODE=condensed`)\n\n| MCP Tool | Toggle Env Var | Description |\n|----------|----------------|-------------|\n| `capture_system_snapshot` | `OS_PROVIDERTOOL` | Takes a point-in-time snapshot of the system state (CPU, RAM, Processes). |\n| `get_management_capabilities` | \u2014 | |\n| `get_network_connections` | `OS_PROVIDERTOOL` | Maps active TCP/UDP endpoints directly to owning processes. |\n| `get_process_details` | `OS_PROVIDERTOOL` | Retrieves deep cross-platform process details (threads, modules, memory). |\n| `health_check` | \u2014 | |\n| `list_kernel_modules` | `OS_PROVIDERTOOL` | List loaded drivers/modules (lsmod or driverquery). |\n| `list_services` | `OS_PROVIDERTOOL` | Cross-platform service enumeration (systemctl or Get-Service). |\n| `manage_service` | `OS_PROVIDERTOOL` | Start/Stop/Restart/Enable/Disable services cross-platform. |\n| `query_system_logs` | `OS_PROVIDERTOOL` | Cross-platform log querying (journalctl or Get-WinEvent). |\n| `sm_advanced_operations` | \u2014 | Operations for SSH and specialized managers |\n| `sm_agent_identity_operations` | `IDENTITYTOOL` | Issues or verifies privacy-preserving agent identities. |\n| `sm_agent_scheduler_operations` | `AGENT_HEALTHTOOL` | Manages the cognitive scheduler: get stats, list processes, preempt, or reset quota. |\n| `sm_agent_specialist_operations` | `SPECIALIST_REGISTRYTOOL` | Manages specialist packages: install, uninstall, list, or search. |\n| `sm_agent_watchdog_operations` | `WATCHDOGTOOL` | Manages file watchdog triggers: check file change, list active watchers, or drain triggers. |\n| `sm_cron_operations` | \u2014 | Operations for cron jobs |\n| `sm_disk_operations` | \u2014 | Operations for managing system disks |\n| `sm_file_operations` | \u2014 | Operations for file and log management |\n| `sm_firewall_operations` | \u2014 | Operations for firewall management |\n| `sm_network_operations` | \u2014 | Operations for network analysis |\n| `sm_process_operations` | \u2014 | Operations for managing system processes |\n| `sm_service_operations` | \u2014 | Operations for managing system services |\n| `sm_storage_health` | `STORAGE_HEALTHTOOL` | Physical disk + BMC drive-fault health: SMART (incl. megaraid passthrough), |\n| `sm_system_operations` | \u2014 | System operations for managing packages, system health, and updates |\n| `sm_user_operations` | \u2014 | Operations for user and group management |\n| `start_system_trace` | `OS_PROVIDERTOOL` | Start a kernel-level event trace (ETW on Windows, or strace on Linux). |\n| `stop_system_trace` | `OS_PROVIDERTOOL` | Stop a kernel-level event trace. |\n| `systems_ingest_host` | \u2014 | Ingest a keyed host telemetry projection through the governed ChangeEnvelope boundary as typed HardwareNode, NetworkInterface, and DiskVolume nodes. |\n\n_27 action-routed tool(s) \u00b7 0 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (**`intent` default** \u2014 the six verb-tools, granular set loaded on demand \u00b7 `condensed` action-routed \u00b7 `verbose` 1:1 \u00b7 `both`). Auto-generated \u2014 do not edit._\n<!-- MCP-TOOLS-TABLE:END -->\n\nTypical backing domains include OS/package lifecycle, services, processes, networks,\ndisks, managed files, cron removal, structured firewall rules, storage/BMC diagnostics,\nAgent OS administration, and governed host telemetry ingestion. Discover an action\nschema before calling it; unavailable operations must not be emulated with another\ntool.\n\n## Knowledge-graph ingestion\n\n`systems_ingest_host` reads local typed telemetry and submits an allowlisted projection\nthrough the Agent Connector SDK native governed ingestion boundary. It emits only:\n\n- `HardwareNode`, `NetworkInterface`, and `DiskVolume` nodes;\n- `hasInterface` and `hasVolume` relationships;\n- HMAC-SHA-256 opaque identifiers derived with the deployment-owned\n `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY`.\n\nHostnames, network addresses, hardware addresses, usernames, local paths, credentials,\nand arbitrary extra fields are rejected or excluded. Missing graph authority, invalid\ncontent, and unavailable ingestion fail explicitly; they are not silent no-ops.\n\n## Arbora delegation\n\nHost operations run inside the service's local operating-system boundary. For\nfleet work, Arbora delegates to an authenticated systems-manager service on the target\nboundary. Inventory, endpoints, credentials, TLS profiles, and target aliases remain\nexternal deployment configuration. Persist only opaque, non-personal references.\n\nThe bundled `systems-manager-operations` skill covers every current provider workflow.\nOlder BMC command and NIC-bond script skills were consolidated because those raw-script\nsurfaces are not part of the typed current contract.\n\n## Agent server\n\nInstall the agent extra and start:\n\n```bash\nsystems-manager-agent --help\n```\n\nWorkspace, MCP catalog, and custom-skill paths are accepted only when explicitly\nconfigured and present. There is no packaged-config or current-directory fallback.\nA non-loopback listener requires an explicit allow gate, direct or trusted-proxy TLS,\nJWT issuer/JWKS/audience configuration, and debug mode disabled.\n\n## Environment variables\n\nThe generated table is sourced from the value-free `.env.example` plus the inherited\nAgent Connector SDK contract.\n\n<!-- ENV-VARS-TABLE:START -->\n\n#### Package environment variables\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `SYSTEMS_MANAGER_FILESYSTEM_ROOT` | \u2014 | Required managed filesystem boundary |\n| `SYSTEMS_MANAGER_TEMP_ROOT` | \u2014 | Optional cleanup root beneath the managed boundary |\n| `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY` | secret-injected | Deployment-owned secret, at least 32 bytes |\n| `SYSTEMS_MANAGER_BMC_CREDENTIALS` | \u2014 | Secret-projected JSON with host/user/password |\n| `TLS_PROFILE` | \u2014 | Shared mandatory-verification transport profile |\n| `TLS_PROFILES_REF` | \u2014 | Runtime reference to the transport profile catalog |\n| `LANGFUSE_TLS_PROFILE_REF` | \u2014 | Runtime reference to verified Langfuse trust |\n| `MCP_TOOL_MODE` | `intent` | Current intent-first tool surface |\n| `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS` | `false` | Default-deny host mutations |\n| `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS` | `false` | Default-deny file mutations |\n| `SYSTEMS_MANAGER_ALLOW_SENSITIVE_READS` | `false` | Default-deny sensitive inventory |\n| `SYSTEMS_MANAGER_ALLOW_NETWORK_PROBES` | `false` | Default-deny active probes |\n| `SYSTEMS_MANAGER_MAX_BLOCKING_OPERATIONS` | `2` | Bounded host-operation concurrency |\n| `SYSTEMS_MANAGER_HEALTH_INGEST` | `true` | Enable governed health trend ingestion |\n| `SYSTEMS_MANAGER_HEALTH_AGGREGATE_S` | `3600` | Health trend aggregation window |\n| `SYSTEMS_MANAGER_NODE_REF` | \u2014 | Runtime node alias; only a keyed digest persists |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE` | \u2014 | Optional inline mandatory-verification notification TLS profile |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE_REF` | \u2014 | Runtime reference to the notification TLS profile |\n| `SYSTEMS_MANAGER_MCP_IMAGE_DIGEST` | \u2014 | Required immutable MCP image digest |\n| `SYSTEMS_MANAGER_REPOSITORY_ALLOWLIST_JSON` | `[]` | Approved credential-free repositories |\n| `SYSTEMS_MANAGER_LOCAL_PACKAGE_SHA256_MAP` | `{}` | Approved package paths and digests |\n| `SYSTEMS_MANAGER_COMMAND_TIMEOUT_SECONDS` | `120` | Default command timeout |\n| `SYSTEMS_MANAGER_ENV_METADATA_ALLOWLIST` | \u2014 | Non-sensitive environment names readable as metadata |\n| `SYSTEMS_MANAGER_UV_VERSION` | \u2014 | Exact approved uv release |\n| `SYSTEMS_MANAGER_NVM_COMMIT` | \u2014 | Exact approved NVM commit |\n| `SYSTEMS_MANAGER_NVM_DIR` | \u2014 | NVM directory beneath the managed filesystem root |\n| `ALLOW_UPDATE_ON_K8S` | `false` | Keep Kubernetes lifecycle guard enabled |\n| `MISCTOOL` | `true` | Register base health/readiness tools |\n| `OS_PROVIDERTOOL` | `true` | Register operating-system provider tools |\n| `STORAGE_HEALTHTOOL` | `true` | Register storage health tools |\n| `TRANSPORT` | `stdio` | Local MCP transport |\n| `HOST` | `127.0.0.1` | Loopback bind for HTTP transports |\n| `PORT` | `8000` | Bind port for HTTP transports |\n| `ENABLE_OTEL` | `false` | Enable only with an approved collector |\n\n#### Inherited agent-connector-sdk variables (apply to every connector)\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `MCP_ENABLED_TOOLS` | \u2014 | Comma-separated tool allow-list |\n| `MCP_DISABLED_TOOLS` | \u2014 | Comma-separated tool deny-list |\n| `MCP_ENABLED_TAGS` | \u2014 | Comma-separated tag allow-list |\n| `MCP_DISABLED_TAGS` | \u2014 | Comma-separated tag deny-list |\n| `EUNOMIA_TYPE` | `none` | Authorization mode: `none` \\| `embedded` \\| `remote` |\n| `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | Embedded Eunomia policy file |\n| `EUNOMIA_REMOTE_URL` | \u2014 | Remote Eunomia authorization server URL |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | \u2014 | OTLP collector endpoint |\n| `MCP_CLIENT_AUTH` | \u2014 | Outbound MCP child auth: `oidc-client-credentials` \\| `basic` \\| `none` |\n| `OIDC_CLIENT_ID` | \u2014 | OIDC client id (service-account auth) |\n| `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |\n| `MCP_BASIC_AUTH_USERNAME` | \u2014 | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |\n| `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |\n| `DEBUG` | `False` | Verbose logging |\n| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |\n| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |\n| `PROVIDER` | `openai` | LLM provider for the agent |\n| `MODEL_ID` | `gpt-4o` | Model id for the agent |\n| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |\n\n_51 package + 19 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set \u2014 do not edit._\n<!-- ENV-VARS-TABLE:END -->\n\n## Development and release gates\n\n```bash\npytest -q\nruff check systems_manager tests\nblack --check systems_manager tests\nmkdocs build --strict\npre-commit run --all-files\n```\n\nRun host operations only through mocks during tests. Do not run native builds or live\nhost mutations as a validation shortcut. The source dependency floor is intentionally\n`agent-connector-sdk>=2.0.0`; regenerate and commit a neutral lock only after that release\nis available from the configured package index. Never commit an editable local source\nor a stale dependency resolution.\n\nSee [the documentation](docs/index.md) for installation, deployment, configuration,\nusage, multi-host delegation, and security details.\n\n\n\n<!-- GOVERNED-CAPABILITY:START -->\n## Governed capability contract\n\nThis package ships a compact canonical skill surface with specialist procedures\nkept as referenced workflows. The current MCP tools, skill metadata,\n`connector_manifest.yml`, ontology, mappings, shapes, fixtures, migrations,\ntool-schema fingerprints, and certification metadata form one versioned\ncapability contract. Validate them together; do not rely on stale tool names or\nhistorical per-task skill wrappers.\n\nRuntime endpoints, credentials, certificate trust, tenant identity, retention,\nand observability policy are deployment inputs and are never packaged values.\nSee [Configuration, trust, and privacy](docs/configuration.md) before enabling a\nnetwork transport, connector ingestion, Arbora delegation, or trace export.\n<!-- GOVERNED-CAPABILITY:END -->\n",
6808
+ "description": "# systems-manager\n\nVersion: 2.2.3\n\n`systems-manager` is the typed host-operations provider for Agent Connector SDK and\nArbora. It exposes cross-platform package, service, process, network, disk,\nmanaged-file, firewall, physical-storage, Agent OS, and privacy-safe host-ingestion\ncapabilities without exposing a raw command tool.\n\nThe current package requires Python 3.11\u20133.14 and\n`agent-connector-sdk>=2.0.0,<3.0.0`.\n\n## Install and run\n\nInstall only the interface the operator need:\n\n```bash\npip install \"systems-manager[mcp]\"\nsystems-manager-mcp --transport stdio\n```\n\nThe optional extras are:\n\n| Extra | Capability |\n| --- | --- |\n| `mcp` | FastMCP provider runtime |\n| `agent` | Agent server and Logfire integration |\n| `all` | MCP plus agent runtime |\n| `test` | Test dependencies |\n\nFor an ephemeral MCP start:\n\n```bash\nuvx --from \"systems-manager[mcp]\" systems-manager-mcp --transport stdio\n```\n\nThe checked-in `mcp_config.json` is a reference-only client catalog. It contains\n`env://` references and safe deny defaults, never deployment endpoints, credentials,\ncertificate paths, filesystem paths, hostnames, or identities. Project-specific values\nbelong in AgentConfig or the process launcher.\n\n## Security contract\n\n- Network MCP listeners require configured authentication. Non-loopback listeners also\n require direct TLS or a trusted TLS-stop proxy, exact allowed hosts, and the\n current Agent Connector SDK transport checks.\n- Host mutations are denied unless `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS=true` and the\n individual request receives destructive-operation approval.\n- Managed-file writes also require\n `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS=true`.\n- Sensitive reads and active probes have independent default-deny gates.\n- Managed paths are confined beneath an explicit\n `SYSTEMS_MANAGER_FILESYSTEM_ROOT`; there is no working-directory fallback.\n- Raw shell, arbitrary commands, plaintext credentials, model-authored cron creation,\n and compatibility command aliases are not capabilities.\n- Logs and observability are metadata-only. Keep `LANGFUSE_CAPTURE_CONTENT=false`.\n\n## AgentConfig, secrets, and TLS\n\nUse `TLS_PROFILE` / `TLS_PROFILE_REF` with `TLS_PROFILES_REF` for shared checked\noutbound trust. Service-specific profiles such as `OIDC_TLS_PROFILE_REF`,\n`MODEL_TLS_PROFILE_REF`, and `LANGFUSE_TLS_PROFILE_REF` may select entries from the\nsame runtime catalog. Do not hardcode CA paths or verification flags in application\ncode, and do not disable verification for incomplete certificate chains.\n\nOut-of-band BMC health reads consume one runtime secret projection from\n`SYSTEMS_MANAGER_BMC_CREDENTIALS`. AgentConfig resolves the checked `env://` or secret\nreference before start; the provider accepts exactly a JSON object with `host`, `user`,\nand `password`. No secret-store vendor, secret path, token, or credential value is\nembedded in this package.\n\nThe MCP listener's own certificate or trusted-proxy boundary uses the current Agent\nUtilities `MCP_TLS_*` configuration. The optional agent listener uses `SERVER_TLS_*`\nand requires JWT configuration for non-loopback serving.\n\n## MCP tools\n\nThe default `MCP_TOOL_MODE=intent` exposes the small intent-verb surface. Backing\naction-routed tools stay available for governed discovery and on-demand loading. Tool\nand tag filters can further reduce the visible surface.\n\n_Auto-generated from the live MCP server; do not edit between the markers._\n\n<!-- MCP-TOOLS-TABLE:START -->\n\n#### Condensed action-routed tools (`MCP_TOOL_MODE=condensed`)\n\n| MCP Tool | Toggle Env Var | Description |\n|----------|----------------|-------------|\n| `capture_system_snapshot` | `OS_PROVIDERTOOL` | Takes a point-in-time snapshot of the system state (CPU, RAM, Processes). |\n| `get_management_capabilities` | \u2014 | |\n| `get_network_connections` | `OS_PROVIDERTOOL` | Maps active TCP/UDP endpoints directly to owning processes. |\n| `get_process_details` | `OS_PROVIDERTOOL` | Retrieves deep cross-platform process details (threads, modules, memory). |\n| `health_check` | \u2014 | |\n| `list_kernel_modules` | `OS_PROVIDERTOOL` | List loaded drivers/modules (lsmod or driverquery). |\n| `list_services` | `OS_PROVIDERTOOL` | Cross-platform service enumeration (systemctl or Get-Service). |\n| `manage_service` | `OS_PROVIDERTOOL` | Start/Stop/Restart/Enable/Disable services cross-platform. |\n| `query_system_logs` | `OS_PROVIDERTOOL` | Cross-platform log querying (journalctl or Get-WinEvent). |\n| `sm_advanced_operations` | \u2014 | Operations for SSH and specialized managers |\n| `sm_agent_identity_operations` | `IDENTITYTOOL` | Issues or verifies privacy-preserving agent identities. |\n| `sm_agent_scheduler_operations` | `AGENT_HEALTHTOOL` | Manages the cognitive scheduler: get stats, list processes, preempt, or reset quota. |\n| `sm_agent_specialist_operations` | `SPECIALIST_REGISTRYTOOL` | Manages specialist packages: install, uninstall, list, or search. |\n| `sm_agent_watchdog_operations` | `WATCHDOGTOOL` | Manages file watchdog triggers: check file change, list active watchers, or drain triggers. |\n| `sm_cron_operations` | \u2014 | Operations for cron jobs |\n| `sm_disk_operations` | \u2014 | Operations for managing system disks |\n| `sm_file_operations` | \u2014 | Operations for file and log management |\n| `sm_firewall_operations` | \u2014 | Operations for firewall management |\n| `sm_network_operations` | \u2014 | Operations for network analysis |\n| `sm_process_operations` | \u2014 | Operations for managing system processes |\n| `sm_service_operations` | \u2014 | Operations for managing system services |\n| `sm_storage_health` | `STORAGE_HEALTHTOOL` | Physical disk + BMC drive-fault health: SMART (incl. megaraid passthrough), |\n| `sm_system_operations` | \u2014 | System operations for managing packages, system health, and updates |\n| `sm_user_operations` | \u2014 | Operations for user and group management |\n| `start_system_trace` | `OS_PROVIDERTOOL` | Start a kernel-level event trace (ETW on Windows, or strace on Linux). |\n| `stop_system_trace` | `OS_PROVIDERTOOL` | Stop a kernel-level event trace. |\n| `systems_ingest_host` | \u2014 | Ingest a keyed host telemetry projection through the governed ChangeEnvelope boundary as typed HardwareNode, NetworkInterface, and DiskVolume nodes. |\n\n_27 action-routed tool(s) \u00b7 0 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (**`intent` default** \u2014 the six verb-tools, granular set loaded on demand \u00b7 `condensed` action-routed \u00b7 `verbose` 1:1 \u00b7 `both`). Auto-generated \u2014 do not edit._\n<!-- MCP-TOOLS-TABLE:END -->\n\nTypical backing domains include OS/package lifecycle, services, processes, networks,\ndisks, managed files, cron removal, structured firewall rules, storage/BMC diagnostics,\nAgent OS administration, and governed host telemetry ingestion. Discover an action\nschema before calling it; unavailable operations must not be emulated with another\ntool.\n\n## Knowledge-graph ingestion\n\n`systems_ingest_host` reads local typed telemetry and submits an allowlisted projection\nthrough the Agent Connector SDK native governed ingestion boundary. It emits only:\n\n- `HardwareNode`, `NetworkInterface`, and `DiskVolume` nodes;\n- `hasInterface` and `hasVolume` relationships;\n- HMAC-SHA-256 opaque identifiers derived with the deployment-owned\n `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY`.\n\nHostnames, network addresses, hardware addresses, usernames, local paths, credentials,\nand arbitrary extra fields are rejected or excluded. Missing graph authority, invalid\ncontent, and unavailable ingestion fail explicitly; they are not silent no-ops.\n\n## Arbora delegation\n\nHost operations run inside the service's local operating-system boundary. For\nfleet work, Arbora delegates to an authenticated systems-manager service on the target\nboundary. Inventory, endpoints, credentials, TLS profiles, and target aliases remain\nexternal deployment configuration. Persist only opaque, non-personal references.\n\nThe bundled `systems-manager-operations` skill covers every current provider workflow.\nOlder BMC command and NIC-bond script skills were consolidated because those raw-script\nsurfaces are not part of the typed current contract.\n\n## Agent server\n\nInstall the agent extra and start:\n\n```bash\nsystems-manager-agent --help\n```\n\nWorkspace, MCP catalog, and custom-skill paths are accepted only when explicitly\nconfigured and present. There is no packaged-config or current-directory fallback.\nA non-loopback listener requires an explicit allow gate, direct or trusted-proxy TLS,\nJWT issuer/JWKS/audience configuration, and debug mode disabled.\n\n## Environment variables\n\nThe generated table is sourced from the value-free `.env.example` plus the inherited\nAgent Connector SDK contract.\n\n<!-- ENV-VARS-TABLE:START -->\n\n#### Package environment variables\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `SYSTEMS_MANAGER_FILESYSTEM_ROOT` | \u2014 | Required managed filesystem boundary |\n| `SYSTEMS_MANAGER_TEMP_ROOT` | \u2014 | Optional cleanup root beneath the managed boundary |\n| `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY` | secret-injected | Deployment-owned secret, at least 32 bytes |\n| `SYSTEMS_MANAGER_BMC_CREDENTIALS` | \u2014 | Secret-projected JSON with host/user/password |\n| `TLS_PROFILE` | \u2014 | Shared mandatory-verification transport profile |\n| `TLS_PROFILES_REF` | \u2014 | Runtime reference to the transport profile catalog |\n| `LANGFUSE_TLS_PROFILE_REF` | \u2014 | Runtime reference to verified Langfuse trust |\n| `MCP_TOOL_MODE` | `intent` | Current intent-first tool surface |\n| `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS` | `false` | Default-deny host mutations |\n| `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS` | `false` | Default-deny file mutations |\n| `SYSTEMS_MANAGER_ALLOW_SENSITIVE_READS` | `false` | Default-deny sensitive inventory |\n| `SYSTEMS_MANAGER_ALLOW_NETWORK_PROBES` | `false` | Default-deny active probes |\n| `SYSTEMS_MANAGER_MAX_BLOCKING_OPERATIONS` | `2` | Bounded host-operation concurrency |\n| `SYSTEMS_MANAGER_HEALTH_INGEST` | `true` | Enable governed health trend ingestion |\n| `SYSTEMS_MANAGER_HEALTH_AGGREGATE_S` | `3600` | Health trend aggregation window |\n| `SYSTEMS_MANAGER_NODE_REF` | \u2014 | Runtime node alias; only a keyed digest persists |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE` | \u2014 | Optional inline mandatory-verification notification TLS profile |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE_REF` | \u2014 | Runtime reference to the notification TLS profile |\n| `SYSTEMS_MANAGER_MCP_IMAGE_DIGEST` | \u2014 | Required immutable MCP image digest |\n| `SYSTEMS_MANAGER_REPOSITORY_ALLOWLIST_JSON` | `[]` | Approved credential-free repositories |\n| `SYSTEMS_MANAGER_LOCAL_PACKAGE_SHA256_MAP` | `{}` | Approved package paths and digests |\n| `SYSTEMS_MANAGER_COMMAND_TIMEOUT_SECONDS` | `120` | Default command timeout |\n| `SYSTEMS_MANAGER_ENV_METADATA_ALLOWLIST` | \u2014 | Non-sensitive environment names readable as metadata |\n| `SYSTEMS_MANAGER_UV_VERSION` | \u2014 | Exact approved uv release |\n| `SYSTEMS_MANAGER_NVM_COMMIT` | \u2014 | Exact approved NVM commit |\n| `SYSTEMS_MANAGER_NVM_DIR` | \u2014 | NVM directory beneath the managed filesystem root |\n| `ALLOW_UPDATE_ON_K8S` | `false` | Keep Kubernetes lifecycle guard enabled |\n| `MISCTOOL` | `true` | Register base health/readiness tools |\n| `OS_PROVIDERTOOL` | `true` | Register operating-system provider tools |\n| `STORAGE_HEALTHTOOL` | `true` | Register storage health tools |\n| `TRANSPORT` | `stdio` | Local MCP transport |\n| `HOST` | `127.0.0.1` | Loopback bind for HTTP transports |\n| `PORT` | `8000` | Bind port for HTTP transports |\n| `ENABLE_OTEL` | `false` | Enable only with an approved collector |\n\n#### Inherited agent-connector-sdk variables (apply to every connector)\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `MCP_ENABLED_TOOLS` | \u2014 | Comma-separated tool allow-list |\n| `MCP_DISABLED_TOOLS` | \u2014 | Comma-separated tool deny-list |\n| `MCP_ENABLED_TAGS` | \u2014 | Comma-separated tag allow-list |\n| `MCP_DISABLED_TAGS` | \u2014 | Comma-separated tag deny-list |\n| `EUNOMIA_TYPE` | `none` | Authorization mode: `none` \\| `embedded` \\| `remote` |\n| `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | Embedded Eunomia policy file |\n| `EUNOMIA_REMOTE_URL` | \u2014 | Remote Eunomia authorization server URL |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | \u2014 | OTLP collector endpoint |\n| `MCP_CLIENT_AUTH` | \u2014 | Outbound MCP child auth: `oidc-client-credentials` \\| `basic` \\| `none` |\n| `OIDC_CLIENT_ID` | \u2014 | OIDC client id (service-account auth) |\n| `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |\n| `MCP_BASIC_AUTH_USERNAME` | \u2014 | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |\n| `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |\n| `DEBUG` | `False` | Verbose logging |\n| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |\n| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |\n| `PROVIDER` | `openai` | LLM provider for the agent |\n| `MODEL_ID` | `gpt-4o` | Model id for the agent |\n| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |\n\n_51 package + 19 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set \u2014 do not edit._\n<!-- ENV-VARS-TABLE:END -->\n\n## Development and release gates\n\n```bash\npytest -q\nruff check systems_manager tests\nblack --check systems_manager tests\nmkdocs build --strict\npre-commit run --all-files\n```\n\nRun host operations only through mocks during tests. Do not run native builds or live\nhost mutations as a validation shortcut. The source dependency floor is intentionally\n`agent-connector-sdk>=2.0.0`; regenerate and commit a neutral lock only after that release\nis available from the configured package index. Never commit an editable local source\nor a stale dependency resolution.\n\nSee [the documentation](docs/index.md) for installation, deployment, configuration,\nusage, multi-host delegation, and security details.\n\n\n\n<!-- GOVERNED-CAPABILITY:START -->\n## Governed capability contract\n\nThis package ships a compact canonical skill surface with specialist procedures\nkept as referenced workflows. The current MCP tools, skill metadata,\n`connector_manifest.yml`, ontology, mappings, shapes, fixtures, migrations,\ntool-schema fingerprints, and certification metadata form one versioned\ncapability contract. Validate them together; do not rely on stale tool names or\nhistorical per-task skill wrappers.\n\nRuntime endpoints, credentials, certificate trust, tenant identity, retention,\nand observability policy are deployment inputs and are never packaged values.\nSee [Configuration, trust, and privacy](docs/configuration.md) before enabling a\nnetwork transport, connector ingestion, Arbora delegation, or trace export.\n<!-- GOVERNED-CAPABILITY:END -->\n",
6809
6809
  "description_content_type": "text/markdown",
6810
6810
  "author_email": "Project Maintainers <maintainers@users.noreply.github.com>",
6811
6811
  "license": "MIT",
@@ -6820,13 +6820,13 @@
6820
6820
  "Programming Language :: Python :: 3"
6821
6821
  ],
6822
6822
  "requires_dist": [
6823
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15",
6823
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18",
6824
6824
  "pydantic>=2.14.1",
6825
6825
  "psutil>=7.2.2",
6826
6826
  "distro>=1.9.0",
6827
6827
  "requests>=2.34.2",
6828
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"mcp\"",
6829
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"all\"",
6828
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"mcp\"",
6829
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"all\"",
6830
6830
  "pytest>=9.1.1; extra == \"test\"",
6831
6831
  "pytest-asyncio>=1.4.0; extra == \"test\""
6832
6832
  ],
@@ -6840,11 +6840,11 @@
6840
6840
  },
6841
6841
  {
6842
6842
  "download_info": {
6843
- "url": "https://files.pythonhosted.org/packages/d6/7a/3a6e3cf1651bd809f541cbfd669c5d1ede89c7e780ee42bed8b396f44d94/agent_connector_sdk-0.3.15-py3-none-any.whl",
6843
+ "url": "https://files.pythonhosted.org/packages/9d/9c/542f187c014e50cf24171a33d10ed4959c4616fa62a08477981b649407b0/agent_connector_sdk-0.3.18-py3-none-any.whl",
6844
6844
  "archive_info": {
6845
- "hash": "sha256=4f8fad4e0359a8e906db36e0a8220cc3d222958dbd59c991d8a821b46d514b06",
6845
+ "hash": "sha256=7ee79bb2680490e047d25eaa6349b8778f427e2a09870aab6f342b7c8f677eec",
6846
6846
  "hashes": {
6847
- "sha256": "4f8fad4e0359a8e906db36e0a8220cc3d222958dbd59c991d8a821b46d514b06"
6847
+ "sha256": "7ee79bb2680490e047d25eaa6349b8778f427e2a09870aab6f342b7c8f677eec"
6848
6848
  }
6849
6849
  }
6850
6850
  },
@@ -6854,12 +6854,12 @@
6854
6854
  "metadata": {
6855
6855
  "metadata_version": "2.4",
6856
6856
  "name": "agent-connector-sdk",
6857
- "version": "0.3.15",
6857
+ "version": "0.3.18",
6858
6858
  "dynamic": [
6859
6859
  "license-file"
6860
6860
  ],
6861
6861
  "summary": "Connector SDK for the agent-packages fleet: MCP server scaffolding, connector manifests, and typed source/content extension ports",
6862
- "description": "# Agent Connector SDK\n\n<p align=\"center\">\n <img src=\"docs/assets/brands/agent-connector-sdk-logo-v1.png\" alt=\"Agent Connector SDK logo\" width=\"180\">\n</p>\n\n<p align=\"center\">\n <b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>\n <sub>The typed source-integration boundary for MCP services and Epistemic Graph.</sub>\n</p>\n\n[![PyPI - Version](https://img.shields.io/pypi/v/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![Build](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml)\n[![Documentation](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/pages.yml/badge.svg)](https://knuckles-team.github.io/agent-connector-sdk/)\n[![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/forks)\n[![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/Knuckles-Team/agent-connector-sdk)](LICENSE)\n[![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/commits/main)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls)\n[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls?q=is%3Apr+is%3Aclosed)\n[![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/issues)\n[![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![PyPI - Downloads](https://img.shields.io/pypi/dd/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - License](https://img.shields.io/pypi/l/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n\n<p align=\"center\">\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/\">Documentation</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/capabilities/\">Capabilities</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/extension-ports/\">Interfaces</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/status/\">Status</a>\n</p>\n\n---\n\n## Quick Start\n\nCreate a project and install the SDK:\n\n```bash\nuv init --bare demo-connector\ncd demo-connector\nuv add agent-connector-sdk\nuv sync\nuv run connector-sync --help\n```\n\nThe command prints the supervised synchronization options without opening a\nsource session. Continue with the\n[connector tutorial](https://knuckles-team.github.io/agent-connector-sdk/tutorial/)\nto build and run a one-file MCP connector, observe its health response, add\ndeclarative content, certify the live schema, and join source synchronization.\n\n## Overview\n\nAgent Connector SDK is the ecosystem's source-integration boundary. It turns\nvendor APIs and domain tools into secure MCP connectors, transports bounded\nsource evidence into Epistemic Graph, indexes immutable repository snapshots,\nand applies authorized changes back to source systems.\n\nConnector packages retain vendor behavior. The SDK owns transport, lifecycle,\ncertification, and effect execution. Generated Epistemic Graph contracts own\ndurable graph records, checkpoints, content identity, and receipts.\n\nPackage version: 0.3.15.\n\n## Key Capabilities\n\n- Build FastMCP servers with authentication, safe exposure, health, visibility,\n rate limits, change subscriptions, and consistent tool surfaces.\n- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as\n typed MCP content.\n- Extract bounded source pages and advance checkpoints only from matching\n durable Epistemic Graph receipts.\n- Import deterministic ConnectorPack archives without copying graph DTOs or\n digest algorithms into connector packages.\n- Stream authenticated immutable repository snapshots into the generated\n `IndexRepository` boundary without becoming a semantic writer.\n- Govern write-back through dry-run, authorization, source-version checks,\n idempotency, and uncertain-effect reconciliation.\n- Certify extension identity, live MCP schemas, pagination, and safety behavior\n before activation.\n\n## Documentation\n\nStart with [Build the operator's first connector](https://knuckles-team.github.io/agent-connector-sdk/tutorial/),\nthen choose the reference that matches the work:\n\n- [Documentation home](https://knuckles-team.github.io/agent-connector-sdk/)\n- [Capabilities](https://knuckles-team.github.io/agent-connector-sdk/capabilities/)\n- [Architecture](https://knuckles-team.github.io/agent-connector-sdk/architecture/)\n- [Connector servers](https://knuckles-team.github.io/agent-connector-sdk/connector-servers/)\n- [Schema disclosure](https://knuckles-team.github.io/agent-connector-sdk/schema-disclosure/)\n- [Source synchronization](https://knuckles-team.github.io/agent-connector-sdk/connector-sync/)\n- [Repository ingestion](https://knuckles-team.github.io/agent-connector-sdk/repository-ingestion/)\n- [Extension interfaces](https://knuckles-team.github.io/agent-connector-sdk/extension-ports/)\n- [Current status](https://knuckles-team.github.io/agent-connector-sdk/status/)\n\nSibling authorities: [Epistemic Graph](https://knuckles-team.github.io/epistemic-graph/)\nowns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)\nowns authenticated runtime composition.\n\n## Architecture\n\n[![Runtime architecture: people and clients enter through Arbora. Source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n| Boundary | Owned here | Owned elsewhere |\n|---|---|---|\n| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |\n| Source ingest | Discovery, bounded extraction, transport, receipt verification | Epistemic Graph owns mapping, checkpoints, provenance, and commit receipts. |\n| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Epistemic Graph owns indexing, graph projection, and semantic interpretation. |\n| Write-back | Preview, source-version checks, apply, and reconciliation | Epistemic Graph owns change sets, authorization decisions, and durable outcomes. |\n| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |\n\nThe SDK depends directly on `epistemic-graph>=2.27.0`. Generated SourceIngest,\nConnectorPack, IndexRepository, and WriteBack clients and models are the graph\nboundary; the SDK adds no parallel graph contract.\n\n## Contributing\n\nIssues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,\nisolation, and validation rules, and run the affected tests and public-surface\ngates before submitting a change.\n\n## License\n\nAgent Connector SDK is released under the [MIT License](LICENSE).\n",
6862
+ "description": "# Agent Connector SDK\n\n<p align=\"center\">\n <img src=\"docs/assets/brands/agent-connector-sdk-logo-v1.png\" alt=\"Agent Connector SDK logo\" width=\"180\">\n</p>\n\n<p align=\"center\">\n <b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>\n <sub>The typed source-integration boundary for MCP services and Epistemic Graph.</sub>\n</p>\n\n[![PyPI - Version](https://img.shields.io/pypi/v/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![Build](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml)\n[![Documentation](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/pages.yml/badge.svg)](https://knuckles-team.github.io/agent-connector-sdk/)\n[![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/forks)\n[![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/Knuckles-Team/agent-connector-sdk)](LICENSE)\n[![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/commits/main)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls)\n[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls?q=is%3Apr+is%3Aclosed)\n[![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/issues)\n[![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![PyPI - Downloads](https://img.shields.io/pypi/dd/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - License](https://img.shields.io/pypi/l/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n\n<p align=\"center\">\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/\">Documentation</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/capabilities/\">Capabilities</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/extension-ports/\">Interfaces</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/status/\">Status</a>\n</p>\n\n---\n\n## Quick Start\n\nCreate a project and install the SDK:\n\n```bash\nuv init --bare demo-connector\ncd demo-connector\nuv add agent-connector-sdk\nuv sync\nuv run connector-sync --help\n```\n\nThe command prints the supervised synchronization options without opening a\nsource session. Continue with the\n[connector tutorial](https://knuckles-team.github.io/agent-connector-sdk/tutorial/)\nto build and run a one-file MCP connector, observe its health response, add\ndeclarative content, certify the live schema, and join source synchronization.\n\n## Overview\n\nAgent Connector SDK is the ecosystem's source-integration boundary. It turns\nvendor APIs and domain tools into secure MCP connectors, transports bounded\nsource evidence into Epistemic Graph, indexes immutable repository snapshots,\nand applies authorized changes back to source systems.\n\nConnector packages retain vendor behavior. The SDK owns transport, lifecycle,\ncertification, and effect execution. Generated Epistemic Graph contracts own\ndurable graph records, checkpoints, content identity, and receipts.\n\nPackage version: 0.3.18.\n\n## Key Capabilities\n\n- Build FastMCP servers with authentication, safe exposure, health, visibility,\n rate limits, change subscriptions, and consistent tool surfaces.\n- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as\n typed MCP content.\n- Extract bounded source pages and advance checkpoints only from matching\n durable Epistemic Graph receipts.\n- Import deterministic ConnectorPack archives without copying graph DTOs or\n digest algorithms into connector packages.\n- Stream authenticated immutable repository snapshots into the generated\n `IndexRepository` boundary without becoming a semantic writer.\n- Govern write-back through dry-run, authorization, source-version checks,\n idempotency, and uncertain-effect reconciliation.\n- Certify extension identity, live MCP schemas, pagination, and safety behavior\n before activation.\n\n## Documentation\n\nStart with [Build the operator's first connector](https://knuckles-team.github.io/agent-connector-sdk/tutorial/),\nthen choose the reference that matches the work:\n\n- [Documentation home](https://knuckles-team.github.io/agent-connector-sdk/)\n- [Capabilities](https://knuckles-team.github.io/agent-connector-sdk/capabilities/)\n- [Architecture](https://knuckles-team.github.io/agent-connector-sdk/architecture/)\n- [Connector servers](https://knuckles-team.github.io/agent-connector-sdk/connector-servers/)\n- [Schema disclosure](https://knuckles-team.github.io/agent-connector-sdk/schema-disclosure/)\n- [Source synchronization](https://knuckles-team.github.io/agent-connector-sdk/connector-sync/)\n- [Repository ingestion](https://knuckles-team.github.io/agent-connector-sdk/repository-ingestion/)\n- [Extension interfaces](https://knuckles-team.github.io/agent-connector-sdk/extension-ports/)\n- [Current status](https://knuckles-team.github.io/agent-connector-sdk/status/)\n\nSibling authorities: [Epistemic Graph](https://knuckles-team.github.io/epistemic-graph/)\nowns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)\nowns authenticated runtime composition.\n\n## Architecture\n\n[![Runtime architecture: people and clients enter through Arbora. Source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n| Boundary | Owned here | Owned elsewhere |\n|---|---|---|\n| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |\n| Source ingest | Discovery, bounded extraction, transport, receipt verification | Epistemic Graph owns mapping, checkpoints, provenance, and commit receipts. |\n| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Epistemic Graph owns indexing, graph projection, and semantic interpretation. |\n| Write-back | Preview, source-version checks, apply, and reconciliation | Epistemic Graph owns change sets, authorization decisions, and durable outcomes. |\n| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |\n\nThe SDK depends directly on `epistemic-graph>=2.27.0`. Generated SourceIngest,\nConnectorPack, IndexRepository, and WriteBack clients and models are the graph\nboundary; the SDK adds no parallel graph contract.\n\n## Contributing\n\nIssues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,\nisolation, and validation rules, and run the affected tests and public-surface\ngates before submitting a change.\n\n## License\n\nAgent Connector SDK is released under the [MIT License](LICENSE).\n",
6863
6863
  "description_content_type": "text/markdown",
6864
6864
  "author_email": "Repository Maintainers <maintainers@knuckles.team>",
6865
6865
  "license_expression": "MIT",
@@ -12145,11 +12145,11 @@
12145
12145
  "install": [
12146
12146
  {
12147
12147
  "download_info": {
12148
- "url": "file:///tmp/wheel-readiness-de961_ph/systems_manager-2.2.2-py3-none-any.whl",
12148
+ "url": "file:///tmp/wheel-readiness-ls5igx0b/systems_manager-2.2.3-py3-none-any.whl",
12149
12149
  "archive_info": {
12150
- "hash": "sha256=f0d60ab435aed9974db6474f1c0c1e1f6e277a4ffce1fb7e9e47326d9dc10de9",
12150
+ "hash": "sha256=3acc024bbf04f65397b3bf43b0dd1fd52c75bc793c9bac4375e9c62106293449",
12151
12151
  "hashes": {
12152
- "sha256": "f0d60ab435aed9974db6474f1c0c1e1f6e277a4ffce1fb7e9e47326d9dc10de9"
12152
+ "sha256": "3acc024bbf04f65397b3bf43b0dd1fd52c75bc793c9bac4375e9c62106293449"
12153
12153
  }
12154
12154
  }
12155
12155
  },
@@ -12159,12 +12159,12 @@
12159
12159
  "metadata": {
12160
12160
  "metadata_version": "2.4",
12161
12161
  "name": "systems-manager",
12162
- "version": "2.2.2",
12162
+ "version": "2.2.3",
12163
12163
  "dynamic": [
12164
12164
  "license-file"
12165
12165
  ],
12166
12166
  "summary": "Systems Manager will update your system and install/upgrade applications. Additionally, as allow AI to perform these activities as an MCP Server",
12167
- "description": "# systems-manager\n\nVersion: 2.2.2\n\n`systems-manager` is the typed host-operations provider for Agent Connector SDK and\nArbora. It exposes cross-platform package, service, process, network, disk,\nmanaged-file, firewall, physical-storage, Agent OS, and privacy-safe host-ingestion\ncapabilities without exposing a raw command tool.\n\nThe current package requires Python 3.11\u20133.14 and\n`agent-connector-sdk>=2.0.0,<3.0.0`.\n\n## Install and run\n\nInstall only the interface the operator need:\n\n```bash\npip install \"systems-manager[mcp]\"\nsystems-manager-mcp --transport stdio\n```\n\nThe optional extras are:\n\n| Extra | Capability |\n| --- | --- |\n| `mcp` | FastMCP provider runtime |\n| `agent` | Agent server and Logfire integration |\n| `all` | MCP plus agent runtime |\n| `test` | Test dependencies |\n\nFor an ephemeral MCP start:\n\n```bash\nuvx --from \"systems-manager[mcp]\" systems-manager-mcp --transport stdio\n```\n\nThe checked-in `mcp_config.json` is a reference-only client catalog. It contains\n`env://` references and safe deny defaults, never deployment endpoints, credentials,\ncertificate paths, filesystem paths, hostnames, or identities. Project-specific values\nbelong in AgentConfig or the process launcher.\n\n## Security contract\n\n- Network MCP listeners require configured authentication. Non-loopback listeners also\n require direct TLS or a trusted TLS-stop proxy, exact allowed hosts, and the\n current Agent Connector SDK transport checks.\n- Host mutations are denied unless `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS=true` and the\n individual request receives destructive-operation approval.\n- Managed-file writes also require\n `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS=true`.\n- Sensitive reads and active probes have independent default-deny gates.\n- Managed paths are confined beneath an explicit\n `SYSTEMS_MANAGER_FILESYSTEM_ROOT`; there is no working-directory fallback.\n- Raw shell, arbitrary commands, plaintext credentials, model-authored cron creation,\n and compatibility command aliases are not capabilities.\n- Logs and observability are metadata-only. Keep `LANGFUSE_CAPTURE_CONTENT=false`.\n\n## AgentConfig, secrets, and TLS\n\nUse `TLS_PROFILE` / `TLS_PROFILE_REF` with `TLS_PROFILES_REF` for shared checked\noutbound trust. Service-specific profiles such as `OIDC_TLS_PROFILE_REF`,\n`MODEL_TLS_PROFILE_REF`, and `LANGFUSE_TLS_PROFILE_REF` may select entries from the\nsame runtime catalog. Do not hardcode CA paths or verification flags in application\ncode, and do not disable verification for incomplete certificate chains.\n\nOut-of-band BMC health reads consume one runtime secret projection from\n`SYSTEMS_MANAGER_BMC_CREDENTIALS`. AgentConfig resolves the checked `env://` or secret\nreference before start; the provider accepts exactly a JSON object with `host`, `user`,\nand `password`. No secret-store vendor, secret path, token, or credential value is\nembedded in this package.\n\nThe MCP listener's own certificate or trusted-proxy boundary uses the current Agent\nUtilities `MCP_TLS_*` configuration. The optional agent listener uses `SERVER_TLS_*`\nand requires JWT configuration for non-loopback serving.\n\n## MCP tools\n\nThe default `MCP_TOOL_MODE=intent` exposes the small intent-verb surface. Backing\naction-routed tools stay available for governed discovery and on-demand loading. Tool\nand tag filters can further reduce the visible surface.\n\n_Auto-generated from the live MCP server; do not edit between the markers._\n\n<!-- MCP-TOOLS-TABLE:START -->\n\n#### Condensed action-routed tools (`MCP_TOOL_MODE=condensed`)\n\n| MCP Tool | Toggle Env Var | Description |\n|----------|----------------|-------------|\n| `capture_system_snapshot` | `OS_PROVIDERTOOL` | Takes a point-in-time snapshot of the system state (CPU, RAM, Processes). |\n| `get_management_capabilities` | \u2014 | |\n| `get_network_connections` | `OS_PROVIDERTOOL` | Maps active TCP/UDP endpoints directly to owning processes. |\n| `get_process_details` | `OS_PROVIDERTOOL` | Retrieves deep cross-platform process details (threads, modules, memory). |\n| `health_check` | \u2014 | |\n| `list_kernel_modules` | `OS_PROVIDERTOOL` | List loaded drivers/modules (lsmod or driverquery). |\n| `list_services` | `OS_PROVIDERTOOL` | Cross-platform service enumeration (systemctl or Get-Service). |\n| `manage_service` | `OS_PROVIDERTOOL` | Start/Stop/Restart/Enable/Disable services cross-platform. |\n| `query_system_logs` | `OS_PROVIDERTOOL` | Cross-platform log querying (journalctl or Get-WinEvent). |\n| `sm_advanced_operations` | \u2014 | Operations for SSH and specialized managers |\n| `sm_agent_identity_operations` | `IDENTITYTOOL` | Issues or verifies privacy-preserving agent identities. |\n| `sm_agent_scheduler_operations` | `AGENT_HEALTHTOOL` | Manages the cognitive scheduler: get stats, list processes, preempt, or reset quota. |\n| `sm_agent_specialist_operations` | `SPECIALIST_REGISTRYTOOL` | Manages specialist packages: install, uninstall, list, or search. |\n| `sm_agent_watchdog_operations` | `WATCHDOGTOOL` | Manages file watchdog triggers: check file change, list active watchers, or drain triggers. |\n| `sm_cron_operations` | \u2014 | Operations for cron jobs |\n| `sm_disk_operations` | \u2014 | Operations for managing system disks |\n| `sm_file_operations` | \u2014 | Operations for file and log management |\n| `sm_firewall_operations` | \u2014 | Operations for firewall management |\n| `sm_network_operations` | \u2014 | Operations for network analysis |\n| `sm_process_operations` | \u2014 | Operations for managing system processes |\n| `sm_service_operations` | \u2014 | Operations for managing system services |\n| `sm_storage_health` | `STORAGE_HEALTHTOOL` | Physical disk + BMC drive-fault health: SMART (incl. megaraid passthrough), |\n| `sm_system_operations` | \u2014 | System operations for managing packages, system health, and updates |\n| `sm_user_operations` | \u2014 | Operations for user and group management |\n| `start_system_trace` | `OS_PROVIDERTOOL` | Start a kernel-level event trace (ETW on Windows, or strace on Linux). |\n| `stop_system_trace` | `OS_PROVIDERTOOL` | Stop a kernel-level event trace. |\n| `systems_ingest_host` | \u2014 | Ingest a keyed host telemetry projection through the governed ChangeEnvelope boundary as typed HardwareNode, NetworkInterface, and DiskVolume nodes. |\n\n_27 action-routed tool(s) \u00b7 0 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (**`intent` default** \u2014 the six verb-tools, granular set loaded on demand \u00b7 `condensed` action-routed \u00b7 `verbose` 1:1 \u00b7 `both`). Auto-generated \u2014 do not edit._\n<!-- MCP-TOOLS-TABLE:END -->\n\nTypical backing domains include OS/package lifecycle, services, processes, networks,\ndisks, managed files, cron removal, structured firewall rules, storage/BMC diagnostics,\nAgent OS administration, and governed host telemetry ingestion. Discover an action\nschema before calling it; unavailable operations must not be emulated with another\ntool.\n\n## Knowledge-graph ingestion\n\n`systems_ingest_host` reads local typed telemetry and submits an allowlisted projection\nthrough the Agent Connector SDK native governed ingestion boundary. It emits only:\n\n- `HardwareNode`, `NetworkInterface`, and `DiskVolume` nodes;\n- `hasInterface` and `hasVolume` relationships;\n- HMAC-SHA-256 opaque identifiers derived with the deployment-owned\n `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY`.\n\nHostnames, network addresses, hardware addresses, usernames, local paths, credentials,\nand arbitrary extra fields are rejected or excluded. Missing graph authority, invalid\ncontent, and unavailable ingestion fail explicitly; they are not silent no-ops.\n\n## Arbora delegation\n\nHost operations run inside the service's local operating-system boundary. For\nfleet work, Arbora delegates to an authenticated systems-manager service on the target\nboundary. Inventory, endpoints, credentials, TLS profiles, and target aliases remain\nexternal deployment configuration. Persist only opaque, non-personal references.\n\nThe bundled `systems-manager-operations` skill covers every current provider workflow.\nOlder BMC command and NIC-bond script skills were consolidated because those raw-script\nsurfaces are not part of the typed current contract.\n\n## Agent server\n\nInstall the agent extra and start:\n\n```bash\nsystems-manager-agent --help\n```\n\nWorkspace, MCP catalog, and custom-skill paths are accepted only when explicitly\nconfigured and present. There is no packaged-config or current-directory fallback.\nA non-loopback listener requires an explicit allow gate, direct or trusted-proxy TLS,\nJWT issuer/JWKS/audience configuration, and debug mode disabled.\n\n## Environment variables\n\nThe generated table is sourced from the value-free `.env.example` plus the inherited\nAgent Connector SDK contract.\n\n<!-- ENV-VARS-TABLE:START -->\n\n#### Package environment variables\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `SYSTEMS_MANAGER_FILESYSTEM_ROOT` | \u2014 | Required managed filesystem boundary |\n| `SYSTEMS_MANAGER_TEMP_ROOT` | \u2014 | Optional cleanup root beneath the managed boundary |\n| `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY` | secret-injected | Deployment-owned secret, at least 32 bytes |\n| `SYSTEMS_MANAGER_BMC_CREDENTIALS` | \u2014 | Secret-projected JSON with host/user/password |\n| `TLS_PROFILE` | \u2014 | Shared mandatory-verification transport profile |\n| `TLS_PROFILES_REF` | \u2014 | Runtime reference to the transport profile catalog |\n| `LANGFUSE_TLS_PROFILE_REF` | \u2014 | Runtime reference to verified Langfuse trust |\n| `MCP_TOOL_MODE` | `intent` | Current intent-first tool surface |\n| `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS` | `false` | Default-deny host mutations |\n| `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS` | `false` | Default-deny file mutations |\n| `SYSTEMS_MANAGER_ALLOW_SENSITIVE_READS` | `false` | Default-deny sensitive inventory |\n| `SYSTEMS_MANAGER_ALLOW_NETWORK_PROBES` | `false` | Default-deny active probes |\n| `SYSTEMS_MANAGER_MAX_BLOCKING_OPERATIONS` | `2` | Bounded host-operation concurrency |\n| `SYSTEMS_MANAGER_HEALTH_INGEST` | `true` | Enable governed health trend ingestion |\n| `SYSTEMS_MANAGER_HEALTH_AGGREGATE_S` | `3600` | Health trend aggregation window |\n| `SYSTEMS_MANAGER_NODE_REF` | \u2014 | Runtime node alias; only a keyed digest persists |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE` | \u2014 | Optional inline mandatory-verification notification TLS profile |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE_REF` | \u2014 | Runtime reference to the notification TLS profile |\n| `SYSTEMS_MANAGER_MCP_IMAGE_DIGEST` | \u2014 | Required immutable MCP image digest |\n| `SYSTEMS_MANAGER_REPOSITORY_ALLOWLIST_JSON` | `[]` | Approved credential-free repositories |\n| `SYSTEMS_MANAGER_LOCAL_PACKAGE_SHA256_MAP` | `{}` | Approved package paths and digests |\n| `SYSTEMS_MANAGER_COMMAND_TIMEOUT_SECONDS` | `120` | Default command timeout |\n| `SYSTEMS_MANAGER_ENV_METADATA_ALLOWLIST` | \u2014 | Non-sensitive environment names readable as metadata |\n| `SYSTEMS_MANAGER_UV_VERSION` | \u2014 | Exact approved uv release |\n| `SYSTEMS_MANAGER_NVM_COMMIT` | \u2014 | Exact approved NVM commit |\n| `SYSTEMS_MANAGER_NVM_DIR` | \u2014 | NVM directory beneath the managed filesystem root |\n| `ALLOW_UPDATE_ON_K8S` | `false` | Keep Kubernetes lifecycle guard enabled |\n| `MISCTOOL` | `true` | Register base health/readiness tools |\n| `OS_PROVIDERTOOL` | `true` | Register operating-system provider tools |\n| `STORAGE_HEALTHTOOL` | `true` | Register storage health tools |\n| `TRANSPORT` | `stdio` | Local MCP transport |\n| `HOST` | `127.0.0.1` | Loopback bind for HTTP transports |\n| `PORT` | `8000` | Bind port for HTTP transports |\n| `ENABLE_OTEL` | `false` | Enable only with an approved collector |\n\n#### Inherited agent-connector-sdk variables (apply to every connector)\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `MCP_ENABLED_TOOLS` | \u2014 | Comma-separated tool allow-list |\n| `MCP_DISABLED_TOOLS` | \u2014 | Comma-separated tool deny-list |\n| `MCP_ENABLED_TAGS` | \u2014 | Comma-separated tag allow-list |\n| `MCP_DISABLED_TAGS` | \u2014 | Comma-separated tag deny-list |\n| `EUNOMIA_TYPE` | `none` | Authorization mode: `none` \\| `embedded` \\| `remote` |\n| `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | Embedded Eunomia policy file |\n| `EUNOMIA_REMOTE_URL` | \u2014 | Remote Eunomia authorization server URL |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | \u2014 | OTLP collector endpoint |\n| `MCP_CLIENT_AUTH` | \u2014 | Outbound MCP child auth: `oidc-client-credentials` \\| `basic` \\| `none` |\n| `OIDC_CLIENT_ID` | \u2014 | OIDC client id (service-account auth) |\n| `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |\n| `MCP_BASIC_AUTH_USERNAME` | \u2014 | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |\n| `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |\n| `DEBUG` | `False` | Verbose logging |\n| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |\n| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |\n| `PROVIDER` | `openai` | LLM provider for the agent |\n| `MODEL_ID` | `gpt-4o` | Model id for the agent |\n| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |\n\n_51 package + 19 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set \u2014 do not edit._\n<!-- ENV-VARS-TABLE:END -->\n\n## Development and release gates\n\n```bash\npytest -q\nruff check systems_manager tests\nblack --check systems_manager tests\nmkdocs build --strict\npre-commit run --all-files\n```\n\nRun host operations only through mocks during tests. Do not run native builds or live\nhost mutations as a validation shortcut. The source dependency floor is intentionally\n`agent-connector-sdk>=2.0.0`; regenerate and commit a neutral lock only after that release\nis available from the configured package index. Never commit an editable local source\nor a stale dependency resolution.\n\nSee [the documentation](docs/index.md) for installation, deployment, configuration,\nusage, multi-host delegation, and security details.\n\n\n\n<!-- GOVERNED-CAPABILITY:START -->\n## Governed capability contract\n\nThis package ships a compact canonical skill surface with specialist procedures\nkept as referenced workflows. The current MCP tools, skill metadata,\n`connector_manifest.yml`, ontology, mappings, shapes, fixtures, migrations,\ntool-schema fingerprints, and certification metadata form one versioned\ncapability contract. Validate them together; do not rely on stale tool names or\nhistorical per-task skill wrappers.\n\nRuntime endpoints, credentials, certificate trust, tenant identity, retention,\nand observability policy are deployment inputs and are never packaged values.\nSee [Configuration, trust, and privacy](docs/configuration.md) before enabling a\nnetwork transport, connector ingestion, Arbora delegation, or trace export.\n<!-- GOVERNED-CAPABILITY:END -->\n",
12167
+ "description": "# systems-manager\n\nVersion: 2.2.3\n\n`systems-manager` is the typed host-operations provider for Agent Connector SDK and\nArbora. It exposes cross-platform package, service, process, network, disk,\nmanaged-file, firewall, physical-storage, Agent OS, and privacy-safe host-ingestion\ncapabilities without exposing a raw command tool.\n\nThe current package requires Python 3.11\u20133.14 and\n`agent-connector-sdk>=2.0.0,<3.0.0`.\n\n## Install and run\n\nInstall only the interface the operator need:\n\n```bash\npip install \"systems-manager[mcp]\"\nsystems-manager-mcp --transport stdio\n```\n\nThe optional extras are:\n\n| Extra | Capability |\n| --- | --- |\n| `mcp` | FastMCP provider runtime |\n| `agent` | Agent server and Logfire integration |\n| `all` | MCP plus agent runtime |\n| `test` | Test dependencies |\n\nFor an ephemeral MCP start:\n\n```bash\nuvx --from \"systems-manager[mcp]\" systems-manager-mcp --transport stdio\n```\n\nThe checked-in `mcp_config.json` is a reference-only client catalog. It contains\n`env://` references and safe deny defaults, never deployment endpoints, credentials,\ncertificate paths, filesystem paths, hostnames, or identities. Project-specific values\nbelong in AgentConfig or the process launcher.\n\n## Security contract\n\n- Network MCP listeners require configured authentication. Non-loopback listeners also\n require direct TLS or a trusted TLS-stop proxy, exact allowed hosts, and the\n current Agent Connector SDK transport checks.\n- Host mutations are denied unless `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS=true` and the\n individual request receives destructive-operation approval.\n- Managed-file writes also require\n `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS=true`.\n- Sensitive reads and active probes have independent default-deny gates.\n- Managed paths are confined beneath an explicit\n `SYSTEMS_MANAGER_FILESYSTEM_ROOT`; there is no working-directory fallback.\n- Raw shell, arbitrary commands, plaintext credentials, model-authored cron creation,\n and compatibility command aliases are not capabilities.\n- Logs and observability are metadata-only. Keep `LANGFUSE_CAPTURE_CONTENT=false`.\n\n## AgentConfig, secrets, and TLS\n\nUse `TLS_PROFILE` / `TLS_PROFILE_REF` with `TLS_PROFILES_REF` for shared checked\noutbound trust. Service-specific profiles such as `OIDC_TLS_PROFILE_REF`,\n`MODEL_TLS_PROFILE_REF`, and `LANGFUSE_TLS_PROFILE_REF` may select entries from the\nsame runtime catalog. Do not hardcode CA paths or verification flags in application\ncode, and do not disable verification for incomplete certificate chains.\n\nOut-of-band BMC health reads consume one runtime secret projection from\n`SYSTEMS_MANAGER_BMC_CREDENTIALS`. AgentConfig resolves the checked `env://` or secret\nreference before start; the provider accepts exactly a JSON object with `host`, `user`,\nand `password`. No secret-store vendor, secret path, token, or credential value is\nembedded in this package.\n\nThe MCP listener's own certificate or trusted-proxy boundary uses the current Agent\nUtilities `MCP_TLS_*` configuration. The optional agent listener uses `SERVER_TLS_*`\nand requires JWT configuration for non-loopback serving.\n\n## MCP tools\n\nThe default `MCP_TOOL_MODE=intent` exposes the small intent-verb surface. Backing\naction-routed tools stay available for governed discovery and on-demand loading. Tool\nand tag filters can further reduce the visible surface.\n\n_Auto-generated from the live MCP server; do not edit between the markers._\n\n<!-- MCP-TOOLS-TABLE:START -->\n\n#### Condensed action-routed tools (`MCP_TOOL_MODE=condensed`)\n\n| MCP Tool | Toggle Env Var | Description |\n|----------|----------------|-------------|\n| `capture_system_snapshot` | `OS_PROVIDERTOOL` | Takes a point-in-time snapshot of the system state (CPU, RAM, Processes). |\n| `get_management_capabilities` | \u2014 | |\n| `get_network_connections` | `OS_PROVIDERTOOL` | Maps active TCP/UDP endpoints directly to owning processes. |\n| `get_process_details` | `OS_PROVIDERTOOL` | Retrieves deep cross-platform process details (threads, modules, memory). |\n| `health_check` | \u2014 | |\n| `list_kernel_modules` | `OS_PROVIDERTOOL` | List loaded drivers/modules (lsmod or driverquery). |\n| `list_services` | `OS_PROVIDERTOOL` | Cross-platform service enumeration (systemctl or Get-Service). |\n| `manage_service` | `OS_PROVIDERTOOL` | Start/Stop/Restart/Enable/Disable services cross-platform. |\n| `query_system_logs` | `OS_PROVIDERTOOL` | Cross-platform log querying (journalctl or Get-WinEvent). |\n| `sm_advanced_operations` | \u2014 | Operations for SSH and specialized managers |\n| `sm_agent_identity_operations` | `IDENTITYTOOL` | Issues or verifies privacy-preserving agent identities. |\n| `sm_agent_scheduler_operations` | `AGENT_HEALTHTOOL` | Manages the cognitive scheduler: get stats, list processes, preempt, or reset quota. |\n| `sm_agent_specialist_operations` | `SPECIALIST_REGISTRYTOOL` | Manages specialist packages: install, uninstall, list, or search. |\n| `sm_agent_watchdog_operations` | `WATCHDOGTOOL` | Manages file watchdog triggers: check file change, list active watchers, or drain triggers. |\n| `sm_cron_operations` | \u2014 | Operations for cron jobs |\n| `sm_disk_operations` | \u2014 | Operations for managing system disks |\n| `sm_file_operations` | \u2014 | Operations for file and log management |\n| `sm_firewall_operations` | \u2014 | Operations for firewall management |\n| `sm_network_operations` | \u2014 | Operations for network analysis |\n| `sm_process_operations` | \u2014 | Operations for managing system processes |\n| `sm_service_operations` | \u2014 | Operations for managing system services |\n| `sm_storage_health` | `STORAGE_HEALTHTOOL` | Physical disk + BMC drive-fault health: SMART (incl. megaraid passthrough), |\n| `sm_system_operations` | \u2014 | System operations for managing packages, system health, and updates |\n| `sm_user_operations` | \u2014 | Operations for user and group management |\n| `start_system_trace` | `OS_PROVIDERTOOL` | Start a kernel-level event trace (ETW on Windows, or strace on Linux). |\n| `stop_system_trace` | `OS_PROVIDERTOOL` | Stop a kernel-level event trace. |\n| `systems_ingest_host` | \u2014 | Ingest a keyed host telemetry projection through the governed ChangeEnvelope boundary as typed HardwareNode, NetworkInterface, and DiskVolume nodes. |\n\n_27 action-routed tool(s) \u00b7 0 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (**`intent` default** \u2014 the six verb-tools, granular set loaded on demand \u00b7 `condensed` action-routed \u00b7 `verbose` 1:1 \u00b7 `both`). Auto-generated \u2014 do not edit._\n<!-- MCP-TOOLS-TABLE:END -->\n\nTypical backing domains include OS/package lifecycle, services, processes, networks,\ndisks, managed files, cron removal, structured firewall rules, storage/BMC diagnostics,\nAgent OS administration, and governed host telemetry ingestion. Discover an action\nschema before calling it; unavailable operations must not be emulated with another\ntool.\n\n## Knowledge-graph ingestion\n\n`systems_ingest_host` reads local typed telemetry and submits an allowlisted projection\nthrough the Agent Connector SDK native governed ingestion boundary. It emits only:\n\n- `HardwareNode`, `NetworkInterface`, and `DiskVolume` nodes;\n- `hasInterface` and `hasVolume` relationships;\n- HMAC-SHA-256 opaque identifiers derived with the deployment-owned\n `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY`.\n\nHostnames, network addresses, hardware addresses, usernames, local paths, credentials,\nand arbitrary extra fields are rejected or excluded. Missing graph authority, invalid\ncontent, and unavailable ingestion fail explicitly; they are not silent no-ops.\n\n## Arbora delegation\n\nHost operations run inside the service's local operating-system boundary. For\nfleet work, Arbora delegates to an authenticated systems-manager service on the target\nboundary. Inventory, endpoints, credentials, TLS profiles, and target aliases remain\nexternal deployment configuration. Persist only opaque, non-personal references.\n\nThe bundled `systems-manager-operations` skill covers every current provider workflow.\nOlder BMC command and NIC-bond script skills were consolidated because those raw-script\nsurfaces are not part of the typed current contract.\n\n## Agent server\n\nInstall the agent extra and start:\n\n```bash\nsystems-manager-agent --help\n```\n\nWorkspace, MCP catalog, and custom-skill paths are accepted only when explicitly\nconfigured and present. There is no packaged-config or current-directory fallback.\nA non-loopback listener requires an explicit allow gate, direct or trusted-proxy TLS,\nJWT issuer/JWKS/audience configuration, and debug mode disabled.\n\n## Environment variables\n\nThe generated table is sourced from the value-free `.env.example` plus the inherited\nAgent Connector SDK contract.\n\n<!-- ENV-VARS-TABLE:START -->\n\n#### Package environment variables\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `SYSTEMS_MANAGER_FILESYSTEM_ROOT` | \u2014 | Required managed filesystem boundary |\n| `SYSTEMS_MANAGER_TEMP_ROOT` | \u2014 | Optional cleanup root beneath the managed boundary |\n| `SYSTEMS_MANAGER_PSEUDONYMIZATION_KEY` | secret-injected | Deployment-owned secret, at least 32 bytes |\n| `SYSTEMS_MANAGER_BMC_CREDENTIALS` | \u2014 | Secret-projected JSON with host/user/password |\n| `TLS_PROFILE` | \u2014 | Shared mandatory-verification transport profile |\n| `TLS_PROFILES_REF` | \u2014 | Runtime reference to the transport profile catalog |\n| `LANGFUSE_TLS_PROFILE_REF` | \u2014 | Runtime reference to verified Langfuse trust |\n| `MCP_TOOL_MODE` | `intent` | Current intent-first tool surface |\n| `SYSTEMS_MANAGER_ALLOW_HOST_MUTATIONS` | `false` | Default-deny host mutations |\n| `SYSTEMS_MANAGER_ALLOW_FILESYSTEM_MUTATIONS` | `false` | Default-deny file mutations |\n| `SYSTEMS_MANAGER_ALLOW_SENSITIVE_READS` | `false` | Default-deny sensitive inventory |\n| `SYSTEMS_MANAGER_ALLOW_NETWORK_PROBES` | `false` | Default-deny active probes |\n| `SYSTEMS_MANAGER_MAX_BLOCKING_OPERATIONS` | `2` | Bounded host-operation concurrency |\n| `SYSTEMS_MANAGER_HEALTH_INGEST` | `true` | Enable governed health trend ingestion |\n| `SYSTEMS_MANAGER_HEALTH_AGGREGATE_S` | `3600` | Health trend aggregation window |\n| `SYSTEMS_MANAGER_NODE_REF` | \u2014 | Runtime node alias; only a keyed digest persists |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE` | \u2014 | Optional inline mandatory-verification notification TLS profile |\n| `SYSTEMS_MANAGER_NOTIFY_TLS_PROFILE_REF` | \u2014 | Runtime reference to the notification TLS profile |\n| `SYSTEMS_MANAGER_MCP_IMAGE_DIGEST` | \u2014 | Required immutable MCP image digest |\n| `SYSTEMS_MANAGER_REPOSITORY_ALLOWLIST_JSON` | `[]` | Approved credential-free repositories |\n| `SYSTEMS_MANAGER_LOCAL_PACKAGE_SHA256_MAP` | `{}` | Approved package paths and digests |\n| `SYSTEMS_MANAGER_COMMAND_TIMEOUT_SECONDS` | `120` | Default command timeout |\n| `SYSTEMS_MANAGER_ENV_METADATA_ALLOWLIST` | \u2014 | Non-sensitive environment names readable as metadata |\n| `SYSTEMS_MANAGER_UV_VERSION` | \u2014 | Exact approved uv release |\n| `SYSTEMS_MANAGER_NVM_COMMIT` | \u2014 | Exact approved NVM commit |\n| `SYSTEMS_MANAGER_NVM_DIR` | \u2014 | NVM directory beneath the managed filesystem root |\n| `ALLOW_UPDATE_ON_K8S` | `false` | Keep Kubernetes lifecycle guard enabled |\n| `MISCTOOL` | `true` | Register base health/readiness tools |\n| `OS_PROVIDERTOOL` | `true` | Register operating-system provider tools |\n| `STORAGE_HEALTHTOOL` | `true` | Register storage health tools |\n| `TRANSPORT` | `stdio` | Local MCP transport |\n| `HOST` | `127.0.0.1` | Loopback bind for HTTP transports |\n| `PORT` | `8000` | Bind port for HTTP transports |\n| `ENABLE_OTEL` | `false` | Enable only with an approved collector |\n\n#### Inherited agent-connector-sdk variables (apply to every connector)\n\n| Variable | Example | Description |\n|----------|---------|-------------|\n| `MCP_ENABLED_TOOLS` | \u2014 | Comma-separated tool allow-list |\n| `MCP_DISABLED_TOOLS` | \u2014 | Comma-separated tool deny-list |\n| `MCP_ENABLED_TAGS` | \u2014 | Comma-separated tag allow-list |\n| `MCP_DISABLED_TAGS` | \u2014 | Comma-separated tag deny-list |\n| `EUNOMIA_TYPE` | `none` | Authorization mode: `none` \\| `embedded` \\| `remote` |\n| `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | Embedded Eunomia policy file |\n| `EUNOMIA_REMOTE_URL` | \u2014 | Remote Eunomia authorization server URL |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | \u2014 | OTLP collector endpoint |\n| `MCP_CLIENT_AUTH` | \u2014 | Outbound MCP child auth: `oidc-client-credentials` \\| `basic` \\| `none` |\n| `OIDC_CLIENT_ID` | \u2014 | OIDC client id (service-account auth) |\n| `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |\n| `MCP_BASIC_AUTH_USERNAME` | \u2014 | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |\n| `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |\n| `DEBUG` | `False` | Verbose logging |\n| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |\n| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |\n| `PROVIDER` | `openai` | LLM provider for the agent |\n| `MODEL_ID` | `gpt-4o` | Model id for the agent |\n| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |\n\n_51 package + 19 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set \u2014 do not edit._\n<!-- ENV-VARS-TABLE:END -->\n\n## Development and release gates\n\n```bash\npytest -q\nruff check systems_manager tests\nblack --check systems_manager tests\nmkdocs build --strict\npre-commit run --all-files\n```\n\nRun host operations only through mocks during tests. Do not run native builds or live\nhost mutations as a validation shortcut. The source dependency floor is intentionally\n`agent-connector-sdk>=2.0.0`; regenerate and commit a neutral lock only after that release\nis available from the configured package index. Never commit an editable local source\nor a stale dependency resolution.\n\nSee [the documentation](docs/index.md) for installation, deployment, configuration,\nusage, multi-host delegation, and security details.\n\n\n\n<!-- GOVERNED-CAPABILITY:START -->\n## Governed capability contract\n\nThis package ships a compact canonical skill surface with specialist procedures\nkept as referenced workflows. The current MCP tools, skill metadata,\n`connector_manifest.yml`, ontology, mappings, shapes, fixtures, migrations,\ntool-schema fingerprints, and certification metadata form one versioned\ncapability contract. Validate them together; do not rely on stale tool names or\nhistorical per-task skill wrappers.\n\nRuntime endpoints, credentials, certificate trust, tenant identity, retention,\nand observability policy are deployment inputs and are never packaged values.\nSee [Configuration, trust, and privacy](docs/configuration.md) before enabling a\nnetwork transport, connector ingestion, Arbora delegation, or trace export.\n<!-- GOVERNED-CAPABILITY:END -->\n",
12168
12168
  "description_content_type": "text/markdown",
12169
12169
  "author_email": "Project Maintainers <maintainers@users.noreply.github.com>",
12170
12170
  "license": "MIT",
@@ -12179,13 +12179,13 @@
12179
12179
  "Programming Language :: Python :: 3"
12180
12180
  ],
12181
12181
  "requires_dist": [
12182
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15",
12182
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18",
12183
12183
  "pydantic>=2.14.1",
12184
12184
  "psutil>=7.2.2",
12185
12185
  "distro>=1.9.0",
12186
12186
  "requests>=2.34.2",
12187
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"mcp\"",
12188
- "agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == \"all\"",
12187
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"mcp\"",
12188
+ "agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == \"all\"",
12189
12189
  "pytest>=9.1.1; extra == \"test\"",
12190
12190
  "pytest-asyncio>=1.4.0; extra == \"test\""
12191
12191
  ],
@@ -12202,11 +12202,11 @@
12202
12202
  },
12203
12203
  {
12204
12204
  "download_info": {
12205
- "url": "https://files.pythonhosted.org/packages/d6/7a/3a6e3cf1651bd809f541cbfd669c5d1ede89c7e780ee42bed8b396f44d94/agent_connector_sdk-0.3.15-py3-none-any.whl",
12205
+ "url": "https://files.pythonhosted.org/packages/9d/9c/542f187c014e50cf24171a33d10ed4959c4616fa62a08477981b649407b0/agent_connector_sdk-0.3.18-py3-none-any.whl",
12206
12206
  "archive_info": {
12207
- "hash": "sha256=4f8fad4e0359a8e906db36e0a8220cc3d222958dbd59c991d8a821b46d514b06",
12207
+ "hash": "sha256=7ee79bb2680490e047d25eaa6349b8778f427e2a09870aab6f342b7c8f677eec",
12208
12208
  "hashes": {
12209
- "sha256": "4f8fad4e0359a8e906db36e0a8220cc3d222958dbd59c991d8a821b46d514b06"
12209
+ "sha256": "7ee79bb2680490e047d25eaa6349b8778f427e2a09870aab6f342b7c8f677eec"
12210
12210
  }
12211
12211
  }
12212
12212
  },
@@ -12216,12 +12216,12 @@
12216
12216
  "metadata": {
12217
12217
  "metadata_version": "2.4",
12218
12218
  "name": "agent-connector-sdk",
12219
- "version": "0.3.15",
12219
+ "version": "0.3.18",
12220
12220
  "dynamic": [
12221
12221
  "license-file"
12222
12222
  ],
12223
12223
  "summary": "Connector SDK for the agent-packages fleet: MCP server scaffolding, connector manifests, and typed source/content extension ports",
12224
- "description": "# Agent Connector SDK\n\n<p align=\"center\">\n <img src=\"docs/assets/brands/agent-connector-sdk-logo-v1.png\" alt=\"Agent Connector SDK logo\" width=\"180\">\n</p>\n\n<p align=\"center\">\n <b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>\n <sub>The typed source-integration boundary for MCP services and Epistemic Graph.</sub>\n</p>\n\n[![PyPI - Version](https://img.shields.io/pypi/v/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![Build](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml)\n[![Documentation](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/pages.yml/badge.svg)](https://knuckles-team.github.io/agent-connector-sdk/)\n[![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/forks)\n[![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/Knuckles-Team/agent-connector-sdk)](LICENSE)\n[![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/commits/main)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls)\n[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls?q=is%3Apr+is%3Aclosed)\n[![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/issues)\n[![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![PyPI - Downloads](https://img.shields.io/pypi/dd/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - License](https://img.shields.io/pypi/l/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n\n<p align=\"center\">\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/\">Documentation</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/capabilities/\">Capabilities</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/extension-ports/\">Interfaces</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/status/\">Status</a>\n</p>\n\n---\n\n## Quick Start\n\nCreate a project and install the SDK:\n\n```bash\nuv init --bare demo-connector\ncd demo-connector\nuv add agent-connector-sdk\nuv sync\nuv run connector-sync --help\n```\n\nThe command prints the supervised synchronization options without opening a\nsource session. Continue with the\n[connector tutorial](https://knuckles-team.github.io/agent-connector-sdk/tutorial/)\nto build and run a one-file MCP connector, observe its health response, add\ndeclarative content, certify the live schema, and join source synchronization.\n\n## Overview\n\nAgent Connector SDK is the ecosystem's source-integration boundary. It turns\nvendor APIs and domain tools into secure MCP connectors, transports bounded\nsource evidence into Epistemic Graph, indexes immutable repository snapshots,\nand applies authorized changes back to source systems.\n\nConnector packages retain vendor behavior. The SDK owns transport, lifecycle,\ncertification, and effect execution. Generated Epistemic Graph contracts own\ndurable graph records, checkpoints, content identity, and receipts.\n\nPackage version: 0.3.15.\n\n## Key Capabilities\n\n- Build FastMCP servers with authentication, safe exposure, health, visibility,\n rate limits, change subscriptions, and consistent tool surfaces.\n- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as\n typed MCP content.\n- Extract bounded source pages and advance checkpoints only from matching\n durable Epistemic Graph receipts.\n- Import deterministic ConnectorPack archives without copying graph DTOs or\n digest algorithms into connector packages.\n- Stream authenticated immutable repository snapshots into the generated\n `IndexRepository` boundary without becoming a semantic writer.\n- Govern write-back through dry-run, authorization, source-version checks,\n idempotency, and uncertain-effect reconciliation.\n- Certify extension identity, live MCP schemas, pagination, and safety behavior\n before activation.\n\n## Documentation\n\nStart with [Build the operator's first connector](https://knuckles-team.github.io/agent-connector-sdk/tutorial/),\nthen choose the reference that matches the work:\n\n- [Documentation home](https://knuckles-team.github.io/agent-connector-sdk/)\n- [Capabilities](https://knuckles-team.github.io/agent-connector-sdk/capabilities/)\n- [Architecture](https://knuckles-team.github.io/agent-connector-sdk/architecture/)\n- [Connector servers](https://knuckles-team.github.io/agent-connector-sdk/connector-servers/)\n- [Schema disclosure](https://knuckles-team.github.io/agent-connector-sdk/schema-disclosure/)\n- [Source synchronization](https://knuckles-team.github.io/agent-connector-sdk/connector-sync/)\n- [Repository ingestion](https://knuckles-team.github.io/agent-connector-sdk/repository-ingestion/)\n- [Extension interfaces](https://knuckles-team.github.io/agent-connector-sdk/extension-ports/)\n- [Current status](https://knuckles-team.github.io/agent-connector-sdk/status/)\n\nSibling authorities: [Epistemic Graph](https://knuckles-team.github.io/epistemic-graph/)\nowns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)\nowns authenticated runtime composition.\n\n## Architecture\n\n[![Runtime architecture: people and clients enter through Arbora. Source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n| Boundary | Owned here | Owned elsewhere |\n|---|---|---|\n| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |\n| Source ingest | Discovery, bounded extraction, transport, receipt verification | Epistemic Graph owns mapping, checkpoints, provenance, and commit receipts. |\n| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Epistemic Graph owns indexing, graph projection, and semantic interpretation. |\n| Write-back | Preview, source-version checks, apply, and reconciliation | Epistemic Graph owns change sets, authorization decisions, and durable outcomes. |\n| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |\n\nThe SDK depends directly on `epistemic-graph>=2.27.0`. Generated SourceIngest,\nConnectorPack, IndexRepository, and WriteBack clients and models are the graph\nboundary; the SDK adds no parallel graph contract.\n\n## Contributing\n\nIssues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,\nisolation, and validation rules, and run the affected tests and public-surface\ngates before submitting a change.\n\n## License\n\nAgent Connector SDK is released under the [MIT License](LICENSE).\n",
12224
+ "description": "# Agent Connector SDK\n\n<p align=\"center\">\n <img src=\"docs/assets/brands/agent-connector-sdk-logo-v1.png\" alt=\"Agent Connector SDK logo\" width=\"180\">\n</p>\n\n<p align=\"center\">\n <b>Build secure connectors once. Serve, synchronize, and write back through one governed contract.</b><br>\n <sub>The typed source-integration boundary for MCP services and Epistemic Graph.</sub>\n</p>\n\n[![PyPI - Version](https://img.shields.io/pypi/v/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![Build](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/release.yml)\n[![Documentation](https://github.com/Knuckles-Team/agent-connector-sdk/actions/workflows/pages.yml/badge.svg)](https://knuckles-team.github.io/agent-connector-sdk/)\n[![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/forks)\n[![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/Knuckles-Team/agent-connector-sdk)](LICENSE)\n[![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/commits/main)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls)\n[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/pulls?q=is%3Apr+is%3Aclosed)\n[![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk/issues)\n[![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/agent-connector-sdk)](https://github.com/Knuckles-Team/agent-connector-sdk)\n[![PyPI - Downloads](https://img.shields.io/pypi/dd/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - License](https://img.shields.io/pypi/l/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n[![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-connector-sdk)](https://pypi.org/project/agent-connector-sdk/)\n\n<p align=\"center\">\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/\">Documentation</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/capabilities/\">Capabilities</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/extension-ports/\">Interfaces</a> \u00b7\n <a href=\"https://knuckles-team.github.io/agent-connector-sdk/status/\">Status</a>\n</p>\n\n---\n\n## Quick Start\n\nCreate a project and install the SDK:\n\n```bash\nuv init --bare demo-connector\ncd demo-connector\nuv add agent-connector-sdk\nuv sync\nuv run connector-sync --help\n```\n\nThe command prints the supervised synchronization options without opening a\nsource session. Continue with the\n[connector tutorial](https://knuckles-team.github.io/agent-connector-sdk/tutorial/)\nto build and run a one-file MCP connector, observe its health response, add\ndeclarative content, certify the live schema, and join source synchronization.\n\n## Overview\n\nAgent Connector SDK is the ecosystem's source-integration boundary. It turns\nvendor APIs and domain tools into secure MCP connectors, transports bounded\nsource evidence into Epistemic Graph, indexes immutable repository snapshots,\nand applies authorized changes back to source systems.\n\nConnector packages retain vendor behavior. The SDK owns transport, lifecycle,\ncertification, and effect execution. Generated Epistemic Graph contracts own\ndurable graph records, checkpoints, content identity, and receipts.\n\nPackage version: 0.3.18.\n\n## Key Capabilities\n\n- Build FastMCP servers with authentication, safe exposure, health, visibility,\n rate limits, change subscriptions, and consistent tool surfaces.\n- Publish skills, prompts, ontologies, SHACL shapes, and connector manifests as\n typed MCP content.\n- Extract bounded source pages and advance checkpoints only from matching\n durable Epistemic Graph receipts.\n- Import deterministic ConnectorPack archives without copying graph DTOs or\n digest algorithms into connector packages.\n- Stream authenticated immutable repository snapshots into the generated\n `IndexRepository` boundary without becoming a semantic writer.\n- Govern write-back through dry-run, authorization, source-version checks,\n idempotency, and uncertain-effect reconciliation.\n- Certify extension identity, live MCP schemas, pagination, and safety behavior\n before activation.\n\n## Documentation\n\nStart with [Build the operator's first connector](https://knuckles-team.github.io/agent-connector-sdk/tutorial/),\nthen choose the reference that matches the work:\n\n- [Documentation home](https://knuckles-team.github.io/agent-connector-sdk/)\n- [Capabilities](https://knuckles-team.github.io/agent-connector-sdk/capabilities/)\n- [Architecture](https://knuckles-team.github.io/agent-connector-sdk/architecture/)\n- [Connector servers](https://knuckles-team.github.io/agent-connector-sdk/connector-servers/)\n- [Schema disclosure](https://knuckles-team.github.io/agent-connector-sdk/schema-disclosure/)\n- [Source synchronization](https://knuckles-team.github.io/agent-connector-sdk/connector-sync/)\n- [Repository ingestion](https://knuckles-team.github.io/agent-connector-sdk/repository-ingestion/)\n- [Extension interfaces](https://knuckles-team.github.io/agent-connector-sdk/extension-ports/)\n- [Current status](https://knuckles-team.github.io/agent-connector-sdk/status/)\n\nSibling authorities: [Epistemic Graph](https://knuckles-team.github.io/epistemic-graph/)\nowns durable graph state and generated contracts; [Arbora](https://knuckles-team.github.io/arbora/)\nowns authenticated runtime composition.\n\n## Architecture\n\n[![Runtime architecture: people and clients enter through Arbora. Source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#sdk)\n\n| Boundary | Owned here | Owned elsewhere |\n|---|---|---|\n| Connector service | MCP lifecycle, exposure policy, content capture, certification | Vendor models and business semantics stay in the connector package. |\n| Source ingest | Discovery, bounded extraction, transport, receipt verification | Epistemic Graph owns mapping, checkpoints, provenance, and commit receipts. |\n| Repository ingest | Authenticated snapshots, stable manifests, bounded object transport | Epistemic Graph owns indexing, graph projection, and semantic interpretation. |\n| Write-back | Preview, source-version checks, apply, and reconciliation | Epistemic Graph owns change sets, authorization decisions, and durable outcomes. |\n| Runtime composition | Typed ports and checked dependency requirements | Arbora supplies authenticated identity, clients, and live authority. |\n\nThe SDK depends directly on `epistemic-graph>=2.27.0`. Generated SourceIngest,\nConnectorPack, IndexRepository, and WriteBack clients and models are the graph\nboundary; the SDK adds no parallel graph contract.\n\n## Contributing\n\nIssues and pull requests are welcome. Follow [AGENTS.md](AGENTS.md) for ownership,\nisolation, and validation rules, and run the affected tests and public-surface\ngates before submitting a change.\n\n## License\n\nAgent Connector SDK is released under the [MIT License](LICENSE).\n",
12225
12225
  "description_content_type": "text/markdown",
12226
12226
  "author_email": "Repository Maintainers <maintainers@knuckles.team>",
12227
12227
  "license_expression": "MIT",
@@ -1,4 +1,4 @@
1
- agent-connector-sdk[mcp]>=0.3.15,<1.0.0
1
+ agent-connector-sdk[mcp]>=0.3.18,<1.0.0
2
2
  pydantic>=2.12.0,<3.0.0
3
3
  psutil>=7.0.0
4
4
  distro>=1.9.0
@@ -35,6 +35,7 @@ warnings.filterwarnings("ignore", category=DeprecationWarning, module="authlib.*
35
35
 
36
36
  from agent_connector_sdk.config import load_config, setting
37
37
  from agent_connector_sdk.mcp.action_dispatch import resolve_action
38
+ from agent_connector_sdk.mcp.action_split import assert_tools_classified
38
39
  from agent_connector_sdk.mcp.concurrency import run_blocking as _agent_run_blocking
39
40
  from agent_connector_sdk.mcp.context import ctx_log
40
41
  from agent_connector_sdk.mcp.server import create_mcp_server
@@ -50,7 +51,7 @@ from systems_manager.systems_manager import (
50
51
  resolve_managed_path,
51
52
  )
52
53
 
53
- __version__ = "2.2.2"
54
+ __version__ = "2.2.3"
54
55
 
55
56
  logging.basicConfig(
56
57
  level=logging.WARNING,
@@ -486,24 +487,6 @@ _ALL_CLASSIFIED_TOOLS = frozenset(
486
487
  )
487
488
 
488
489
 
489
- def _assert_registered_tools_are_classified(mcp: FastMCP) -> None:
490
- """Refuse startup when a registered tool has no explicit policy class."""
491
- provider = getattr(mcp, "_local_provider", None)
492
- components = getattr(provider, "_components", None)
493
- if not isinstance(components, dict):
494
- return
495
- registered = {
496
- str(getattr(component, "name", "") or "")
497
- for key, component in components.items()
498
- if str(key).startswith("tool:") and getattr(component, "name", None)
499
- }
500
- unclassified = registered - _ALL_CLASSIFIED_TOOLS
501
- if unclassified:
502
- raise RuntimeError(
503
- "Unclassified MCP tools prevent startup: " + ", ".join(sorted(unclassified))
504
- )
505
-
506
-
507
490
  def register_misc_tools(mcp: FastMCP) -> None:
508
491
  """Register non-destructive discovery and readiness tools."""
509
492
 
@@ -1214,7 +1197,8 @@ def get_mcp_instance() -> tuple[argparse.Namespace, FastMCP, list[Any]]:
1214
1197
  }
1215
1198
  return {"target": "local", "success": True, "ingested": result}
1216
1199
 
1217
- _assert_registered_tools_are_classified(mcp)
1200
+ # Fail closed: any registered tool without a policy class refuses startup.
1201
+ assert_tools_classified(mcp, _ALL_CLASSIFIED_TOOLS)
1218
1202
  mcp.add_middleware(SystemsSecurityMiddleware())
1219
1203
  return args, mcp, middlewares
1220
1204
 
@@ -32,7 +32,7 @@ from pydantic import BaseModel, ConfigDict, Field, field_validator, model_valida
32
32
 
33
33
  from systems_manager.k8s_detect import is_k8s_node
34
34
 
35
- __version__ = "2.2.2"
35
+ __version__ = "2.2.3"
36
36
 
37
37
  _MAX_MANAGED_FILE_BYTES = 8 * 1024 * 1024
38
38
  _MAX_LOCAL_PACKAGE_BYTES = 2 * 1024 * 1024 * 1024
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: systems-manager
3
- Version: 2.2.2
3
+ Version: 2.2.3
4
4
  Summary: Systems Manager will update your system and install/upgrade applications. Additionally, as allow AI to perform these activities as an MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,15 +12,15 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.15,>=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.15
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18
16
16
  Requires-Dist: pydantic>=2.14.1
17
17
  Requires-Dist: psutil>=7.2.2
18
18
  Requires-Dist: distro>=1.9.0
19
19
  Requires-Dist: requests>=2.34.2
20
20
  Provides-Extra: mcp
21
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == "mcp"
21
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "mcp"
22
22
  Provides-Extra: all
23
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.15; extra == "all"
23
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.18; extra == "all"
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pytest>=9.1.1; extra == "test"
26
26
  Requires-Dist: pytest-asyncio>=1.4.0; extra == "test"
@@ -28,7 +28,7 @@ Dynamic: license-file
28
28
 
29
29
  # systems-manager
30
30
 
31
- Version: 2.2.2
31
+ Version: 2.2.3
32
32
 
33
33
  `systems-manager` is the typed host-operations provider for Agent Connector SDK and
34
34
  Arbora. It exposes cross-platform package, service, process, network, disk,
@@ -82,4 +82,5 @@ tests/test_security_boundaries.py
82
82
  tests/test_storage_health.py
83
83
  tests/test_sudo_helper.py
84
84
  tests/test_systems_manager_base.py
85
+ tests/test_tools_classified.py
85
86
  tests/test_windows_manager.py
@@ -1,14 +1,14 @@
1
- agent-connector-sdk[mcp]<1.0.0,>=0.3.15
1
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
2
2
  pydantic>=2.14.1
3
3
  psutil>=7.2.2
4
4
  distro>=1.9.0
5
5
  requests>=2.34.2
6
6
 
7
7
  [all]
8
- agent-connector-sdk[mcp]<1.0.0,>=0.3.15
8
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
9
9
 
10
10
  [mcp]
11
- agent-connector-sdk[mcp]<1.0.0,>=0.3.15
11
+ agent-connector-sdk[mcp]<1.0.0,>=0.3.18
12
12
 
13
13
  [test]
14
14
  pytest>=9.1.1
@@ -0,0 +1,33 @@
1
+ """Startup refuses any registered tool that has no policy class (fail closed)."""
2
+
3
+ import pytest
4
+ from agent_connector_sdk.mcp.action_split import assert_tools_classified
5
+ from fastmcp import FastMCP
6
+
7
+ from systems_manager import mcp_server as server
8
+
9
+
10
+ def test_unclassified_tool_refuses_startup():
11
+ mcp = FastMCP("classify-test")
12
+
13
+ @mcp.tool()
14
+ async def not_in_policy() -> str:
15
+ return "x"
16
+
17
+ with pytest.raises(RuntimeError, match="not_in_policy"):
18
+ assert_tools_classified(mcp, server._ALL_CLASSIFIED_TOOLS)
19
+
20
+
21
+ def test_classified_tool_is_accepted():
22
+ mcp = FastMCP("classify-test")
23
+ server.register_misc_tools(mcp)
24
+ assert_tools_classified(mcp, server._ALL_CLASSIFIED_TOOLS)
25
+
26
+
27
+ def test_unknown_registry_shape_fails_closed():
28
+ with pytest.raises(AttributeError):
29
+ assert_tools_classified(object(), server._ALL_CLASSIFIED_TOOLS)
30
+
31
+
32
+ def test_handwritten_check_is_gone():
33
+ assert not hasattr(server, "_assert_registered_tools_are_classified")
File without changes