@reunionstudio/airlock-mcp 0.1.0 → 0.1.1
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 +42 -16
- package/.agents/skills/airlock-mcp/agents/openai.yaml +2 -2
- package/README.md +20 -17
- package/docs/architecture.md +6 -5
- package/docs/install-surface.md +7 -5
- package/docs/ooda-loop.md +20 -8
- package/docs/workflows.md +34 -14
- package/package.json +1 -1
- package/setup.py +1 -1
- package/src/airlock_mcp/__init__.py +1 -1
- package/src/airlock_mcp/bootstrap.py +24 -10
- package/src/airlock_mcp/manage.py +18 -2
- package/src/mcp.mjs +2 -2
- package/src/text.mjs +40 -27
|
@@ -29,22 +29,30 @@ the deterministic checker.
|
|
|
29
29
|
any workspace.
|
|
30
30
|
If the user opened the public `airlock-mcp` workbench repo as the entry
|
|
31
31
|
point, help them create a separate `<slug>-specs` project repo beside it.
|
|
32
|
-
3. If no workspace exists, welcome the user and
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
32
|
+
3. If no workspace exists, welcome the user and ask:
|
|
33
|
+
`What process do you want to improve?`
|
|
34
|
+
Explain that Airlock works best when we can identify the loop around that
|
|
35
|
+
process:
|
|
36
|
+
- what information comes in
|
|
37
|
+
- what context helps people or agents understand it
|
|
38
|
+
- what decision needs to be made
|
|
39
|
+
- what action happens after the decision
|
|
40
|
+
Give examples before naming the concept: apps, files, forms, people, emails,
|
|
41
|
+
calls, mail, websites, APIs, data feeds, or physical events. Then call these
|
|
42
|
+
places interfaces: where the process observes from or acts through.
|
|
43
|
+
Ask for the messy version. Help turn it into a small first Airlock spec and
|
|
44
|
+
a plan for more. Do not create the first workspace until the user chooses a
|
|
45
|
+
path.
|
|
38
46
|
4. Create `posts` only when the user chooses a feedback loop, asks for humans
|
|
39
47
|
and agents to provide feedback, or explicitly requests the posts pattern.
|
|
40
|
-
If the user is unsure,
|
|
48
|
+
If the user is unsure, continue process discovery before creating files.
|
|
41
49
|
5. Use `airlock-mcp import-spec <json-file> <name>` when starting from a
|
|
42
50
|
spec-library file, an exported `SPEC_CONFIG`, or an existing canonical config.
|
|
43
51
|
6. Use `airlock-mcp clone <source-workspace> <name>` when creating a related
|
|
44
52
|
draft from an existing workspace. Treat clone like the old Streamlit UI:
|
|
45
53
|
preserve the shape but deliberately reset spec identity.
|
|
46
54
|
7. Keep the draft small. Prefer one useful governed output over a large
|
|
47
|
-
speculative system.
|
|
55
|
+
speculative system, then keep a plan for later specs.
|
|
48
56
|
8. On later sessions, run `airlock-mcp list-workspaces` when the target draft
|
|
49
57
|
is not obvious.
|
|
50
58
|
9. Run `airlock-mcp summary <workspace>` and
|
|
@@ -63,7 +71,9 @@ the deterministic checker.
|
|
|
63
71
|
|
|
64
72
|
## Spec Design Questions
|
|
65
73
|
|
|
66
|
-
|
|
74
|
+
Use these as an internal checklist. Do not dump the whole list into chat.
|
|
75
|
+
Write resolved answers into `decisions.md` and ask the human only for missing
|
|
76
|
+
or risky decisions:
|
|
67
77
|
|
|
68
78
|
1. What is one row about?
|
|
69
79
|
2. What systems, users, files, events, or reference data must be observed before
|
|
@@ -79,17 +89,33 @@ Resolve these in order, and write the answers into `decisions.md`:
|
|
|
79
89
|
10. Which optional context can live in a validated `variant` field?
|
|
80
90
|
11. Who submits, reviews, reads, delegates, and owns the process?
|
|
81
91
|
|
|
92
|
+
## Interfaces
|
|
93
|
+
|
|
94
|
+
Use interface to mean any place the process observes from or acts through.
|
|
95
|
+
Do not lead with the word before examples. Interfaces can be apps, files, forms,
|
|
96
|
+
people, emails, calls, mail, websites, APIs, data feeds, physical events,
|
|
97
|
+
shared folders, payment tools, bank apps, or other systems.
|
|
98
|
+
|
|
99
|
+
When a user names a process, map the interfaces both ways:
|
|
100
|
+
|
|
101
|
+
- Observe: where information enters the loop.
|
|
102
|
+
- Act: where a decision writes back to the world.
|
|
103
|
+
|
|
104
|
+
Spot gaps gently. A user may have one dataset but need additional observations
|
|
105
|
+
to orient well, or may rely on hard-to-automate interfaces such as phone calls
|
|
106
|
+
or physical mail.
|
|
107
|
+
|
|
82
108
|
## OODA Loop
|
|
83
109
|
|
|
84
110
|
Use the observe-orient-decide-act loop as the product frame:
|
|
85
111
|
|
|
86
|
-
- Observe:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
- Act:
|
|
92
|
-
|
|
112
|
+
- Observe: controlled interface ingestion and observation/reference specs.
|
|
113
|
+
- Orient: context, proposals, scoring, exception queues, summaries, and gaps in
|
|
114
|
+
the observation set.
|
|
115
|
+
- Decide: governed choices by people or agents, with identity, timestamp,
|
|
116
|
+
rationale, evidence, approval, and separation of duties.
|
|
117
|
+
- Act: controlled writes back to interfaces, commitments, follow-ups, outputs,
|
|
118
|
+
and the next observations created by those actions.
|
|
93
119
|
|
|
94
120
|
## Pattern Guidance
|
|
95
121
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "Airlock MCP"
|
|
3
|
-
short_description: "
|
|
4
|
-
default_prompt: "Use $airlock-mcp to
|
|
3
|
+
short_description: "Improve a process with Airlock specs and OODA loop planning."
|
|
4
|
+
default_prompt: "Use $airlock-mcp to ask what process I want to improve, identify the loop around it, draft a small first Airlock spec, and keep a plan for more specs."
|
package/README.md
CHANGED
|
@@ -5,18 +5,21 @@ Airlock.
|
|
|
5
5
|
|
|
6
6
|
It covers the full Airlock loop:
|
|
7
7
|
|
|
8
|
-
-
|
|
9
|
-
-
|
|
8
|
+
- design specs with the bundled spec-building workbench
|
|
9
|
+
- map the process a person wants to improve into observe, orient, decide, and act
|
|
10
|
+
- use specs for governed data movement, decisions, actions, and feedback loops
|
|
10
11
|
- validate, create, and revise specs against installed Airlock
|
|
11
|
-
- capture real use cases and improvements so specs get better over time
|
|
12
12
|
|
|
13
13
|
Spec building is not a second thing users install. It is bundled inside
|
|
14
14
|
Airlock MCP.
|
|
15
15
|
|
|
16
|
-
Airlock
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
Airlock MCP gives agents two kinds of Airlock expertise:
|
|
17
|
+
|
|
18
|
+
1. Spec design: draft, check, revise, import, clone, and prepare specs for
|
|
19
|
+
installed Airlock validation.
|
|
20
|
+
2. Airlock operating patterns: use specs to organize observations, orientation,
|
|
21
|
+
governed decisions, controlled actions, separation of duties, and feedback
|
|
22
|
+
loops.
|
|
20
23
|
|
|
21
24
|
## Install
|
|
22
25
|
|
|
@@ -26,7 +29,7 @@ Dogfood directly from GitHub:
|
|
|
26
29
|
npx -y github:reunionstudio/airlock-mcp install --package github:reunionstudio/airlock-mcp
|
|
27
30
|
```
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
Install from npm:
|
|
30
33
|
|
|
31
34
|
```bash
|
|
32
35
|
npx @reunionstudio/airlock-mcp install
|
|
@@ -45,9 +48,9 @@ The GitHub dogfood command registers:
|
|
|
45
48
|
codex mcp add airlock -- npx -y github:reunionstudio/airlock-mcp server
|
|
46
49
|
```
|
|
47
50
|
|
|
48
|
-
The server exposes bootstrap guidance for starting a specs repo
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
The server exposes bootstrap guidance for starting a specs repo, coaching a
|
|
52
|
+
person through process discovery, and entering the bundled spec-building
|
|
53
|
+
workbench when a first spec is ready to draft.
|
|
51
54
|
|
|
52
55
|
This install shape uses Node because `npx` runs npm package binaries. MCP itself
|
|
53
56
|
does not require Node. Once Airlock MCP does real operational work, such as
|
|
@@ -116,11 +119,11 @@ The intended user flow is:
|
|
|
116
119
|
2. Open Codex.
|
|
117
120
|
3. Create a blank project repo named for the org or project, such as
|
|
118
121
|
`home-specs`.
|
|
119
|
-
4. Ask Codex to use Airlock MCP to help
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
useful path before creating the first workspace.
|
|
122
|
+
4. Ask Codex to use Airlock MCP to help improve a process with Airlock specs.
|
|
123
|
+
5. Let Airlock MCP bootstrap the project, ask what process the user wants to
|
|
124
|
+
improve, and propose a small first spec plus a plan for more.
|
|
123
125
|
|
|
124
126
|
The first workspace should not be created automatically. The spec-building
|
|
125
|
-
workbench should
|
|
126
|
-
|
|
127
|
+
workbench should first ask for the messy process, identify where information
|
|
128
|
+
comes in and actions go out, then choose a small observation, orient, decision,
|
|
129
|
+
or action spec.
|
package/docs/architecture.md
CHANGED
|
@@ -28,9 +28,10 @@ heavier operational tools mature.
|
|
|
28
28
|
|
|
29
29
|
The spec-building workbench lives in this repo under `src/airlock_mcp`,
|
|
30
30
|
`patterns`, `workspaces`, `schemas`, and `.agents/skills/airlock-mcp`.
|
|
31
|
-
Airlock
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
Airlock operating patterns live in the same MCP experience: real use cases,
|
|
32
|
+
controlled interface ingestion, OODA loops, governed decisions, separation of
|
|
33
|
+
duties, controlled actions, output review, and improvement capture. This is not
|
|
34
|
+
a second install or separate product surface.
|
|
34
35
|
|
|
35
36
|
## MCP Surface
|
|
36
37
|
|
|
@@ -45,8 +46,8 @@ The bootstrap server exposes:
|
|
|
45
46
|
`airlock_next`, `airlock_export_csv`, and `airlock_render_sql`
|
|
46
47
|
|
|
47
48
|
These give the agent enough context to start a blank `<project>-specs` repo,
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
ask what process the user wants to improve, enter the spec-building workbench
|
|
50
|
+
when a first spec is ready to draft, and avoid creating a first workspace until
|
|
50
51
|
the user chooses a path.
|
|
51
52
|
|
|
52
53
|
Workbench tools call the bundled Python package with argument arrays and a
|
package/docs/install-surface.md
CHANGED
|
@@ -13,8 +13,9 @@ npx @reunionstudio/airlock-mcp install
|
|
|
13
13
|
|
|
14
14
|
Airlock MCP is the single installed interface for agents working with Airlock.
|
|
15
15
|
Then the user opens Codex, creates a blank `<project>-specs` repo, and starts
|
|
16
|
-
chatting with Airlock. Airlock MCP should
|
|
17
|
-
|
|
16
|
+
chatting with Airlock. Airlock MCP should start by asking what process the user
|
|
17
|
+
wants to improve, then help design specs and operating patterns around observe,
|
|
18
|
+
orient, decide, and act.
|
|
18
19
|
|
|
19
20
|
The install command is not the spec workspace. It is the connector/setup entry
|
|
20
21
|
point. The specs repo is still the durable memory.
|
|
@@ -107,6 +108,7 @@ The first release should optimize the user journey:
|
|
|
107
108
|
|
|
108
109
|
1. install connector
|
|
109
110
|
2. create blank `<project>-specs` Codex project
|
|
110
|
-
3.
|
|
111
|
-
4.
|
|
112
|
-
5. create the first workspace only after the user chooses a
|
|
111
|
+
3. ask what process the user wants to improve
|
|
112
|
+
4. map where information comes in and actions go out
|
|
113
|
+
5. create the first workspace only after the user chooses a small first spec
|
|
114
|
+
6. keep a plan for later specs that improve the full loop
|
package/docs/ooda-loop.md
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
# OODA Loop For Airlock Specs
|
|
2
2
|
|
|
3
|
-
Airlock specs should support a
|
|
3
|
+
Airlock specs should support a process loop, not just a table.
|
|
4
|
+
|
|
5
|
+
Airlock works best when we can identify where information comes in and where
|
|
6
|
+
actions go out. Those places might be apps, files, forms, people, emails, calls,
|
|
7
|
+
mail, websites, APIs, data feeds, physical events, payment tools, bank apps, or
|
|
8
|
+
shared folders. After those examples are clear, call them interfaces: where the
|
|
9
|
+
process observes from or acts through.
|
|
4
10
|
|
|
5
11
|
## Observe
|
|
6
12
|
|
|
7
|
-
Name the evidence and
|
|
13
|
+
Name the interfaces, evidence, and signals that matter:
|
|
8
14
|
|
|
9
15
|
- human entries
|
|
10
16
|
- agent observations
|
|
@@ -15,7 +21,7 @@ Name the evidence and systems that matter:
|
|
|
15
21
|
|
|
16
22
|
## Orient
|
|
17
23
|
|
|
18
|
-
Turn observations into a
|
|
24
|
+
Turn observations into context that can support a decision:
|
|
19
25
|
|
|
20
26
|
- one row grain
|
|
21
27
|
- durable identifiers
|
|
@@ -27,14 +33,20 @@ Turn observations into a governed shape:
|
|
|
27
33
|
- workflow
|
|
28
34
|
- references
|
|
29
35
|
- expectations
|
|
36
|
+
- missing observations or quality gaps
|
|
30
37
|
|
|
31
38
|
## Decide
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
Capture the governed choice. A decision spec should identify who or what made
|
|
41
|
+
the choice, when it happened, which option was selected, what evidence or
|
|
42
|
+
rationale mattered, and what separation of duties applies.
|
|
35
43
|
|
|
36
44
|
## Act
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
Model the action that follows the decision: send an email, submit payment,
|
|
47
|
+
update a website, change a price, open a ticket, trigger outreach, produce a
|
|
48
|
+
filing, request more evidence, or create another governed output. The action
|
|
49
|
+
creates new observations and the loop spins again.
|
|
50
|
+
|
|
51
|
+
Start with one small useful spec, then keep a plan for the next specs that
|
|
52
|
+
complete or improve the loop.
|
package/docs/workflows.md
CHANGED
|
@@ -20,10 +20,13 @@ The preferred Codex prompt is:
|
|
|
20
20
|
```text
|
|
21
21
|
I want to use Airlock MCP to start working with Airlock specs for Home.
|
|
22
22
|
|
|
23
|
-
Set up this project as an Airlock specs repo.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
Set up this project as an Airlock specs repo. Welcome me by asking what
|
|
24
|
+
process I want to improve. Explain that Airlock works best when we can
|
|
25
|
+
identify the loop around that process: what information comes in, what context
|
|
26
|
+
helps us understand it, what decision needs to be made, and what action happens
|
|
27
|
+
after the decision. Ask for the messy version, then help turn it into a small
|
|
28
|
+
first Airlock spec and a plan for more. Do not create the first workspace until
|
|
29
|
+
I choose a path.
|
|
27
30
|
```
|
|
28
31
|
|
|
29
32
|
When dogfooding this implementation repo before the MCP package is published,
|
|
@@ -66,26 +69,43 @@ The MCP-style flow should be:
|
|
|
66
69
|
2. Open Codex.
|
|
67
70
|
3. Create a new blank project named for the org or project, such as
|
|
68
71
|
`home-specs`.
|
|
69
|
-
4. Tell Codex: `Use Airlock to help me
|
|
70
|
-
5. Airlock MCP welcomes,
|
|
71
|
-
|
|
72
|
+
4. Tell Codex: `Use Airlock to help me improve a process with specs.`
|
|
73
|
+
5. Airlock MCP welcomes, asks what process the user wants to improve, explains
|
|
74
|
+
the loop around the process, and proposes a small first spec plus a plan for
|
|
75
|
+
more.
|
|
72
76
|
|
|
73
77
|
`init-repo` creates `AGENTS.md`, `.agents/skills/airlock-mcp/SKILL.md`, and
|
|
74
78
|
`workspaces/`. That is what lets Codex understand prompts such as
|
|
75
79
|
`Use $airlock-mcp` inside the specs repo.
|
|
76
80
|
|
|
77
|
-
After bootstrap,
|
|
81
|
+
After bootstrap, do not start with a pattern picker. Ask:
|
|
78
82
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
```text
|
|
84
|
+
What process do you want to improve?
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Then explain:
|
|
88
|
+
|
|
89
|
+
- Airlock works best when we can identify what information comes in.
|
|
90
|
+
- Airlock works best when we can identify what context helps people or agents
|
|
91
|
+
understand that information.
|
|
92
|
+
- Airlock works best when we can identify what decision needs to be made.
|
|
93
|
+
- Airlock works best when we can identify what action happens after the
|
|
94
|
+
decision.
|
|
95
|
+
|
|
96
|
+
Information may come from apps, files, forms, people, emails, calls, mail,
|
|
97
|
+
websites, APIs, data feeds, or physical events. Actions may go back through
|
|
98
|
+
those same places. After giving examples, call these places interfaces: where
|
|
99
|
+
the process observes from or acts through.
|
|
100
|
+
|
|
101
|
+
Ask for the messy version. Help turn it into a small first Airlock spec and a
|
|
102
|
+
plan for more.
|
|
83
103
|
|
|
84
104
|
## Start From Feedback
|
|
85
105
|
|
|
86
106
|
Use this when the user chooses a shared feedback loop for humans and agents.
|
|
87
|
-
If they are not sure what to model yet,
|
|
88
|
-
this workspace.
|
|
107
|
+
If they are not sure what to model yet, continue process discovery before
|
|
108
|
+
creating this workspace.
|
|
89
109
|
|
|
90
110
|
```bash
|
|
91
111
|
airlock-mcp init feedback-loop --pattern posts
|
package/package.json
CHANGED
package/setup.py
CHANGED
|
@@ -37,23 +37,35 @@ installed Airlock app.
|
|
|
37
37
|
|
|
38
38
|
## Starting A Spec Project
|
|
39
39
|
|
|
40
|
-
After bootstrap, welcome the user and orient before creating a workspace.
|
|
41
|
-
|
|
40
|
+
After bootstrap, welcome the user and orient before creating a workspace. Start
|
|
41
|
+
with:
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
- start from a known process they already have in mind
|
|
45
|
-
- create a shared `posts` feedback loop for humans and agents to submit
|
|
46
|
-
requests, observations, and responses
|
|
43
|
+
What process do you want to improve?
|
|
47
44
|
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
Explain that Airlock works best when we can identify the loop around that
|
|
46
|
+
process:
|
|
47
|
+
|
|
48
|
+
1. what information comes in
|
|
49
|
+
2. what context helps people or agents understand it
|
|
50
|
+
3. what decision needs to be made
|
|
51
|
+
4. what action happens after the decision
|
|
52
|
+
|
|
53
|
+
Information may come from apps, files, forms, people, emails, calls, mail,
|
|
54
|
+
websites, APIs, data feeds, or physical events. Actions may go back through
|
|
55
|
+
those same places. After giving examples, call these places interfaces: where
|
|
56
|
+
the process observes from or acts through.
|
|
57
|
+
|
|
58
|
+
Ask for the messy version. Help turn it into a small first Airlock spec and a
|
|
59
|
+
plan for more. Do not create the first workspace until the user chooses a path.
|
|
60
|
+
Create `posts` only when the user wants a shared feedback loop or explicitly
|
|
61
|
+
asks for the posts pattern.
|
|
50
62
|
|
|
51
63
|
## Working Style
|
|
52
64
|
|
|
53
65
|
- Use the repo-scoped `$airlock-mcp` skill for spec drafting, review, and
|
|
54
66
|
pattern selection.
|
|
55
67
|
- Keep drafts small and concrete. Prefer one useful governed output over a
|
|
56
|
-
large speculative process map.
|
|
68
|
+
large speculative process map, then keep a plan for later specs.
|
|
57
69
|
- Preserve decisions in workspace files so future Codex sessions can resume
|
|
58
70
|
without relying on chat memory.
|
|
59
71
|
- Use `airlock-mcp list-workspaces` before guessing which draft to resume.
|
|
@@ -78,6 +90,8 @@ Resolve these before final JSON:
|
|
|
78
90
|
- workflow and pushback
|
|
79
91
|
- references and expectations
|
|
80
92
|
- delegation and agent identity
|
|
93
|
+
- interfaces observed from or acted through
|
|
94
|
+
- likely gaps in observations, orientation, decisions, or actions
|
|
81
95
|
- observe-orient-decide-act loop
|
|
82
96
|
|
|
83
97
|
Do not encode Airlock lifecycle state, reviewer notes, approval status, or
|
|
@@ -155,7 +169,7 @@ def format_bootstrap_result(result: BootstrapResult) -> str:
|
|
|
155
169
|
"next:",
|
|
156
170
|
"1. Open this repo in Codex.",
|
|
157
171
|
"2. Ask: Use Airlock to help me build and use specs.",
|
|
158
|
-
"3.
|
|
172
|
+
"3. Start with: What process do you want to improve?",
|
|
159
173
|
]
|
|
160
174
|
)
|
|
161
175
|
return "\n".join(lines)
|
|
@@ -233,8 +233,24 @@ def next_steps(workspace: Path) -> str:
|
|
|
233
233
|
lines.append(f"2. Run `airlock-mcp summary {workspace}` to confirm the shape.")
|
|
234
234
|
return "\n".join(lines)
|
|
235
235
|
if _text_has_open_placeholders(workspace / "decisions.md"):
|
|
236
|
-
|
|
237
|
-
|
|
236
|
+
spec_name = ""
|
|
237
|
+
if isinstance(spec, dict):
|
|
238
|
+
core_config = spec.get("core_config")
|
|
239
|
+
if isinstance(core_config, dict):
|
|
240
|
+
spec_name = str(core_config.get("spec_name") or "")
|
|
241
|
+
if spec_name == "posts":
|
|
242
|
+
lines.append("1. Record the starter assumptions in decisions.md, or change only what is wrong.")
|
|
243
|
+
lines.append(
|
|
244
|
+
"2. Defaults: one row is one post/request/observation/response; "
|
|
245
|
+
"submitters are the owner and approved agents; evidence is optional; "
|
|
246
|
+
"posted_at is authored or captured time."
|
|
247
|
+
)
|
|
248
|
+
lines.append("3. Use posts to collect messy process feedback, then plan the first observe, orient, decide, or act spec.")
|
|
249
|
+
else:
|
|
250
|
+
lines.append("1. Record the messy process goal and first-loop assumptions in decisions.md.")
|
|
251
|
+
lines.append("2. Identify what is observed, what helps orient, what decision is governed, and what action follows.")
|
|
252
|
+
lines.append("3. Keep the first spec small and note later specs in review.md.")
|
|
253
|
+
lines.append(f"4. Run `airlock-mcp next {workspace}` when the design notes are current.")
|
|
238
254
|
return "\n".join(lines)
|
|
239
255
|
records = sample.get("records") if isinstance(sample, dict) else []
|
|
240
256
|
if not records:
|
package/src/mcp.mjs
CHANGED
|
@@ -44,10 +44,10 @@ export function handleMcpRequest(message) {
|
|
|
44
44
|
},
|
|
45
45
|
serverInfo: {
|
|
46
46
|
name: "airlock",
|
|
47
|
-
version: "0.1.
|
|
47
|
+
version: "0.1.1",
|
|
48
48
|
},
|
|
49
49
|
instructions:
|
|
50
|
-
"Airlock MCP helps agents
|
|
50
|
+
"Airlock MCP helps agents improve processes with Airlock specs. Use airlock_start for orientation or the airlock_* tools to bootstrap, draft, check, summarize, export, and render specs.",
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
|
package/src/text.mjs
CHANGED
|
@@ -21,10 +21,15 @@ export function airlockPrompt(project) {
|
|
|
21
21
|
const repoName = specsRepoName(project);
|
|
22
22
|
return `I want to use Airlock MCP to start working with Airlock specs for ${repoName}.
|
|
23
23
|
|
|
24
|
-
Set up this project as an Airlock specs repo.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
Set up this project as an Airlock specs repo. Welcome me by asking what
|
|
25
|
+
process I want to improve. Explain that Airlock works best when we can
|
|
26
|
+
identify the loop around that process: what information comes in, what context
|
|
27
|
+
helps us understand it, what decision needs to be made, and what action happens
|
|
28
|
+
after the decision. Information may come from apps, files, forms, people,
|
|
29
|
+
emails, calls, mail, websites, APIs, data feeds, or physical events. Actions
|
|
30
|
+
may go back through those same places. Ask for the messy version, then help
|
|
31
|
+
turn it into a small first Airlock spec and a plan for more. Do not create the
|
|
32
|
+
first workspace until I choose a path.`;
|
|
28
33
|
}
|
|
29
34
|
|
|
30
35
|
export function nextSteps(project) {
|
|
@@ -40,28 +45,29 @@ ${airlockPrompt(project)
|
|
|
40
45
|
.join("\n")}
|
|
41
46
|
|
|
42
47
|
Airlock MCP will offer:
|
|
43
|
-
-
|
|
44
|
-
- spec
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
48
|
+
- process discovery before choosing a spec pattern
|
|
49
|
+
- spec design with the bundled workbench
|
|
50
|
+
- Airlock operating patterns for OODA loops and separation of duties
|
|
51
|
+
- observe specs for controlled interface ingestion
|
|
52
|
+
- orient specs for proposals, context, scoring, or exception queues
|
|
53
|
+
- decision specs and action specs for governed follow-through`;
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
export function gettingStartedText(project) {
|
|
52
57
|
return `# Airlock MCP
|
|
53
58
|
|
|
54
59
|
Airlock MCP is the single installed interface for AI agents working with
|
|
55
|
-
Airlock. It helps a person and their agent
|
|
56
|
-
|
|
60
|
+
Airlock. It helps a person and their agent improve processes by designing
|
|
61
|
+
specs, using specs for governed data movement, and planning OODA loops that
|
|
62
|
+
can be assisted by people or agents.
|
|
57
63
|
|
|
58
|
-
|
|
59
|
-
clones, and prepares specs for installed Airlock validation.
|
|
64
|
+
Airlock MCP gives agents two kinds of Airlock expertise:
|
|
60
65
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
Airlock
|
|
64
|
-
|
|
66
|
+
1. Spec design: draft, check, revise, import, clone, and prepare specs for
|
|
67
|
+
installed Airlock validation.
|
|
68
|
+
2. Airlock operating patterns: use specs to organize observations, orientation,
|
|
69
|
+
governed decisions, controlled actions, separation of duties, and feedback
|
|
70
|
+
loops.
|
|
65
71
|
|
|
66
72
|
Start in a blank project specs repo such as ${specsRepoName(project)}. Do not
|
|
67
73
|
work inside the Airlock MCP implementation repo unless you are changing the
|
|
@@ -71,16 +77,22 @@ Use this prompt in the blank specs repo:
|
|
|
71
77
|
|
|
72
78
|
${airlockPrompt(project)}
|
|
73
79
|
|
|
74
|
-
|
|
80
|
+
First ask: What process do you want to improve?
|
|
75
81
|
|
|
76
|
-
|
|
77
|
-
2. Start from a known process and create a blank workspace.
|
|
78
|
-
3. Create a posts feedback loop for humans and agents to submit requests,
|
|
79
|
-
observations, and responses.
|
|
80
|
-
4. Use Airlock Star with an installed Airlock app to validate specs, load data,
|
|
81
|
-
read outputs, plan push/pull workflows, and capture improvements.
|
|
82
|
+
Airlock works best when we can identify the loop around a process:
|
|
82
83
|
|
|
83
|
-
|
|
84
|
+
1. Observe: what information comes in.
|
|
85
|
+
2. Orient: what context helps people or agents understand it.
|
|
86
|
+
3. Decide: what choice needs to be governed.
|
|
87
|
+
4. Act: what happens after the decision.
|
|
88
|
+
|
|
89
|
+
Information may come from apps, files, forms, people, emails, calls, mail,
|
|
90
|
+
websites, APIs, data feeds, or physical events. Actions may go back through
|
|
91
|
+
those same places. Airlock calls these places interfaces: where the process
|
|
92
|
+
observes from or acts through.
|
|
93
|
+
|
|
94
|
+
Give Codex the messy version of the process. Airlock MCP should help turn it
|
|
95
|
+
into a small first Airlock spec and a plan for more.`;
|
|
84
96
|
}
|
|
85
97
|
|
|
86
98
|
export function helpText() {
|
|
@@ -103,6 +115,7 @@ Options:
|
|
|
103
115
|
|
|
104
116
|
Airlock MCP is the single installed interface for agents working with Airlock.
|
|
105
117
|
Spec building is bundled inside that experience.
|
|
106
|
-
Airlock
|
|
118
|
+
Airlock operating patterns help connect specs into OODA loops, separation of
|
|
119
|
+
duties, governed decisions, controlled actions, and feedback loops.
|
|
107
120
|
`;
|
|
108
121
|
}
|