@mamund/grail 0.0.0-stage → 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +328 -2
- package/affordanceModel.js +23 -0
- package/affordanceRegistry.js +14 -0
- package/bindings/binding.js +229 -0
- package/bindings/httpBinding.js +173 -0
- package/bindings/nodeBinding.js +25 -0
- package/bindings/stdioBinding.js +58 -0
- package/cli/grail-cli.js +565 -0
- package/client.js +77 -0
- package/config-loader/loadEnvironment.js +71 -0
- package/docs/ENVIRONMENT.md +381 -0
- package/docs/grail-trust-model.md +665 -0
- package/examples/cli-tour/README.md +346 -0
- package/examples/cli-tour/capabilities/farewell.js +3 -0
- package/examples/cli-tour/capabilities/hello.js +3 -0
- package/examples/cli-tour/config/goal.json +3 -0
- package/examples/cli-tour/config/inputs.json +3 -0
- package/examples/cli-tour/config/observations.json +23 -0
- package/examples/cli-tour/config/registry.json +48 -0
- package/examples/cli-tour/config/worldstate.json +4 -0
- package/examples/cli-tour/g-loop.sh +7 -0
- package/examples/cli-tour/inputs/jane.json +3 -0
- package/examples/cli-tour/inputs/mike.json +3 -0
- package/examples/cli-tour/inputs/ruth.json +3 -0
- package/grail.js +59 -0
- package/images/grail-release-banner.png +0 -0
- package/index.js +2 -0
- package/observationStore.js +110 -0
- package/package.json +57 -4
- package/schemas/goal.schema.json +14 -0
- package/schemas/inputs.schema.json +6 -0
- package/schemas/observations.schema.json +75 -0
- package/schemas/registry.schema.json +285 -0
- package/schemas/worldstate.schema.json +7 -0
- package/server.js +201 -0
- package/utils/loadJSON.js +33 -0
- package/utils/validateWithSchema.js +42 -0
- package/worldState.js +36 -0
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
# GRAIL Trust Model
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
|
|
5
|
+
GRAIL is a runtime for autonomously pursuing a declared goal within a deliberately constructed world.
|
|
6
|
+
|
|
7
|
+
A GRAIL world defines the conditions that matter, the affordances available to change those conditions, the relationships among those affordances, and the bindings used to invoke executable capabilities.
|
|
8
|
+
|
|
9
|
+
This architecture depends on explicit trust relationships.
|
|
10
|
+
|
|
11
|
+
GRAIL does not attempt to understand the application domain or independently determine whether a business operation is safe, appropriate, or authorized. Those responsibilities remain with the capabilities that perform the work.
|
|
12
|
+
|
|
13
|
+
Instead, GRAIL operates within a world that has already been composed and accepted for execution.
|
|
14
|
+
|
|
15
|
+
The central principle of the GRAIL trust model is:
|
|
16
|
+
|
|
17
|
+
> **Autonomy operates inside a trusted world.**
|
|
18
|
+
|
|
19
|
+
This document identifies what GRAIL trusts, where those trust relationships end, and which security responsibilities belong to the runtime, the world definition, and individual capabilities.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 1. Scope
|
|
24
|
+
|
|
25
|
+
This document describes the architectural trust assumptions of GRAIL.
|
|
26
|
+
|
|
27
|
+
It is not a complete security architecture or formal threat model. It does not prescribe particular authentication systems, authorization models, credential stores, network controls, or deployment environments.
|
|
28
|
+
|
|
29
|
+
Its purpose is to establish the boundaries within which those mechanisms operate.
|
|
30
|
+
|
|
31
|
+
The trust model covers:
|
|
32
|
+
|
|
33
|
+
- GRAIL world definitions
|
|
34
|
+
- the GRAIL runtime
|
|
35
|
+
- affordances and their declared effects
|
|
36
|
+
- executable capabilities
|
|
37
|
+
- bindings
|
|
38
|
+
- inputs and outputs
|
|
39
|
+
- worldstate
|
|
40
|
+
- observations
|
|
41
|
+
- design-time tools
|
|
42
|
+
- external systems
|
|
43
|
+
|
|
44
|
+
These relationships provide the foundation for later security controls and threat analysis.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 2. The trusted world
|
|
49
|
+
|
|
50
|
+
A GRAIL world defines the possibilities available to the runtime.
|
|
51
|
+
|
|
52
|
+
The world describes:
|
|
53
|
+
|
|
54
|
+
- the goal to be achieved
|
|
55
|
+
- the conditions relevant to that goal
|
|
56
|
+
- the affordances available to establish those conditions
|
|
57
|
+
- the preconditions governing when affordances are available
|
|
58
|
+
- the effects produced by successful affordances
|
|
59
|
+
- the inputs required by affordances
|
|
60
|
+
- the bindings connecting affordances to executable capabilities
|
|
61
|
+
|
|
62
|
+
The runtime treats this description as authoritative.
|
|
63
|
+
|
|
64
|
+
For example, if an affordance declares:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"action": "verifyCustomer",
|
|
69
|
+
"preconditions": [
|
|
70
|
+
"customerLoaded"
|
|
71
|
+
],
|
|
72
|
+
"effects": [
|
|
73
|
+
"customerVerified"
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
GRAIL assumes that successful execution of the bound capability establishes `customerVerified`.
|
|
79
|
+
|
|
80
|
+
The runtime does not independently understand what customer verification means.
|
|
81
|
+
|
|
82
|
+
This produces the first major trust assumption:
|
|
83
|
+
|
|
84
|
+
> **GRAIL trusts the world definition to accurately describe the relationships between conditions, affordances, capabilities, and effects.**
|
|
85
|
+
|
|
86
|
+
Errors in the world definition can therefore produce incorrect runtime behavior even when the runtime itself is functioning correctly.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 3. The composer
|
|
91
|
+
|
|
92
|
+
The person or process composing a GRAIL world occupies an important position in the trust model.
|
|
93
|
+
|
|
94
|
+
The composer determines which possibilities exist within the world.
|
|
95
|
+
|
|
96
|
+
The composer may:
|
|
97
|
+
|
|
98
|
+
- define conditions
|
|
99
|
+
- define affordances
|
|
100
|
+
- declare preconditions
|
|
101
|
+
- declare effects
|
|
102
|
+
- connect inputs and outputs
|
|
103
|
+
- select executable bindings
|
|
104
|
+
- add or remove capabilities
|
|
105
|
+
- determine the goal
|
|
106
|
+
|
|
107
|
+
The composer therefore has considerable authority over runtime behavior.
|
|
108
|
+
|
|
109
|
+
A world should be considered trusted only when its definition has been accepted for execution by the organization or environment in which GRAIL is operating.
|
|
110
|
+
|
|
111
|
+
The method by which that trust is established may vary. It could include human review, automated validation, testing, source control, deployment controls, artifact signing, or other mechanisms.
|
|
112
|
+
|
|
113
|
+
GRAIL does not currently prescribe a particular mechanism.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 4. The GRAIL runtime
|
|
118
|
+
|
|
119
|
+
The runtime is responsible for the mechanics of goal pursuit.
|
|
120
|
+
|
|
121
|
+
Its responsibilities include:
|
|
122
|
+
|
|
123
|
+
- loading and validating the world definition
|
|
124
|
+
- evaluating worldstate
|
|
125
|
+
- identifying unresolved conditions
|
|
126
|
+
- selecting among declared possibilities
|
|
127
|
+
- resolving inputs
|
|
128
|
+
- invoking bindings
|
|
129
|
+
- interpreting execution status
|
|
130
|
+
- capturing declared outputs
|
|
131
|
+
- applying declared effects
|
|
132
|
+
- maintaining observations
|
|
133
|
+
- detecting when available capabilities cannot resolve the current state
|
|
134
|
+
|
|
135
|
+
The runtime is trusted to perform these mechanics according to the GRAIL execution model.
|
|
136
|
+
|
|
137
|
+
The runtime is not responsible for understanding the business meaning of the operations it invokes.
|
|
138
|
+
|
|
139
|
+
For example, the runtime may know that:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
approveInvoice
|
|
143
|
+
→ invoiceApproved
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
It does not need to understand accounting policy, approval authority, vendor relationships, or financial controls.
|
|
147
|
+
|
|
148
|
+
This separation allows the application domain to remain opaque to the GRAIL runtime.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 5. Capabilities
|
|
153
|
+
|
|
154
|
+
Capabilities perform domain work.
|
|
155
|
+
|
|
156
|
+
A capability may:
|
|
157
|
+
|
|
158
|
+
- call an API
|
|
159
|
+
- query a database
|
|
160
|
+
- modify a record
|
|
161
|
+
- execute a transaction
|
|
162
|
+
- send a message
|
|
163
|
+
- invoke another service
|
|
164
|
+
- perform a calculation
|
|
165
|
+
- interact with an external system
|
|
166
|
+
|
|
167
|
+
Capabilities are trusted to perform the operations represented by their affordances.
|
|
168
|
+
|
|
169
|
+
Most importantly:
|
|
170
|
+
|
|
171
|
+
> **Capabilities are responsible for enforcing the security policies governing the actions they perform.**
|
|
172
|
+
|
|
173
|
+
These policies may include:
|
|
174
|
+
|
|
175
|
+
- authentication
|
|
176
|
+
- authorization
|
|
177
|
+
- access control
|
|
178
|
+
- business rules
|
|
179
|
+
- transaction limits
|
|
180
|
+
- data validation
|
|
181
|
+
- resource ownership
|
|
182
|
+
- regulatory requirements
|
|
183
|
+
|
|
184
|
+
The fact that GRAIL invokes a capability does not constitute authorization to perform the operation.
|
|
185
|
+
|
|
186
|
+
A capability must not assume that an invocation is authorized simply because it originated from the GRAIL runtime.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 6. Preconditions are not authorization
|
|
191
|
+
|
|
192
|
+
GRAIL preconditions determine whether an affordance is currently available within the modeled world.
|
|
193
|
+
|
|
194
|
+
They are orchestration constraints.
|
|
195
|
+
|
|
196
|
+
They are not security controls.
|
|
197
|
+
|
|
198
|
+
For example:
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"action": "refundOrder",
|
|
203
|
+
"preconditions": [
|
|
204
|
+
"orderLoaded",
|
|
205
|
+
"refundRequested"
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
may tell GRAIL that `refundOrder` is an available action.
|
|
211
|
+
|
|
212
|
+
The bound capability must still determine whether the requested refund is authorized.
|
|
213
|
+
|
|
214
|
+
A world might also contain a condition such as:
|
|
215
|
+
|
|
216
|
+
```text
|
|
217
|
+
refundApproved
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
That condition may legitimately participate in orchestration. It should not replace authorization checks performed at the capability boundary.
|
|
221
|
+
|
|
222
|
+
Worldstate can be incorrect because of configuration errors, bugs, stale information, incorrect effects, or malicious modification.
|
|
223
|
+
|
|
224
|
+
Therefore:
|
|
225
|
+
|
|
226
|
+
> **GRAIL preconditions describe when an action is possible within the modeled world. Capabilities determine whether the requested action is permitted.**
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 7. Effects and SUCCESS
|
|
231
|
+
|
|
232
|
+
Effects are one of the most important trust relationships in GRAIL.
|
|
233
|
+
|
|
234
|
+
Consider:
|
|
235
|
+
|
|
236
|
+
```text
|
|
237
|
+
verifyCustomer
|
|
238
|
+
SUCCESS
|
|
239
|
+
↓
|
|
240
|
+
customerVerified = true
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
When an affordance returns SUCCESS, GRAIL applies its declared effects.
|
|
244
|
+
|
|
245
|
+
The runtime generally cannot independently determine whether the domain meaning represented by those effects has actually been established.
|
|
246
|
+
|
|
247
|
+
GRAIL therefore assumes:
|
|
248
|
+
|
|
249
|
+
> **A successful capability invocation has established the effects declared for its affordance.**
|
|
250
|
+
|
|
251
|
+
This makes the relationship between capability behavior and declared effects part of the trusted world.
|
|
252
|
+
|
|
253
|
+
Incorrect effects can corrupt the runtime's understanding of the world.
|
|
254
|
+
|
|
255
|
+
Capability testing should therefore verify both operational behavior and the accuracy of the effects associated with successful execution.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 8. Bindings
|
|
260
|
+
|
|
261
|
+
Bindings connect affordances to executable implementations.
|
|
262
|
+
|
|
263
|
+
Examples include:
|
|
264
|
+
|
|
265
|
+
```text
|
|
266
|
+
affordance
|
|
267
|
+
│
|
|
268
|
+
├── Node module
|
|
269
|
+
├── HTTP endpoint
|
|
270
|
+
├── stdio process
|
|
271
|
+
├── CLI command
|
|
272
|
+
└── other binding mechanisms
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Bindings cross an important trust boundary.
|
|
276
|
+
|
|
277
|
+
A binding may cause the runtime to:
|
|
278
|
+
|
|
279
|
+
- load executable code
|
|
280
|
+
- start a process
|
|
281
|
+
- transmit data
|
|
282
|
+
- access the network
|
|
283
|
+
- communicate with external systems
|
|
284
|
+
- expose credentials
|
|
285
|
+
- receive untrusted data
|
|
286
|
+
|
|
287
|
+
A GRAIL world containing executable bindings should therefore be treated as executable configuration.
|
|
288
|
+
|
|
289
|
+
The runtime trusts the world definition to identify approved bindings.
|
|
290
|
+
|
|
291
|
+
Deployments may impose additional restrictions on which binding types, modules, executables, hosts, or services are permitted.
|
|
292
|
+
|
|
293
|
+
Future GRAIL implementations may support mechanisms such as binding allowlists, sandboxing, execution policies, or signed world definitions.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 9. Inputs
|
|
298
|
+
|
|
299
|
+
Inputs provide data required by capabilities.
|
|
300
|
+
|
|
301
|
+
Inputs may originate from:
|
|
302
|
+
|
|
303
|
+
- scenario configuration
|
|
304
|
+
- previous capability outputs
|
|
305
|
+
- environment configuration
|
|
306
|
+
- users
|
|
307
|
+
- external systems
|
|
308
|
+
- other runtime sources
|
|
309
|
+
|
|
310
|
+
Inputs do not establish authorization.
|
|
311
|
+
|
|
312
|
+
The runtime may validate structural properties of inputs, such as presence, type, or resolvability. Domain validation remains the responsibility of the capability receiving the input.
|
|
313
|
+
|
|
314
|
+
A capability should treat externally derived input according to the security requirements of its domain.
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## 10. Outputs
|
|
319
|
+
|
|
320
|
+
Capabilities may return outputs that become available to subsequent affordances.
|
|
321
|
+
|
|
322
|
+
For example:
|
|
323
|
+
|
|
324
|
+
```text
|
|
325
|
+
createCustomer
|
|
326
|
+
│
|
|
327
|
+
▼
|
|
328
|
+
customerId
|
|
329
|
+
│
|
|
330
|
+
▼
|
|
331
|
+
lookupAccount
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
GRAIL may validate mechanical properties of these outputs.
|
|
335
|
+
|
|
336
|
+
The runtime can determine whether:
|
|
337
|
+
|
|
338
|
+
- an expected output exists
|
|
339
|
+
- a value can be extracted
|
|
340
|
+
- a resolver succeeds
|
|
341
|
+
- a response is structurally valid
|
|
342
|
+
|
|
343
|
+
The runtime generally cannot determine whether the value is semantically valid for the application domain.
|
|
344
|
+
|
|
345
|
+
That responsibility remains with the capability or external system that consumes the value.
|
|
346
|
+
|
|
347
|
+
Outputs also do not directly modify worldstate. Worldstate changes occur through the declared effects of successful affordances.
|
|
348
|
+
|
|
349
|
+
This separation helps preserve the distinction between data and conditions.
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## 11. Worldstate
|
|
354
|
+
|
|
355
|
+
Worldstate represents the conditions currently believed to hold within the GRAIL world.
|
|
356
|
+
|
|
357
|
+
The runtime uses worldstate to determine which affordances are available and which conditions still need to be established.
|
|
358
|
+
|
|
359
|
+
Worldstate is therefore operationally significant.
|
|
360
|
+
|
|
361
|
+
Unauthorized or incorrect modification of worldstate could change the runtime's decisions.
|
|
362
|
+
|
|
363
|
+
Worldstate should be modified through the mechanisms defined by the GRAIL execution model rather than arbitrary capability behavior.
|
|
364
|
+
|
|
365
|
+
A capability reports execution results. The runtime applies the corresponding declared effects.
|
|
366
|
+
|
|
367
|
+
This preserves the runtime as the authority over its own model of the world.
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## 12. Observations
|
|
372
|
+
|
|
373
|
+
GRAIL observations provide a record of execution.
|
|
374
|
+
|
|
375
|
+
Depending on the binding and configuration, observations may contain:
|
|
376
|
+
|
|
377
|
+
- affordance identifiers
|
|
378
|
+
- invocation metadata
|
|
379
|
+
- input values
|
|
380
|
+
- HTTP requests
|
|
381
|
+
- HTTP responses
|
|
382
|
+
- headers
|
|
383
|
+
- process results
|
|
384
|
+
- capability outputs
|
|
385
|
+
- errors
|
|
386
|
+
- timestamps
|
|
387
|
+
|
|
388
|
+
Observations can therefore contain sensitive information.
|
|
389
|
+
|
|
390
|
+
A production GRAIL deployment should consider:
|
|
391
|
+
|
|
392
|
+
- credential redaction
|
|
393
|
+
- sensitive-data filtering
|
|
394
|
+
- access control
|
|
395
|
+
- retention
|
|
396
|
+
- storage protection
|
|
397
|
+
- audit requirements
|
|
398
|
+
|
|
399
|
+
Observations should be treated as operational records rather than an automatically safe debugging artifact.
|
|
400
|
+
|
|
401
|
+
The observation store records what GRAIL observed. It does not independently establish domain truth.
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Beta execution guidance
|
|
406
|
+
|
|
407
|
+
The current beta runtime assumes that the GRAIL world and the environment executing it are trusted. **A registry with bindings is executable configuration**, not passive data. Only run worlds whose registry, capability implementations, dependencies, and binding destinations have been reviewed and approved for the host environment. Structural configuration validation does not establish that a world or its capabilities are safe.
|
|
408
|
+
|
|
409
|
+
**Binding execution boundaries:**
|
|
410
|
+
|
|
411
|
+
- **Node:** a configured module executes inside the GRAIL process and inherits its privileges. The runtime does not sandbox the module or confine module paths to the world directory.
|
|
412
|
+
- **Stdio:** a configured executable runs as a child process with the host user's privileges. Do not treat process launch as a sandbox or assume child processes are confined to the scenario directory.
|
|
413
|
+
- **HTTP:** a configured endpoint receives the data sent by the binding. Restrict destinations and credentials according to deployment policy; the runtime does not establish the trustworthiness of a destination.
|
|
414
|
+
|
|
415
|
+
**Credentials and observations:** Inputs, resolved binding arguments, HTTP headers, responses, stdout/stderr, and extracted outputs may be recorded in observations. Do not put secrets directly into scenario inputs or captured outputs unless their exposure and retention are acceptable. Prefer credentials managed by capabilities or their execution environment. Protect any `observations.json` file and any application-retained result objects as potentially sensitive operational data. The beta runtime does not automatically redact sensitive values.
|
|
416
|
+
|
|
417
|
+
**Long-running operations and uncertain outcomes:** The beta runtime does not enforce application-level execution timeouts for Node, HTTP, or stdio bindings. A capability may hang or run indefinitely. Callers and capability authors should apply their own operational limits where appropriate. A caller stopping its wait, aborting an HTTP request, or terminating a process does **not** prove that an external operation had no effect. In particular, do not automatically retry non-idempotent operations when the outcome is uncertain. The current `SUCCESS`/`BLOCKED`/`FAIL` model does not provide a separate `UNKNOWN` status.
|
|
418
|
+
|
|
419
|
+
**Responsibility boundary:** GRAIL evaluates conditions and invokes configured capabilities; capabilities enforce authentication, authorization, input validation, and domain-specific safety. Preconditions are not authorization checks. These beta limitations are explicit trust assumptions, not security guarantees.
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 13. External systems
|
|
424
|
+
|
|
425
|
+
Capabilities frequently interact with systems outside the GRAIL trust boundary.
|
|
426
|
+
|
|
427
|
+
These may include:
|
|
428
|
+
|
|
429
|
+
- APIs
|
|
430
|
+
- SaaS platforms
|
|
431
|
+
- databases
|
|
432
|
+
- command-line tools
|
|
433
|
+
- local processes
|
|
434
|
+
- remote services
|
|
435
|
+
- other autonomous systems
|
|
436
|
+
|
|
437
|
+
External systems may fail, return unexpected information, reject requests, or behave maliciously.
|
|
438
|
+
|
|
439
|
+
Bindings and capabilities should therefore treat external interactions as trust-boundary crossings.
|
|
440
|
+
|
|
441
|
+
GRAIL can handle mechanical failures such as unavailable bindings, malformed results, or execution failures.
|
|
442
|
+
|
|
443
|
+
The interpretation of domain-specific responses remains the responsibility of the capability.
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
## 14. Design-time AI
|
|
448
|
+
|
|
449
|
+
Large language models and other AI systems can assist in composing GRAIL worlds.
|
|
450
|
+
|
|
451
|
+
They may help:
|
|
452
|
+
|
|
453
|
+
- identify conditions
|
|
454
|
+
- propose affordances
|
|
455
|
+
- identify existing capabilities
|
|
456
|
+
- generate capability implementations
|
|
457
|
+
- create bindings
|
|
458
|
+
- define preconditions and effects
|
|
459
|
+
- generate schemas and configuration
|
|
460
|
+
- construct tests
|
|
461
|
+
- inspect worlds for inconsistencies
|
|
462
|
+
|
|
463
|
+
AI-generated artifacts should not automatically become trusted runtime artifacts.
|
|
464
|
+
|
|
465
|
+
They should pass through the same validation and acceptance process as artifacts created by humans.
|
|
466
|
+
|
|
467
|
+
A useful distinction is:
|
|
468
|
+
|
|
469
|
+
```text
|
|
470
|
+
AI-generated world
|
|
471
|
+
│
|
|
472
|
+
▼
|
|
473
|
+
review / validation / testing
|
|
474
|
+
│
|
|
475
|
+
▼
|
|
476
|
+
trusted GRAIL world
|
|
477
|
+
│
|
|
478
|
+
▼
|
|
479
|
+
runtime autonomy
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
The use of AI at design time does not change the runtime trust model.
|
|
483
|
+
|
|
484
|
+
---
|
|
485
|
+
|
|
486
|
+
## 15. Runtime AI
|
|
487
|
+
|
|
488
|
+
GRAIL does not require an LLM to autonomously pursue a goal.
|
|
489
|
+
|
|
490
|
+
Future implementations may use LLMs or other decision mechanisms at runtime for tasks such as selecting among multiple conditions or multiple affordances capable of producing the same effect.
|
|
491
|
+
|
|
492
|
+
Such components should operate within the possibilities declared by the GRAIL world.
|
|
493
|
+
|
|
494
|
+
Introducing an LLM as a selection mechanism does not grant that model additional authority over capabilities, bindings, effects, or worldstate.
|
|
495
|
+
|
|
496
|
+
The trusted world remains the boundary within which runtime decisions occur.
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
## 16. Responsibility summary
|
|
501
|
+
|
|
502
|
+
| Component | Trusted responsibility |
|
|
503
|
+
|---|---|
|
|
504
|
+
| Composer | Accurately model the intended world |
|
|
505
|
+
| World definition | Describe approved possibilities |
|
|
506
|
+
| Registry | Declare affordances, relationships, effects, and bindings |
|
|
507
|
+
| Runtime | Correctly enforce GRAIL execution mechanics |
|
|
508
|
+
| Capability | Correctly perform its domain operation |
|
|
509
|
+
| Capability | Enforce domain security and authorization |
|
|
510
|
+
| Binding | Invoke the intended implementation |
|
|
511
|
+
| Inputs | Supply data, subject to validation |
|
|
512
|
+
| Outputs | Supply declared data values |
|
|
513
|
+
| Worldstate | Represent conditions currently believed to hold |
|
|
514
|
+
| Observations | Record execution evidence |
|
|
515
|
+
| External systems | Provide services according to their own contracts |
|
|
516
|
+
|
|
517
|
+
No single component establishes the security of the entire system.
|
|
518
|
+
|
|
519
|
+
Security emerges from the correct enforcement of responsibilities at each trust boundary.
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
## 17. Primary trust boundaries
|
|
524
|
+
|
|
525
|
+
The major GRAIL trust boundaries can be summarized as:
|
|
526
|
+
|
|
527
|
+
```text
|
|
528
|
+
COMPOSITION
|
|
529
|
+
│
|
|
530
|
+
▼
|
|
531
|
+
┌─────────────────────────┐
|
|
532
|
+
│ Trusted GRAIL World │
|
|
533
|
+
│ │
|
|
534
|
+
│ goal │
|
|
535
|
+
│ worldstate │
|
|
536
|
+
│ registry │
|
|
537
|
+
│ bindings │
|
|
538
|
+
└────────────┬────────────┘
|
|
539
|
+
│
|
|
540
|
+
▼
|
|
541
|
+
┌─────────────┐
|
|
542
|
+
│ GRAIL │
|
|
543
|
+
│ Runtime │
|
|
544
|
+
└──────┬──────┘
|
|
545
|
+
│
|
|
546
|
+
binding boundary
|
|
547
|
+
│
|
|
548
|
+
┌───────┼────────┐
|
|
549
|
+
▼ ▼ ▼
|
|
550
|
+
Node HTTP stdio
|
|
551
|
+
│ │ │
|
|
552
|
+
▼ ▼ ▼
|
|
553
|
+
CAPABILITIES
|
|
554
|
+
│
|
|
555
|
+
│ domain/security boundary
|
|
556
|
+
▼
|
|
557
|
+
EXTERNAL SYSTEMS
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
The world defines what GRAIL may attempt.
|
|
561
|
+
|
|
562
|
+
The runtime determines what currently needs to happen.
|
|
563
|
+
|
|
564
|
+
Bindings connect declared possibilities to executable implementations.
|
|
565
|
+
|
|
566
|
+
Capabilities determine whether requested domain actions are valid and authorized.
|
|
567
|
+
|
|
568
|
+
---
|
|
569
|
+
|
|
570
|
+
## 18. Threats outside the current model
|
|
571
|
+
|
|
572
|
+
The initial GRAIL trust model assumes a trusted execution environment.
|
|
573
|
+
|
|
574
|
+
A more complete security architecture may eventually address threats including:
|
|
575
|
+
|
|
576
|
+
- malicious or modified registries
|
|
577
|
+
- unauthorized worldstate modification
|
|
578
|
+
- malicious capability implementations
|
|
579
|
+
- compromised external services
|
|
580
|
+
- unsafe executable bindings
|
|
581
|
+
- credential leakage
|
|
582
|
+
- sensitive observation data
|
|
583
|
+
- dependency or supply-chain attacks
|
|
584
|
+
- denial of service
|
|
585
|
+
- capability impersonation
|
|
586
|
+
- tampering with capability results
|
|
587
|
+
- untrusted scenario packages
|
|
588
|
+
- compromised design-time generation tools
|
|
589
|
+
|
|
590
|
+
These concerns should inform future security work without requiring the runtime to understand application-domain policy.
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
## 19. Future controls
|
|
595
|
+
|
|
596
|
+
Possible future controls include:
|
|
597
|
+
|
|
598
|
+
- registry and scenario signing
|
|
599
|
+
- trusted scenario packages
|
|
600
|
+
- binding allowlists
|
|
601
|
+
- executable/module restrictions
|
|
602
|
+
- network destination restrictions
|
|
603
|
+
- capability identity
|
|
604
|
+
- capability integrity verification
|
|
605
|
+
- credential isolation
|
|
606
|
+
- process sandboxing
|
|
607
|
+
- execution quotas and timeouts
|
|
608
|
+
- observation redaction
|
|
609
|
+
- observation retention policies
|
|
610
|
+
- provenance metadata
|
|
611
|
+
- policy-controlled runtime environments
|
|
612
|
+
|
|
613
|
+
These mechanisms can strengthen the trusted-world boundary while preserving domain opacity in the GRAIL runtime.
|
|
614
|
+
|
|
615
|
+
They should be introduced in response to concrete deployment requirements rather than embedded prematurely into the core execution model.
|
|
616
|
+
|
|
617
|
+
---
|
|
618
|
+
|
|
619
|
+
## 20. Core principles
|
|
620
|
+
|
|
621
|
+
The GRAIL trust model can be summarized by several principles.
|
|
622
|
+
|
|
623
|
+
**Autonomy operates inside a trusted world.**
|
|
624
|
+
|
|
625
|
+
The runtime assumes that the world definition accurately describes the possibilities available to it.
|
|
626
|
+
|
|
627
|
+
**The application domain remains opaque to GRAIL.**
|
|
628
|
+
|
|
629
|
+
Domain policy and domain security belong with the capabilities that understand them.
|
|
630
|
+
|
|
631
|
+
**Preconditions are orchestration constraints, not authorization controls.**
|
|
632
|
+
|
|
633
|
+
A capability must enforce the security requirements governing the operation it performs.
|
|
634
|
+
|
|
635
|
+
**SUCCESS is a contract.**
|
|
636
|
+
|
|
637
|
+
When a capability reports success, GRAIL trusts that the effects declared for its affordance have been established.
|
|
638
|
+
|
|
639
|
+
**Bindings are execution boundaries.**
|
|
640
|
+
|
|
641
|
+
A registry containing bindings should be treated as executable configuration.
|
|
642
|
+
|
|
643
|
+
**World integrity matters.**
|
|
644
|
+
|
|
645
|
+
Changes to affordances, effects, bindings, or worldstate can change the behavior of the autonomous system.
|
|
646
|
+
|
|
647
|
+
**Design-time generation does not imply runtime trust.**
|
|
648
|
+
|
|
649
|
+
Human- or AI-generated worlds become trusted through validation, testing, review, and deployment controls appropriate to the environment.
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
## Conclusion
|
|
654
|
+
|
|
655
|
+
GRAIL deliberately places substantial knowledge in the environment rather than in the autonomous runtime.
|
|
656
|
+
|
|
657
|
+
That design makes the world definition a significant source of authority.
|
|
658
|
+
|
|
659
|
+
The runtime trusts the world to describe valid possibilities. It trusts capabilities to perform their declared operations and to enforce domain security. It trusts successful execution to establish declared effects. It protects the mechanics through which those declarations become runtime behavior.
|
|
660
|
+
|
|
661
|
+
These boundaries allow GRAIL to remain small and domain-independent while supporting autonomous execution across many application domains.
|
|
662
|
+
|
|
663
|
+
The resulting security model follows directly from the architecture:
|
|
664
|
+
|
|
665
|
+
> **Define a trusted world, constrain autonomy to that world, and require each capability to protect the actions it performs.**
|