Skip to main content

GeoCopilot 0.4.0

GeoCopilot is a notebook-native, Codex-powered general agent embedded in JupyterLab. It keeps Codex's native shell and file capabilities, adds revision-safe notebook tools through Jupyter MCP, and makes OpenGMS resources available as a standard Codex skill.

This is a clean 1.0 implementation. The previous 0.x plugin is not a dependency and none of its intent routing or browser-executed task machinery is used here.

Product guarantees

  • One persistent Codex thread and at most one active turn for each Jupyter user.
  • One user message maps directly to one turn/start; there is no classifier call.
  • Native Codex shell, file editing, search, Git, and patch capabilities remain available.
  • Notebook operations use root-safe paths, stable cell IDs, YDocs, source hashes, revisions, and server-side kernels.
  • Browser disconnects do not own or cancel the active turn.
  • OpenGMS capability selection is made by Codex from the Skill description, not by keywords, regular expressions, or a host-side router.
  • There is no read-only mode or per-command approval UI. Production safety comes from the isolated, non-root, per-user container.

Development

Requirements:

  • Python 3.10–3.13
  • JupyterLab 4.5.x
  • Node.js 20 LTS
  • Codex CLI 0.142.2
python -m pip install -e ".[test,dev]"
npm install
npm run build
jupyter lab

Run the verification suite:

pytest
npm run lint
npm run build:prod

The right sidebar contains one persistent conversation. While a turn is running, new input is disabled and the turn can be interrupted with Stop turn. Closing the browser does not stop the server-side turn.

Notebook execution and observation

Notebook work follows the implementation patterns used by current Jupyter agents rather than a separate GeoCopilot task router:

notebook.run_cell returns one MCP result containing structured stdout, stderr, errors, MIME metadata, execution timing, and up to three raster outputs as native image blocks. Kernel completion is therefore an execution fact, not an automatic claim that the scientific or visual result is valid. Codex examines the returned evidence in the same turn and decides whether to continue, repair, or ask the user.

Kernel awareness remains notebook-scoped and server-side:

  • notebook.kernel_status reports the notebook session, kernel identity, execution state, connections, and last activity without starting a kernel.
  • notebook.list_variables performs a private, history-free kernel probe and returns bounded variable metadata such as type, shape, dtype, columns, and CRS. It does not serialize complete in-memory objects.
  • notebook.interrupt_kernel interrupts a live notebook kernel.
  • notebook.restart_kernel restarts the path-specific kernel and explicitly reports that memory-resident state has been cleared.

These tools follow the server-side kernel-management pattern used by Datalayer Jupyter MCP Server. Cell execution also interrupts the kernel when its timeout is reached, instead of leaving an orphaned computation running.

Runtime model

Production deployments run one non-root Jupyter Server container per user. GeoCopilot starts one private codex app-server process over stdio, uses the Jupyter Server root as its working directory, and runs with full filesystem access inside that isolated container.

API keys are write-only in the UI and are stored outside the Jupyter workspace. No prompt classifier or keyword-based skill router exists in this project. When a custom Base URL is configured, GeoCopilot defines a dedicated Codex model provider with env_key = "OPENAI_API_KEY" and wire_api = "responses". This avoids mixing third-party endpoint credentials with Codex's built-in OpenAI authentication state.

The extension uses these fixed runtime defaults:

approval_policy = "never"
sandbox_mode = "danger-full-access"

JupyterLab is currently constrained to 4.5.x because the fixed jupyter-server-documents==0.3.1 frontend packages require JupyterLab 4.5 and target @jupyter/ydoc 3.x. The bounds prevent pip from producing incompatible JupyterLab 4.4 or 4.6 environments; they can be lifted when that upstream stack publishes a compatible release.

The Codex working directory is always the Jupyter Server root_dir. Settings are saved under Jupyter's per-user config/data directories, while user notebooks and data remain in the workspace.

OpenGMS resources

Model-service code uses PyGeoModel>=1.0.16,<2 directly. The data-processing method client contains the internal production service address and token from the Method Library specification, so it works without deployment environment variables. Explicit constructor arguments remain available for tests.

The two platform Skills live in geocopilot/skills/opengms-model-services and geocopilot/skills/opengms-data-methods. Production images also install them under /etc/codex/skills. At local startup GeoCopilot copies the packaged Skills into its private CODEX_HOME and verifies them through Codex skills/list; startup fails clearly rather than silently running without the resource capabilities. Users can also install their own Skills under ~/.agents/skills.

Container

Build the non-root single-user image from the repository root:

docker build -f docker/Dockerfile -t opengeolab/geocopilot:0.4.0 .

The image pins Codex CLI 0.142.2, JupyterLab 4.5.10, and Notebook 7.5.7, exposes Jupyter on port 8888, and uses /home/jovyan/work as both the mounted workspace and ServerApp.root_dir.

Protocol compatibility

The generated Codex App Server schemas for 0.142.2 are checked into schema/codex-0.142.2. Regenerate them before any Codex upgrade and run the contract suite:

scripts/regenerate_codex_schema.sh
pytest tests/test_contracts.py

jupyter-server-mcp==0.2.1 exposes Streamable HTTP but does not ship the stdio proxy present on its unreleased development branch. GeoCopilot therefore connects Codex directly to http://127.0.0.1:3001/mcp; the port remains private inside each single-user container. Override it with GEOCOPILOT_MCP_URL only when the matching Jupyter MCP port is changed.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opengeolab_geocopilot-0.4.0.tar.gz (436.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opengeolab_geocopilot-0.4.0-py3-none-any.whl (67.8 kB view details)

Uploaded Python 3

File details

Details for the file opengeolab_geocopilot-0.4.0.tar.gz.

File metadata

  • Download URL: opengeolab_geocopilot-0.4.0.tar.gz
  • Upload date:
  • Size: 436.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for opengeolab_geocopilot-0.4.0.tar.gz
Algorithm Hash digest
SHA256 efe8159169c7074bec7ca396a8533df5ba238a1835200d42b7233c27efbcaefa
MD5 eafe84cc6ff873c1f70f0053f9cc1c40
BLAKE2b-256 20a48ccd803f9af81758dacb5a1865f87552b5ed8e1426480a119dc2ee79a3bb

See more details on using hashes here.

File details

Details for the file opengeolab_geocopilot-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for opengeolab_geocopilot-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a2e4d76e68b88606a3fe96881bacaa0d29c6517bce136c58bb7e8719837d0771
MD5 61f754426e99051e518a92b18ca87a24
BLAKE2b-256 5caec8ecceaf3e453008ab9cd8f26f09a76fadff1c58a4f550a62af96eaf468e

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.14

2 files

0.4.11

2 files

0.4.10

2 files

0.4.9

2 files

0.4.8

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

This release

0.4.0 This release

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.44

2 files

0.2.43

2 files

0.2.41

2 files

0.2.40

2 files

0.2.39

2 files

0.2.38

2 files

0.2.37

2 files

0.2.35

2 files

0.2.34

2 files

0.2.33

2 files

0.2.32

2 files

0.2.31

2 files

0.2.29

2 files

0.2.28

2 files

0.2.26

2 files

0.2.25

2 files

0.2.23

2 files

0.2.22

2 files

0.2.21

2 files

0.2.20

2 files

0.2.19

2 files

0.2.18

2 files

0.2.17

2 files

0.2.15

2 files

0.2.14

2 files

0.2.13

2 files

0.2.11

2 files

0.2.10

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 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