petri-pilot

module
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 14, 2026 License: MIT

README

Petri Pilot

An experimental workshop for Petri net tooling.

This is where ideas get built, tested, and refined. Patterns that prove useful graduate upstream to go-pflow.

What's Here

Petri Pilot explores the question: what if the model was the app?

JSON Model ──> Deterministic Codegen ──> Running Application

A Petri net model defines places (states), transitions (actions), and arcs (connections). From that single file, codegen produces:

  • Go backend — event-sourced aggregate, REST API, SQLite storage
  • ES modules frontend — admin dashboard, simulation, event history
  • GraphQL API — unified query layer with built-in playground
  • pflow viewer — interactive Petri net visualization

No LLM-generated code. The LLM designs models. Templates produce apps.

Live demos: pilot.pflow.xyz

Experiments in Progress

Experiment Status Notes
MCP-native model design Active LLM designs, validates, simulates models via MCP tools
ODE simulation Active Continuous-time analysis, optimization (knapsack, resource allocation)
Multi-model serving Active Multiple apps on one port, shared GraphQL layer
ZK circuits from Petri nets Early Tic-tac-toe with gnark proofs
Code generation patterns Ongoing Templates for auth, permissions, views, navigation

MCP Server

Petri Pilot runs as an MCP server. An LLM can design, validate, simulate, and generate without leaving the conversation.

petri-pilot mcp
Tool Purpose
petri_validate Structural correctness
petri_analyze Reachability, deadlocks, liveness
petri_simulate Fire transitions, trace state
petri_codegen Generate Go backend
petri_frontend Generate ES modules frontend
petri_application Full-stack from high-level spec
petri_extend Modify existing models
service_start/stop/logs Manage running services

Quick Start

# Install
go install github.com/pflow-xyz/petri-pilot/cmd/petri-pilot@latest

# Run the demo server
petri-pilot serve tic-tac-toe coffeeshop knapsack

# Or start the MCP server
petri-pilot mcp

Model Format

{
  "name": "order",
  "places": [
    {"id": "pending", "initial": 1},
    {"id": "shipped"}
  ],
  "transitions": [
    {"id": "ship", "event": "order_shipped"}
  ],
  "arcs": [
    {"from": "pending", "to": "ship"},
    {"from": "ship", "to": "shipped"}
  ]
}

Models can include roles, access rules, typed events, views, and navigation. See services/ for examples.

Project Structure

pkg/mcp/             MCP server and tools
pkg/codegen/         Go and ES modules templates
pkg/serve/           Multi-model HTTP server
pkg/validator/       Model analysis
services/            Example models (tic-tac-toe, coffeeshop, knapsack, texas-holdem)
frontends/           Custom frontends for demos
generated/           Output from codegen (derived, not source)

Relationship to go-pflow

go-pflow is the stable Petri net library. Petri Pilot is the experimental counterpart where new ideas are prototyped.

When something works well here — a code generation pattern, an analysis technique, a runtime feature — it may be extracted and added to go-pflow as a stable API.

Think of this repo as a pilot project. Some experiments succeed and ship. Others teach us something and get archived. That's the point.

License

MIT

Directories

Path Synopsis
cmd
petri-pilot command
Command petri-pilot provides LLM-augmented Petri net model design and validation.
Command petri-pilot provides LLM-augmented Petri net model design and validation.
zk-tictactoe command
Package generated provides auto-registration for all generated services.
Package generated provides auto-registration for all generated services.
coffeeshop
Code generated by petri-pilot.
Code generated by petri-pilot.
diningphilosophers
Code generated by petri-pilot.
Code generated by petri-pilot.
enzymekinetics
Code generated by petri-pilot.
Code generated by petri-pilot.
hiringpipeline
Code generated by petri-pilot.
Code generated by petri-pilot.
knapsack
Code generated by petri-pilot.
Code generated by petri-pilot.
loanapproval
Code generated by petri-pilot.
Code generated by petri-pilot.
predatorprey
Code generated by petri-pilot.
Code generated by petri-pilot.
producerconsumer
Code generated by petri-pilot.
Code generated by petri-pilot.
stoplight
Code generated by petri-pilot.
Code generated by petri-pilot.
tcphandshake
Code generated by petri-pilot.
Code generated by petri-pilot.
texasholdem
Code generated by petri-pilot.
Code generated by petri-pilot.
thermostat
Code generated by petri-pilot.
Code generated by petri-pilot.
tictactoe
Code generated by petri-pilot.
Code generated by petri-pilot.
internal
llm
Package llm provides an abstraction layer for LLM providers.
Package llm provides an abstraction layer for LLM providers.
pkg
bridge
Package bridge provides code generation helpers for petri-pilot.
Package bridge provides code generation helpers for petri-pilot.
codegen/esmodules
Package esmodules generates vanilla JavaScript frontend applications from Petri net models.
Package esmodules generates vanilla JavaScript frontend applications from Petri net models.
codegen/golang
Package golang generates Go code from Petri net models.
Package golang generates Go code from Petri net models.
codegen/zkgo
Package zkgo generates ZK circuit code from Petri net models.
Package zkgo generates ZK circuit code from Petri net models.
delegate
Package delegate provides a client for delegating app generation to GitHub Copilot.
Package delegate provides a client for delegating app generation to GitHub Copilot.
dsl
Package dsl implements a guard expression DSL for Petri net transitions.
Package dsl implements a guard expression DSL for Petri net transitions.
extensions
Package extensions provides adapters for integrating the new extension-based ApplicationSpec with the existing petri-pilot codegen system.
Package extensions provides adapters for integrating the new extension-based ApplicationSpec with the existing petri-pilot codegen system.
feedback
Package feedback generates structured prompts for LLM refinement.
Package feedback generates structured prompts for LLM refinement.
generator
Package generator provides LLM-based Petri net model generation.
Package generator provides LLM-based Petri net model generation.
mcp
Package mcp provides MCP server prompt handlers for guided Petri net workflows.
Package mcp provides MCP server prompt handlers for guided Petri net workflows.
metamodel
Package metamodel provides the core metamodel types for Petri net execution.
Package metamodel provides the core metamodel types for Petri net execution.
runtime/api
Package api provides HTTP API abstractions for generated applications.
Package api provides HTTP API abstractions for generated applications.
runtime/engine
Package engine provides a runtime engine that wraps the metamodel.Runtime with event sourcing capabilities for petri-pilot generated applications.
Package engine provides a runtime engine that wraps the metamodel.Runtime with event sourcing capabilities for petri-pilot generated applications.
serve
Package serve provides unified GraphQL support for Petri-pilot services.
Package serve provides unified GraphQL support for Petri-pilot services.
services/pflowxyz
Package pflowxyz provides a service adapter for pflow-xyz.
Package pflowxyz provides a service adapter for pflow-xyz.
validator
Package validator provides formal validation of Petri net models using go-pflow.
Package validator provides formal validation of Petri net models using go-pflow.
Package jsonschema embeds the Petri net model JSON Schema.
Package jsonschema embeds the Petri net model JSON Schema.
Package services embeds service Petri net models.
Package services embeds service Petri net models.
Package zkpoker provides GraphQL support for ZK poker operations.
Package zkpoker provides GraphQL support for ZK poker operations.
Package zktictactoe provides GraphQL support for ZK proof operations.
Package zktictactoe provides GraphQL support for ZK proof operations.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL