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.2+ 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. Studio starts on port 8787 when available and automatically chooses a free local port if it is occupied. The actual URL is printed in the terminal. Run python3 run_studio.py --help to configure a specific port, data directory, or Python tool plugins.
Install the PyPI package
Install the prebuilt package and its OpenRouter/Pydantic runtime dependencies with:
python -m pip install graphcore-studio
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. Windows, macOS, and Linux wheels are provided for supported architectures.
Use Pydantic
The built-in structured-output validator works offline. Pydantic v2 is installed by the standard PyPI command above and can be selected as the validation engine. When running directly from a source checkout, install the runtime dependencies with:
python3 -m pip install -r requirements-models.txt -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, installed automatically by the standard PyPI command. 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.
When running directly from a source checkout, install the runtime dependencies into the Python environment used to run Studio:
python3 -m pip install -r requirements-models.txt
python3 run_studio.py
In Studio, open Model integrations, add OPENROUTER_API_KEY, and save. Add as many named models as you need, such as model1 → deepseek/deepseek-v4-pro-0813 and model2 → openai/gpt-4o-mini, using IDs from the OpenRouter model catalog. Choose a saved model on each Chat Model or Agent node. In workflow JSON, set "model": "$model1" or "model": "$model2" to select the model for that node. Literal model IDs still work. 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. Named model IDs are stored in the local Studio data directory. The offline fixture needs no SDK, key, or network call.
Build a workflow
- Pick a template or drag a node from the left panel.
- Connect the output dots to the next node's input. Conditional nodes have separate true and false outputs.
- Select nodes to edit prompts, tools, schemas, and routing rules.
- Give the workflow JSON input in the panel under the canvas.
- Run it and inspect the output, state, and per-node trace.
- 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.
Add document retrieval
Open Knowledge library in the left sidebar and add .txt, .md, .csv, or .json files. The files stay in the local Studio data folder (up to 100 documents, 1 MiB per document, 10 MiB total). Add a Document retrieval node after Input, set its query field (for example input) and result count, then connect it to a Chat Model. Reference {{context.results}} in the model prompt, replacing context with the retrieval node's output key. Returned passages include source filenames and chunk numbers. Retrieval uses local BM25 keyword matching; it does not call an embedding service, and PDF extraction is not included yet.
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
- Architecture and extension points
- Local UI and runtime semantics
- Roadmap
- Local verification record
- PyPI release checklist
- Example plugin
Local table data workflows
The development checkout now includes Data workspace: import typed CSV and XLSX files, preview local tables, and build an offline summary workflow with exact decimal calculations. Workflow state carries immutable table references rather than full datasets. See the data workspace guide for usage, limits and the next delivery steps. Available in version 0.2.3.
Metadata
Release files for graphcore-studio 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| graphcore_studio-0.2.3.tar.gz | 122.2 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| graphcore_studio-0.2.3-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| graphcore_studio-0.2.3-py3-none-win32.whl | Python 3 | none | Windows x86-32 | Details |
| graphcore_studio-0.2.3-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| graphcore_studio-0.2.3-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.3-py3-none-macosx_11_0_x86_64.whl | Python 3 | none | macOS 11.0+ x86-64 | Details |
| graphcore_studio-0.2.3-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
Total release size: 1.4 MB
Release files / graphcore_studio-0.2.3.tar.gz
| Download URL | graphcore_studio-0.2.3.tar.gz |
|---|---|
| Size | 122.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
be03f8b4f2d594ba9d0624c86d0f247de49601ead3739901cac9ab0f8f0b642e
|
|
BLAKE2b-256 checksum How to use checksums |
de85d02b54011fbba2a32284159354470ef5be050e05b3b1b0c0d2c08b04ca1a
|
| 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.3-py3-none-win_amd64.whl
| Download URL | graphcore_studio-0.2.3-py3-none-win_amd64.whl |
|---|---|
| Size | 293.1 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
af98bec16ae4a6c1597261120ecdf8abd930f39a1184be7679f11d410862ed20
|
|
BLAKE2b-256 checksum How to use checksums |
7cf2511928f6ba52408cb01316e2414a8c57c6ab45d6a0e58cd9214a24d99e25
|
| 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.3-py3-none-win32.whl
| Download URL | graphcore_studio-0.2.3-py3-none-win32.whl |
|---|---|
| Size | 246.4 kB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
f84952b7f3a66369b02bde57ca531f0cd16e9e98df17c93366bb00fb5ec2a64b
|
|
BLAKE2b-256 checksum How to use checksums |
e07802ccf731c51fbf2e543703da7247f86ecebe8632bbcf67d08f61f4ff6add
|
| 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.3-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | graphcore_studio-0.2.3-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 232.6 kB |
| Tags | Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
44451c6db450ddd89daf216ac8afed597733ef884db78aecbd29be99e63b4e2c
|
|
BLAKE2b-256 checksum How to use checksums |
79a2803c03d0d7c1e1eebade7352984d50b49f5fd14f145b1c60b5f9ebcf7cf7
|
| 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.3-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
| Download URL | graphcore_studio-0.2.3-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 215.9 kB |
| Tags | Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
2253a51a345af0947946e0cd01975e9283ef59e8c41e15040db14b11270aefd4
|
|
BLAKE2b-256 checksum How to use checksums |
23ddd36aee4cc6e4088ae4c4e550da1316f1c425568462d5126b362bfc3d29a5
|
| 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.3-py3-none-macosx_11_0_x86_64.whl
| Download URL | graphcore_studio-0.2.3-py3-none-macosx_11_0_x86_64.whl |
|---|---|
| Size | 145.4 kB |
| Tags | Python 3 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
959799fa66a1c06b1454a686ad12101d6bf3e61ee99871bfc09205af82947801
|
|
BLAKE2b-256 checksum How to use checksums |
68c442156b9a670e221fe33c749c8de5af09efcdab9f630c6c016d4bc3be512c
|
| 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.3-py3-none-macosx_11_0_arm64.whl
| Download URL | graphcore_studio-0.2.3-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 145.1 kB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
13fd5f95649aa0cee4ea63e83de502a326ec5b3b662c7dedbbe8701f447816c8
|
|
BLAKE2b-256 checksum How to use checksums |
5ffdb3c5fd845a48a9799fb53dc038cc1ed63e9bd1736a84b1a9ea244b25cca8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|