OpenGantry needs Node.js 24 or newer and a Git repository.
npm install -g @jeger-ai/opengantry
# or, without installing: npx @jeger-ai/opengantry <cmd>
Scaffold your repository
The guided path scaffolds the substrate and walks you through a first mission in about three minutes:
gantry init --tutorial
Or step by step:
gantry init
gantry planner set "$(git config user.email)" # who may approve missions
gantry doctor # read-only readiness check
For scripts and CI, gantry init --yes runs without prompts, and gantry init --ides cursor,claude-code --no-ci picks the tools to wire.
What gantry init adds
| Path | Role |
|---|---|
.gitagent/ | Missions folder, foreman/MANIFEST.yaml, planner/RULES.md |
AGENTS.md | Cross-tool entry point: read RULES and MANIFEST before acting |
.gitagent/ARCHITECTURE.pointer.yaml and docs/ARCHITECTURE.md | Where agents find your code layout |
.githooks/ | Pre-commit and pre-push enforcement |
| IDE pointer files and runtime scripts | For the tools you selected (Wire any agent) |
docs/INTEGRATIONS.md | Setup notes for humans, composed from the recipes for your tools |
.github/workflows/gxt-validate.yml | Mission checks on pull requests (skipped with --no-ci) |
The manifest is written as .gitagent/foreman/MANIFEST.yaml. A repository set up by 3.x keeps working with its MANIFEST.json; gantry migrate manifest converts it (the YAML form is read first, both present and different is an error). The same holds for .gitagent/config.yaml (gantry migrate config) .gitagent/ARCHITECTURE.pointer.yaml (gantry migrate architecture-pointer) and .gitagent/foreman/POLICY.pointer.yaml (gantry migrate policy-pointer).
gantry init and gantry upgrade apply also add EXECUTOR_LOG.md to .prettierignore, because verify binds evidence to committed line numbers (Trace evidence).
Planner identity
Only commits from an allowlisted Planner email count as mission approval. gantry planner set records yours; GANTRY_PLANNER_EMAILS (comma-separated) sets the list in the environment. Verify fails with PLANNER_IDENTITY_UNCONFIGURED when the list is empty.
Hooks
git config core.hooksPath .githooks
| Hook | Does |
|---|---|
post-checkout | Creates EXECUTOR_LOG.md on feature branches when it is missing |
pre-commit | gantry hook pre-commit: warns about staged files outside the pinned mission’s scope (advisory; set GANTRY_TMVC_GUARD_STRICT=1 or run gantry hook install to block). Skipped when no mission is pinned |
pre-push | gantry verify --pre-push for mission files changed on the branch, so a mission is Planner-approved before it is handed off |
gantry hook install arms the tracked pre-commit hook in strict mode, so a commit with staged paths outside the pinned mission is rejected. gantry hook uninstall reverses it. The bypass is git commit --no-verify.
Upgrade the substrate
Upgrades use only the installed package; nothing is fetched. After updating it:
-
Preview the file changes. This writes nothing:
npm install -g @jeger-ai/opengantry@latest gantry upgrade plan --json -
Stage the managed files under
.gitagent/.upgrade-tmp/and draft an upgrade mission in the 9000–9099 band:gantry upgrade plan --stage -
Review the staged diff, then Planner-commit the mission YAML only (the staging directory is gitignored):
git add .gitagent/missions/MSN-9001.upgrade-vX.Y.Z.yaml git commit -m "[MSN-9001] approve substrate upgrade to vX.Y.Z" -
Apply and check:
gantry upgrade apply --mission .gitagent/missions/MSN-9001.upgrade-vX.Y.Z.yaml gantry doctor
gantry doctor compares .gitagent/foreman/SUBSTRATE.version.json with the version bundled in your installed CLI and warns (exit 0) when the substrate is behind. Security fixes ship only for the latest 3.x release (Security policy).
Next: Your first mission.