multiagentos 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. multiagentos-0.4.0/PKG-INFO +7 -0
  2. multiagentos-0.4.0/README.md +301 -0
  3. multiagentos-0.4.0/agents/__init__.py +1 -0
  4. multiagentos-0.4.0/agents/catalog.py +52 -0
  5. multiagentos-0.4.0/agents/registry.py +11 -0
  6. multiagentos-0.4.0/core/__init__.py +38 -0
  7. multiagentos-0.4.0/core/artifacts.py +47 -0
  8. multiagentos-0.4.0/core/chat_agent_bridge.py +280 -0
  9. multiagentos-0.4.0/core/chat_agent_registry.py +61 -0
  10. multiagentos-0.4.0/core/chat_agent_router.py +85 -0
  11. multiagentos-0.4.0/core/chat_session.py +62 -0
  12. multiagentos-0.4.0/core/contracts/__init__.py +22 -0
  13. multiagentos-0.4.0/core/contracts/agent.py +21 -0
  14. multiagentos-0.4.0/core/contracts/ai.py +25 -0
  15. multiagentos-0.4.0/core/contracts/capability.py +44 -0
  16. multiagentos-0.4.0/core/contracts/chat_agent.py +34 -0
  17. multiagentos-0.4.0/core/contracts/checkpoint.py +78 -0
  18. multiagentos-0.4.0/core/contracts/discovery.py +30 -0
  19. multiagentos-0.4.0/core/contracts/execution.py +28 -0
  20. multiagentos-0.4.0/core/contracts/github.py +74 -0
  21. multiagentos-0.4.0/core/contracts/handoff.py +56 -0
  22. multiagentos-0.4.0/core/contracts/health.py +206 -0
  23. multiagentos-0.4.0/core/contracts/human_review.py +20 -0
  24. multiagentos-0.4.0/core/contracts/ide.py +113 -0
  25. multiagentos-0.4.0/core/contracts/mcp.py +76 -0
  26. multiagentos-0.4.0/core/contracts/model_runtime.py +25 -0
  27. multiagentos-0.4.0/core/contracts/planning.py +25 -0
  28. multiagentos-0.4.0/core/contracts/profile.py +66 -0
  29. multiagentos-0.4.0/core/contracts/quota.py +62 -0
  30. multiagentos-0.4.0/core/contracts/repository.py +34 -0
  31. multiagentos-0.4.0/core/contracts/resume.py +55 -0
  32. multiagentos-0.4.0/core/contracts/runtime.py +19 -0
  33. multiagentos-0.4.0/core/contracts/vyrelon_runtime.py +118 -0
  34. multiagentos-0.4.0/core/contracts/work_unit.py +48 -0
  35. multiagentos-0.4.0/core/delegation.py +33 -0
  36. multiagentos-0.4.0/core/handoff.py +68 -0
  37. multiagentos-0.4.0/core/lifecycle.py +85 -0
  38. multiagentos-0.4.0/core/multi_agent_workflow.py +574 -0
  39. multiagentos-0.4.0/core/orchestrator.py +51 -0
  40. multiagentos-0.4.0/core/planning.py +22 -0
  41. multiagentos-0.4.0/core/registry.py +44 -0
  42. multiagentos-0.4.0/core/routing.py +195 -0
  43. multiagentos-0.4.0/core/state.py +155 -0
  44. multiagentos-0.4.0/installer/__init__.py +1 -0
  45. multiagentos-0.4.0/installer/init.py +71 -0
  46. multiagentos-0.4.0/integrations/__init__.py +0 -0
  47. multiagentos-0.4.0/integrations/github/__init__.py +3 -0
  48. multiagentos-0.4.0/integrations/github/gateway.py +164 -0
  49. multiagentos-0.4.0/integrations/openai/__init__.py +1 -0
  50. multiagentos-0.4.0/integrations/openai/chat_agent.py +147 -0
  51. multiagentos-0.4.0/multiagentos/__init__.py +1 -0
  52. multiagentos-0.4.0/multiagentos/cli.py +759 -0
  53. multiagentos-0.4.0/multiagentos.egg-info/PKG-INFO +7 -0
  54. multiagentos-0.4.0/multiagentos.egg-info/SOURCES.txt +195 -0
  55. multiagentos-0.4.0/multiagentos.egg-info/dependency_links.txt +1 -0
  56. multiagentos-0.4.0/multiagentos.egg-info/entry_points.txt +2 -0
  57. multiagentos-0.4.0/multiagentos.egg-info/requires.txt +3 -0
  58. multiagentos-0.4.0/multiagentos.egg-info/top_level.txt +7 -0
  59. multiagentos-0.4.0/profiles/__init__.py +1 -0
  60. multiagentos-0.4.0/profiles/common.py +11 -0
  61. multiagentos-0.4.0/profiles/detector.py +67 -0
  62. multiagentos-0.4.0/profiles/registry.py +46 -0
  63. multiagentos-0.4.0/profiles/resolver.py +63 -0
  64. multiagentos-0.4.0/pyproject.toml +19 -0
  65. multiagentos-0.4.0/runtime/__init__.py +5 -0
  66. multiagentos-0.4.0/runtime/agent/__init__.py +1 -0
  67. multiagentos-0.4.0/runtime/agent/ide.py +74 -0
  68. multiagentos-0.4.0/runtime/agent/model.py +197 -0
  69. multiagentos-0.4.0/runtime/agent/model_backed.py +49 -0
  70. multiagentos-0.4.0/runtime/agent/process.py +21 -0
  71. multiagentos-0.4.0/runtime/builtin_tools.py +57 -0
  72. multiagentos-0.4.0/runtime/capability.py +143 -0
  73. multiagentos-0.4.0/runtime/chat_adapter_registry.py +43 -0
  74. multiagentos-0.4.0/runtime/chat_config.py +57 -0
  75. multiagentos-0.4.0/runtime/chat_execution.py +52 -0
  76. multiagentos-0.4.0/runtime/config/__init__.py +1 -0
  77. multiagentos-0.4.0/runtime/config/loader.py +67 -0
  78. multiagentos-0.4.0/runtime/discovery.py +334 -0
  79. multiagentos-0.4.0/runtime/execution_config.py +71 -0
  80. multiagentos-0.4.0/runtime/execution_registry.py +50 -0
  81. multiagentos-0.4.0/runtime/git.py +84 -0
  82. multiagentos-0.4.0/runtime/github.py +56 -0
  83. multiagentos-0.4.0/runtime/github_probe.py +23 -0
  84. multiagentos-0.4.0/runtime/health.py +14 -0
  85. multiagentos-0.4.0/runtime/ide/__init__.py +6 -0
  86. multiagentos-0.4.0/runtime/ide/bridge.py +198 -0
  87. multiagentos-0.4.0/runtime/ide/registry.py +24 -0
  88. multiagentos-0.4.0/runtime/ide/runtime.py +35 -0
  89. multiagentos-0.4.0/runtime/local/__init__.py +18 -0
  90. multiagentos-0.4.0/runtime/local/filesystem.py +58 -0
  91. multiagentos-0.4.0/runtime/local/patch.py +79 -0
  92. multiagentos-0.4.0/runtime/local/path_security.py +31 -0
  93. multiagentos-0.4.0/runtime/local/permissions.py +20 -0
  94. multiagentos-0.4.0/runtime/local/process.py +56 -0
  95. multiagentos-0.4.0/runtime/local/shell.py +97 -0
  96. multiagentos-0.4.0/runtime/mcp/__init__.py +7 -0
  97. multiagentos-0.4.0/runtime/mcp/client.py +120 -0
  98. multiagentos-0.4.0/runtime/mcp/config.py +36 -0
  99. multiagentos-0.4.0/runtime/mcp/policy.py +57 -0
  100. multiagentos-0.4.0/runtime/mcp/proxy.py +30 -0
  101. multiagentos-0.4.0/runtime/mcp/server.py +137 -0
  102. multiagentos-0.4.0/runtime/mcp/session.py +19 -0
  103. multiagentos-0.4.0/runtime/model/__init__.py +5 -0
  104. multiagentos-0.4.0/runtime/model/ai_runtime.py +165 -0
  105. multiagentos-0.4.0/runtime/model/cli.py +49 -0
  106. multiagentos-0.4.0/runtime/model/config.py +98 -0
  107. multiagentos-0.4.0/runtime/model/credentials.py +42 -0
  108. multiagentos-0.4.0/runtime/model/factory.py +82 -0
  109. multiagentos-0.4.0/runtime/model/http.py +78 -0
  110. multiagentos-0.4.0/runtime/model/invoker.py +16 -0
  111. multiagentos-0.4.0/runtime/model/materializer.py +101 -0
  112. multiagentos-0.4.0/runtime/model/native.py +244 -0
  113. multiagentos-0.4.0/runtime/model/providers.py +55 -0
  114. multiagentos-0.4.0/runtime/model/registry.py +26 -0
  115. multiagentos-0.4.0/runtime/model/runtime_loader.py +51 -0
  116. multiagentos-0.4.0/runtime/model_control.py +136 -0
  117. multiagentos-0.4.0/runtime/multi_agent.py +142 -0
  118. multiagentos-0.4.0/runtime/policy.py +28 -0
  119. multiagentos-0.4.0/runtime/process.py +41 -0
  120. multiagentos-0.4.0/runtime/quota.py +259 -0
  121. multiagentos-0.4.0/runtime/repository.py +103 -0
  122. multiagentos-0.4.0/runtime/repository_tools.py +62 -0
  123. multiagentos-0.4.0/runtime/status.py +87 -0
  124. multiagentos-0.4.0/runtime/tool_calling.py +134 -0
  125. multiagentos-0.4.0/runtime/validation.py +121 -0
  126. multiagentos-0.4.0/runtime/vyrelon.py +1557 -0
  127. multiagentos-0.4.0/setup.cfg +4 -0
  128. multiagentos-0.4.0/tests/test_agents_and_handoff.py +57 -0
  129. multiagentos-0.4.0/tests/test_ai_runtime.py +121 -0
  130. multiagentos-0.4.0/tests/test_builtin_tools.py +32 -0
  131. multiagentos-0.4.0/tests/test_chat_adapter_registry.py +26 -0
  132. multiagentos-0.4.0/tests/test_chat_agent_bridge.py +177 -0
  133. multiagentos-0.4.0/tests/test_chat_agent_router_session.py +68 -0
  134. multiagentos-0.4.0/tests/test_chat_agents.py +42 -0
  135. multiagentos-0.4.0/tests/test_chat_config.py +51 -0
  136. multiagentos-0.4.0/tests/test_chat_execution.py +66 -0
  137. multiagentos-0.4.0/tests/test_cli.py +234 -0
  138. multiagentos-0.4.0/tests/test_cli_providers.py +64 -0
  139. multiagentos-0.4.0/tests/test_cli_run_resume.py +54 -0
  140. multiagentos-0.4.0/tests/test_config_loader.py +58 -0
  141. multiagentos-0.4.0/tests/test_configured_model_cli.py +51 -0
  142. multiagentos-0.4.0/tests/test_core_runtime.py +75 -0
  143. multiagentos-0.4.0/tests/test_credentials.py +30 -0
  144. multiagentos-0.4.0/tests/test_execution_config.py +60 -0
  145. multiagentos-0.4.0/tests/test_execution_registry.py +34 -0
  146. multiagentos-0.4.0/tests/test_git_runtime.py +42 -0
  147. multiagentos-0.4.0/tests/test_github_contract.py +21 -0
  148. multiagentos-0.4.0/tests/test_github_probe.py +28 -0
  149. multiagentos-0.4.0/tests/test_github_runtime.py +72 -0
  150. multiagentos-0.4.0/tests/test_http_model_adapter.py +49 -0
  151. multiagentos-0.4.0/tests/test_human_review_persistence.py +172 -0
  152. multiagentos-0.4.0/tests/test_ide_bridge.py +131 -0
  153. multiagentos-0.4.0/tests/test_ide_runtime.py +170 -0
  154. multiagentos-0.4.0/tests/test_ide_tool_calling.py +51 -0
  155. multiagentos-0.4.0/tests/test_local_process.py +38 -0
  156. multiagentos-0.4.0/tests/test_local_tool_runtime.py +100 -0
  157. multiagentos-0.4.0/tests/test_mcp_cost_boundary.py +29 -0
  158. multiagentos-0.4.0/tests/test_mcp_policy.py +69 -0
  159. multiagentos-0.4.0/tests/test_mcp_runtime.py +87 -0
  160. multiagentos-0.4.0/tests/test_mcp_server.py +115 -0
  161. multiagentos-0.4.0/tests/test_model_agent.py +47 -0
  162. multiagentos-0.4.0/tests/test_model_backed_agent.py +82 -0
  163. multiagentos-0.4.0/tests/test_model_capability.py +59 -0
  164. multiagentos-0.4.0/tests/test_model_control.py +54 -0
  165. multiagentos-0.4.0/tests/test_model_factory.py +26 -0
  166. multiagentos-0.4.0/tests/test_model_failover.py +67 -0
  167. multiagentos-0.4.0/tests/test_model_health.py +82 -0
  168. multiagentos-0.4.0/tests/test_model_intelligence_sync.py +132 -0
  169. multiagentos-0.4.0/tests/test_model_runtime.py +42 -0
  170. multiagentos-0.4.0/tests/test_multi_agent_runtime.py +78 -0
  171. multiagentos-0.4.0/tests/test_multi_agent_workflow.py +508 -0
  172. multiagentos-0.4.0/tests/test_native_provider_tool_calling.py +67 -0
  173. multiagentos-0.4.0/tests/test_openai_chat_agent.py +52 -0
  174. multiagentos-0.4.0/tests/test_orchestrator.py +116 -0
  175. multiagentos-0.4.0/tests/test_persistent_model_cli.py +113 -0
  176. multiagentos-0.4.0/tests/test_planning_state.py +38 -0
  177. multiagentos-0.4.0/tests/test_profile_contracts.py +51 -0
  178. multiagentos-0.4.0/tests/test_profiles_installer.py +31 -0
  179. multiagentos-0.4.0/tests/test_project_routing.py +65 -0
  180. multiagentos-0.4.0/tests/test_provider_config.py +74 -0
  181. multiagentos-0.4.0/tests/test_provider_discovery.py +98 -0
  182. multiagentos-0.4.0/tests/test_provider_materializer.py +56 -0
  183. multiagentos-0.4.0/tests/test_provider_registry.py +101 -0
  184. multiagentos-0.4.0/tests/test_provider_runtime_loader.py +33 -0
  185. multiagentos-0.4.0/tests/test_quota_helpers.py +31 -0
  186. multiagentos-0.4.0/tests/test_quota_intelligence.py +42 -0
  187. multiagentos-0.4.0/tests/test_quota_provider_metadata.py +33 -0
  188. multiagentos-0.4.0/tests/test_quota_routing.py +50 -0
  189. multiagentos-0.4.0/tests/test_release_security_boundaries.py +59 -0
  190. multiagentos-0.4.0/tests/test_repository_runtime.py +77 -0
  191. multiagentos-0.4.0/tests/test_repository_tools.py +46 -0
  192. multiagentos-0.4.0/tests/test_routing_explainability.py +77 -0
  193. multiagentos-0.4.0/tests/test_runtime_adapters.py +43 -0
  194. multiagentos-0.4.0/tests/test_tool_calling_runtime.py +40 -0
  195. multiagentos-0.4.0/tests/test_unified_checkpoints.py +151 -0
  196. multiagentos-0.4.0/tests/test_validation_runtime.py +41 -0
  197. multiagentos-0.4.0/tests/test_vyrelon_runtime.py +213 -0
@@ -0,0 +1,7 @@
1
+ Metadata-Version: 2.4
2
+ Name: multiagentos
3
+ Version: 0.4.0
4
+ Summary: Local-first, GitHub-native multi-agent orchestration foundation for VYRELON
5
+ Requires-Python: >=3.10
6
+ Provides-Extra: chatgpt
7
+ Requires-Dist: openai>=1.0; extra == "chatgpt"
@@ -0,0 +1,301 @@
1
+ # MultiAgentOS
2
+
3
+ MultiAgentOS is the foundation for VYRELON, a local-first, GitHub-native multi-agent development orchestrator.
4
+
5
+ ## Core principles
6
+
7
+ - Local-first: filesystem, shell, processes and Git are first-class.
8
+ - GitHub-native: repository, branch, commit, issue, pull request, review and CI lifecycle are first-class.
9
+ - Chat-Agent agnostic with ChatGPT as the default primary conversational agent; Gemini, Claude and other providers can participate.
10
+ - Multi-AI assignment: agents can use explicit, pool/fallback, or automatic model routing.
11
+ - Executable lifecycle: Understand -> Plan -> Delegate -> Execute -> Verify -> Review -> Handoff.
12
+ - Profile-driven: React Native, Android Native and iOS Native extend the common core.
13
+ - Policy-controlled writes: repository and GitHub mutations are explicit runtime capabilities.
14
+
15
+ ## Current runtime
16
+
17
+ VYRELON currently includes:
18
+
19
+ - provider-neutral WorkUnit, Agent, Model, Runtime, Profile, and GitHub contracts
20
+ - deterministic multi-AI routing
21
+ - model adapters for generic CLI and HTTP JSON endpoints
22
+ - model-backed agent execution
23
+ - policy-controlled local process and GitHub runtimes
24
+ - evidence-based technology profile detection
25
+ - executable project bootstrap via the MultiAgentOS CLI
26
+ - explicit planning contracts and persistent WorkUnit state
27
+ - unified VYRELON runtime facade for project, Git, and GitHub control
28
+ - provider-neutral Chat Agent contracts and persistent VYRELON agent rules
29
+ - local stdlib unittest validation plus GitHub Actions CI
30
+ - read-only project status and durable checkpoint inspection
31
+ - project-scoped execution configuration for selecting the CLI Agent/Model
32
+ - direct project Chat Agent CLI with optional persistent conversation sessions
33
+ - provider capability discovery with OpenAI, Anthropic, and Gemini native defaults
34
+ - persistent model capability, quota, and health intelligence with cooldown-aware routing
35
+ - unified model control-plane inspection and provider-neutral routing explainability
36
+ - VYRELON stdio MCP server with read-only-by-default local tool exposure
37
+
38
+ ## CLI
39
+
40
+ After installation:
41
+
42
+ multiagentos detect .
43
+ multiagentos init .
44
+ multiagentos init . --component vyrelon
45
+ multiagentos init . --component multi-agent
46
+ multiagentos init . --component all
47
+ multiagentos status .
48
+ multiagentos run --path . --objective "run tests" -- python -m unittest discover -s tests -v
49
+ multiagentos run --path . --agent custom-executor --model custom-process --objective "run tests" -- python -m unittest discover -s tests -v
50
+ multiagentos resume <work-unit-id> --path .
51
+ multiagentos chat --path . --objective "inspect the current project"
52
+ multiagentos chat --path . --execute --objective "run the smoke test" -- python -m unittest discover -s tests -v
53
+ multiagentos chat --path . --objective "continue our conversation" --session project-1
54
+ multiagentos mcp serve --path .
55
+ multiagentos mcp serve --path . --allow-write --allow-process
56
+ python tests/mcp_stdio_smoke.py
57
+ multiagentos github probe eaglesjo/MultiAgentOS
58
+ multiagentos models discover .
59
+ multiagentos models control .
60
+ multiagentos models capabilities .
61
+ multiagentos models quota .
62
+ multiagentos models health .
63
+ multiagentos models explain . --agent developer
64
+
65
+ The initializer supports independent installation:
66
+
67
+ - `vyrelon`: VYRELON runtime, policy, lifecycle, planning/state, project profile and execution configuration.
68
+ - `multi-agent`: role catalog and profile-specific multi-agent definitions.
69
+ - `all`: both components.
70
+
71
+ The selected mode is recorded in:
72
+
73
+ .multiagentos/components.json
74
+
75
+ VYRELON installation also writes:
76
+
77
+ .multiagentos/execution.json
78
+ .multiagentos/chat.json
79
+
80
+ The default execution configuration is:
81
+
82
+ {
83
+ "version": 1,
84
+ "runtime": "process",
85
+ "agent_id": "cli-executor",
86
+ "model_id": "local-process"
87
+ }
88
+
89
+ The `run` and `resume` commands load Agent/Model IDs from this project configuration and resolve them through VYRELON's provider-neutral Agent/AI registries. `--agent` and `--model` are explicit per-invocation overrides. An unknown or incompatible Agent/Model pair is rejected instead of silently constructing a new execution contract. The runtime and process capability remain controlled by VYRELON; the configuration does not contain credentials or executable command definitions.
90
+
91
+ Multi-agent installation additionally writes:
92
+
93
+ .multiagentos/agents.json
94
+
95
+ The project Chat Agent defaults to ChatGPT and is resolved through VYRELON's provider-neutral Chat Agent registry. Gemini, Claude, and other registered providers can be selected by changing `chat.json`; the selected Chat Agent still has no execution authority above VYRELON.
96
+
97
+ The `chat` command sends a conversational request through the configured Chat Agent and returns its summary, proposed plan steps, findings, artifacts, and provider evidence as JSON. It does not execute filesystem, Git, GitHub, process, verification, or review actions unless --execute is explicitly supplied with a user-provided command. In execution mode, the Chat Agent still only supplies intent/plan; VYRELON's configured execution Agent/Model owns the explicit command and lifecycle. Use `--session <id>` to persist conversation turns under `.multiagentos/sessions/`; credentials are never stored there. Provider SDKs remain optional and CI tests use injected adapters.
98
+
99
+ No provider credentials or API keys are written to the project.
100
+
101
+ The read-only `status` command reports installed components, detected profiles, execution configuration, agent catalog entries, WorkUnits, and durable workflow checkpoints. The `run` command executes a local command through the VYRELON WorkUnit lifecycle, while `resume` reloads a durable orchestration checkpoint and continues it. It makes interrupted or resumable work visible without granting the CLI any additional execution authority.
102
+
103
+ ## Architecture
104
+
105
+ Core Orchestration
106
+ |
107
+ +-- Agent Contracts
108
+ +-- AI Routing
109
+ +-- Lifecycle
110
+ |
111
+ Runtime Adapters
112
+ |
113
+ +-- Local Process
114
+ +-- Model CLI
115
+ +-- Model HTTP
116
+ +-- GitHub
117
+ +-- MCP Server
118
+ |
119
+ Technology Profiles
120
+ |
121
+ +-- React Native
122
+ +-- Android Native
123
+ +-- iOS Native
124
+
125
+ ## Cost-free baseline
126
+
127
+ MultiAgentOS does not require a paid AI API key for its core local development path. The VYRELON MCP runtime provides local filesystem READ/WRITE, patch application, and process/test execution independently of a model-provider API.
128
+
129
+ The verified baseline is documented in [Cost-Free Development Baseline](docs/COSTFREE_DEVELOPMENT.md). The current VYRELON runtime, filesystem WRITE/READ, `patch.apply`, `shell.run`, and local MCP/runtime tests are verified. Secure MCP Tunnel is ready for remote MCP integration; ChatGPT Web write-capable MCP access remains plan-gated by OpenAI's current product availability.
130
+
131
+ ## Validation
132
+
133
+ python -m unittest discover -s tests -v
134
+
135
+ GitHub Actions runs the same test suite on pull requests and pushes.
136
+
137
+
138
+ ### Chat Agent adapter resolution
139
+
140
+ VYRELON resolves the configured Chat Agent through a provider-neutral adapter registry:
141
+
142
+ .multiagentos/chat.json
143
+ |
144
+ v
145
+ ChatAgentRegistry
146
+ |
147
+ v
148
+ ChatAdapterRegistry
149
+ |
150
+ +-- ChatGPT -> OpenAI adapter
151
+ +-- Gemini -> provider adapter when registered
152
+ +-- Claude -> provider adapter when registered
153
+
154
+ The core does not require a provider SDK. The OpenAI/ChatGPT adapter remains optional and obtains credentials from the provider's normal environment/authentication mechanism. A Chat Agent can propose intent and plans, but actual filesystem, Git, GitHub, process, verification, review, and approval actions remain VYRELON responsibilities.
155
+
156
+
157
+ ## VYRELON MCP server
158
+
159
+ VYRELON can expose its local tool surface as a stdio MCP server:
160
+
161
+ multiagentos mcp serve --path /path/to/project
162
+
163
+ The default surface is read-only. Filesystem write/patch tools require `--allow-write`, and shell execution requires `--allow-process`.
164
+
165
+ This server is intended to be launched locally by a transport such as OpenAI Secure MCP Tunnel; MultiAgentOS does not open a public inbound MCP port or provision the tunnel automatically.
166
+
167
+ ## User setup and integrations
168
+
169
+ VYRELON is delivered as an installable local runtime. The MCP server remains free and independently usable; OpenAI Secure MCP Tunnel is an optional connection path.
170
+
171
+ ### Install
172
+
173
+ From the MultiAgentOS checkout:
174
+
175
+ ```bash
176
+ python -m pip install .
177
+ multiagentos --help
178
+ ```
179
+
180
+ Initialize VYRELON in a project:
181
+
182
+ ```bash
183
+ cd your-project
184
+ multiagentos init . --component all
185
+ multiagentos status .
186
+ ```
187
+
188
+ ### Connection model
189
+
190
+ VYRELON has **one MCP server**. GitHub access and local-machine access are complementary paths:
191
+
192
+ ```text
193
+ +--> ChatGPT GitHub app --> GitHub
194
+ /
195
+ ChatGPT / Codex -------+
196
+ \
197
+ +--> Secure MCP Tunnel (optional)
198
+ |
199
+ v
200
+ tunnel-client
201
+ |
202
+ v
203
+ VYRELON MCP Server
204
+ |
205
+ v
206
+ Local Project
207
+ ```
208
+
209
+ The GitHub connection does not expose the developer's local filesystem. The tunnel connection does not create another MCP server.
210
+
211
+ ### Four practical paths
212
+
213
+ | Need | Connection |
214
+ | --- | --- |
215
+ | ChatGPT works on a remote repository | ChatGPT -> GitHub app -> authorized repository |
216
+ | VYRELON works with GitHub locally | VYRELON -> `gh` -> GitHub |
217
+ | Any MCP client uses VYRELON locally | MCP Client -> VYRELON MCP Server |
218
+ | ChatGPT/Codex uses the local project | ChatGPT/Codex -> Secure MCP Tunnel -> `tunnel-client` -> VYRELON MCP Server |
219
+
220
+ ### ChatGPT + GitHub
221
+
222
+ Connect GitHub in ChatGPT Settings -> Apps, authorize the GitHub application, and grant access to the repositories that should be available.
223
+
224
+ Then use a normal ChatGPT conversation with the repository URL and development task. Repository-level `AGENTS.md` / Agent Skills guidance can be used alongside VYRELON; the project's own engineering instructions remain authoritative.
225
+
226
+ ### Local VYRELON + GitHub
227
+
228
+ ```bash
229
+ gh auth login
230
+ gh auth status
231
+ multiagentos github probe OWNER/REPOSITORY
232
+ ```
233
+
234
+ GitHub mutations remain controlled by VYRELON policy and approval.
235
+
236
+ ### Local VYRELON MCP
237
+
238
+ ```bash
239
+ multiagentos mcp serve --path /absolute/path/to/project
240
+ ```
241
+
242
+ The default MCP surface is read-only. Write and process capabilities require explicit flags:
243
+
244
+ ```bash
245
+ multiagentos mcp serve \
246
+ --path /absolute/path/to/project \
247
+ --allow-write \
248
+ --allow-process
249
+ ```
250
+
251
+ No OpenAI account, `tunnel_id`, or `tunnel-client` is required for the standalone MCP path.
252
+
253
+ ### ChatGPT/Codex + local VYRELON
254
+
255
+ The current managed-runtime flow is:
256
+
257
+ ```bash
258
+ tunnel-client runtimes connect \
259
+ --alias vyrelon-local \
260
+ --tunnel-id tunnel_... \
261
+ --runtime-api-key env:CONTROL_PLANE_API_KEY \
262
+ --mcp-command "multiagentos mcp serve --path /absolute/path/to/project"
263
+
264
+ tunnel-client runtimes status vyrelon-local --json
265
+ ```
266
+
267
+ After the runtime is healthy, configure ChatGPT with **Connection: Tunnel** and the corresponding tunnel.
268
+
269
+ The same VYRELON MCP server is used locally and through the tunnel. Secure MCP Tunnel and `tunnel-client` are transport/connection infrastructure, not another MCP server.
270
+
271
+ ### Documentation
272
+
273
+ Start here:
274
+
275
+ - [VYRELON Connection Guide](docs/VYRELON_CONNECTIONS.md) — complete connection model and developer setup.
276
+ - [Getting Started](docs/GETTING_STARTED.md) — clean-machine installation and validation.
277
+ - [Secure MCP Tunnel Setup](docs/MCP_TUNNEL.md) — OpenAI tunnel/runtime setup and troubleshooting.
278
+ - [VYRELON GitHub Connection](docs/VYRELON_GITHUB_CONNECTION.md) — local GitHub authentication and policy.
279
+ - [VYRELON MCP Architecture](docs/ARCHITECTURE_DECISIONS.md) — locked one-server architecture.
280
+
281
+ ### Integration boundaries
282
+
283
+ - **GitHub:** remote/durable repository state and collaboration.
284
+ - **VYRELON MCP:** local project and local tool boundary.
285
+ - **Secure MCP Tunnel:** optional private transport between OpenAI products and the local VYRELON MCP server.
286
+ - **`tunnel-client`:** tunnel-side runtime/forwarding process.
287
+ - **VYRELON:** remains independently usable without OpenAI.
288
+
289
+ The VYRELON MCP server has CI/install-smoke coverage, including a dependency-free stdio client validating initialize, tools/list, and filesystem.read. Real ChatGPT/Codex tunnel verification remains environment-specific because it requires an actual OpenAI workspace, tunnel, runtime API key, and running `tunnel-client`.
290
+
291
+ Do not expose a local MCP endpoint directly to the public internet or commit GitHub/provider/tunnel credentials.
292
+
293
+ ## Installation
294
+
295
+ Install the current release from PyPI:
296
+
297
+ ```bash
298
+ python -m pip install multiagentos
299
+ ```
300
+
301
+ Release automation uses PyPI Trusted Publishing from GitHub Actions; no long-lived PyPI API token is required.
@@ -0,0 +1 @@
1
+ """Built-in VYRELON agent catalog."""
@@ -0,0 +1,52 @@
1
+ """Built-in specialist agent definitions."""
2
+
3
+ from core.contracts.agent import AgentContract
4
+
5
+ _COMMON = {
6
+ "planner": ({"planning"}, {"filesystem.read"}),
7
+ "researcher": ({"research"}, {"network.read"}),
8
+ "editor": ({"editing"}, {"filesystem.read", "filesystem.write"}),
9
+ "executor": ({"execution"}, {"filesystem.read", "filesystem.write", "process"}),
10
+ "tester": ({"testing"}, {"filesystem.read", "process"}),
11
+ "debugger": ({"debugging"}, {"filesystem.read", "process"}),
12
+ "reviewer": ({"review"}, {"filesystem.read"}),
13
+ }
14
+
15
+ _PROFILE_SPECIALISTS = {
16
+ "react-native": {
17
+ "architect": ({"architecture", "react-native"}, {"filesystem.read"}),
18
+ "developer": ({"code", "react-native"}, {"filesystem.read", "filesystem.write"}),
19
+ "ui": ({"ui", "react-native"}, {"filesystem.read", "filesystem.write"}),
20
+ "navigation": ({"navigation", "react-native"}, {"filesystem.read", "filesystem.write"}),
21
+ "state-management": ({"state-management", "react-native"}, {"filesystem.read", "filesystem.write"}),
22
+ },
23
+ "android-native": {
24
+ "android-architect": ({"architecture", "android"}, {"filesystem.read"}),
25
+ "kotlin-developer": ({"code", "kotlin"}, {"filesystem.read", "filesystem.write"}),
26
+ "jetpack-compose": ({"ui", "compose", "kotlin"}, {"filesystem.read", "filesystem.write"}),
27
+ "gradle": ({"build", "gradle"}, {"filesystem.read", "filesystem.write", "process"}),
28
+ },
29
+ "ios-native": {
30
+ "ios-architect": ({"architecture", "ios"}, {"filesystem.read"}),
31
+ "swift-developer": ({"code", "swift"}, {"filesystem.read", "filesystem.write"}),
32
+ "swiftui": ({"ui", "swiftui"}, {"filesystem.read", "filesystem.write"}),
33
+ "xcode": ({"build", "xcode"}, {"filesystem.read", "filesystem.write", "process"}),
34
+ },
35
+ }
36
+
37
+
38
+ def build_agent_catalog(profile_ids: tuple[str, ...] = ()) -> tuple[AgentContract, ...]:
39
+ definitions: dict[str, tuple[set[str], set[str]]] = dict(_COMMON)
40
+ for profile_id in profile_ids:
41
+ definitions.update(_PROFILE_SPECIALISTS.get(profile_id, {}))
42
+ return tuple(
43
+ AgentContract(
44
+ id=agent_id,
45
+ role=agent_id,
46
+ capabilities=frozenset(capabilities),
47
+ tools=frozenset(tools),
48
+ metadata={"profiles": list(profile_ids)},
49
+ kind="specialist",
50
+ )
51
+ for agent_id, (capabilities, tools) in sorted(definitions.items())
52
+ )
@@ -0,0 +1,11 @@
1
+ """Agent catalog registration utilities."""
2
+
3
+ from core.registry import AgentRegistry
4
+ from agents.catalog import build_agent_catalog
5
+
6
+
7
+ def build_registry(profile_ids: tuple[str, ...] = ()) -> AgentRegistry:
8
+ registry = AgentRegistry()
9
+ for agent in build_agent_catalog(profile_ids):
10
+ registry.register(agent)
11
+ return registry
@@ -0,0 +1,38 @@
1
+ """VYRELON orchestration core."""
2
+
3
+ from core.chat_agent_bridge import ChatAgentBridge, ChatAgentExecutionResult, ChatAgentRequest, ChatAgentResponse
4
+ from core.chat_agent_registry import ChatAgentRegistry, default_chat_agents
5
+ from core.chat_agent_router import ChatAgentAssignment, ChatAgentRouter, ChatAgentRoutingStrategy
6
+ from core.chat_session import ChatSession, ChatSessionStore
7
+ from core.contracts.chat_agent import ChatAgentContract, ChatAgentProvider
8
+ from core.contracts.checkpoint import WorkflowCheckpoint
9
+ from core.contracts.execution import AgentExecutor, ResultReviewer, ResultVerifier, ReviewDecision
10
+ from core.contracts.human_review import HumanReviewDecision
11
+ from core.contracts.resume import WorkflowResumeContext
12
+ from core.contracts.handoff import ReviewContext
13
+ from core.contracts.model_runtime import ModelAdapter, ModelRequest, ModelResponse
14
+ from core.contracts.profile import DetectionResult, ProfileSpec
15
+ from core.contracts.runtime import ExecutionRequest, RuntimeExecutor
16
+ from core.delegation import Delegation, DelegationEngine
17
+ from core.lifecycle import ExecutionInterrupted, LifecycleCoordinator, LifecycleError
18
+ from core.orchestrator import OrchestrationResult, Orchestrator
19
+ from core.planning import BasicPlanner
20
+ from core.state import WorkStateStore
21
+ from core.registry import AIRegistry, AgentRegistry
22
+ from core.routing import AIRouter, Assignment, RoutingStrategy
23
+
24
+ __all__ = [
25
+ "AIRegistry", "AgentRegistry", "ChatAgentAssignment", "ChatAgentBridge", "ChatAgentRouter", "ChatAgentRoutingStrategy", "ChatSession", "ChatSessionStore", "ChatAgentExecutionResult", "ChatAgentRequest", "ChatAgentResponse", "ChatAgentRegistry", "ChatAgentContract", "ChatAgentProvider", "AIRouter", "Assignment", "RoutingStrategy",
26
+ "AgentExecutor", "ResultVerifier", "ResultReviewer", "ReviewDecision", "HumanReviewDecision", "WorkflowResumeContext", "WorkflowCheckpoint", "ReviewContext",
27
+ "ModelAdapter", "ModelRequest", "ModelResponse",
28
+ "ExecutionRequest", "RuntimeExecutor",
29
+ "DetectionResult", "ProfileSpec",
30
+ "Delegation", "DelegationEngine",
31
+ "ExecutionInterrupted", "LifecycleCoordinator", "LifecycleError",
32
+ "OrchestrationResult", "Orchestrator", "BasicPlanner", "WorkStateStore",
33
+ ]
34
+
35
+ from core.multi_agent_workflow import AgentStageResult, MultiAgentWorkflow, MultiAgentWorkflowResult
36
+
37
+ from core.artifacts import ArtifactStore
38
+ from core.contracts.handoff import ArtifactContract
@@ -0,0 +1,47 @@
1
+ """Persistent artifact registry for VYRELON workflows."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from pathlib import Path
7
+
8
+ from core.contracts.handoff import ArtifactContract
9
+
10
+
11
+ class ArtifactStore:
12
+ """Persist artifact metadata separately from transient model output."""
13
+
14
+ def __init__(self, root: Path) -> None:
15
+ self.root = root
16
+ self.root.mkdir(parents=True, exist_ok=True)
17
+
18
+ def save(self, artifact: ArtifactContract) -> Path:
19
+ artifact.validate()
20
+ path = self.root / f"{artifact.id}.json"
21
+ payload = {
22
+ "id": artifact.id,
23
+ "kind": artifact.kind,
24
+ "producer_agent_id": artifact.producer_agent_id,
25
+ "content_ref": artifact.content_ref,
26
+ "summary": artifact.summary,
27
+ "media_type": artifact.media_type,
28
+ "metadata": artifact.metadata,
29
+ }
30
+ path.write_text(
31
+ json.dumps(payload, indent=2, ensure_ascii=False, default=str) + "\n",
32
+ encoding="utf-8",
33
+ )
34
+ return path
35
+
36
+ def load(self, artifact_id: str) -> ArtifactContract:
37
+ path = self.root / f"{artifact_id}.json"
38
+ data = json.loads(path.read_text(encoding="utf-8"))
39
+ return ArtifactContract(
40
+ id=data["id"],
41
+ kind=data["kind"],
42
+ producer_agent_id=data["producer_agent_id"],
43
+ content_ref=data["content_ref"],
44
+ summary=data.get("summary", ""),
45
+ media_type=data.get("media_type", "text/plain"),
46
+ metadata=dict(data.get("metadata", {})),
47
+ )