Skip to main content

GraphCore Studio

Design local agent workflows on a canvas. Run them with a C++ engine. Extend them with Python.

GraphCore Studio is an interactive, local-first visual agent framework. Drag nodes onto a canvas, connect agent handoffs, add conditional branches, validate structured output, call Python tools, and pause for human approval. Save and run workflows on your own machine.

Start Studio

Requirements: Python 3.9+ and a C++17 compiler. You do not need CMake, Node.js, Docker, API keys, an internet connection, or a model to try the included workflows.

From the project folder, run one command:

python3 run_studio.py

Open http://127.0.0.1:8787. The launcher compiles the C++ shared library on first run, then opens a server accessible only from your machine. On Windows, use PowerShell in a Visual Studio Developer Terminal with the C++ workload installed:

py run_studio.py

If Python was installed through the Windows Store and py is unavailable, run python run_studio.py from the Visual Studio Developer Terminal.

Stop the server with Ctrl+C. Workflows and run history live in studio/data/; drafts are saved in this browser. Run python3 run_studio.py --help to configure the port, data directory, or Python tool plugins.

Install the PyPI package

After the first release is published, install the prebuilt package with:

python -m pip install "graphcore-studio[models,pydantic]"
graphcore-studio

The wheel bundles the C++ runtime and Studio UI. Source installs build the native runtime and therefore require a C++17 compiler and CMake. The distribution is named graphcore-studio; its Python API imports as graphcore.

Use Pydantic

The built-in structured-output validator works offline with no extra packages. To enable optional Pydantic v2 validation:

python3 -m pip install -r requirements-pydantic.txt
python3 run_studio.py

On Windows, replace python3 with py -3. Restart Studio after installing packages. The Structured output node shows whether Pydantic is available.

Use OpenRouter models

The Chat Model and Agent nodes use GraphCore's model adapter with the official OpenRouter Python SDK. C++ owns graph scheduling, state commits, conditions, and checkpoints; the Python wrapper calls the SDK. The OpenRouter request runs through the project-owned adapter rather than a chain framework.

Install the SDK into the Python environment used to run Studio:

python3 -m pip install -r requirements-models.txt
python3 run_studio.py

For a PyPI installation, use the models extra instead: python -m pip install "graphcore-studio[models]".

In Studio, open Model integrations, add OPENROUTER_API_KEY, and save. Select OpenRouter on a Chat Model node and enter a model ID from the OpenRouter model catalog. Compose system/user/assistant messages and use Insert variable to reference workflow inputs and prior node outputs. Studio loads the local .env file automatically; secret values are not included in workflow files. The offline fixture needs no SDK, key, or network call.

Build a workflow

  1. Pick a template or drag a node from the left panel.
  2. Connect the output dots to the next node's input. Conditional nodes have separate true and false outputs.
  3. Select nodes to edit prompts, tools, schemas, and routing rules.
  4. Give the workflow JSON input in the panel under the canvas.
  5. Run it and inspect the output, state, and per-node trace.
  6. Save locally, export the workflow JSON, or approve a saved human checkpoint.

The starter templates cover research and review, structured output, Python tools, a supervisor delegating work to specialist agents, and a chat-model playground. The canvas also supports node search, keyboard undo/redo, zoom, pan, layout changes, validation, and run history.

Prompt templates reference state with {{input}}, {{research}}, or nested fields such as {{record.summary}}. Structured Output defines required fields and types. Python plugins extend the node's registered-tool list without placing executable source code in the workflow document.

Register a Python library or tool

A plugin is a local, trusted Python module. Studio loads it when the server starts. Import a library in your tool and register an ordinary function:

def register(add_tool):
    from my_library import Client
    client = Client()

    def search(value, config):
        return {"matches": client.search(str(value))}

    add_tool("search", search, "Search our knowledge base")

Start Studio with python3 run_studio.py --plugin path/to/plugin.py, then select the registered function in a Python Tool node. Plugins execute as the current user; load only modules you trust. The included studio/example_plugin.py shows a small plugin.

What runs where?

Visual editor & local HTTP API
                │ workflow JSON and node registrations
        Python integrations ───── OpenRouter SDK / Pydantic / your packages
                │ Python C ABI
       C++17 graph scheduler ─── conditions / routes / checkpoints
                │
        Local workflow & run files

The C++ runtime owns graph validation at compile time, step scheduling, native equality conditions, and checkpoint transitions. Python supplies model and tool integrations and the local editor server. Model and Python tool code executes in Python; agent handoffs are sequential. Performance benefits depend on the workload. No blanket speedup claim is made.

Build or embed the C++ core

The editor launcher builds the native shared library automatically. To build the core tests and examples as well:

./scripts/build.sh

For CMake users with CMake 3.16 or newer:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
ctest --test-dir build -C Release --output-on-failure

Compile a C++ example directly with a compiler:

c++ -std=c++17 -O2 -Iinclude src/graphcore.cpp examples/approval.cpp -o graphcore_demo

The C++ interface is in include/graphcore/graphcore.hpp; the experimental C ABI used by Python is in include/graphcore/c_api.h.

Scope and guarantees

This is an early, working local framework. The UI has runnable templates and a native backend. The runtime currently executes one node at a time. Retries can repeat side effects; use idempotency keys in external systems. File checkpoints support local process-restart recovery but do not promise power-loss durability, multiple writers, encryption, or database transactions. Python async cancellation is cooperative only between callbacks. See the execution contract.

Parallel fan-out and joins, database-backed persistence, distributed worker coordination, and an authenticated server remain future work. A release workflow now builds CPython wheels for Linux, macOS, and Windows; those hosted builds still need to run before the wheels are verified for release. The local server uses a session token and origin checks, and binds only to loopback; it is not designed for public network exposure.

Project notes

Metadata

Release files for graphcore-studio 0.2.0

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

Source distribution (sdist)

Source distribution for graphcore-studio 0.2.0
File Size Uploaded
graphcore_studio-0.2.0.tar.gz 73.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for graphcore-studio 0.2.0
File
graphcore_studio-0.2.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
graphcore_studio-0.2.0-py3-none-win32.whl Python 3 none Windows x86-32 Details
graphcore_studio-0.2.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details
graphcore_studio-0.2.0-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details
graphcore_studio-0.2.0-py3-none-macosx_11_0_x86_64.whl Python 3 none macOS 11.0+ x86-64 Details
graphcore_studio-0.2.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 1.2 MB

Release files / graphcore_studio-0.2.0.tar.gz

Download URL graphcore_studio-0.2.0.tar.gz
Size 73.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6daa1cb00fc9d85fa7a61f5ef41a42fd89bb1e4a118d11b784907902988a5db6
BLAKE2b-256 checksum
How to use checksums
faf0b24ef3a7a8cfc45898a0e669f53aa9dad1ca95ffba75bf2bb895cb9dc009
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / graphcore_studio-0.2.0-py3-none-win_amd64.whl

Download URL graphcore_studio-0.2.0-py3-none-win_amd64.whl
Size 273.7 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
207772314483660486e6e3ff67be870149ed1d6eadd55dc7849051a1f7155c5f
BLAKE2b-256 checksum
How to use checksums
465ab9961a9a7ae61480ea6544ea4e452bafff36751a7b69629c03b1a14ad5f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / graphcore_studio-0.2.0-py3-none-win32.whl

Download URL graphcore_studio-0.2.0-py3-none-win32.whl
Size 227.0 kB
Tags Python 3 Windows x86-32
SHA-256 checksum
How to use checksums
3e20e0c63a0c15011750ba521fc94eedf74495b4a4f28c22679b9ef9e30df08f
BLAKE2b-256 checksum
How to use checksums
b37cfbb57c6ac379d39ad00c2fa09a590268027b9e95fbcc9d7b743837a31ef3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / graphcore_studio-0.2.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL graphcore_studio-0.2.0-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 213.3 kB
Tags Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
c16fd5b4430c546ef4a85d6c04f3377fc20c3e1e1ffc5056f0f9a542d4c508e3
BLAKE2b-256 checksum
How to use checksums
7c07fe85f083b3e300d79d8bc008750e04f5141ef460ac3ef7d46e81a1284321
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / graphcore_studio-0.2.0-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL graphcore_studio-0.2.0-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 196.5 kB
Tags Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
360c67b2f3e906d9c8f99e4be2ef021afb1ca1e04e4fa0cbbb1f0bfc9f1569f4
BLAKE2b-256 checksum
How to use checksums
45f80d0db3dbffab1dad8f8ee8be162ec39343229fee462329d3368d3bc98349
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / graphcore_studio-0.2.0-py3-none-macosx_11_0_x86_64.whl

Download URL graphcore_studio-0.2.0-py3-none-macosx_11_0_x86_64.whl
Size 126.0 kB
Tags Python 3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
2db1237097bc7613938393022f90e614921454e49a91f68b0c1c4b5b29bd8a75
BLAKE2b-256 checksum
How to use checksums
d4a565c6f838a047f7489d92f345049f08bb6d4b851f179baad47988295c8d40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / graphcore_studio-0.2.0-py3-none-macosx_11_0_arm64.whl

Download URL graphcore_studio-0.2.0-py3-none-macosx_11_0_arm64.whl
Size 125.7 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b9a7066822759ba46c8e9119d3b88dae4fbe0da16ec4a3065c85e6f2f6fbbc27
BLAKE2b-256 checksum
How to use checksums
92d71675d3f3c9677eb924c0924cf0721b9abce39a9f9945cb8ee8baf12e6955
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

0.2.3

7 release files

0.2.2

7 release files

This release

0.2.0 This release

7 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