You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e9003f0
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+10-6Lines changed: 10 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,7 +35,8 @@ Pre-alpha, and usable from source. Milestones M0 to M4 are approved, and the fir
35
35
credentials and instructions to ignore safety, and promoted through the permission gate with a
36
36
receipt.
37
37
38
-
Not there yet: scheduled tasks and MCP (M5a), messaging gateways and subagents (M5b),
38
+
Not there yet: scheduled tasks and the rest of MCP (M5a: the client is built at 060, the server
39
+
with approvals and the authorization roles follow), messaging gateways and subagents (M5b),
39
40
the native desktop shell and signed releases (M6), executable skills in a sandbox (M7). `ROADMAP.md` carries the live status of every
40
41
slice, and the [Milestones](#milestones) section below explains how to read it.
41
42
@@ -77,8 +78,9 @@ model registry is `config/llm.exs`; keys come from the environment (`.env` is gi
77
78
pages: `/` conversations, `/s/:id` a conversation and `/s/:id/receipts` its receipts, `/search`
78
79
full-text search, `/personas` and `/memory` the persona and its memory (with the semantic tab and
79
80
the embedding model's download), `/skills` the skills, the changes waiting for your decision and
80
-
the learn form, `/permissions` the rules and pending approvals, `/settings` the
81
-
export. `mix trinity.export` and `mix trinity.import` do what `/settings` does from a terminal;
81
+
the learn form, `/mcp` the MCP servers you connect to (their health and the tools they
82
+
contribute), `/permissions` the rules and pending approvals (a server's question to you, when
83
+
one of its tools asks for input mid-call, is answered there too), `/settings` the export. `mix trinity.export` and `mix trinity.import` do what `/settings` does from a terminal;
82
84
`docs/backup.md` explains the archive.
83
85
84
86
Semantic recall needs the local embedding model (91 MB, downloaded from the memory page on your
@@ -161,7 +163,7 @@ catalogued effect to it: Trinity proposes, Requisition decides, and Trinity keep
161
163
Trinity refuses to start if the module is absent or does not implement `Trinity.Authority`. See
162
164
`docs/adr/0008-authority-is-an-adapter.md` and `docs/adr/0010-authority-selection-at-boot.md`.
163
165
164
-
**Ultraviolet** is the purple-team tool. Add it to `config :trinity, :mcp_servers`like any other MCP server. Its
166
+
**Ultraviolet** is the purple-team tool. Add it on the `/mcp` page like any other MCP server (since slice 060 a server is a row, not a config entry). Its
165
167
read tools return query-receipted results, its proposal tools return proposal ids rather than effects, and content
166
168
coming back from it is tagged untrusted like any other external content.
167
169
@@ -179,8 +181,10 @@ every project space.
179
181
the BEAM from the same organisation, on Hex as `beam_mcp`. Trinity depends on it since slice 059,
180
182
pinned at 0.8.0 and reached only through the `Trinity.MCP` boundary; slice 059's `FINDINGS.md`
181
183
measures what it ships against the 2026-07-28 checklist, and the MCP phase (milestone M5a) builds
182
-
Trinity's client driver, the approval loop and authorization above it. The client side and the
183
-
authorization server are Trinity's own work. `docs/adr/0007-mcp-2026-07-28-target-and-library.md`
184
+
Trinity's client driver (slice 060: a thin driver over the core's decoder and validator, stdio
185
+
and Streamable HTTP, 2026-07-28 preferred and 2025-11-25 as the fallback, a server's mid-call
186
+
question answered as an approval), the approval loop and authorization above it. The client side
187
+
and the authorization server are Trinity's own work. `docs/adr/0007-mcp-2026-07-28-target-and-library.md`
Copy file name to clipboardExpand all lines: docs/01-architecture.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -90,7 +90,7 @@ without anything failing.
90
90
|`Trinity.Memory`| Always-on tiers with their budget and consolidator (030), search (031), semantic store and retrieval (032), compaction (023) | LLM (summaries/embeddings), Repo |
91
91
|`Trinity.Skills`| SKILL.md parsing, registry, loader, manager, scanner (as built at 040: parser, sources, registry, index, the three tools; at 041: staging, promotion, manager, scanner, diff, learn, `skill_manage` and `learn`) | Repo, Permissions, **Effects**, **Receipts**, Sandbox (as built at 041: Tools, Memory, Permissions, Receipts and LLM; Effects is not a dependency: the promotion is not a tool call, it writes its own effect receipt; Tools never depends on Skills) |
|`Trinity.MCP`| Client manager, tool bridge, server (as built at 059: the boundary alone, holding the core's version, its JSON depth and its telemetry event names) | Tools, **Effects**, **Permissions**, Memory (as built at 059: a top-level boundary, like `Trinity.Smoke`, with `deps: [Trinity, BeamMCP.JSON]`; the boundary compiler checks every call into the `beam_mcp` application and this boundary alone lists its modules) |
93
+
| `Trinity.MCP` | Client manager, tool bridge, server (as built at 059: the boundary alone, holding the core's version, its JSON depth and its telemetry event names; at 060: `Servers` and `ServerConfig` (the rows), `Supervisor` and `Boot` (one `Client` per enabled row), `Client` with its `Wire` (the outbound request, the headers, the core's decoder and validator) and two transports (`Transport.Stdio`, a child on a Port; `Transport.HTTP`, one POST per request), `Bridge` (the one tool module every MCP tool runs through) and `Client.Auth` (062's seam, a static token at 060)) | Tools, **Effects**, **Permissions**, Memory (as built at 059: a top-level boundary, like `Trinity.Smoke`, with `deps: [Trinity, BeamMCP.JSON]`; the boundary compiler checks every call into the `beam_mcp` application and this boundary alone lists its modules; at 060 the deps are `[Trinity, BeamMCP.JSON, BeamMCP.Schema]`, Trinity's tools, permissions and receipts reached through `Trinity`'s exports, and `Trinity.Application` and `TrinityWeb` list `Trinity.MCP`) |
Copy file name to clipboardExpand all lines: docs/05-data-model.md
+15-3Lines changed: 15 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -161,6 +161,8 @@ One row per request, the audit trail this slice owns; slice 024 reads it for dec
161
161
| decided_at, decided_by | timestamp, string | every decided row has both ("expiry" is a decider) |
162
162
| consumed_at | nullable | a "once" allowance or a denial is spent by the execution that reads it |
163
163
| expires_at | timestamp | pending past it becomes "expired" with decision "deny" |
164
+
| request | map, nullable | slice 060: a server's input request as sent (`kind`, `server`, `inputRequests`), when the approval is a multi-round-trip question and not a yes or no; the server's `requestState` is never here (it lives in the client process) |
165
+
| answer | map, nullable | slice 060: the answer the decision carried, the revision's `inputResponses` map keyed as `inputRequests` were |
164
166
165
167
### tasks (Slice 050)
166
168
| column | type | notes |
@@ -230,9 +232,19 @@ and `receipt_hash`. Chain scopes: `session:<id>` and `boot`.
effect and risk overrides. A server config claiming `:catalog` is refused at load and receipted.
235
+
### mcp_servers (Slice 060, as built)
236
+
One row per server the client connects to; the row's `name` is the namespace segment of every tool it contributes.
237
+
| column | type | notes |
238
+
|---|---|---|
239
+
| name | string, unique |`[a-z0-9][a-z0-9_-]{0,31}`; the tools are `mcp:<name>:<tool>`|
240
+
| transport | string | "stdio" \| "http" |
241
+
| command, args | string, {array, string} | stdio: the child and its arguments |
242
+
| url | string | http: one POST endpoint |
243
+
| env_refs | {array, string} | names of environment variables passed to a stdio child; never a value (the child sees the process basics and these, nothing else of Trinity's environment) |
244
+
| enabled | boolean | a client runs for an enabled row |
245
+
| effect_default | string | "none" \| "artifact"; the effect of every tool the row does not override |
246
+
| tool_overrides | map | tool name to `{"effect": …}`; `catalog` is refused by the changeset and, on a row that carries it anyway, at load with a decision receipt on the chain scope `mcp:<name>`. No override lowers a tool's tier: it is `:ask` for every namespaced name, and a rule on the permissions page is what allows one |
247
+
| last_error | text, nullable ||
236
248
237
249
### task_runs (Slice 050)
238
250
`task_id`, `scheduled_at`, `session_id`, `status`, `summary`, `error`. Unique on `(task_id, scheduled_at)` so a
0 commit comments