Skip to main content
                                    /\
      .______.                     /  \
      |\    /|                    /    \
      |/____\|                   /      \
      |\    /|                  /        \
      |/____\|                  |        |
      |\    /|                  | /---\  |
      |/____\|=================>| |O/_|  |
      |\    /|                  | \---/  |
      |/____\|                  |        |
      |\    /|                  | #####  |
      |/____\|=================>| #####  |
      |\    /|                 /|        |\
      |/____\|                / |        | \
      |      |               /__|________|__\
      '______'
  ________________________________________________

     ____     _     _   _  _____  ____  __   __
    / ___|   / \   | \ | ||_   _||  _ \ \ \ / /
   | |  _   / _ \  |  \| |  | |  | |_) | \ V / 
   | |_| | / ___ \ | |\  |  | |  |  _ <   | |  
    \____|/_/   \_\|_| \_|  |_|  |_| \_\  |_|  

GANTRY

The harness holds it, checks it, and never flies with it.

Automate the full SDLC of an OI Nebula project from inside the coding agent you already use.

GANTRY installs a set of /gantry slash commands into Claude Code, Cursor, Codex, Windsurf, GitHub Copilot and Gemini CLI. You point it at a project, and it runs the delivery cycle: read the current state, pick the work that matters, make the change, prove it works, and hand the project back.

The build-run-test work happens on your machine with your real toolchain — your local Docker, your test runner, a real browser — so what gets marked done is what actually ran. The platform's own containers are never used as a runtime.


1. Create a project

GANTRY drives a project hosted on OI Nebula. Create one there first, then note three things from the project console:

Project URL the host your project is served from
Project ID the proj-… identifier
API key issued from the console; treat it as a secret

2. Install

pip install oi-gantry
gantry sync            # writes the commands into every coding agent on this machine

gantry sync --target claude (or cursor, codex, windsurf, copilot, gemini, antigravity) installs for one agent only. --scope project --dir <path> installs into a single project folder instead of your user config.

Full automation (on by default)

A GANTRY firing is unattended: every phase from pull onwards runs docker compose, git, the project's package manager and its test runner. So sync also grants the agent unattended read/write/execute/network access — for Claude Code it merges permissions.defaultMode: "bypassPermissions" into that scope's settings.json. Your existing settings are merged, never overwritten, and gantry sync --no-automation installs the commands without the grant (expect a prompt per action, and an unattended /loop firing to stall on the first one). --uninstall subtracts exactly the keys the installer added.

The other five agents have no config file this installer can write, so it prints the one-line change to make in each — Codex approval_policy = "never", Gemini --yolo, and the auto-run/Turbo/auto- approve toggles in Cursor, Windsurf and Copilot.

Install into a scope you are willing to run unattended: --scope project --dir <path> confines the grant to one project folder, while the default --scope user applies it everywhere.

3. Run it

Open your coding agent and type:

/gantry 10m /loop
{
  URL:        https://your-project-host,
  API_KEY:    your-key,
  Project_ID: proj-xxxx
}

That runs the delivery cycle on a repeating 10-minute firing: each pass takes the project, works as much of the backlog as it can, records what it did, and hands the project back before the next one starts. Change 10m to whatever interval suits the work.

The three values are the ones from step 1. They are read once at the start of the session and verified with a single read-only call before anything is touched.

For a single pass instead of a loop, just type /gantry.


Commands

/gantry on its own runs the whole cycle. You rarely need the individual commands — they exist so you can step in at any point, and so the agent can tell you exactly where it is.

Understand

Command What it does
precheck Can this machine do the work? Docker daemon, compose v2, git identity, writable workspace, credentials, tool permissions. Runs first; the work commands refuse without it.
status Cheap read-only health check. Changes nothing.
connect Point this session at your project and verify the credentials.
observe Read the project's current state and any failures in full.
memory Read what the project has already learned — earlier corrections and decisions.
select Choose which failure to work on: the one that unblocks the most work.
diagnose Establish the true root cause before changing anything.

Change

Command What it does
acquire Reserve the project for this session so two agents never collide.
batch Group work that does not conflict into a single cycle instead of one at a time.
fix Apply a surgical change.
pull Clone the project onto your machine.
take Build, run and test on your local Docker with your real toolchain, then push the result back.
sync Push locally proven changes back into the project.
verify Prove the change works on your local stack, from the outside, not by assertion.
pass Close work you have built, run and tested green.

Decide and hand back

Command What it does
decide Turn "I am blocked" into a decision it is authorised to make, and record it.
ask Ask the project's humans a question when the answer is not in the code.
hitl Answer an approval that is waiting on a person.
escalate Raise something that cannot be resolved from inside the session.
report Write the session report.
resume Hand the project back and release the session.

Ways to call it

You type What happens
/gantry 10m /loop Runs the cycle every 10 minutes until the backlog is empty.
/gantry Runs the cycle once.
/gantry why is the checkout task stuck? Answers from read-only state. Takes nothing, changes nothing.
/gantry finish the payment task Runs the cycle, scoped to what you asked.
/gantry should cancel refund before releasing inventory? Reaches a human. It will not invent a requirement.
/gantry:status Runs one command directly.

Each loop firing is a complete session — it takes the project, works, and releases it. Nothing is held between firings, so a firing that dies never leaves the project locked for the next one.

Sub-commands are /gantry:<name> in Claude Code and Gemini CLI, and /gantry-<name> in Cursor, Codex, Copilot, Windsurf and Antigravity — the difference is how each agent namespaces its commands, not a difference in behaviour.

Questions are answered, not executed. When a request is ambiguous, GANTRY takes the cheaper, reversible path — reply, or ask — rather than making a change you did not ask for.


Supported agents

Claude Code · Cursor · Codex · Windsurf · GitHub Copilot · Gemini CLI · Antigravity

One package installs all seven. gantry sync after every upgrade.

Antigravity reads workflows from a different folder depending on scope — .agents/workflows/ in a project, global_workflows/ under ~/.antigravity for the user scope — and the installer handles that for you. Both are taken from the shipped build's own path constants, not inferred.

Staying current

gantry selfcheck            # is this copy current?
gantry selfcheck --update   # upgrade and rewrite every agent's commands

Sessions check this themselves before they start work, so an out-of-date copy is caught before it can run a cycle under superseded rules. If the index cannot be reached, the session carries on — a version check is never allowed to block delivery.

Requirements

Python 3.9+. No third-party dependencies. Docker must be installed and runnable on the machine you run GANTRY from — it is the only runtime for build, test, migrations and verification, and a session cannot fall back to the platform's containers. A browser is needed for the e2e steps. Both use whatever your project already uses.


© Orion Innovation. See CHANGELOG.md for what changes between releases.

Metadata

Release files for oi-gantry 0.2.14

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oi-gantry 0.2.14
File Size Uploaded
oi_gantry-0.2.14.tar.gz 1.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for oi-gantry 0.2.14
File Interpreter ABI Platform
oi_gantry-0.2.14-py3-none-any.whl Python 3 none any Details

Total release size: 3.8 MB

Release files / oi_gantry-0.2.14.tar.gz

Download URL oi_gantry-0.2.14.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
5a62de9be46dc9bc9e13362f07958a7aff5ec633e97acc3285bb209ad1ec2400
BLAKE2b-256 checksum
How to use checksums
181da6e0b2be6046645bff9866c069b44e9cfa7403c29e16e91c8a9ff48e4e0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / oi_gantry-0.2.14-py3-none-any.whl

Download URL oi_gantry-0.2.14-py3-none-any.whl
Size 2.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
7cb0c1f4371eefec699fac9c39f8f70afb560902322c2f4fcc1d9b295262a0a8
BLAKE2b-256 checksum
How to use checksums
2ab7175e7612ce506ba58054ac1e54d16811b29943dbb39121cf77fcdbe02be0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

0.2.15

2 release files

This release

0.2.14 This release

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page