@reunionstudio/airlock-mcp 0.1.3 → 0.1.5
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/.agents/skills/airlock-mcp/SKILL.md +58 -9
- package/README.md +61 -2
- package/docs/install-surface.md +23 -6
- package/docs/spec-workspace.md +5 -0
- package/docs/workflows.md +55 -0
- package/package.json +1 -1
- package/patterns/manifest.json +6 -0
- package/patterns/okf-knowledge-bundle/README.md +64 -0
- package/patterns/okf-knowledge-bundle/sample.records.json +16 -0
- package/patterns/okf-knowledge-bundle/spec.config.json +64 -0
- package/patterns/starter-posts/sample.records.json +2 -2
- package/setup.py +1 -1
- package/src/airlock_mcp/__init__.py +1 -1
- package/src/airlock_mcp/app_context.py +51 -1
- package/src/airlock_mcp/bootstrap.py +28 -0
- package/src/airlock_mcp/summary.py +1 -0
- package/src/mcp.mjs +1 -1
- package/src/text.mjs +62 -9
- package/src/workbench.mjs +2 -2
|
@@ -74,19 +74,28 @@ deterministic checker for local spec drafts.
|
|
|
74
74
|
4. Create `posts` only when the user chooses a feedback loop, asks for humans
|
|
75
75
|
and agents to provide feedback, or explicitly requests the posts pattern.
|
|
76
76
|
If the user is unsure, continue process discovery before creating files.
|
|
77
|
-
5.
|
|
77
|
+
5. Create `okf-knowledge-bundle` when the user needs governed Markdown
|
|
78
|
+
knowledge, accepted agent context, policies, runbooks, metric definitions,
|
|
79
|
+
investigations, or other business context organized as an OKF-style bundle.
|
|
80
|
+
The spec must declare `core_config.payload_adapter =
|
|
81
|
+
"okf_knowledge_bundle"`. Installed Airlock loads validated bundles with
|
|
82
|
+
`airlock.admin.load_okf_bundle(...)`, can sync parsed metadata with
|
|
83
|
+
`airlock.admin.sync_okf_bundle_metadata(...)`, and exposes authoritative
|
|
84
|
+
accepted context through `AIRLOCK_DATA.ACTIVE.V_OKF_CONCEPT_METADATA`.
|
|
85
|
+
Draft and rejected bundles are not authoritative agent context.
|
|
86
|
+
6. Use `airlock-mcp import-spec <json-file> <name>` when starting from a
|
|
78
87
|
spec-library file, an exported `SPEC_CONFIG`, or an existing canonical config.
|
|
79
88
|
If the source is from `airlock-specs`, treat it as a reusable draft pattern.
|
|
80
89
|
Check actual API docs, CSV/Excel/JSON samples, schemas, or other artifacts
|
|
81
90
|
before assuming the source fields match a live third-party system.
|
|
82
|
-
|
|
91
|
+
7. Use `airlock-mcp clone <source-workspace> <name>` when creating a related
|
|
83
92
|
draft from an existing workspace. Treat clone like the old Streamlit UI:
|
|
84
93
|
preserve the shape but deliberately reset spec identity.
|
|
85
|
-
|
|
94
|
+
8. Keep the draft small. Prefer one useful governed output over a large
|
|
86
95
|
speculative system, then keep a plan for later specs.
|
|
87
|
-
|
|
96
|
+
9. On later sessions, run `airlock-mcp list-workspaces` when the target draft
|
|
88
97
|
is not obvious.
|
|
89
|
-
|
|
98
|
+
10. Run `airlock-mcp summary <workspace>` and
|
|
90
99
|
`airlock-mcp next <workspace>` before editing so
|
|
91
100
|
the current shape, sample count, access model, and local check status are
|
|
92
101
|
visible.
|
|
@@ -94,14 +103,14 @@ deterministic checker for local spec drafts.
|
|
|
94
103
|
core, file rules, attachments, guest access, column rules, samples, notes,
|
|
95
104
|
and check status. Do not make the user infer the current spec from file
|
|
96
105
|
links alone.
|
|
97
|
-
|
|
106
|
+
11. Run `airlock-mcp check <workspace>` after changing draft config or sample
|
|
98
107
|
records.
|
|
99
|
-
|
|
108
|
+
12. Keep `sample.records.json` as the agent-friendly authoring shape. Use
|
|
100
109
|
`airlock-mcp export-csv <workspace>` when the same examples need to be
|
|
101
110
|
reviewed or loaded through Airlock's CSV path.
|
|
102
|
-
|
|
111
|
+
13. Use `airlock-mcp rename`, `archive`, and `restore` when organizing
|
|
103
112
|
workspaces so spec identity changes remain deliberate.
|
|
104
|
-
|
|
113
|
+
14. Use `airlock-mcp render-sql <workspace>` only as a validate-only review
|
|
105
114
|
artifact. Installed Airlock validation remains authoritative.
|
|
106
115
|
|
|
107
116
|
## Spec Design Questions
|
|
@@ -199,6 +208,44 @@ Start by identifying:
|
|
|
199
208
|
user's environment.
|
|
200
209
|
6. Identity, evidence, timestamps, approval, and separation-of-duties rules.
|
|
201
210
|
|
|
211
|
+
Use the current installed Airlock procedure grammar when the app talks to
|
|
212
|
+
Airlock:
|
|
213
|
+
|
|
214
|
+
- `airlock.observe.*` is read-only and is the first-class governance
|
|
215
|
+
observation surface for `app_admin` and `app_observer`.
|
|
216
|
+
- `airlock.admin.*` performs administrative changes and operational mutations.
|
|
217
|
+
- `airlock.agent.*` performs governed user or agent work in the actor's scope.
|
|
218
|
+
|
|
219
|
+
For app-first work, prefer `observe.procedures`, `observe.specs`,
|
|
220
|
+
`observe.spec`, `observe.governance_map`, `observe.explain_access`,
|
|
221
|
+
`observe.health`, `observe.activity`, `observe.admin_activity`,
|
|
222
|
+
`observe.spec_admin_activity`, `observe.billing`, `observe.billing_events`, and
|
|
223
|
+
the relevant context packets before inventing
|
|
224
|
+
custom read paths. Do not tell agents to call retired admin read wrappers such
|
|
225
|
+
as `admin.list_specs`, `admin.describe_role`, `admin.get_spec`, or
|
|
226
|
+
`admin.list_events`; use the matching observe list/detail procedure instead.
|
|
227
|
+
Use `admin.*` only when the app is intentionally changing Airlock setup or
|
|
228
|
+
running an admin operation.
|
|
229
|
+
|
|
230
|
+
Restricted references are one-record interaction contracts for read-only
|
|
231
|
+
reference specs. If `agent.describe_spec`, `observe.spec`,
|
|
232
|
+
`observe.spec_config`, or `observe.reference_context` shows
|
|
233
|
+
`restricted_reference` or `reference_config.restricted_reference`, do not
|
|
234
|
+
enumerate the protected reference, build a populated picker, or use broad
|
|
235
|
+
`agent.select_reference_data` for that object path. Get the lookup value from
|
|
236
|
+
the user's case/work context, then call `agent.get_reference_record` with the
|
|
237
|
+
configured `object_key`, lookup value, purpose, and role lens. The procedure
|
|
238
|
+
returns at most one `RECORD`, applies reference row filters, checks active
|
|
239
|
+
`action_limit` Expectations before returning data, and records the safe
|
|
240
|
+
`REFERENCE_READ` event used for usage budgeting. Branch on stable codes such
|
|
241
|
+
as `OK`, `NOT_FOUND`, `NON_UNIQUE_LOOKUP_KEY`, `PURPOSE_REQUIRED`,
|
|
242
|
+
`USAGE_LIMIT_BLOCKED`, and `REFERENCE_READ_EVENT_FAILED`; expose
|
|
243
|
+
`USAGE_CONTEXT` fields such as `action_limit_used` and `action_time_period`.
|
|
244
|
+
For read-only planning and audit, use `observe.reference_context`,
|
|
245
|
+
`observe.usage_limits`, `observe.usage_limit`, and
|
|
246
|
+
`observe.explain_access(action => 'get_reference_record', object_key => ...)`
|
|
247
|
+
without querying raw reference rows.
|
|
248
|
+
|
|
202
249
|
Help the app follow the loop:
|
|
203
250
|
|
|
204
251
|
- Observe/read: fetch existing governed data through approved Airlock or
|
|
@@ -254,6 +301,8 @@ In co-development mode, keep two tracks visible:
|
|
|
254
301
|
Read only the relevant pattern files:
|
|
255
302
|
|
|
256
303
|
- `patterns/starter-posts/` when the user needs a first feedback loop.
|
|
304
|
+
- `patterns/okf-knowledge-bundle/` when the user needs governed Markdown
|
|
305
|
+
business context for people or agents.
|
|
257
306
|
- `patterns/guest-access/` when isolation or sharing is the hard part.
|
|
258
307
|
- `patterns/spec-types/` when choosing observation, commitment,
|
|
259
308
|
reconciliation, or reference/master-data shape.
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ It covers the full Airlock loop:
|
|
|
14
14
|
Spec building and spec-using app guidance are not second things users install.
|
|
15
15
|
They are bundled inside Airlock MCP.
|
|
16
16
|
|
|
17
|
-
Airlock MCP gives agents
|
|
17
|
+
Airlock MCP gives agents four kinds of Airlock help:
|
|
18
18
|
|
|
19
19
|
1. Spec design: draft, check, revise, import, clone, and prepare specs for
|
|
20
20
|
installed Airlock validation.
|
|
@@ -24,6 +24,31 @@ Airlock MCP gives agents three kinds of Airlock help:
|
|
|
24
24
|
3. App and workflow implementation: build dashboards, queues, decision UIs,
|
|
25
25
|
analyses, and agent workflows that use existing specs through Airlock
|
|
26
26
|
contracts.
|
|
27
|
+
4. Governance observation: use installed Airlock's read-only `observe.*`
|
|
28
|
+
procedures to inspect setup, access, activity, billing events, health,
|
|
29
|
+
context packets, and governance maps before deciding what an app or agent
|
|
30
|
+
should do.
|
|
31
|
+
|
|
32
|
+
## Installed Airlock Contract
|
|
33
|
+
|
|
34
|
+
Current Airlock separates procedure intent:
|
|
35
|
+
|
|
36
|
+
- `airlock.observe.*` is the read-only governance observation surface. It is
|
|
37
|
+
available to `app_admin` and `app_observer` and is the preferred path for
|
|
38
|
+
discovery, health checks, access explanation, governance maps, activity,
|
|
39
|
+
billing event context, and list/detail context packets.
|
|
40
|
+
- `airlock.admin.*` is for admin changes and operational actions such as
|
|
41
|
+
creating specs, changing roles, loading OKF bundles, rerunning setup, or
|
|
42
|
+
deleting purge candidates.
|
|
43
|
+
- `airlock.agent.*` is for governed agent work such as listing my
|
|
44
|
+
specs, validating/loading data, workflow actions, attachments, delegations,
|
|
45
|
+
and references.
|
|
46
|
+
|
|
47
|
+
When building an app or workflow, prefer `observe.*` for read-only setup and
|
|
48
|
+
monitoring questions, `agent.*` for governed submissions in the actor's scope,
|
|
49
|
+
and `admin.*` only for intentional administrative mutation. Do not use retired
|
|
50
|
+
admin read wrappers such as `admin.list_specs`, `admin.describe_role`, or
|
|
51
|
+
`admin.list_events`; use the matching observe procedures instead.
|
|
27
52
|
|
|
28
53
|
## Install
|
|
29
54
|
|
|
@@ -98,7 +123,8 @@ The server exposes orientation plus local spec-building tools:
|
|
|
98
123
|
- `airlock_init_app_context`: seed an app repo with spec snapshots, sample
|
|
99
124
|
records, generated helper folders, and an app manifest.
|
|
100
125
|
- `airlock_list_patterns` and `airlock_show_pattern`: inspect starter patterns.
|
|
101
|
-
- `airlock_init_workspace`: create a workspace from `blank` or
|
|
126
|
+
- `airlock_init_workspace`: create a workspace from `blank`, `posts`, or
|
|
127
|
+
`okf-knowledge-bundle`.
|
|
102
128
|
- `airlock_list_workspaces`: inspect active or archived drafts.
|
|
103
129
|
- `airlock_check_workspace`, `airlock_summary`, and `airlock_next`: validate and re-enter a draft.
|
|
104
130
|
- `airlock_export_csv`: render `sample.records.json` as Airlock-ready CSV.
|
|
@@ -188,3 +214,36 @@ points, patterns, and ideas. Those library specs are not guaranteed to reflect
|
|
|
188
214
|
the current shape of any third-party system. Current API docs, real exports,
|
|
189
215
|
samples, schemas, and user-provided artifacts should override library shapes
|
|
190
216
|
when they conflict.
|
|
217
|
+
|
|
218
|
+
For app-first work against installed Airlock, start with `observe.procedures`,
|
|
219
|
+
`observe.specs`, `observe.spec`, `observe.governance_map`,
|
|
220
|
+
`observe.explain_access`, `observe.health`, and the relevant context packet
|
|
221
|
+
before designing direct SQL helpers. These payloads are intended to be useful
|
|
222
|
+
to agents as well as humans.
|
|
223
|
+
|
|
224
|
+
Restricted references are one-record interaction contracts. When
|
|
225
|
+
`observe.reference_context`, `observe.spec_config`, or `agent.describe_spec`
|
|
226
|
+
shows `restricted_reference` or `reference_config.restricted_reference`, agents
|
|
227
|
+
must not call broad
|
|
228
|
+
`agent.select_reference_data` for that object path and must not enumerate values
|
|
229
|
+
or build a populated picker from the protected reference. The agent should get
|
|
230
|
+
the lookup value from the user's case/work context, then call
|
|
231
|
+
`agent.get_reference_record` with the configured `object_key`, lookup value,
|
|
232
|
+
purpose, and role lens. The procedure applies configured reference row filters,
|
|
233
|
+
checks active `action_limit` Expectations before returning a record, always
|
|
234
|
+
records the safe `REFERENCE_READ` event used for budgeting, and returns at most
|
|
235
|
+
one `RECORD`. Branch on codes such as `OK`, `NOT_FOUND`,
|
|
236
|
+
`NON_UNIQUE_LOOKUP_KEY`, `PURPOSE_REQUIRED`, `USAGE_LIMIT_BLOCKED`, and
|
|
237
|
+
`REFERENCE_READ_EVENT_FAILED`, and report `USAGE_CONTEXT` fields such as
|
|
238
|
+
`action_limit_used` and `action_time_period`. Auditors and planning agents can
|
|
239
|
+
inspect `observe.usage_limits`, `observe.usage_limit`, and
|
|
240
|
+
`observe.explain_access(action => 'get_reference_record', object_key => ...)`
|
|
241
|
+
without reading raw reference rows.
|
|
242
|
+
|
|
243
|
+
For governed Markdown knowledge, use the `okf-knowledge-bundle` pattern. It
|
|
244
|
+
sets `core_config.payload_adapter` to `okf_knowledge_bundle` so installed
|
|
245
|
+
Airlock can load locally validated bundles through
|
|
246
|
+
`airlock.admin.load_okf_bundle(...)`, sync parsed metadata through
|
|
247
|
+
`airlock.admin.sync_okf_bundle_metadata(...)`, and expose accepted concept
|
|
248
|
+
metadata from `AIRLOCK_DATA.ACTIVE.V_OKF_CONCEPT_METADATA`. Draft and rejected
|
|
249
|
+
bundles are not authoritative agent context.
|
package/docs/install-surface.md
CHANGED
|
@@ -24,6 +24,20 @@ that reads and submits through Airlock contracts.
|
|
|
24
24
|
The install command is not the spec workspace. It is the connector/setup entry
|
|
25
25
|
point. The specs repo is still the durable memory.
|
|
26
26
|
|
|
27
|
+
For installed Airlock access, teach the current procedure split:
|
|
28
|
+
`airlock.observe.*` is the read-only governance observation surface,
|
|
29
|
+
`airlock.agent.*` is governed agent work, and `airlock.admin.*` is
|
|
30
|
+
administrative mutation. App-first and audit-style workflows should use
|
|
31
|
+
observe payloads for discovery, context, health, access explanation, activity,
|
|
32
|
+
billing events, and governance maps before considering custom SQL helpers.
|
|
33
|
+
When a read-only reference spec declares `restricted_reference` or
|
|
34
|
+
`reference_config.restricted_reference`, agents should avoid broad
|
|
35
|
+
`agent.select_reference_data` reads and use `agent.get_reference_record` for a
|
|
36
|
+
known lookup value and purpose, with `observe.reference_context`,
|
|
37
|
+
`observe.usage_limits`, `observe.usage_limit`, and
|
|
38
|
+
`observe.explain_access(action => 'get_reference_record', object_key => ...)`
|
|
39
|
+
for planning and audit.
|
|
40
|
+
|
|
27
41
|
The connector package and MCP server live in `reunionstudio/airlock-mcp`.
|
|
28
42
|
This workbench provides the spec-building implementation inside that one
|
|
29
43
|
installed Airlock MCP experience.
|
|
@@ -118,9 +132,11 @@ The first release should optimize the user journey:
|
|
|
118
132
|
forms, screenshots, PDFs, exports, or message examples
|
|
119
133
|
6. use `airlock-specs` library patterns as starting points when useful, while
|
|
120
134
|
preferring current artifacts over library shapes when they conflict
|
|
121
|
-
7.
|
|
122
|
-
|
|
123
|
-
|
|
135
|
+
7. use the `okf-knowledge-bundle` pattern when the useful artifact is governed
|
|
136
|
+
Markdown knowledge for accepted agent context
|
|
137
|
+
8. map where information comes in and actions go out
|
|
138
|
+
9. create the first workspace only after the user chooses a small first spec
|
|
139
|
+
10. keep a plan for later specs that improve the full loop
|
|
124
140
|
|
|
125
141
|
For users who already have specs and want to build software, optimize a second
|
|
126
142
|
journey:
|
|
@@ -131,10 +147,11 @@ journey:
|
|
|
131
147
|
4. identify read specs and write specs
|
|
132
148
|
5. seed app-local Airlock context with `airlock-mcp init-app-context` when the
|
|
133
149
|
app needs spec snapshots, samples, generated helpers, and a manifest
|
|
134
|
-
6.
|
|
135
|
-
7.
|
|
150
|
+
6. inspect installed setup with read-only `observe.*` procedures when available
|
|
151
|
+
7. build orienting views, dashboards, queues, proposals, or recommendations
|
|
152
|
+
8. capture decisions, approvals, actions, comments, or follow-ups through
|
|
136
153
|
Airlock spec contracts
|
|
137
|
-
|
|
154
|
+
9. avoid direct writes to Airlock-owned tables and avoid bypassing spec workflow
|
|
138
155
|
|
|
139
156
|
For users who are developing the app and specs together, optimize a third
|
|
140
157
|
journey:
|
package/docs/spec-workspace.md
CHANGED
|
@@ -22,6 +22,11 @@ Use `airlock-mcp rename`, `archive`, and `restore` to organize draft folders.
|
|
|
22
22
|
`rename` retitles spec identity by default; pass `--keep-spec-identity` for a
|
|
23
23
|
pure folder move.
|
|
24
24
|
|
|
25
|
+
For `okf-knowledge-bundle` workspaces, `sample.records.json` is only a small
|
|
26
|
+
metadata sample for the draft spec. The governed payload is a locally validated
|
|
27
|
+
Markdown directory or `.zip` bundle loaded through installed Airlock's
|
|
28
|
+
`airlock.admin.load_okf_bundle(...)` path.
|
|
29
|
+
|
|
25
30
|
`review.md` should identify the workspace source mode:
|
|
26
31
|
|
|
27
32
|
- `create`: started from an Airlock MCP pattern
|
package/docs/workflows.md
CHANGED
|
@@ -154,6 +154,39 @@ unless the user asks to change specs. Start by asking for:
|
|
|
154
154
|
- the available Airlock/Snowflake access path
|
|
155
155
|
- identity, evidence, timestamp, approval, and separation-of-duties needs
|
|
156
156
|
|
|
157
|
+
Use the installed Airlock procedure grammar:
|
|
158
|
+
|
|
159
|
+
- `airlock.observe.*` is read-only and should answer discovery, governance,
|
|
160
|
+
audit, health, activity, billing-event, and access-explanation questions.
|
|
161
|
+
- `airlock.agent.*` is for governed work by the current actor, including
|
|
162
|
+
validation, loading, workflow actions, attachments, references, and
|
|
163
|
+
delegations.
|
|
164
|
+
- `airlock.admin.*` is for administrative mutation and operational changes.
|
|
165
|
+
|
|
166
|
+
For app-first work, start with observe payloads such as `observe.procedures`,
|
|
167
|
+
`observe.specs`, `observe.spec`, `observe.governance_map`,
|
|
168
|
+
`observe.explain_access`, `observe.health`, `observe.activity`,
|
|
169
|
+
`observe.admin_activity`, `observe.spec_admin_activity`, `observe.billing`, and
|
|
170
|
+
`observe.billing_events`. For `alter_spec` activity, use `CHANGED_SECTIONS` and
|
|
171
|
+
`CHANGED_FIELDS` to triage what changed before fetching version snapshots. Do not use retired admin read
|
|
172
|
+
wrappers such as `admin.list_specs`, `admin.describe_role`, `admin.get_spec`,
|
|
173
|
+
or `admin.list_events`; use observe list/detail procedures instead.
|
|
174
|
+
|
|
175
|
+
Restricted references are one-record interaction contracts for read-only
|
|
176
|
+
reference specs. When `observe.reference_context`, `observe.spec_config`, or
|
|
177
|
+
`agent.describe_spec` shows `restricted_reference` or
|
|
178
|
+
`reference_config.restricted_reference`, do not enumerate the protected
|
|
179
|
+
reference, build a populated picker, or use broad `agent.select_reference_data`
|
|
180
|
+
for that object path. Get the lookup value from the user's case/work context,
|
|
181
|
+
then call `agent.get_reference_record` with the configured `object_key`, lookup
|
|
182
|
+
value, purpose, and role lens. The procedure returns at most one `RECORD`,
|
|
183
|
+
applies reference row filters, checks active `action_limit` Expectations before
|
|
184
|
+
returning data, and records the safe `REFERENCE_READ` event used for usage
|
|
185
|
+
budgeting. Use `observe.reference_context`, `observe.usage_limits`,
|
|
186
|
+
`observe.usage_limit`, and
|
|
187
|
+
`observe.explain_access(action => 'get_reference_record', object_key => ...)`
|
|
188
|
+
for planning and audit without reading raw reference rows.
|
|
189
|
+
|
|
157
190
|
The app should follow the loop:
|
|
158
191
|
|
|
159
192
|
1. Observe/read governed records through approved Airlock or Snowflake surfaces.
|
|
@@ -228,6 +261,28 @@ airlock-mcp check workspaces/feedback-loop
|
|
|
228
261
|
Then ask Codex to help decide what the posts should observe, who responds, and
|
|
229
262
|
what next spec should grow from the feedback.
|
|
230
263
|
|
|
264
|
+
## Start From Governed Knowledge
|
|
265
|
+
|
|
266
|
+
Use this when the user wants accepted Markdown business context for people or
|
|
267
|
+
agents: policies, runbooks, metric definitions, investigations, decisions, or
|
|
268
|
+
operating notes.
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
airlock-mcp init sales-context --pattern okf-knowledge-bundle
|
|
272
|
+
airlock-mcp check workspaces/sales-context
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
This pattern sets `core_config.payload_adapter` to `okf_knowledge_bundle`.
|
|
276
|
+
Installed Airlock loads locally validated bundles with
|
|
277
|
+
`airlock.admin.load_okf_bundle(...)`, can refresh parsed metadata with
|
|
278
|
+
`airlock.admin.sync_okf_bundle_metadata(...)`, and exposes authoritative
|
|
279
|
+
accepted concept metadata through
|
|
280
|
+
`AIRLOCK_DATA.ACTIVE.V_OKF_CONCEPT_METADATA`.
|
|
281
|
+
|
|
282
|
+
Do not treat draft or rejected Markdown bundles as authoritative agent context.
|
|
283
|
+
The MCP local checker validates the spec workspace; bundle validation belongs
|
|
284
|
+
to Airlock's OKF validator and installed procedures.
|
|
285
|
+
|
|
231
286
|
## Start From A Known Process
|
|
232
287
|
|
|
233
288
|
Use this when the process is known but the data shape is not.
|
package/package.json
CHANGED
package/patterns/manifest.json
CHANGED
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
"title": "Posts feedback loop",
|
|
12
12
|
"summary": "Small governed feedback stream for discovering what to build next.",
|
|
13
13
|
"directory": "starter-posts"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "okf-knowledge-bundle",
|
|
17
|
+
"title": "OKF knowledge bundle",
|
|
18
|
+
"summary": "Governed Markdown knowledge bundles for accepted agent context.",
|
|
19
|
+
"directory": "okf-knowledge-bundle"
|
|
14
20
|
}
|
|
15
21
|
]
|
|
16
22
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Starter Pattern: OKF Knowledge Bundle
|
|
2
|
+
|
|
3
|
+
Use `okf-knowledge-bundle` when the team wants governed Markdown knowledge for
|
|
4
|
+
people and agents to use as accepted business context.
|
|
5
|
+
|
|
6
|
+
This pattern is for Airlock's `okf_knowledge_bundle` payload adapter. It is
|
|
7
|
+
inspired by Google's Open Knowledge Format, but Airlock applies a narrower
|
|
8
|
+
profile so accepted bundles can become governed context instead of loose wiki
|
|
9
|
+
content.
|
|
10
|
+
|
|
11
|
+
## Use When
|
|
12
|
+
|
|
13
|
+
- Policies, runbooks, metrics, definitions, decisions, investigations, or
|
|
14
|
+
operating context need a governed place to land.
|
|
15
|
+
- Agents need business context that can be accepted, audited, and queried from
|
|
16
|
+
Snowflake.
|
|
17
|
+
- The team has useful Markdown knowledge, but needs Airlock workflow, PDP,
|
|
18
|
+
Expectations, evidence, and acceptance boundaries around it.
|
|
19
|
+
|
|
20
|
+
## Bundle Shape
|
|
21
|
+
|
|
22
|
+
- Bundle source is a directory or `.zip` archive of UTF-8 Markdown files.
|
|
23
|
+
- Root `index.md` may contain bundle frontmatter such as `okf_version`,
|
|
24
|
+
`bundle_name`, `bundle_version`, `domain`, `owner`, and `purpose`.
|
|
25
|
+
- Every non-reserved Markdown file is a concept document with YAML frontmatter.
|
|
26
|
+
- Concept documents require `type`.
|
|
27
|
+
- Recommended concept fields are `title`, `description`, `resource`, `tags`,
|
|
28
|
+
`timestamp`, and `source_links`.
|
|
29
|
+
- `index.md` and `log.md` are reserved at every hierarchy level.
|
|
30
|
+
|
|
31
|
+
## Airlock Contract
|
|
32
|
+
|
|
33
|
+
The spec must declare:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"core_config": {
|
|
38
|
+
"payload_adapter": "okf_knowledge_bundle"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Installed Airlock provides two admin procedures for this adapter:
|
|
44
|
+
|
|
45
|
+
- `airlock.admin.load_okf_bundle(...)`: load a locally validated bundle into
|
|
46
|
+
Airlock stage storage and `FILE_MANIFEST`, then project concept metadata.
|
|
47
|
+
- `airlock.admin.sync_okf_bundle_metadata(...)`: project parsed concept
|
|
48
|
+
metadata for an existing active manifest row.
|
|
49
|
+
|
|
50
|
+
Use `validate_only => TRUE` before writing. Treat accepted context as
|
|
51
|
+
authoritative only from:
|
|
52
|
+
|
|
53
|
+
```sql
|
|
54
|
+
AIRLOCK_DATA.ACTIVE.V_OKF_CONCEPT_METADATA
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Draft and rejected bundles are not authoritative agent context.
|
|
58
|
+
|
|
59
|
+
## Local Workbench Notes
|
|
60
|
+
|
|
61
|
+
`airlock-mcp check` validates the Airlock spec draft and sample metadata. It
|
|
62
|
+
does not validate a Markdown bundle. Bundle validation currently lives in the
|
|
63
|
+
Airlock source repo's `airlock.okf_knowledge_bundle.validate_okf_bundle`
|
|
64
|
+
helper and the installed Airlock OKF procedures.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"spec_name": "okf_knowledge",
|
|
3
|
+
"filename": "okf_knowledge_sample.csv",
|
|
4
|
+
"records": [
|
|
5
|
+
{
|
|
6
|
+
"concept_path": "runbooks/monthly-close",
|
|
7
|
+
"concept_type": "Runbook",
|
|
8
|
+
"bundle_version": "2026.06"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"concept_path": "metrics/net-revenue",
|
|
12
|
+
"concept_type": "Metric",
|
|
13
|
+
"bundle_version": "2026.06"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"core_config": {
|
|
3
|
+
"spec_name": "okf_knowledge",
|
|
4
|
+
"spec_alias": "OKF Knowledge",
|
|
5
|
+
"description": "Governed OKF-style Markdown knowledge bundles for accepted agent context.",
|
|
6
|
+
"owner_role": "app_admin",
|
|
7
|
+
"current_mode": "append",
|
|
8
|
+
"is_published": false,
|
|
9
|
+
"is_locked": false,
|
|
10
|
+
"is_archived": false,
|
|
11
|
+
"is_multi_role": false,
|
|
12
|
+
"file_workflow": false,
|
|
13
|
+
"workflow_steps": [],
|
|
14
|
+
"materialize_as_table": false,
|
|
15
|
+
"payload_adapter": "okf_knowledge_bundle"
|
|
16
|
+
},
|
|
17
|
+
"column_config": [
|
|
18
|
+
{
|
|
19
|
+
"name": "concept_path",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Stable normalized Markdown concept path without the .md suffix.",
|
|
22
|
+
"tests": ["not_null", "unique"]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "concept_type",
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Concept type from OKF frontmatter.",
|
|
28
|
+
"tests": ["not_null"]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "bundle_version",
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Bundle version containing the concept.",
|
|
34
|
+
"tests": ["not_null"]
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"rules": [],
|
|
38
|
+
"file_rules": {
|
|
39
|
+
"file_format": {
|
|
40
|
+
"file_type": "csv",
|
|
41
|
+
"record_delimiter": "\n",
|
|
42
|
+
"field_delimiter": ",",
|
|
43
|
+
"field_optionally_enclosed_by": "\"",
|
|
44
|
+
"escape_unenclosed_field": "\\",
|
|
45
|
+
"encoding": "UTF8",
|
|
46
|
+
"parse_header": true,
|
|
47
|
+
"save_header": true
|
|
48
|
+
},
|
|
49
|
+
"filename_rules": {
|
|
50
|
+
"enforce_filename_pattern": false,
|
|
51
|
+
"filename_pattern": null,
|
|
52
|
+
"sample_filenames": null
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"sample_data": {
|
|
56
|
+
"sample_data_acknowledged": true,
|
|
57
|
+
"sample_rows": [],
|
|
58
|
+
"edited_sample_data": "concept_path,concept_type,bundle_version\nrunbooks/monthly-close,Runbook,2026.06\nmetrics/net-revenue,Metric,2026.06\n"
|
|
59
|
+
},
|
|
60
|
+
"attachment_policy": {
|
|
61
|
+
"attachments_enabled": true,
|
|
62
|
+
"attachment_required": false
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
{
|
|
6
6
|
"post_id": "POST-001",
|
|
7
7
|
"reply_to_post_id": "",
|
|
8
|
-
"submitted_by": "agent.
|
|
8
|
+
"submitted_by": "agent.csmith",
|
|
9
9
|
"posted_at": "2026-06-13 09:00:00",
|
|
10
10
|
"body": "Please make reimbursements easier to prepare and submit.",
|
|
11
11
|
"tags": "#request #finance #reimbursements",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"desired_outcome": "An approved agent can prepare a draft reimbursement with receipt evidence."
|
|
20
20
|
},
|
|
21
21
|
"agent": {
|
|
22
|
-
"name": "
|
|
22
|
+
"name": "csmith"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
}
|
package/setup.py
CHANGED
|
@@ -28,6 +28,32 @@ Use:
|
|
|
28
28
|
- `generated/types/` for generated application types.
|
|
29
29
|
- `generated/sql/` for reviewed SQL helpers or query templates.
|
|
30
30
|
|
|
31
|
+
Installed Airlock separates procedure intent:
|
|
32
|
+
|
|
33
|
+
- `observe.*`: read-only governance observation for discovery, health, access
|
|
34
|
+
explanation, activity, admin activity, billing events, governance maps, and
|
|
35
|
+
context packets.
|
|
36
|
+
- `agent.*`: governed agent work in the actor's scope.
|
|
37
|
+
- `admin.*`: administrative mutation and operational changes.
|
|
38
|
+
|
|
39
|
+
Prefer `observe.*` for app read-side setup and monitoring questions. Use
|
|
40
|
+
`observe.admin_activity` for broad admin mutation and maintenance audit
|
|
41
|
+
questions, and `observe.spec_admin_activity` for one spec's definition-change
|
|
42
|
+
timeline. For `alter_spec` activity, use `CHANGED_SECTIONS` and
|
|
43
|
+
`CHANGED_FIELDS` to triage what changed before fetching version snapshots.
|
|
44
|
+
Do not use retired admin read wrappers such as `admin.list_specs`,
|
|
45
|
+
`admin.describe_role`, or `admin.list_events`; use the matching observe procedure.
|
|
46
|
+
|
|
47
|
+
Restricted references are one-record interaction contracts. If a reference
|
|
48
|
+
spec declares `restricted_reference` or `reference_config.restricted_reference`,
|
|
49
|
+
do not enumerate values or use broad `agent.select_reference_data` for that
|
|
50
|
+
object path. Get the lookup value from the user's case/work context and call
|
|
51
|
+
`agent.get_reference_record` with the configured `object_key`, lookup value,
|
|
52
|
+
purpose, and role lens. Use `observe.reference_context`,
|
|
53
|
+
`observe.usage_limits`, `observe.usage_limit`, and
|
|
54
|
+
`observe.explain_access(action => 'get_reference_record', object_key => ...)`
|
|
55
|
+
for planning and audit without reading raw reference rows.
|
|
56
|
+
|
|
31
57
|
Do not store credentials here. Do not write directly to Airlock-owned tables,
|
|
32
58
|
stages, generated views, or generated tables. Use approved Airlock/Snowflake
|
|
33
59
|
access paths and submit governed decisions or actions through spec contracts.
|
|
@@ -60,6 +86,22 @@ Use approved Airlock/Snowflake access paths. Do not bypass spec workflow or
|
|
|
60
86
|
write directly to Airlock-owned tables, stages, generated views, or generated
|
|
61
87
|
tables. If the app needs to submit a decision or action and no suitable write
|
|
62
88
|
spec exists, propose a small spec-design step.
|
|
89
|
+
|
|
90
|
+
Installed Airlock procedure grammar:
|
|
91
|
+
|
|
92
|
+
- `observe.*` is read-only governance observation. Use it for discovery,
|
|
93
|
+
health, access explanation, governance maps, activity, billing events, and
|
|
94
|
+
context packets.
|
|
95
|
+
- `agent.*` is governed agent work in the actor's scope.
|
|
96
|
+
- `admin.*` is administrative mutation. Do not use retired admin read wrappers;
|
|
97
|
+
use observe list/detail procedures instead.
|
|
98
|
+
|
|
99
|
+
For restricted reference specs, do not enumerate protected object paths or use
|
|
100
|
+
broad `agent.select_reference_data`. Use `agent.get_reference_record` for a
|
|
101
|
+
known lookup value and purpose, and use `observe.reference_context`,
|
|
102
|
+
`observe.usage_limits`, `observe.usage_limit`, and
|
|
103
|
+
`observe.explain_access(action => 'get_reference_record', object_key => ...)`
|
|
104
|
+
for planning and audit.
|
|
63
105
|
"""
|
|
64
106
|
|
|
65
107
|
|
|
@@ -115,6 +157,12 @@ def _manifest(mode: str, entries: list[dict[str, Any]]) -> dict[str, Any]:
|
|
|
115
157
|
"mode": mode,
|
|
116
158
|
"canonical_source": "specs repo or installed Airlock",
|
|
117
159
|
"snapshot_policy": "Snapshots are app-local development references, not canonical specs.",
|
|
160
|
+
"installed_airlock_contract": {
|
|
161
|
+
"observe": "read-only governance observation, context, activity, health, billing events, and access explanation",
|
|
162
|
+
"agent": "governed agent work in the actor scope",
|
|
163
|
+
"admin": "administrative mutation and operational changes",
|
|
164
|
+
"restricted_reference": "one-record reference lookup through agent.get_reference_record; do not enumerate protected reference paths",
|
|
165
|
+
},
|
|
118
166
|
"specs": entries,
|
|
119
167
|
"tracks": {
|
|
120
168
|
"spec_track": "row grain, columns, samples, access, validation, workflow",
|
|
@@ -134,6 +182,7 @@ def _merge_manifest(existing: Any, new_manifest: dict[str, Any]) -> dict[str, An
|
|
|
134
182
|
"mode": new_manifest["mode"],
|
|
135
183
|
"canonical_source": new_manifest["canonical_source"],
|
|
136
184
|
"snapshot_policy": new_manifest["snapshot_policy"],
|
|
185
|
+
"installed_airlock_contract": new_manifest["installed_airlock_contract"],
|
|
137
186
|
"tracks": new_manifest["tracks"],
|
|
138
187
|
}
|
|
139
188
|
)
|
|
@@ -265,7 +314,8 @@ def format_app_context_result(result: AppContextResult) -> str:
|
|
|
265
314
|
"next:",
|
|
266
315
|
"1. Treat spec snapshots as app-local references, not canonical specs.",
|
|
267
316
|
"2. Mark each manifest spec as read, write, or read_write for the app.",
|
|
268
|
-
"3.
|
|
317
|
+
"3. Use observe.* for read-only governance discovery and agent.* for governed actor work.",
|
|
318
|
+
"4. Build governed submissions through approved Airlock/Snowflake access paths.",
|
|
269
319
|
]
|
|
270
320
|
)
|
|
271
321
|
return "\n".join(lines)
|
|
@@ -111,6 +111,34 @@ Identify:
|
|
|
111
111
|
- the Airlock access path available in this environment
|
|
112
112
|
- identity, evidence, timestamp, approval, and separation-of-duties rules
|
|
113
113
|
|
|
114
|
+
Installed Airlock separates procedure intent:
|
|
115
|
+
|
|
116
|
+
- `observe.*`: read-only governance observation for discovery, health, access
|
|
117
|
+
explanation, governance maps, activity, billing events, and context packets.
|
|
118
|
+
- `agent.*`: governed agent work in the actor's scope.
|
|
119
|
+
- `admin.*`: administrative mutation and operational changes.
|
|
120
|
+
|
|
121
|
+
For app-first work, use observe payloads such as `observe.procedures`,
|
|
122
|
+
`observe.specs`, `observe.spec`, `observe.governance_map`,
|
|
123
|
+
`observe.explain_access`, `observe.health`, `observe.activity`,
|
|
124
|
+
`observe.admin_activity`, `observe.spec_admin_activity`, and
|
|
125
|
+
`observe.billing_events` before inventing custom read paths. For `alter_spec`
|
|
126
|
+
activity, use `CHANGED_SECTIONS` and `CHANGED_FIELDS` to triage what changed
|
|
127
|
+
before fetching version snapshots. Do not call retired admin read wrappers such as `admin.list_specs`, `admin.describe_role`,
|
|
128
|
+
or `admin.list_events`; use the matching observe list/detail procedure.
|
|
129
|
+
|
|
130
|
+
Restricted references are one-record interaction contracts for read-only
|
|
131
|
+
reference specs. If `agent.describe_spec`, `observe.spec_config`, or
|
|
132
|
+
`observe.reference_context` shows `restricted_reference` or
|
|
133
|
+
`reference_config.restricted_reference`, do not enumerate the protected
|
|
134
|
+
reference, build a populated picker, or use broad `agent.select_reference_data`
|
|
135
|
+
for that object path. Get the lookup value from the user's case/work context,
|
|
136
|
+
then call `agent.get_reference_record` with the configured `object_key`, lookup
|
|
137
|
+
value, purpose, and role lens. Use `observe.usage_limits`,
|
|
138
|
+
`observe.usage_limit`, and
|
|
139
|
+
`observe.explain_access(action => 'get_reference_record', object_key => ...)`
|
|
140
|
+
for planning and audit without reading raw reference rows.
|
|
141
|
+
|
|
114
142
|
The app may orient the user with summaries, comparisons, rankings, exception
|
|
115
143
|
queues, proposals, or dashboards. It should submit governed choices back
|
|
116
144
|
through an Airlock spec contract. Do not write directly to Airlock-owned tables,
|
|
@@ -247,6 +247,7 @@ def workspace_summary(
|
|
|
247
247
|
f" owner_role: {_format_value(core.get('owner_role'))}",
|
|
248
248
|
f" published: {_format_value(core.get('is_published'))}",
|
|
249
249
|
f" archived: {_format_value(core.get('is_archived'))}",
|
|
250
|
+
f" payload_adapter: {_format_value(core.get('payload_adapter'), default='default')}",
|
|
250
251
|
f" description: {_truncate(core.get('description')) or 'none'}",
|
|
251
252
|
"",
|
|
252
253
|
"file_rules:",
|
package/src/mcp.mjs
CHANGED
|
@@ -44,7 +44,7 @@ export function handleMcpRequest(message) {
|
|
|
44
44
|
},
|
|
45
45
|
serverInfo: {
|
|
46
46
|
name: "airlock",
|
|
47
|
-
version: "0.1.
|
|
47
|
+
version: "0.1.5",
|
|
48
48
|
},
|
|
49
49
|
instructions:
|
|
50
50
|
"Airlock MCP helps agents improve processes with Airlock specs and build apps or workflows that use existing specs. Use airlock_start for orientation or the airlock_* tools to bootstrap, draft, check, summarize, export, and render specs.",
|
package/src/text.mjs
CHANGED
|
@@ -53,10 +53,36 @@ and a plan for more. Do not create the first workspace until I choose a path.
|
|
|
53
53
|
|
|
54
54
|
If I want app-first or co-development, ask for the app goal, the specs I can
|
|
55
55
|
access, which specs are read sources, which spec records decisions or actions,
|
|
56
|
-
and where the app should run.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
and where the app should run. Teach the installed Airlock procedure split:
|
|
57
|
+
\`airlock.observe.*\` is read-only governance observation,
|
|
58
|
+
\`airlock.agent.*\` is governed agent work, and \`airlock.admin.*\` is
|
|
59
|
+
administrative mutation. Prefer observe payloads such as
|
|
60
|
+
\`observe.procedures\`, \`observe.specs\`, \`observe.spec\`,
|
|
61
|
+
\`observe.governance_map\`, \`observe.explain_access\`, \`observe.health\`,
|
|
62
|
+
\`observe.activity\`, \`observe.admin_activity\`, \`observe.spec_admin_activity\`,
|
|
63
|
+
and \`observe.billing_events\` before inventing custom read paths. For \`alter_spec\`
|
|
64
|
+
activity, use \`CHANGED_SECTIONS\` and \`CHANGED_FIELDS\` to triage what changed
|
|
65
|
+
before fetching version snapshots. Offer to run \`airlock-mcp init-app-context\`
|
|
66
|
+
in the app repo to seed \`airlock/specs.manifest.json\`, spec snapshots, sample records, and
|
|
67
|
+
generated helper folders. Help code the app using approved Airlock/Snowflake access paths.
|
|
68
|
+
When a reference spec declares \`restricted_reference\` or
|
|
69
|
+
\`reference_config.restricted_reference\`, do not enumerate values, build a
|
|
70
|
+
populated picker, or call broad \`agent.select_reference_data\`. Get the lookup
|
|
71
|
+
value from the user's case/work context and call
|
|
72
|
+
\`agent.get_reference_record\` for the configured \`object_key\`, purpose, and
|
|
73
|
+
role lens. It returns at most one record, applies reference row filters, checks
|
|
74
|
+
\`action_limit\` before returning data, and always records the safe
|
|
75
|
+
\`REFERENCE_READ\` event used for budgeting. Branch on \`OK\`, \`NOT_FOUND\`,
|
|
76
|
+
\`NON_UNIQUE_LOOKUP_KEY\`, \`PURPOSE_REQUIRED\`, \`USAGE_LIMIT_BLOCKED\`, and
|
|
77
|
+
\`REFERENCE_READ_EVENT_FAILED\`; report \`USAGE_CONTEXT\` fields such as
|
|
78
|
+
\`action_limit_used\` and \`action_time_period\`. Use
|
|
79
|
+
\`observe.reference_context\`, \`observe.usage_limits\`, \`observe.usage_limit\`,
|
|
80
|
+
and \`observe.explain_access(action => 'get_reference_record', object_key => ...)\`
|
|
81
|
+
for read-only planning and audit.
|
|
82
|
+
|
|
83
|
+
Do not use retired admin read wrappers such as
|
|
84
|
+
\`admin.list_specs\`, \`admin.describe_role\`, or \`admin.list_events\`; use
|
|
85
|
+
the matching observe procedure. Do not write directly to Airlock-owned tables
|
|
60
86
|
or bypass spec workflow.`;
|
|
61
87
|
}
|
|
62
88
|
|
|
@@ -78,11 +104,13 @@ Airlock MCP will offer:
|
|
|
78
104
|
- spec-first, app-first, and co-development planning
|
|
79
105
|
- spec design with the bundled workbench
|
|
80
106
|
- Airlock operating patterns for OODA loops and separation of duties
|
|
107
|
+
- read-only observe procedures for governance maps, health, access explanation, activity, billing events, and context packets
|
|
81
108
|
- app context seeding with spec snapshots and manifests
|
|
82
109
|
- app and workflow coding against existing Airlock specs
|
|
83
110
|
- observe specs for controlled interface ingestion
|
|
84
111
|
- orient specs for proposals, context, scoring, or exception queues
|
|
85
112
|
- decision specs and action specs for governed follow-through
|
|
113
|
+
- OKF-style Markdown knowledge bundles for accepted agent context
|
|
86
114
|
- artifact-grounded drafts from CSV, Excel, JSON, API docs, schemas, forms, screenshots, PDFs, or exports
|
|
87
115
|
- airlock-specs library patterns as starting points, checked against current artifacts`;
|
|
88
116
|
}
|
|
@@ -95,7 +123,7 @@ Airlock. It helps a person and their agent improve processes by designing
|
|
|
95
123
|
specs, using specs for governed data movement, planning OODA loops, and building
|
|
96
124
|
apps or workflows that read from and submit through existing specs.
|
|
97
125
|
|
|
98
|
-
Airlock MCP gives agents
|
|
126
|
+
Airlock MCP gives agents four kinds of Airlock help:
|
|
99
127
|
|
|
100
128
|
1. Spec design: draft, check, revise, import, clone, and prepare specs for
|
|
101
129
|
installed Airlock validation.
|
|
@@ -105,6 +133,10 @@ Airlock MCP gives agents three kinds of Airlock help:
|
|
|
105
133
|
3. App and workflow implementation: build dashboards, queues, decision UIs,
|
|
106
134
|
analyses, and agent workflows that use existing specs without bypassing
|
|
107
135
|
Airlock contracts.
|
|
136
|
+
4. Governance observation: use installed Airlock's read-only \`observe.*\`
|
|
137
|
+
procedures to inspect setup, access, activity, billing events, health,
|
|
138
|
+
context packets, and governance maps before deciding what an app or agent
|
|
139
|
+
should do.
|
|
108
140
|
|
|
109
141
|
Start in a Git-backed specs repo such as ${specsRepoName(project)}. GitHub is
|
|
110
142
|
the recommended default when the user has it set up, but any normal repository
|
|
@@ -146,15 +178,36 @@ points, patterns, and ideas. Library specs are not guaranteed to match the
|
|
|
146
178
|
current shape of any third-party system. Prefer current API docs, real exports,
|
|
147
179
|
samples, and other artifacts when they conflict with the library.
|
|
148
180
|
|
|
181
|
+
For governed Markdown knowledge, use the \`okf-knowledge-bundle\` pattern. It
|
|
182
|
+
creates a spec with \`core_config.payload_adapter\` set to
|
|
183
|
+
\`okf_knowledge_bundle\`. Installed Airlock loads locally validated bundles with
|
|
184
|
+
\`airlock.admin.load_okf_bundle(...)\`, can sync parsed metadata with
|
|
185
|
+
\`airlock.admin.sync_okf_bundle_metadata(...)\`, and exposes authoritative
|
|
186
|
+
accepted context through \`AIRLOCK_DATA.ACTIVE.V_OKF_CONCEPT_METADATA\`.
|
|
187
|
+
|
|
149
188
|
Give Codex the messy version of the process. Airlock MCP should help turn it
|
|
150
189
|
into a small first Airlock spec and a plan for more.
|
|
151
190
|
|
|
152
191
|
For app-first and co-development work, give Codex the app goal and available
|
|
153
192
|
specs. Airlock MCP should identify read specs, write specs, orienting views,
|
|
154
|
-
decision capture, and safe Airlock/Snowflake access paths.
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
193
|
+
decision capture, and safe Airlock/Snowflake access paths. Installed Airlock
|
|
194
|
+
uses \`observe.*\` for read-only governance observation, \`agent.*\` for
|
|
195
|
+
governed agent work, and \`admin.*\` for administrative mutation. Start
|
|
196
|
+
read-side discovery with observe payloads such as \`observe.procedures\`,
|
|
197
|
+
\`observe.specs\`, \`observe.spec\`, \`observe.governance_map\`,
|
|
198
|
+
\`observe.explain_access\`, \`observe.health\`, \`observe.activity\`,
|
|
199
|
+
\`observe.admin_activity\`, \`observe.spec_admin_activity\`, and \`observe.billing_events\`;
|
|
200
|
+
for \`alter_spec\` activity, use \`CHANGED_SECTIONS\` and \`CHANGED_FIELDS\` to
|
|
201
|
+
triage what changed before fetching version snapshots. Do not use retired admin
|
|
202
|
+
read wrappers such as \`admin.list_specs\`, \`admin.describe_role\`, or
|
|
203
|
+
\`admin.list_events\`. If a reference spec declares \`restricted_reference\` or
|
|
204
|
+
\`reference_config.restricted_reference\`, do not enumerate the protected
|
|
205
|
+
reference; use \`agent.get_reference_record\` for a known lookup value and
|
|
206
|
+
\`observe.usage_limits\` / \`observe.usage_limit\` for budget visibility. It can
|
|
207
|
+
seed an app repo with \`airlock/specs.manifest.json\`, spec snapshots, sample
|
|
208
|
+
records, and generated helper folders. The app should submit decisions,
|
|
209
|
+
approvals, actions, comments, or follow-ups through Airlock spec contracts, not
|
|
210
|
+
direct table writes.
|
|
158
211
|
In co-development mode, keep the spec track and app track visible side by side.`;
|
|
159
212
|
}
|
|
160
213
|
|
package/src/workbench.mjs
CHANGED
|
@@ -82,7 +82,7 @@ export const WORKBENCH_TOOLS = [
|
|
|
82
82
|
{
|
|
83
83
|
pattern: {
|
|
84
84
|
type: "string",
|
|
85
|
-
enum: ["blank", "posts"],
|
|
85
|
+
enum: ["blank", "okf-knowledge-bundle", "posts"],
|
|
86
86
|
description: "Pattern to inspect.",
|
|
87
87
|
},
|
|
88
88
|
files: {
|
|
@@ -106,7 +106,7 @@ export const WORKBENCH_TOOLS = [
|
|
|
106
106
|
},
|
|
107
107
|
pattern: {
|
|
108
108
|
type: "string",
|
|
109
|
-
enum: ["blank", "posts"],
|
|
109
|
+
enum: ["blank", "okf-knowledge-bundle", "posts"],
|
|
110
110
|
description: "Starting pattern. Defaults to blank.",
|
|
111
111
|
},
|
|
112
112
|
output: {
|