@jeger-ai/opengantry 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +97 -78
  2. package/dist/cli/commands/arch.js +4 -4
  3. package/dist/cli/commands/check-imports.js +1 -1
  4. package/dist/cli/commands/onboarding.js +5 -5
  5. package/dist/cli/commands/perimeter.js +2 -2
  6. package/dist/cli/commands/runtime.js +1 -1
  7. package/dist/cli/commands/scan.js +2 -2
  8. package/dist/cli/commands/teacher.js +1 -1
  9. package/dist/cli/commands/verify.js +3 -3
  10. package/dist/cli/lib/architecture-credential.js +1 -1
  11. package/dist/cli/lib/architecture-pointer.js +1 -1
  12. package/dist/cli/lib/ast-discovery.js +1 -1
  13. package/dist/cli/lib/audience-output.js +7 -7
  14. package/dist/cli/lib/cli-io.js +1 -1
  15. package/dist/cli/lib/config-namespace.d.ts +18 -0
  16. package/dist/cli/lib/config-namespace.d.ts.map +1 -0
  17. package/dist/cli/lib/config-namespace.js +39 -0
  18. package/dist/cli/lib/config-namespace.js.map +1 -0
  19. package/dist/cli/lib/constants.d.ts +6 -5
  20. package/dist/cli/lib/constants.d.ts.map +1 -1
  21. package/dist/cli/lib/constants.js +6 -5
  22. package/dist/cli/lib/constants.js.map +1 -1
  23. package/dist/cli/lib/context-feed-store.d.ts +1 -1
  24. package/dist/cli/lib/context-feed-store.js +1 -1
  25. package/dist/cli/lib/dirty-missions.js +1 -1
  26. package/dist/cli/lib/doctor-core.d.ts.map +1 -1
  27. package/dist/cli/lib/doctor-core.js +8 -7
  28. package/dist/cli/lib/doctor-core.js.map +1 -1
  29. package/dist/cli/lib/doctor-integration.js +1 -1
  30. package/dist/cli/lib/doctor-substrate.js +4 -4
  31. package/dist/cli/lib/errors.d.ts.map +1 -1
  32. package/dist/cli/lib/errors.js +2 -1
  33. package/dist/cli/lib/errors.js.map +1 -1
  34. package/dist/cli/lib/file-merge-gxt.js +2 -2
  35. package/dist/cli/lib/fix-hints.js +9 -9
  36. package/dist/cli/lib/git-metrics.js +1 -1
  37. package/dist/cli/lib/git-proof.d.ts +1 -1
  38. package/dist/cli/lib/git-proof.d.ts.map +1 -1
  39. package/dist/cli/lib/git-proof.js +3 -2
  40. package/dist/cli/lib/git-proof.js.map +1 -1
  41. package/dist/cli/lib/init-interactive.js +2 -2
  42. package/dist/cli/lib/init-plan.js +6 -6
  43. package/dist/cli/lib/init-tutorial.js +10 -10
  44. package/dist/cli/lib/kpi-engine.js +3 -3
  45. package/dist/cli/lib/kpi-scan.js +3 -3
  46. package/dist/cli/lib/legislate.d.ts.map +1 -1
  47. package/dist/cli/lib/legislate.js +11 -5
  48. package/dist/cli/lib/legislate.js.map +1 -1
  49. package/dist/cli/lib/manifest.js +2 -2
  50. package/dist/cli/lib/manifest.js.map +1 -1
  51. package/dist/cli/lib/mcp-governance.d.ts.map +1 -1
  52. package/dist/cli/lib/mcp-governance.js +4 -3
  53. package/dist/cli/lib/mcp-governance.js.map +1 -1
  54. package/dist/cli/lib/mcp-tools-register.js +4 -4
  55. package/dist/cli/lib/missions/formatter.js +1 -1
  56. package/dist/cli/lib/missions/parser.d.ts.map +1 -1
  57. package/dist/cli/lib/missions/parser.js +7 -5
  58. package/dist/cli/lib/missions/parser.js.map +1 -1
  59. package/dist/cli/lib/missions/validator.js +1 -1
  60. package/dist/cli/lib/msn-allocate.js +2 -2
  61. package/dist/cli/lib/onboarding-flow.js +5 -5
  62. package/dist/cli/lib/perimeter.js +1 -1
  63. package/dist/cli/lib/register-proposals.js +1 -1
  64. package/dist/cli/lib/runtime-env.d.ts.map +1 -1
  65. package/dist/cli/lib/runtime-env.js +7 -4
  66. package/dist/cli/lib/runtime-env.js.map +1 -1
  67. package/dist/cli/lib/skill-key.d.ts +12 -0
  68. package/dist/cli/lib/skill-key.d.ts.map +1 -0
  69. package/dist/cli/lib/skill-key.js +28 -0
  70. package/dist/cli/lib/skill-key.js.map +1 -0
  71. package/dist/cli/lib/staged-tmvc-guard.js +1 -1
  72. package/dist/cli/lib/start-orchestration.js +5 -5
  73. package/dist/cli/lib/status-report.js +3 -3
  74. package/dist/cli/lib/substrate-version.js +2 -2
  75. package/dist/cli/lib/surgeons/typescript-workspace.d.ts +1 -1
  76. package/dist/cli/lib/surgeons/typescript-workspace.js +3 -3
  77. package/dist/cli/lib/teacher-identity.d.ts +1 -2
  78. package/dist/cli/lib/teacher-identity.d.ts.map +1 -1
  79. package/dist/cli/lib/teacher-identity.js +11 -15
  80. package/dist/cli/lib/teacher-identity.js.map +1 -1
  81. package/dist/cli/lib/tmvc-path.d.ts.map +1 -1
  82. package/dist/cli/lib/tmvc-path.js +5 -2
  83. package/dist/cli/lib/tmvc-path.js.map +1 -1
  84. package/dist/cli/lib/types.d.ts +1 -1
  85. package/dist/cli/lib/upgrade-apply.js +5 -5
  86. package/dist/cli/lib/upgrade-plan.d.ts +1 -1
  87. package/dist/cli/lib/upgrade-plan.js +4 -4
  88. package/dist/cli/lib/verify-failure-normalize.js +1 -1
  89. package/dist/cli/lib/verify-hints.js +9 -9
  90. package/dist/cli/lib/verify-run.d.ts.map +1 -1
  91. package/dist/cli/lib/verify-run.js +3 -2
  92. package/dist/cli/lib/verify-run.js.map +1 -1
  93. package/dist/cli/lib/version.gen.d.ts +1 -1
  94. package/dist/cli/lib/version.gen.js +1 -1
  95. package/dist/cli/program-core.js +2 -2
  96. package/package.json +9 -4
  97. package/templates/.cursor/hooks/gxt-before-shell.sh +2 -2
  98. package/templates/.cursor/hooks/gxt-session-start.sh +5 -5
  99. package/templates/.cursor/mcp.json +1 -1
  100. package/templates/.cursor/rules/opengantry-gxt-substrate.mdc +4 -4
  101. package/templates/.gitagent/config.json +15 -0
  102. package/templates/.gitagent/foreman/MANIFEST.json +2 -2
  103. package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
  104. package/templates/.gitagent/foreman/TEACHER.allowlist.example +1 -1
  105. package/templates/.gitagent/missions/README.md +3 -3
  106. package/templates/.gitagent/teacher/ARCHITECTURE-ACCESS.md +8 -8
  107. package/templates/.gitagent/teacher/KPI-REPORT.schema.yaml +1 -1
  108. package/templates/.gitagent/teacher/MISSION-ARCHITECT.md +5 -5
  109. package/templates/.gitagent/teacher/MISSION.schema.yaml +2 -2
  110. package/templates/.gitagent/teacher/RULES.md +2 -2
  111. package/templates/.githooks/pre-commit +4 -4
  112. package/templates/.githooks/pre-push +6 -6
  113. package/templates/.github/workflows/gxt-validate.yml +14 -13
  114. package/templates/AGENTS.md +1 -1
  115. package/templates/integrations/asset-catalog.json +2 -1
  116. package/templates/integrations/compatibility.json +1 -1
  117. package/templates/integrations/recipes/_footer.md +6 -6
  118. package/templates/integrations/recipes/_preamble.md +9 -9
  119. package/templates/integrations/recipes/aider.md +1 -1
  120. package/templates/integrations/recipes/antigravity.md +1 -1
  121. package/templates/integrations/recipes/claude-code.md +1 -1
  122. package/templates/integrations/recipes/codex-cli.md +2 -2
  123. package/templates/integrations/recipes/cursor.md +3 -3
  124. package/templates/scripts/dev-validate.sh +1 -1
  125. package/templates/scripts/gxt-manifest-lib.mjs +418 -3
  126. package/templates/scripts/gxt-resolve-mission.sh +2 -2
  127. package/templates/scripts/gxt-runtime-env.sh +4 -4
  128. package/templates/scripts/validate-gxt.sh +5 -1
  129. package/templates/scripts/verify-pr-missions.sh +12 -6
  130. package/templates/skills/{gapman.md → gantry.md} +2 -2
package/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  It is **not** a real-time conversational agent wrapper. Use OpenGantry when you need auditable, mission-scoped repository work with explicit Teacher approval and forensic trace.
6
6
 
7
+ > **Not [Gantry.io](https://gantry.io)?** **Open Source Gantry** is the **`gantry` CLI** for **local-first**, **vendor-neutral**, **git-native governance** in your repository — not a hosted observability dashboard. If you are looking for infrastructure monitoring, see [Gantry.io](https://gantry.io).
8
+
7
9
  Use OpenGantry when you need:
8
10
 
9
11
  - **Agent-assisted product delivery without silent scope creep:** keep velocity while forcing explicit mission scope and path boundaries.
@@ -13,10 +15,21 @@ Use OpenGantry when you need:
13
15
  ### What you get in production
14
16
 
15
17
  - **Review before run:** workers do not complete the loop until a human-approved mission defines scope, gates, and trace rows.
16
- - **No silent governance edits:** hooks and `gapman verify` fail closed on law, manifest, and mission paths without a Teacher `[MSN-XXXX]` commit.
18
+ - **No silent governance edits:** hooks and `gantry verify` fail closed on law, manifest, and mission paths without a Teacher `[MSN-XXXX]` commit.
17
19
  - **Audit in Git:** `git log --grep='MSN-0042'` plus `WORKER_LOG.md` quotes that verifiers must cite verbatim.
18
20
 
19
- **Protocol (implementers):** under the hood, **GXT (Git-native eXecution and Trace)** binds law, Foreman routing, deterministic gates, and trace mapping to `WORKER_LOG.md`. This repository is both the **specimen** and the **template**. Run **`gapman init`** (or **`gapman init --tutorial`**) in your repo and adapt it.
21
+ **Protocol (implementers):** under the hood, **GXT (Git-native eXecution and Trace)** binds law, Foreman routing, deterministic gates, and trace mapping to `WORKER_LOG.md`. This repository is both the **specimen** and the **template**. Run **`gantry init`** (or **`gantry init --tutorial`**) in your repo and adapt it.
22
+
23
+ ## Gantry CLI — local-first governance
24
+
25
+ **Open Source Gantry** ships as the **Gantry CLI** (`npm install -g @jeger-ai/opengantry`). Governance runs **in your repo** — missions, deterministic gates, and **Gantry Git hook** enforcement (`.githooks/`, IDE hooks) — without routing agent work through a vendor cloud dashboard.
26
+
27
+ | Goal | Read first |
28
+ |------|------------|
29
+ | **Install + first mission** | [Install](#install) → [`docs/ADOPTION.md`](docs/ADOPTION.md) → [`docs/KATA.md`](docs/KATA.md) |
30
+ | **Gantry CLI command reference** | [gantry CLI](#gantry-cli) |
31
+ | **Git hooks + enforcement** | [Enforcement boundary](#enforcement-boundary) · [`docs/ADOPTION.md`](docs/ADOPTION.md) § Prevent unreviewed edits |
32
+ | **Wire IDE agents** | [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md) |
20
33
 
21
34
  ## Install
22
35
 
@@ -24,7 +37,7 @@ Requires **Node.js 24+**.
24
37
 
25
38
  ```bash
26
39
  npm install -g @jeger-ai/opengantry
27
- gapman init --tutorial
40
+ gantry init --tutorial
28
41
  ```
29
42
 
30
43
  Or without a global install:
@@ -33,7 +46,7 @@ Or without a global install:
33
46
  npx @jeger-ai/opengantry init --tutorial
34
47
  ```
35
48
 
36
- Developing this repository from source: `npm ci && npm run build` — see [gapman CLI](#gapman-cli) and [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md).
49
+ Developing this repository from source: `npm ci && npm run build` — see [gantry CLI](#gantry-cli) and [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md).
37
50
 
38
51
  *Want to see the ROI? Run `npm run examples:benchmark` to compare an orchestrator specimen (improvised agent glue) against OpenGantry's TMVC protocol.* (Requires clone + `npm run build` — see [`docs/ADOPTION.md`](docs/ADOPTION.md).)
39
52
 
@@ -41,6 +54,7 @@ Developing this repository from source: `npm ci && npm run build` — see [gapma
41
54
 
42
55
  | Goal | Read first |
43
56
  |------|------------|
57
+ | **Gantry CLI + local governance** | [Gantry CLI — local-first governance](#gantry-cli--local-first-governance) → [gantry CLI](#gantry-cli) |
44
58
  | **Adopt in your repo (5 min)** | This README → [`docs/ADOPTION.md`](docs/ADOPTION.md) → [`docs/KATA.md`](docs/KATA.md) |
45
59
  | **See benchmark ROI (3 min)** | [`examples/benchmark-agent/`](examples/benchmark-agent/) → [`docs/ADOPTION.md`](docs/ADOPTION.md) |
46
60
  | **Wire IDE agents** | [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md) |
@@ -54,30 +68,32 @@ Developing this repository from source: `npm ci && npm run build` — see [gapma
54
68
 
55
69
  | Outcome | How OpenGantry delivers it |
56
70
  |---------|---------------------------|
57
- | **Lower onboarding friction** | `gapman init --tutorial`, `gapman onboarding`, `gapman start "<intent>"`, `gapman status --json` |
71
+ | **Lower onboarding friction** | `gantry init --tutorial`, `gantry onboarding`, `gantry start "<intent>"`, `gantry status --json` |
58
72
  | **No unreviewed agent scope** | Teacher reviews mission YAML **before** `runtime env` / worker execution; TMVC roots + forbidden zones enforce paths |
59
73
  | **Audit-ready evidence** | `[MSN-XXXX]` commit subjects; verifier PASS requires a verbatim quote from `WORKER_LOG.md` |
60
74
  | **Regulated / ISO-aligned workflows** | SOD, mission authorization, and Git-native trace — see [`docs/COMPLIANCE-ISO.md`](docs/COMPLIANCE-ISO.md) (27001 change control, 42001 AI governance) |
61
- | **Faster recovery from failure** | Stable `GXT_*` error codes, `gapman verify --fix`, role output via `--audience worker\|teacher\|verifier` |
75
+ | **Faster recovery from failure** | Stable `GXT_*` error codes, `gantry verify --fix`, role output via `--audience worker\|teacher\|verifier` |
62
76
 
63
- **Protocol maturity:** substrate law **v0.5.0**; **`gapman` v2.2.2** — Time-to-Scaffold public benchmark, measured LOC matrix. Current npm publish: **v2.2.2**. See [.gitagent/teacher/RUNTIME.md](.gitagent/teacher/RUNTIME.md).
77
+ **Protocol maturity:** substrate law **v0.5.0**; **`gantry` v2.2.4** — unified CLI naming (`gantry` primary; legacy `gapman` alias). Current npm publish: **v2.2.4**. See [.gitagent/teacher/RUNTIME.md](.gitagent/teacher/RUNTIME.md).
64
78
 
65
79
  ## Release timeline (latest first)
66
80
 
67
- Current npm release in this repository: **`gapman` v2.2.2**. Use [`docs/ADOPTION.md`](docs/ADOPTION.md) for the ordered runbook.
81
+ Current npm release in this repository: **`gantry` v2.2.4**. Use [`docs/ADOPTION.md`](docs/ADOPTION.md) for the ordered runbook.
68
82
 
69
83
  | Release | Highlights |
70
84
  |---------|------------|
85
+ | **v2.2.4** | Unified gantry naming cutover ([#94](https://github.com/jeger-ai/opengantry/issues/94)); docs positioning — Gantry.io disambiguation, long-tail SEO (`Open Source Gantry`, `Gantry CLI`, `Gantry Git hook`), vendor-neutral local governance framing ([#95](https://github.com/jeger-ai/opengantry/issues/95)–[#97](https://github.com/jeger-ai/opengantry/issues/97)) |
86
+ | **v2.2.3** | Declarative `trusted_automation` policy in `.gitagent/config.json` — repository-legislated bot maintenance bypass with `max_net_loc <= 5` ([#92](https://github.com/jeger-ai/opengantry/issues/92)) |
71
87
  | **v2.2.2** | Time-to-Scaffold benchmark — `npm run examples:benchmark`, measured LOC matrix, adoption discovery ([#79](https://github.com/jeger-ai/opengantry/issues/79)) |
72
88
  | **v2.2.1** | Thermo remediation — unified `NormalizedVerifyFailure` contract across JSON/human/context-feed; race-safe remediation snapshot writes; canonical `verify-presentation` entrypoint |
73
- | **v2.2.0** | `gapman context-feed`, `gapman audit-rigor`, `virtual_capture` ephemeral virtualization ([#68](https://github.com/jeger-ai/opengantry/issues/68)), product positioning, docs quality ([#66](https://github.com/jeger-ai/opengantry/issues/66)–[#69](https://github.com/jeger-ai/opengantry/issues/69), [#76](https://github.com/jeger-ai/opengantry/issues/76)) |
89
+ | **v2.2.0** | `gantry context-feed`, `gantry audit-rigor`, `virtual_capture` ephemeral virtualization ([#68](https://github.com/jeger-ai/opengantry/issues/68)), product positioning, docs quality ([#66](https://github.com/jeger-ai/opengantry/issues/66)–[#69](https://github.com/jeger-ai/opengantry/issues/69), [#76](https://github.com/jeger-ai/opengantry/issues/76)) |
74
90
  | **v2.1.0** | Import-layer Code Surgeon (`check-import-layers.mjs --json`, AST quarantine, `GXT_IMPORT_LAYER_VIOLATION`); workspace-resolved optional TypeScript for surgeons |
75
- | **v2.0.0** | `gapman scan` + KPI gate, `register`, `check-imports`, `perimeter`; BYO `llm_verifiers`; KPI stale binding on `--pre-push`/`--ci` |
91
+ | **v2.0.0** | `gantry scan` + KPI gate, `register`, `check-imports`, `perimeter`; BYO `llm_verifiers`; KPI stale binding on `--pre-push`/`--ci` |
76
92
  | **v1.1.2** | Verify pipeline close-out (MSN-0034–0035); typed verify phases, trace status at parse boundary |
77
93
  | **v1.1.1** | Lib/command boundary, unified `runVerifyCore`, typed remediation, CommandReporter, mission YAML emitter |
78
94
  | **v1.1.0** | Stale trace evidence, mission purity PR lock, CI target lock, `verify --json`, doctor substrate drift warn |
79
- | **v1.0.0** | `gapman init --tutorial`, global `--audience` / `GXT_AUDIENCE`, adoption-first README + runbook |
80
- | **v0.9.0** | `gapman start`, `verify --fix`, `status --json`, `onboarding`, GXT error codes |
95
+ | **v1.0.0** | `gantry init --tutorial`, global `--audience` / `GXT_AUDIENCE`, adoption-first README + runbook |
96
+ | **v0.9.0** | `gantry start`, `verify --fix`, `status --json`, `onboarding`, GXT error codes |
81
97
 
82
98
  ## What you get
83
99
 
@@ -87,10 +103,10 @@ Current npm release in this repository: **`gapman` v2.2.2**. Use [`docs/ADOPTION
87
103
  | **Routing map** (skills, roots, forbidden zones, path risks) | [`.gitagent/foreman/MANIFEST.json`](.gitagent/foreman/MANIFEST.json) |
88
104
  | **Foreman** (cheap, manifest-only triage) | [`.gitagent/foreman/SOUL.md`](.gitagent/foreman/SOUL.md) |
89
105
  | **Worker Runtime Contract** (env exports for IDE agents / scripts) | [`.gitagent/teacher/RUNTIME.md`](.gitagent/teacher/RUNTIME.md) |
90
- | **Bootstrap** (zero-friction substrate install) | `gapman init` + packaged [`templates/`](templates/) |
106
+ | **Bootstrap** (zero-friction substrate install) | `gantry init` + packaged [`templates/`](templates/) |
91
107
  | **Architecture pointer** (where agents find code layout) | [`.gitagent/ARCHITECTURE.pointer.json`](.gitagent/ARCHITECTURE.pointer.json), [ARCHITECTURE-DISCOVERY.md](.gitagent/teacher/ARCHITECTURE-DISCOVERY.md) |
92
- | **Work order + commit receipt** | YAML via `gapman legislate` + [`.gitagent/teacher/MISSION.example.yaml`](.gitagent/teacher/MISSION.example.yaml); Markdown reference: [`.gitagent/teacher/MISSION.template.md`](.gitagent/teacher/MISSION.template.md), [`.gitagent/teacher/commit-template.md`](.gitagent/teacher/commit-template.md) |
93
- | **gapman CLI** | `npm install -g @jeger-ai/opengantry` or `npx @jeger-ai/opengantry` — see [gapman](#gapman-cli) |
108
+ | **Work order + commit receipt** | YAML via `gantry legislate` + [`.gitagent/teacher/MISSION.example.yaml`](.gitagent/teacher/MISSION.example.yaml); Markdown reference: [`.gitagent/teacher/MISSION.template.md`](.gitagent/teacher/MISSION.template.md), [`.gitagent/teacher/commit-template.md`](.gitagent/teacher/commit-template.md) |
109
+ | **gantry CLI** | `npm install -g @jeger-ai/opengantry` or `npx @jeger-ai/opengantry` — see [gantry](#gantry-cli) |
94
110
  | **Full orientation + workflow diagram** | [`.gitagent/README.md`](.gitagent/README.md) |
95
111
 
96
112
  Core behaviors in plain language:
@@ -104,9 +120,9 @@ Core behaviors in plain language:
104
120
  ## Start here (5 minutes)
105
121
 
106
122
  ```bash
107
- gapman init --tutorial # or: gapman init && gapman onboarding
108
- gapman teacher set "$(git config user.email)"
109
- gapman start "Your first change" --msn MSN-0001 --skill-key <manifest-key>
123
+ gantry init --tutorial # or: gantry init && gantry onboarding
124
+ gantry teacher set "$(git config user.email)"
125
+ gantry start "Your first change" --msn MSN-0001 --skill-key <manifest-key>
110
126
  # Teacher: review mission scope/gates, then commit [MSN-0001] including the mission file
111
127
  git log --grep='MSN-' --oneline
112
128
  ```
@@ -121,29 +137,29 @@ Treat the following as a **portable kit** you can drop into any Git repository (
121
137
 
122
138
  ### Enforcement boundary
123
139
 
124
- **Prevents unreviewed edits where it matters.** IDE Agent Write/Edit is advisory TMVC; hard boundaries live in `runtime exec`, `gapman verify`, and hooks.
140
+ **Prevents unreviewed edits where it matters.** IDE Agent Write/Edit is advisory TMVC; hard boundaries live in `runtime exec`, `gantry verify`, and hooks.
125
141
 
126
142
  | Tier | Mechanism | Enterprise control |
127
143
  |------|-----------|-------------------|
128
- | **Process-boundary** | `gapman runtime exec` | Agent cannot touch forbidden paths during orchestrated runs |
144
+ | **Process-boundary** | `gantry runtime exec` | Agent cannot touch forbidden paths during orchestrated runs |
129
145
  | **Deterministic hook** | Cursor `beforeShellExecution`, pre-push verify | Shell/hook writes to governance files require mission + verify |
130
146
  | **Advisory** | IDE rules, `AGENTS.md`, sessionStart context | IDE suggestions alone do not count as approval |
131
147
 
132
148
  Per-tool recipes: [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md) (see **Enforcement boundary**).
133
149
 
134
- ### 1. Bootstrap with `gapman init` (recommended)
150
+ ### 1. Bootstrap with `gantry init` (recommended)
135
151
 
136
- From a built OpenGantry tree (or after copying the `gapman` CLI + `templates/` into your toolchain):
152
+ From a built OpenGantry tree (or after copying the `gantry` CLI + `templates/` into your toolchain):
137
153
 
138
154
  ```bash
139
- npm ci && npm run build # in the OpenGantry repo, or use a globally linked gapman
140
- gapman init --tutorial # recommended first run; or gapman init (wizard / --yes)
141
- gapman teacher set "$(git config user.email)" # repo-local (recommended)
142
- gapman doctor
155
+ npm ci && npm run build # in the OpenGantry repo, or use a globally linked gantry
156
+ gantry init --tutorial # recommended first run; or gantry init (wizard / --yes)
157
+ gantry teacher set "$(git config user.email)" # repo-local (recommended)
158
+ gantry doctor
143
159
  git config core.hooksPath .githooks
144
160
  ```
145
161
 
146
- `gapman init` bootstraps a target git repository from packaged templates:
162
+ `gantry init` bootstraps a target git repository from packaged templates:
147
163
 
148
164
  - **TTY:** interactive wizard (`@clack/prompts`) — select IDE/agent integrations, doc path, skills preset, hooks, CI, architecture pointer.
149
165
  - **Non-TTY / CI:** auto-applies default profile (core + Cursor + hooks + CI) — no hang.
@@ -155,7 +171,7 @@ Asset lifecycles:
155
171
  - `scaffold_only` files (for example `MANIFEST.json`, `RULES.md`, `skills/*.md`, IDE pointer files) are created when missing and preserved when customized.
156
172
  - `managed_strict` runtime assets (workflow, validate script, hooks, schema/rules pointers) prompt before overwrite in an interactive terminal; use `--force` to skip the prompt.
157
173
 
158
- Init also composes **`docs/INTEGRATIONS.md`** (or your chosen path) from `templates/integrations/compatibility.json`, scaffolds **`.gitagent/ARCHITECTURE.pointer.json`**, and installs runtime scripts (`gxt-runtime-env.sh`, `gxt-pin-mission.sh`, …). Store local tokens for protected architecture sources with **`gapman arch cred set`** (stdin only; git-ignored under `.gitagent/history/credentials/`).
174
+ Init also composes **`docs/INTEGRATIONS.md`** (or your chosen path) from `templates/integrations/compatibility.json`, scaffolds **`.gitagent/ARCHITECTURE.pointer.json`**, and installs runtime scripts (`gxt-runtime-env.sh`, `gxt-pin-mission.sh`, …). Store local tokens for protected architecture sources with **`gantry arch cred set`** (stdin only; git-ignored under `.gitagent/history/credentials/`).
159
175
 
160
176
  After `init`, customize your manifest and skills, then legislate. See [`docs/ADOPTION.md`](docs/ADOPTION.md) for the exact ordered runbook.
161
177
 
@@ -165,7 +181,7 @@ After `init`, customize your manifest and skills, then legislate. See [`docs/ADO
165
181
  Set `path_risks`, `risk_keywords`, and each skill's `tmvc_roots`, `forbidden_zones`, and `trust_threshold` to match **your** directories and risk appetite.
166
182
  - Align **[`.gitagent/teacher/RULES.md`](.gitagent/teacher/RULES.md)** with your review policy (tiers, who counts as "human audit", merge gates).
167
183
  - Point **deterministic gates** in missions at **your** stack (`npm test`, `pytest`, `cargo test`, etc.).
168
- - Store mission files you intend to **`gapman verify`** under **`.gitagent/missions/`** and configure **Teacher allowlist** per repo (`gapman teacher set`, `.gitagent/foreman/TEACHER.allowlist.local`, or `git config gapman.teacherEmails`).
184
+ - Store mission files you intend to **`gantry verify`** under **`.gitagent/missions/`** and configure **Teacher allowlist** per repo (`gantry teacher set`, `.gitagent/foreman/TEACHER.allowlist.local`, or `git config gantry.teacherEmails`).
169
185
 
170
186
  **Concrete gate example** (YAML fields in a mission file; adjust paths and commands):
171
187
 
@@ -174,11 +190,13 @@ gate_command: "npm test -- src/components/Button.test.tsx"
174
190
  gate_success_substring: "Tests: 1 passed"
175
191
  ```
176
192
 
177
- The gate is whatever command **fails closed** for your repo (lint, typecheck, integration suite). One explicit command beats a vague "run tests somewhere." Primary reference: [`.gitagent/teacher/MISSION.example.yaml`](.gitagent/teacher/MISSION.example.yaml). Markdown missions remain supported (`gapman verify` parses both); [`.gitagent/teacher/MISSION.template.md`](.gitagent/teacher/MISSION.template.md) is a human-readable reference, not the `legislate` default.
193
+ The gate is whatever command **fails closed** for your repo (lint, typecheck, integration suite). One explicit command beats a vague "run tests somewhere." Primary reference: [`.gitagent/teacher/MISSION.example.yaml`](.gitagent/teacher/MISSION.example.yaml). Markdown missions remain supported (`gantry verify` parses both); [`.gitagent/teacher/MISSION.template.md`](.gitagent/teacher/MISSION.template.md) is a human-readable reference, not the `legislate` default.
194
+
195
+ ### gantry CLI
178
196
 
179
- ### gapman CLI
197
+ The **Gantry CLI** (`gantry`) is the primary interface for **Open Source Gantry** — local, vendor-neutral, git-native governance in your repository.
180
198
 
181
- Requires **Node.js 24+** (Active LTS line). Published as **`@jeger-ai/opengantry`** on npm; the `gapman` binary is registered via `package.json` `bin` (see [`package.json`](package.json)). From source: `npm ci && npm run build` → `dist/cli/index.js`.
199
+ Requires **Node.js 24+** (Active LTS line). Published as **`@jeger-ai/opengantry`** on npm; the `gantry` binary is registered via `package.json` `bin` (see [`package.json`](package.json)). The legacy `gapman` command remains a compatibility alias. Config namespaces: `GANTRY_*` env vars and `git config gantry.*` (legacy `GAPMAN_*` / `gapman.*` values are still read silently). From source: `npm ci && npm run build` → `dist/cli/index.js`.
182
200
 
183
201
  **Developing OpenGantry:** dogfood the full stack — [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md) (missions, hooks, verify, `npm run validate`). Layer rules: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md). Adopters: [`docs/ADOPTION.md`](docs/ADOPTION.md). Roadmap: [`docs/BACKLOG.md`](docs/BACKLOG.md) · [Project board](https://github.com/orgs/jeger-ai/projects/2).
184
202
 
@@ -186,54 +204,54 @@ Requires **Node.js 24+** (Active LTS line). Published as **`@jeger-ai/opengantry
186
204
 
187
205
  | Step | Command | Outcome |
188
206
  |------|---------|---------|
189
- | Onboard | `gapman init --tutorial` or `gapman onboarding` | Feel Teacher stamp + verify loop (~3 min) |
190
- | Scope + approve | `gapman start` → Teacher `[MSN-…]` commit | Unreviewed stub cannot pass full verify |
191
- | Prove work | `gapman verify` | Gate + log quotes + greppable history |
207
+ | Onboard | `gantry init --tutorial` or `gantry onboarding` | Feel Teacher stamp + verify loop (~3 min) |
208
+ | Scope + approve | `gantry start` → Teacher `[MSN-…]` commit | Unreviewed stub cannot pass full verify |
209
+ | Prove work | `gantry verify` | Gate + log quotes + greppable history |
192
210
 
193
- **Global output:** `gapman --audience worker\|teacher\|verifier\|platform <cmd>` (or `GXT_AUDIENCE=verifier` in CI — silence unless `[GXT_*]` errors).
211
+ **Global output:** `gantry --audience worker\|teacher\|verifier\|platform <cmd>` (or `GXT_AUDIENCE=verifier` in CI — silence unless `[GXT_*]` errors).
194
212
 
195
213
  | Command | Purpose |
196
214
  |--------|---------|
197
- | `gapman init` | Bootstrap substrate + IDE packs + hooks + CI. `--tutorial` runs guided first loop after scaffold. |
198
- | `gapman upgrade` | Plan substrate updates (`gapman upgrade plan` / `--dry-run` for preview JSON). Stage with `gapman upgrade`; `gapman upgrade apply --mission …` after Teacher commit. |
199
- | `gapman check` | Validate `MANIFEST.json` shape + **Rule 4.4** sync: every `manifest.skills` key must have `skills/<key>.md`, with no orphan skill files. |
200
- | `gapman status` | GXT readiness dashboard (`--json`, `--verbose`, `--audience worker\|teacher\|verifier\|platform`). |
201
- | `gapman start "<intent>"` | Goal-first orchestration: triage → legislate stub → runtime next steps (`--msn`, `--skill-key`, `--json`). |
202
- | `gapman onboarding` | Interactive walkthrough of the strict mission loop. Blocks on corrupt configured integration state; allows pristine uninitialized repos. |
203
- | `gapman doctor` | Active readiness check (manifest, Teacher email, bypass secret match, hooks, architecture pointer, integration staleness). Warnings exit 0. `--audience` tailors next steps. |
204
- | `gapman triage "<intent>"` | Foreman-style routing ([`SOUL.md`](.gitagent/foreman/SOUL.md)). `--json` for machine output (may include non-binding `adr_hints` from [`.gitagent/out-of-scope/`](.gitagent/out-of-scope/README.md)). `--emit-mission --msn MSN-0007` writes `.gitagent/missions/ACTIVE_MISSION.md` by default on **DIRECT_EXECUTION** only. |
205
- | `gapman teacher show\|set` | Repo-local Teacher git-proof allowlist (`.gitagent/foreman/TEACHER.allowlist.local`; avoids global `GAPMAN_TEACHER_EMAILS` leaking across projects). |
206
- | `gapman legislate "<intent>" --msn MSN-0007` | Emit stub **YAML** mission under `.gitagent/missions/` with explicit MSN (`--skill-key` when triage would escalate; `--gate-command` / `--gate-success-substring` for one-click handoff). Teacher still **`git commit`**-legislates from an allowlisted email. |
207
- | `gapman mission validate --file <path>` | Validate a mission `.md` or `.yaml` (YAML checked against [`.gitagent/teacher/MISSION.schema.yaml`](.gitagent/teacher/MISSION.schema.yaml)). |
208
- | `gapman mission snapshot --file <path>` | Write start-state JSON under `.gitagent/history/` (git HEAD, branch, dirty flag, manifest hash, hashes of files under the mission skill's `tmvc_roots`). |
209
- | `gapman runtime env --mission <path>` | Worker Runtime Contract: emit `GXT_REPO_ROOT`, `GXT_MISSION_FILE`, `GXT_MSN_ID`, `GXT_SKILL_KEY`, `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, `GXT_WORKER_LOG`. Default: POSIX `export …` lines; `--json` for scripts. [.gitagent/teacher/RUNTIME.md](.gitagent/teacher/RUNTIME.md). |
210
- | `gapman runtime exec --mission <path> -- <cmd…>` | Run worker command with mission env, telemetry capture, and forbidden-zone scan (strongest TMVC trap). |
211
- | `gapman context-request --path <p…> --reason <text>` | Append a PENDING Context Request to `WORKER_LOG.md` (RULES §4 TMVC expansion). Uses pinned mission or `--mission`. `--stage-worker-log` opt-in stages the log. |
212
- | `gapman tmvc guard [--strict]` | Pre-commit TMVC path guard: advisory warnings on staged paths outside mission `tmvc_roots` (stderr; exit 0). `--strict` or `GXT_TMVC_GUARD_STRICT=1` blocks. Skips when no pinned mission. |
213
- | `gapman mcp serve` | Stdio MCP server exposing `gxt_*` tools (legislation, pin, runtime env, verify with `fix_hints`, `gxt_start_orchestration`, exec). `gxt_verify` uses the flat `--json` envelope — see [ADOPTION.md § MCP verify envelope](docs/ADOPTION.md). Configure via `.cursor/mcp.json`. |
214
- | `gapman verify --mission <path>` | Teacher-approved mission commit + gate + trace. **`--json`** structured output (`status`, `phase`, `error_code`, `fix_hints`). **`--fix`** guided repair; when a **Code Surgeon** applies a quarantine mutation, logs `[SURGEON-MUTATION]` to `WORKER_LOG.md` and reruns full verify with fix disabled (never auto-PASS). CI: `--audience verifier` (errors only). Failures emit **`GXT_*`** codes. Optional **`kpi_gate`** phase reads committed [KPI report](.gitagent/teacher/KPI-REPORT.schema.yaml) (after gate, before trace). **`--ci`** / **`--pre-push`**: fail-closed on stale KPI evidence. |
215
- | `gapman scan --mission <path>` | Run mission `llm_verifiers` (BYO commands) and write namespaced KPI report JSON for `kpi_gate`. |
216
- | `gapman register <dir>` | AST discovery: propose skill scope from folder imports/exports (does not mutate `MANIFEST.json`). |
217
- | `gapman check-imports <dir> --ban <spec…>` | Deterministic banned-import scan (usable as `gate_command`; no LLM). |
218
- | `gapman perimeter [--base-ref <ref>] [--ci]` | Protected governance paths: local advisory; **`--ci`** requires verified commit signatures. |
219
- | `gapman arch pointer` | Print architecture pointer summary for agents (`.gitagent/ARCHITECTURE.pointer.json`). |
220
- | `gapman arch cred status\|set\|unset` | Git-ignored credential slots for authenticated external architecture sources (secrets via stdin only). |
221
- | `gapman metrics [--json] [--ref main]` | Git-native governance rollup (`--json` includes `gxt_extension_metadata`). See [`docs/ADOPTION.md`](docs/ADOPTION.md). |
222
- | `gapman context-feed [--json] [--clear]` | Read or atomically clear the latest verify remediation snapshot (`.gitagent/tmp/NEXT_REMEDIATION.json`) for IDE repair loops. |
223
- | `gapman audit-rigor [--json] [--strict]` | Meta-governance audit: TypeScript strictness, coverage artifacts, MANIFEST wildcard hygiene. |
215
+ | `gantry init` | Bootstrap substrate + IDE packs + hooks + CI. `--tutorial` runs guided first loop after scaffold. |
216
+ | `gantry upgrade` | Plan substrate updates (`gantry upgrade plan` / `--dry-run` for preview JSON). Stage with `gantry upgrade`; `gantry upgrade apply --mission …` after Teacher commit. |
217
+ | `gantry check` | Validate `MANIFEST.json` shape + **Rule 4.4** sync: every `manifest.skills` key must have `skills/<key>.md`, with no orphan skill files. |
218
+ | `gantry status` | GXT readiness dashboard (`--json`, `--verbose`, `--audience worker\|teacher\|verifier\|platform`). |
219
+ | `gantry start "<intent>"` | Goal-first orchestration: triage → legislate stub → runtime next steps (`--msn`, `--skill-key`, `--json`). |
220
+ | `gantry onboarding` | Interactive walkthrough of the strict mission loop. Blocks on corrupt configured integration state; allows pristine uninitialized repos. |
221
+ | `gantry doctor` | Active readiness check (manifest, Teacher email, bypass secret match, hooks, architecture pointer, integration staleness). Warnings exit 0. `--audience` tailors next steps. |
222
+ | `gantry triage "<intent>"` | Foreman-style routing ([`SOUL.md`](.gitagent/foreman/SOUL.md)). `--json` for machine output (may include non-binding `adr_hints` from [`.gitagent/out-of-scope/`](.gitagent/out-of-scope/README.md)). `--emit-mission --msn MSN-0007` writes `.gitagent/missions/ACTIVE_MISSION.md` by default on **DIRECT_EXECUTION** only. |
223
+ | `gantry teacher show\|set` | Repo-local Teacher git-proof allowlist (`.gitagent/foreman/TEACHER.allowlist.local`; avoids global `GANTRY_TEACHER_EMAILS` leaking across projects). |
224
+ | `gantry legislate "<intent>" --msn MSN-0007` | Emit stub **YAML** mission under `.gitagent/missions/` with explicit MSN (`--skill-key` when triage would escalate; `--gate-command` / `--gate-success-substring` for one-click handoff). Teacher still **`git commit`**-legislates from an allowlisted email. |
225
+ | `gantry mission validate --file <path>` | Validate a mission `.md` or `.yaml` (YAML checked against [`.gitagent/teacher/MISSION.schema.yaml`](.gitagent/teacher/MISSION.schema.yaml)). |
226
+ | `gantry mission snapshot --file <path>` | Write start-state JSON under `.gitagent/history/` (git HEAD, branch, dirty flag, manifest hash, hashes of files under the mission skill's `tmvc_roots`). |
227
+ | `gantry runtime env --mission <path>` | Worker Runtime Contract: emit `GXT_REPO_ROOT`, `GXT_MISSION_FILE`, `GXT_MSN_ID`, `GXT_SKILL_KEY`, `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, `GXT_WORKER_LOG`. Default: POSIX `export …` lines; `--json` for scripts. [.gitagent/teacher/RUNTIME.md](.gitagent/teacher/RUNTIME.md). |
228
+ | `gantry runtime exec --mission <path> -- <cmd…>` | Run worker command with mission env, telemetry capture, and forbidden-zone scan (strongest TMVC trap). |
229
+ | `gantry context-request --path <p…> --reason <text>` | Append a PENDING Context Request to `WORKER_LOG.md` (RULES §4 TMVC expansion). Uses pinned mission or `--mission`. `--stage-worker-log` opt-in stages the log. |
230
+ | `gantry tmvc guard [--strict]` | Pre-commit TMVC path guard: advisory warnings on staged paths outside mission `tmvc_roots` (stderr; exit 0). `--strict` or `GXT_TMVC_GUARD_STRICT=1` blocks. Skips when no pinned mission. |
231
+ | `gantry mcp serve` | Stdio MCP server exposing `gxt_*` tools (legislation, pin, runtime env, verify with `fix_hints`, `gxt_start_orchestration`, exec). `gxt_verify` uses the flat `--json` envelope — see [ADOPTION.md § MCP verify envelope](docs/ADOPTION.md). Configure via `.cursor/mcp.json`. |
232
+ | `gantry verify --mission <path>` | Teacher-approved mission commit + gate + trace. **`--json`** structured output (`status`, `phase`, `error_code`, `fix_hints`). **`--fix`** guided repair; when a **Code Surgeon** applies a quarantine mutation, logs `[SURGEON-MUTATION]` to `WORKER_LOG.md` and reruns full verify with fix disabled (never auto-PASS). CI: `--audience verifier` (errors only). Failures emit **`GXT_*`** codes. Optional **`kpi_gate`** phase reads committed [KPI report](.gitagent/teacher/KPI-REPORT.schema.yaml) (after gate, before trace). **`--ci`** / **`--pre-push`**: fail-closed on stale KPI evidence. |
233
+ | `gantry scan --mission <path>` | Run mission `llm_verifiers` (BYO commands) and write namespaced KPI report JSON for `kpi_gate`. |
234
+ | `gantry register <dir>` | AST discovery: propose skill scope from folder imports/exports (does not mutate `MANIFEST.json`). |
235
+ | `gantry check-imports <dir> --ban <spec…>` | Deterministic banned-import scan (usable as `gate_command`; no LLM). |
236
+ | `gantry perimeter [--base-ref <ref>] [--ci]` | Protected governance paths: local advisory; **`--ci`** requires verified commit signatures. |
237
+ | `gantry arch pointer` | Print architecture pointer summary for agents (`.gitagent/ARCHITECTURE.pointer.json`). |
238
+ | `gantry arch cred status\|set\|unset` | Git-ignored credential slots for authenticated external architecture sources (secrets via stdin only). |
239
+ | `gantry metrics [--json] [--ref main]` | Git-native governance rollup (`--json` includes `gxt_extension_metadata`). See [`docs/ADOPTION.md`](docs/ADOPTION.md). |
240
+ | `gantry context-feed [--json] [--clear]` | Read or atomically clear the latest verify remediation snapshot (`.gitagent/tmp/NEXT_REMEDIATION.json`) for IDE repair loops. |
241
+ | `gantry audit-rigor [--json] [--strict]` | Meta-governance audit: TypeScript strictness, coverage artifacts, MANIFEST wildcard hygiene. |
224
242
 
225
243
  **Who can approve missions (Teacher allowlist):** only allowlisted identities can legislate missions that verify accepts. Precedence:
226
244
 
227
245
  1. `.gitagent/foreman/TEACHER.allowlist` (+ optional gitignored `.local` merge)
228
- 2. `git config gapman.teacherEmails "a@x.com,b@y.com"`
229
- 3. `GAPMAN_TEACHER_EMAILS` env (CI escape hatch only)
246
+ 2. `git config gantry.teacherEmails "a@x.com,b@y.com"`
247
+ 3. `GANTRY_TEACHER_EMAILS` env (CI escape hatch only)
230
248
  4. implicit `git config user.email` when nothing else is set
231
249
 
232
- Use **`gapman teacher set "$(git config user.email)"`** after clone — do not rely on a global shell export when you work across multiple projects.
250
+ Use **`gantry teacher set "$(git config user.email)"`** after clone — do not rely on a global shell export when you work across multiple projects.
233
251
 
234
252
  ### Worker Runtime quickstart
235
253
 
236
- Agents (Cursor, Junie, local scripts) should not guess TMVC roots — read them from **`gapman runtime env`**.
254
+ Agents (Cursor, Junie, local scripts) should not guess TMVC roots — read them from **`gantry runtime env`**.
237
255
 
238
256
  Each `--mission` path must refer to **an existing mission file** (ENOENT means the YAML or Markdown mission is missing). Split these into separate shell steps if you paste from docs.
239
257
 
@@ -250,7 +268,7 @@ node dist/cli/index.js runtime env --mission .gitagent/missions/example.verify.y
250
268
  node dist/cli/index.js runtime exec --mission .gitagent/missions/example.verify.yaml -- <your-agent-command>
251
269
  ```
252
270
 
253
- Inspect `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, and `GXT_WORKER_LOG`; write forensic trace quotes to **`WORKER_LOG.md`** (or `--worker-log` at verify time), then **`gapman verify`** as usual.
271
+ Inspect `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, and `GXT_WORKER_LOG`; write forensic trace quotes to **`WORKER_LOG.md`** (or `--worker-log` at verify time), then **`gantry verify`** as usual.
254
272
 
255
273
  **Legislate a stub mission (Teacher edits + commits — then wire `runtime env` to that file path):**
256
274
 
@@ -264,16 +282,16 @@ Details and variable semantics: [.gitagent/teacher/RUNTIME.md](.gitagent/teacher
264
282
 
265
283
  ### 3. Wire agents (and optionally CI)
266
284
 
267
- - **[`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md)** — closed-loop agent integrations (enforcement boundary, remote handoff, per-tool recipes for Cursor, Claude Code, OpenAI Codex CLI, OpenCode, Junie, Antigravity, Cline, Aider, OpenHands). Installed by `gapman init`.
285
+ - **[`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md)** — closed-loop agent integrations (enforcement boundary, remote handoff, per-tool recipes for Cursor, Claude Code, OpenAI Codex CLI, OpenCode, Junie, Antigravity, Cline, Aider, OpenHands). Installed by `gantry init`.
268
286
  - **[`AGENTS.md`](AGENTS.md)** tells agents to read **RULES** + **MANIFEST** before acting.
269
287
  - **[`.cursor/rules/opengantry-gxt-substrate.mdc`](.cursor/rules/opengantry-gxt-substrate.mdc)** does the same for Cursor with `alwaysApply: true`.
270
288
  - **CI:** this repo includes **[`.github/workflows/gxt-validate.yml`](.github/workflows/gxt-validate.yml)**:
271
289
  - **PR governance (PR only):** mission PRs must target the **default branch** (`main` in this repo; `github.event.repository.default_branch` in init template, overridable via `GXT_INTEGRATION_BRANCH`) — prevents stacked mission merges.
272
- - **gapman:** `npm ci` / `npm run build`, then `gapman check`, `gapman doctor`, and unit tests.
290
+ - **gantry:** `npm ci` / `npm run build`, then `gantry check`, `gantry doctor`, and unit tests.
273
291
  - **Manifest (jq parity):** validates [`.gitagent/foreman/MANIFEST.json`](.gitagent/foreman/MANIFEST.json) via [`scripts/validate-gxt.sh`](scripts/validate-gxt.sh) `manifest`.
274
292
  - **Changed-code quality (PR only):** ESLint complexity, import layers, line budgets on touched `src/cli/**/*.ts`.
275
293
  - **MSN (PR only, path-scoped):** on **pull_request** only, any **non-merge** commit in the PR range that touches `.gitagent/`, repo-root `WORKER_LOG.md`, `.githooks/`, or [`.github/workflows/gxt-validate.yml`](.github/workflows/gxt-validate.yml) must have a subject starting with **`[MSN-NNNN]`** (four digits). Other paths (e.g. root `README.md` only) do not trigger this check.
276
- - **Mission purity (PR only):** [`scripts/verify-pr-missions.sh`](scripts/verify-pr-missions.sh) requires exactly one `[MSN-NNNN]` in `${base}..${head}` commit subjects before full `gapman verify` on changed missions.
294
+ - **Mission purity (PR only):** [`scripts/verify-pr-missions.sh`](scripts/verify-pr-missions.sh) requires exactly one `[MSN-NNNN]` in `${base}..${head}` commit subjects before full `gantry verify` on changed missions.
277
295
  - **Local (full stack):** [`scripts/dev-validate.sh`](scripts/dev-validate.sh) / `npm run validate` — superset of CI (includes changed-code + MSN vs `origin/main`).
278
296
 
279
297
  ```bash
@@ -294,10 +312,10 @@ Details and the workflow diagram: **[`.gitagent/README.md`](.gitagent/README.md)
294
312
 
295
313
  ### Advanced: manual vendoring
296
314
 
297
- If you cannot run `gapman init`, copy at least:
315
+ If you cannot run `gantry init`, copy at least:
298
316
 
299
317
  - `.gitagent/` (entire tree)
300
- - `skills/` (optional in minimal vendoring, but **required** for Rule 4.4: one `skills/<skill-key>.md` per manifest skill — enforced by `gapman check`)
318
+ - `skills/` (optional in minimal vendoring, but **required** for Rule 4.4: one `skills/<skill-key>.md` per manifest skill — enforced by `gantry check`)
301
319
  - `.githooks/` (optional: creates an empty repo-root `WORKER_LOG.md` when you check out a feature branch)
302
320
  - `AGENTS.md` (or merge its bullets into your existing agent instructions)
303
321
  - Optionally `.cursor/rules/opengantry-gxt-substrate.mdc` if you use Cursor
@@ -317,10 +335,10 @@ Add to your **`.gitignore`** (if not already present):
317
335
 
318
336
  ```bash
319
337
  npm install @jeger-ai/opengantry@latest
320
- gapman upgrade
338
+ gantry upgrade
321
339
  # Review .gitagent/.upgrade-tmp/; Teacher-commit the upgrade mission YAML
322
- gapman upgrade --apply --mission .gitagent/missions/MSN-9001.upgrade-vX.Y.Z.yaml
323
- gapman doctor
340
+ gantry upgrade --apply --mission .gitagent/missions/MSN-9001.upgrade-vX.Y.Z.yaml
341
+ gantry doctor
324
342
  ```
325
343
 
326
344
  See [`docs/ADOPTION.md`](docs/ADOPTION.md) and [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md#substrate-upgrade-loop-adopters--dogfood).
@@ -360,7 +378,8 @@ Always **review the diff** before commit; never bulk-overwrite a customized `MAN
360
378
 
361
379
  | Pattern | Typical shape | Audit / production readiness |
362
380
  |---------|----------------|------------------------------|
363
- | **GXT / OpenGantry** | Git-native missions, manifest routing, deterministic gates, auditable log mapped to **`WORKER_LOG.md`**, human `[MSN-XXXX]` approval + SOD ([`RULES.md`](.gitagent/teacher/RULES.md)) | **Autonomous Repository Engineering** — scoped missions, not always-on chat. Greppable missions + gate output + log quotes. |
381
+ | **GXT / OpenGantry** | Git-native missions, manifest routing, deterministic gates, auditable log mapped to **`WORKER_LOG.md`**, human `[MSN-XXXX]` approval + SOD ([`RULES.md`](.gitagent/teacher/RULES.md)) | **Autonomous Repository Engineering** — scoped missions, not always-on chat. Greppable missions + gate output + log quotes. **Local-first**, **vendor-neutral** governance engine in your repo. |
382
+ | Cloud observability / agent dashboards | Hosted UI for metrics, traces, or agent session visibility | Strong for **fleet visibility**; per-repo change authorization and Git-native audit artifacts are typically layered separately |
364
383
  | Agent "swarm" / choreography layers | Orchestrates model calls across services; emphasizes throughput and parallelism | Strong on **coverage** of tasks; lineage and per-change evidence depends on tooling above the swarm |
365
384
  | Unstructured desktop assistants | Reactive help in-editor or OS-wide; informal plans | Lightweight for exploration; weakest default for **reproducible** production sign-off without additional discipline |
366
385
 
@@ -368,7 +387,7 @@ GXT deliberately trades "always-on improvisation" for a **narrow, inspectable en
368
387
 
369
388
  ## Relationship to this repository
370
389
 
371
- **jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gapman` v2.2.2** CLI). Install the CLI with `npm install -g @jeger-ai/opengantry`, or fork this repo and run `gapman init` in your project.
390
+ **jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gantry` v2.2.4** CLI). Install the CLI with `npm install -g @jeger-ai/opengantry`, or fork this repo and run `gantry init` in your project.
372
391
 
373
392
  ## Security
374
393
 
@@ -8,7 +8,7 @@ export function runArchPointer(options = {}) {
8
8
  repoRoot = getRepoRoot(options.cwd);
9
9
  }
10
10
  catch (e) {
11
- logError(e instanceof Error ? e.message.replace("gapman: ", "") : String(e));
11
+ logError(e instanceof Error ? e.message.replace("gantry: ", "") : String(e));
12
12
  setExitCode(2);
13
13
  return;
14
14
  }
@@ -44,7 +44,7 @@ export async function runArchCredSet(options) {
44
44
  try {
45
45
  const values = parseCredentialValuesFromStdin(options.kind, stdin);
46
46
  writeArchitectureCredential(repoRoot, options.slot, options.kind, values);
47
- logInfo(`gapman arch cred: stored slot=${options.slot} kind=${options.kind}`);
47
+ logInfo(`gantry arch cred: stored slot=${options.slot} kind=${options.kind}`);
48
48
  }
49
49
  catch (e) {
50
50
  logError(errorMessage(e));
@@ -63,11 +63,11 @@ export function runArchCredUnset(options) {
63
63
  return;
64
64
  }
65
65
  if (!removeArchitectureCredential(repoRoot, options.slot)) {
66
- logError(`gapman arch cred: slot ${options.slot} not found`);
66
+ logError(`gantry arch cred: slot ${options.slot} not found`);
67
67
  setExitCode(2);
68
68
  return;
69
69
  }
70
- logInfo(`gapman arch cred: removed slot=${options.slot}`);
70
+ logInfo(`gantry arch cred: removed slot=${options.slot}`);
71
71
  }
72
72
  export function runArchCredStatus(options = {}) {
73
73
  let repoRoot;
@@ -3,7 +3,7 @@ import { logError, setExitCode } from "../lib/cli-io.js";
3
3
  import { loadWorkspace } from "../lib/workspace.js";
4
4
  export function runCheckImports(options) {
5
5
  if (options.ban.length === 0) {
6
- logError("gapman check-imports: provide at least one --ban specifier");
6
+ logError("gantry check-imports: provide at least one --ban specifier");
7
7
  setExitCode(2);
8
8
  return;
9
9
  }
@@ -23,7 +23,7 @@ async function resolveOnboardingMissionPath(p, root, intent) {
23
23
  logInfo(` ${onboardingVerifyHint(EXAMPLE_MISSION)}`);
24
24
  return { missionPath, useExample };
25
25
  }
26
- p.log.step("Step 3 — Scaffold mission (gapman start)");
26
+ p.log.step("Step 3 — Scaffold mission (gantry start)");
27
27
  const result = runStartOrchestration({
28
28
  intent: intent.trim(),
29
29
  writeMission: true,
@@ -59,7 +59,7 @@ export async function runOnboarding(options = {}) {
59
59
  const { root } = loadWorkspace();
60
60
  const manifestPath = path.join(root, ".gitagent", "foreman", "MANIFEST.json");
61
61
  if (!fs.existsSync(manifestPath)) {
62
- logError("Run gapman init first — substrate not found.");
62
+ logError("Run gantry init first — substrate not found.");
63
63
  setExitCode(2);
64
64
  p.outro("Onboarding aborted");
65
65
  return;
@@ -74,7 +74,7 @@ export async function runOnboarding(options = {}) {
74
74
  p.log.step("Integration health");
75
75
  for (const msg of blockers)
76
76
  logWarn(` ${msg}`);
77
- logError("Integration issues detected — run gapman doctor or pass --force to continue.");
77
+ logError("Integration issues detected — run gantry doctor or pass --force to continue.");
78
78
  setExitCode(2);
79
79
  p.outro("Onboarding aborted (integration gates)");
80
80
  return;
@@ -88,8 +88,8 @@ export async function runOnboarding(options = {}) {
88
88
  return;
89
89
  }
90
90
  p.log.step("Step 1 — Teacher allowlist");
91
- logInfo(' gapman teacher set "$(git config user.email)"');
92
- p.log.step("Step 2 — Declare intent (gapman start)");
91
+ logInfo(' gantry teacher set "$(git config user.email)"');
92
+ p.log.step("Step 2 — Declare intent (gantry start)");
93
93
  const intent = await p.text({
94
94
  message: "What do you want to build?",
95
95
  placeholder: "Fix login spinner on checkout",
@@ -36,10 +36,10 @@ export function runPerimeter(options) {
36
36
  return;
37
37
  }
38
38
  if (result.violations.length > 0 && options.ci !== true) {
39
- logInfo("gapman perimeter: advisory-only mode — no hard failures locally");
39
+ logInfo("gantry perimeter: advisory-only mode — no hard failures locally");
40
40
  }
41
41
  else {
42
- logInfo("gapman perimeter: OK");
42
+ logInfo("gantry perimeter: OK");
43
43
  }
44
44
  }
45
45
  catch (e) {
@@ -31,7 +31,7 @@ export function runRuntimeEnv(options) {
31
31
  catch (e) {
32
32
  const errno = typeof e === "object" && e !== null ? e.code : undefined;
33
33
  if (errno === "ENOENT") {
34
- logError(`runtime env: mission file not found: ${options.mission} (ENOENT). Use an existing mission path — e.g. .gitagent/missions/example.verify.yaml — or run gapman legislate first, then pass that YAML path.`);
34
+ logError(`runtime env: mission file not found: ${options.mission} (ENOENT). Use an existing mission path — e.g. .gitagent/missions/example.verify.yaml — or run gantry legislate first, then pass that YAML path.`);
35
35
  }
36
36
  else {
37
37
  logError(errorMessage(e));
@@ -4,7 +4,7 @@ import { logError, logInfo, setExitCode } from "../lib/cli-io.js";
4
4
  import { loadWorkspace } from "../lib/workspace.js";
5
5
  export function runScan(options) {
6
6
  if (!options.mission) {
7
- logError("gapman scan: --mission is required");
7
+ logError("gantry scan: --mission is required");
8
8
  setExitCode(2);
9
9
  return;
10
10
  }
@@ -16,7 +16,7 @@ export function runScan(options) {
16
16
  process.stdout.write(`${JSON.stringify({ status: "ok", report_path: result.reportPath, report: result.report }, null, 2)}\n`);
17
17
  return;
18
18
  }
19
- logInfo(`gapman scan: wrote ${result.reportPath}`);
19
+ logInfo(`gantry scan: wrote ${result.reportPath}`);
20
20
  logInfo(`metrics: ${Object.keys(result.report.metrics).length}`);
21
21
  }
22
22
  catch (e) {
@@ -19,7 +19,7 @@ export function runTeacherShow(options = {}) {
19
19
  }
20
20
  if (resolved.emails.length === 0) {
21
21
  logInfo(`${CLI_NAME} teacher: no allowlist configured`);
22
- logInfo(` Run: gapman teacher set "$(git config user.email)"`);
22
+ logInfo(` Run: gantry teacher set "$(git config user.email)"`);
23
23
  return;
24
24
  }
25
25
  logInfo(`${CLI_NAME} teacher: ${resolved.emails.join(", ")}`);
@@ -33,12 +33,12 @@ async function runVerifyChangedMissions(options) {
33
33
  const baseRef = resolveChangedMissionsBaseRef(root, options.baseRef);
34
34
  const missions = discoverChangedMissionFiles(root, baseRef);
35
35
  if (missions.length === 0) {
36
- logInfo(`gapman verify: no changed mission files vs ${baseRef}`);
36
+ logInfo(`gantry verify: no changed mission files vs ${baseRef}`);
37
37
  return;
38
38
  }
39
39
  let worstExit = 0;
40
40
  for (const mission of missions) {
41
- logInfo(`gapman verify: ${mission} (changed vs ${baseRef})`);
41
+ logInfo(`gantry verify: ${mission} (changed vs ${baseRef})`);
42
42
  const result = await runVerifyCore({ ...options, mission, changedMissions: false });
43
43
  if (!result.ok && result.exitCode > worstExit) {
44
44
  worstExit = result.exitCode;
@@ -78,7 +78,7 @@ export async function runVerify(options) {
78
78
  return;
79
79
  }
80
80
  if (!options.mission) {
81
- logError("gapman verify: --mission is required (or use --changed-missions)");
81
+ logError("gantry verify: --mission is required (or use --changed-missions)");
82
82
  setExitCode(2);
83
83
  return;
84
84
  }
@@ -6,7 +6,7 @@ const SLOT_PATTERN = /^[a-z0-9][a-z0-9/_-]{0,63}$/;
6
6
  const VALID_KINDS = new Set(["bearer", "api_key", "basic", "custom"]);
7
7
  export function parseArchitectureCredentialKind(raw) {
8
8
  if (!VALID_KINDS.has(raw)) {
9
- throw new Error(`gapman arch cred: kind must be one of ${[...VALID_KINDS].join(", ")}`);
9
+ throw new Error(`gantry arch cred: kind must be one of ${[...VALID_KINDS].join(", ")}`);
10
10
  }
11
11
  return raw;
12
12
  }
@@ -132,7 +132,7 @@ export function validateArchitecturePointer(raw) {
132
132
  export function loadArchitecturePointer(repoRoot) {
133
133
  const abs = architecturePointerPath(repoRoot);
134
134
  if (!fs.existsSync(abs)) {
135
- throw new Error(`${REL_ARCHITECTURE_POINTER} missing — run gapman init or add the pointer manually`);
135
+ throw new Error(`${REL_ARCHITECTURE_POINTER} missing — run gantry init or add the pointer manually`);
136
136
  }
137
137
  let parsed;
138
138
  try {
@@ -44,7 +44,7 @@ function walkTypeScriptFiles(absDir) {
44
44
  export function discoverFolderSignature(repoRoot, targetDir) {
45
45
  const absDir = path.isAbsolute(targetDir) ? targetDir : path.join(repoRoot, targetDir);
46
46
  if (!fs.existsSync(absDir) || !fs.statSync(absDir).isDirectory()) {
47
- throw new Error(`gapman register: not a directory: ${targetDir}`);
47
+ throw new Error(`gantry register: not a directory: ${targetDir}`);
48
48
  }
49
49
  const folderRel = toPosixRel(repoRoot, absDir);
50
50
  const allImports = new Set();
@@ -36,23 +36,23 @@ export function formatAudienceNextStep(step, audience) {
36
36
  return step;
37
37
  }
38
38
  const DEFAULT_NEXT_STEPS = [
39
- { audience: "teacher", step: 'gapman legislate "<intent>" --msn MSN-0001 --skill-key <key>' },
39
+ { audience: "teacher", step: 'gantry legislate "<intent>" --msn MSN-0001 --skill-key <key>' },
40
40
  { audience: "teacher", step: "Teacher: git commit -m \"[MSN-0001] legislate …\" including mission file" },
41
- { audience: "worker", step: "eval \"$(gapman runtime env --mission .gitagent/missions/<file>.yaml)\"" },
41
+ { audience: "worker", step: "eval \"$(gantry runtime env --mission .gitagent/missions/<file>.yaml)\"" },
42
42
  { audience: "worker", step: "Append gate evidence to WORKER_LOG.md" },
43
- { audience: "verifier", step: "gapman verify --mission .gitagent/missions/<file>.yaml" },
44
- { audience: "platform", step: "git config core.hooksPath .githooks && gapman doctor" },
43
+ { audience: "verifier", step: "gantry verify --mission .gitagent/missions/<file>.yaml" },
44
+ { audience: "platform", step: "git config core.hooksPath .githooks && gantry doctor" },
45
45
  ];
46
46
  function stepMatchesAudience(step, audience) {
47
47
  switch (audience) {
48
48
  case "teacher":
49
49
  return /legislate|Teacher:|git commit -m "\[MSN-/i.test(step);
50
50
  case "worker":
51
- return /runtime env|WORKER_LOG|gate evidence|eval "\$\(gapman runtime|execute worker/i.test(step);
51
+ return /runtime env|WORKER_LOG|gate evidence|eval "\$\(gantry runtime|execute worker/i.test(step);
52
52
  case "verifier":
53
- return /gapman verify/i.test(step);
53
+ return /gantry verify/i.test(step);
54
54
  case "platform":
55
- return /hooksPath|gapman doctor|gapman init/i.test(step);
55
+ return /hooksPath|gantry doctor|gantry init/i.test(step);
56
56
  default: {
57
57
  const _exhaustive = audience;
58
58
  return _exhaustive;