Universal Assistant – AI-Driven Petri Net Creation in Real-Time

Universal Assistant – AI-Driven Petri Net Creation in Real-Time

What if you could describe an agentic process in plain English and watch an AI agent build it for you – complete with API integrations, error handling, and proper Petri net structure? In this article, I’ll show how the Universal Assistant in AgenticOS created a complete weather monitoring Petri net from a single natural language prompt.

This is a milestone moment for AgenticOS / Agentic-Nets: conversational agentic process creation where the AI agent understands your intent, designs the architecture, and executes the API calls to build a working Petri net – all while streaming its progress in real-time.

Powered by Private AI: GPT-OSS 120B

This demo uses GPT-OSS:120B-Cloud – a 120 billion parameter open-source large language model. This is crucial for enterprise adoption:

  • Data Privacy – Your agentic process descriptions, API configurations, and business logic never leave your infrastructure. No global AI provider sees your data.
  • No Vendor Lock-in – AgenticOS supports multiple LLM backends: Claude, Ollama with DeepSeek R1, Llama 3.2, and now GPT-OSS. Switch models without changing your agentic processes.
  • Cost Control – Run your own inference infrastructure and generate thousands of nets without per-token API costs.
  • Compliance Ready – Keep sensitive agentic process definitions within your security boundary for GDPR, HIPAA, or internal compliance requirements.

With a private 120B parameter model, you get GPT-4-class reasoning for agentic process generation while maintaining complete data sovereignty.

The Prompt

We asked the Universal Assistant to create a weather monitoring agentic process using real-world API data:

Could you create a simple weather net. Use this API for inscription:

  Current Weather for Pforzheim
  https://api.open-meteo.com/v1/forecast?latitude=48.88436&longitude=8.69892¤t=temperature_2m,relative_humidity_2m,wind_speed_10m,weather_code

  Test it:
  curl "https://api.open-meteo.com/v1/forecast?latitude=48.88436&longitude=8.69892¤t=temperature_2m,relative_humidity_2m,wind_speed_10m,weather_code"

  Coordinates:
  - Latitude: 48.88436
  - Longitude: 8.69892
  - Location: Baden-Württemberg, Germany

That’s it. No JSON schemas, no manual API configuration, no transition inscriptions to write by hand. Just a description of what we wanted and the API endpoint to use.

What the Agent Built

The Universal Assistant analyzed our request and created a complete weather monitoring Petri net with proper structure:

[weather-requests] ──→ (t-fetch-weather) ──┬──→ [weather-data]
                                             │
                                             └──→ [weather-errors]

The Architecture

  • Places:
    • weather-requests (100, 150) – Input place for weather fetch requests
    • weather-data (400, 100) – Output place for successful weather data (already has 6 tokens from test runs!)
    • weather-errors (400, 200) – Error place for failed API calls
  • Transitions:
    • t-fetch-weather (250, 150) – HTTP transition that calls the Open-Meteo API
  • Arcs:
    • weather-requests → t-fetch-weather (input arc)
    • t-fetch-weather → weather-data (success output)
    • t-fetch-weather → weather-errors (error output)

The Generated PNML

{
    "metadata": {
      "modelId": "default",
      "sessionId": "system",
      "netId": "2026-01-02T21-45-08",
      "storagePath": "/root/workspace/sessions/system/workspace-nets/2026-01-02T21-45-08",
      "nodeBaseUrl": "http://localhost:8080",
      "masterBaseUrl": "http://localhost:8082",
      "timestamp": "2026-01-02T22:03:06.114Z"
    },
    "pnml": {
      "pnml": {
        "net": {
          "places": {
            "weather-requests": {
              "id": "weather-requests",
              "type": "place",
              "label": "weather-requests",
              "x": 100,
              "y": 150
            },
            "weather-data": {
              "id": "weather-data",
              "type": "place",
              "label": "weather-data",
              "x": 400,
              "y": 100,
              "tokens": 6
            },
            "weather-errors": {
              "id": "weather-errors",
              "type": "place",
              "label": "weather-errors",
              "x": 400,
              "y": 200
            }
          },
          "transitions": {
            "t-fetch-weather": {
              "id": "t-fetch-weather",
              "type": "transition",
              "label": "t-fetch-weather",
              "x": 250,
              "y": 150
            }
          },
          "arcs": {
            "arc-1": {
              "id": "arc-1",
              "source": "weather-requests",
              "target": "t-fetch-weather"
            },
            "arc-2": {
              "id": "arc-2",
              "source": "t-fetch-weather",
              "target": "weather-data"
            },
            "arc-3": {
              "id": "arc-3",
              "source": "t-fetch-weather",
              "target": "weather-errors"
            }
          }
        }
      }
    }
  }

Why This Matters

The Universal Assistant didn’t just create a visual diagram – it built a production-ready agentic process:

  1. Proper Error Handling – The agent automatically created a separate error place for failed API calls. This wasn’t in our prompt – the AI understood that HTTP integrations need error paths.
  2. Correct Petri Net Structure – Places and transitions follow the bipartite constraint (places connect only to transitions, never directly to other places).
  3. API Integration Ready – The transition inscription includes the Open-Meteo API endpoint with all the parameters we specified (temperature, humidity, wind speed, weather code).
  4. Already Tested – Notice the "tokens": 1 on weather-data. The agent ran test executions, and we now have 1 successful weather data tokens stored!

Petri Nets as a Programming Language

Here’s a powerful realization: AgenticOS transitions are like methods in a programming language, and Petri nets are like programs or running systems.

We’ve built a complete set of transition types that, when combined, can express any agentic process:

Transition Type Programming Equivalent Purpose
PASS Identity function / router Route tokens between places without modification
MAP Transform / map function Transform token data using templates
HTTP API call / fetch Call external REST APIs with retry, auth, timeouts
LLM AI function call Process tokens through language models
AGENT Autonomous subroutine Execute complex multi-step AI-driven tasks
COMMAND System exec / shell Execute bash commands on local or remote systems

Think about it:

  • Places = Variables / Data stores
  • Tokens = Data / Objects
  • Transitions = Functions / Methods
  • Arcs = Data flow / Function calls
  • Petri Net = Program / Application

With just these six transition types, you can build:

  • ETL pipelines (HTTP → MAP → HTTP)
  • AI-powered document processing (HTTP → LLM → MAP → HTTP)
  • DevOps automation (COMMAND → MAP → COMMAND)
  • Multi-system integrations (HTTP → MAP → PASS → HTTP)
  • Intelligent agents (AGENT with dynamic tool discovery)

This is visual, executable, distributed programming.

Scale: Thousands of Nets Per Week

With the Universal Assistant and a private LLM like GPT-OSS:120B, we can now generate thousands of pre-configured Petri nets per week. This changes the game:

  • Template Libraries – Generate domain-specific agentic process templates: “Create 100 variations of order processing agentic processes for different industries”
  • Rapid Prototyping – Describe a business process, get a working Petri net in minutes, iterate through conversation
  • Automated Integration – “Connect these 50 APIs into monitoring agentic processes” – the agent generates all 50 nets
  • Self-Improving Systems – Nets that create and improve other nets through the Arcon pattern (documentation-driven reflexive execution)

The combination of private AI + visual agentic process language + distributed execution means we have everything we need to automate virtually any process.

The Universal Assistant Architecture

Behind the scenes, the Universal Assistant uses the petri-net-agentic process-builder agent – a specialized AI agent that understands AgenticOS APIs, Petri net semantics, and agentic process best practices.

When you send a message, the assistant:

  1. Analyzes your intent – Understands you want a weather monitoring agentic process with specific API integration
  2. Plans the architecture – Determines places, transitions, and arcs needed
  3. Executes API calls – Uses the AgenticOS Design-Time API to create the visual PNML structure
  4. Configures runtime – Sets up transition inscriptions with HTTP actions, ArcQL queries, and emit rules
  5. Streams progress – Shows each step in real-time so you can follow along

Streaming Agent Events

One of the key features implemented in this session is SSE streaming – Server-Sent Events that show the agent’s progress in real-time:

🤔 Analyzing request for weather monitoring agentic process...
  🔧 designtime_create_place — Creating weather-requests place
  ✅ designtime_create_place: Success
  🔧 designtime_create_place — Creating weather-data place
  ✅ designtime_create_place: Success
  🔧 designtime_create_place — Creating weather-errors place
  ✅ designtime_create_place: Success
  🔧 designtime_create_transition — Creating t-fetch-weather transition
  ✅ designtime_create_transition: Success
  🔧 designtime_create_arc — Connecting weather-requests to t-fetch-weather
  ✅ designtime_create_arc: Success
  ...
  🏁 Completed · 8 tools · 3 iterations

You see every tool call, every success, every iteration – making the AI agent’s work transparent and debuggable.

Chat History Persistence

Another important feature: the Universal Assistant now remembers your conversation. When you minimize the assistant panel and bring it back from the minimap, all your chat history is preserved.

This is achieved through localStorage persistence:

  • Messages are saved after each user message, agent completion, and error event
  • On component initialization, messages are restored from localStorage
  • Each session has its own isolated conversation history

No more losing your agentic process conversations when switching between editors!

The Weather Data

The Open-Meteo API returns real-time weather data for Pforzheim, Germany:

{
    "latitude": 48.88,
    "longitude": 8.7,
    "current": {
      "temperature_2m": -1.2,
      "relative_humidity_2m": 80,
      "wind_speed_10m": 14.6,
      "weather_code": 2
    }
  }

Each time a token enters weather-requests, the transition fires, calls the API, and deposits the response into weather-data. The 6 tokens already there represent 6 successful weather fetches during testing!

From Concept to Working Agentic Process in Minutes

The traditional approach to building this agentic process would require:

  • Manually creating places in the visual editor
  • Manually creating transitions and arcs
  • Writing JSON inscriptions with proper ArcQL syntax
  • Configuring HTTP actions with URL templates
  • Setting up emit rules for success and error paths
  • Testing and debugging each component

With the Universal Assistant, we provided a natural language description and an API endpoint. The agent handled everything else.

AgenticOS System Architecture

Let’s take a deeper look at how AgenticOS components work together to enable this distributed agentic process execution:

  ┌─────────────────────────────────────────────────────────────────────────────┐
  │                              AgenticOS Architecture                            │
  ├─────────────────────────────────────────────────────────────────────────────┤
  │                                                                             │
  │   ┌─────────────┐         ┌─────────────┐         ┌─────────────┐           │
  │   │    GUI      │◄───────►│   MASTER    │◄───────►│    NODE     │           │
  │   │  (Angular)  │   REST  │  (Spring)   │   REST  │  (Spring)   │           │
  │   │  Port 4200  │   +SSE  │  Port 8082  │         │  Port 8080  │           │
  │   └─────────────┘         └──────┬──────┘         └──────┬──────┘           │
  │                                  │                       │                  │
  │                                  │                       │                  │
  │                          ┌──────▼──────┐         ┌──────▼──────┐            │
  │                          │  EXECUTOR   │         │ SA-BLOBSTORE│            │
  │                          │  (Spring)   │         │  (Cluster)  │            │
  │                          │  Port 8084  │         │ Ports 8090+ │            │
  │                          └─────────────┘         └─────────────┘            │
  │                                                                             │
  │                                                                             │         
  │                                                                             │
  └─────────────────────────────────────────────────────────────────────────────┘

The Four Core Services

1. agentic-net-gui (Port 4200) – The Angular frontend providing:

  • Visual Petri net editor with drag-drop functionality
  • Universal Assistant chat interface with SSE streaming
  • Real-time token visualization and execution observation
  • Session management and workspace isolation

2. agentic-net-master (Port 8082) – The intelligent orchestration hub:

  • LLM integration (GPT-OSS, Claude, Ollama)
  • Universal Assistant agent execution
  • Design-time and runtime API coordination
  • Transition inscription management
  • Natural language to PNML conversion

3. agentic-net-node (Port 8080) – The meta-filesystem and persistence engine:

  • Tree-structured data storage (places, tokens, transitions)
  • Event sourcing with immutable event log
  • ArcQL query engine for token selection
  • Atomic token reservation with CAS semantics
  • Multiple storage backends (Memory, Filesystem, S3)

4. agentic-net-executor (Port 8084) – The command execution engine:

  • Bash/shell command execution
  • Transition runtime with polling orchestration
  • Remote command dispatch to multiple nodes
  • Result collection and aggregation

Distributed Storage: SA-BlobStore

For large payloads (files, documents, binary data), AgenticOS integrates with SA-BlobStore – a distributed blob storage cluster:

  • Cluster nodes on ports 8090-8092
  • Load balancer on port 8095 (Nginx)
  • Automatic replication across nodes
  • Content-addressable storage for deduplication

When an agentic process processes large files, tokens store references to blobs in SA-BlobStore rather than embedding the data directly. This keeps the Petri net lightweight while enabling processing of arbitrarily large payloads.

Scaling: Distributed Places and Transitions

AgenticOS is designed for horizontal scaling. Each component can be distributed:

Distributed Places:

  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐
  │   Node A     │     │   Node B     │     │   Node C     │
  │  Port 8080   │     │  Port 8081   │     │  Port 8082   │
  ├──────────────┤     ├──────────────┤     ├──────────────┤
  │ [orders]     │     │ [inventory]  │     │ [shipments]  │
  │ [customers]  │     │ [products]   │     │ [tracking]   │
  └──────────────┘     └──────────────┘     └──────────────┘

Each place can live on its own node. Transitions use the host format {modelId}@{host}:{port} to reference places across the cluster:

{
    "presets": {
      "order": {
        "placeId": "orders",
        "host": "orders-model@node-a:8080",
        "arcql": "FROM $ WHERE $.status==\"pending\""
      }
    },
    "postsets": {
      "shipment": {
        "placeId": "shipments",
        "host": "shipping-model@node-c:8082"
      }
    }
  }

Distributed Executors:

Command transitions can dispatch to multiple remote executors:

                      ┌─────────────────┐
                      │  Master/Executor│
                      │   (Orchestrator)│
                      └────────┬────────┘
                               │
             ┌─────────────────┼─────────────────┐
             │                 │                 │
             ▼                 ▼                 ▼
      ┌─────────────┐   ┌─────────────┐   ┌─────────────┐
      │  Remote     │   │  Remote     │   │  Remote     │
      │  Executor 1 │   │  Executor 2 │   │  Executor 3 │
      │  (Server A) │   │  (Server B) │   │  (Server C) │
      └─────────────┘   └─────────────┘   └─────────────┘

This enables:

  • Parallel command execution across multiple servers
  • Geographic distribution for latency optimization
  • Result aggregation back into centralized places
  • Fault tolerance with automatic retry and failover

How It All Works Together

Here’s the flow when you ask the Universal Assistant to create an agentic process:

  1. GUI → Master: Your natural language request is sent via REST to the Master service
  2. Master → LLM: The Master sends your request to GPT-OSS:120B for processing
  3. LLM → Master: The model returns tool calls (create place, create transition, etc.)
  4. Master → Node: Each tool call is executed against the Node’s tree API
  5. Master → GUI: Progress is streamed back via SSE for real-time display
  6. Node → Storage: Places and tokens are persisted (memory, filesystem, or S3)
  7. Executor → Remote: When transitions fire, commands run on local or remote executors
  8. Results → Node: Execution results flow back as tokens to output places

What’s Next

This weather net is just the beginning. With the full transition toolkit (PASS, MAP, HTTP, LLM, AGENT, COMMAND) and distributed architecture, you can create:

  • Multi-stage pipelines – “Create an agentic process that fetches weather, analyzes it with LLM, and sends alerts when temperature drops below freezing”
  • Cross-system integrations – “Build an agentic process that syncs data between Salesforce and our internal database, with transformation and validation”
  • DevOps automation – “Create a deployment pipeline that builds, tests, and deploys across 10 servers”
  • Distributed data collection – “Build a monitoring system that collects metrics from 100 servers and aggregates them”
  • AI-powered document processing – “Process invoices: extract data with LLM, validate, transform, and send to accounting system”

Try It Yourself

The Universal Assistant is available in AgenticOS. Open it from the toolbar, describe your agentic process, and watch the agent build it in real-time. Your conversation history persists across sessions, and you can iterate on your design through natural conversation.

With private AI models, visual agentic process programming, and distributed execution, AgenticOS represents a new paradigm: tell the AI what you want, and watch it build a production-ready distributed system for you.

This is the future of agent orchestration.

Leave a Reply

Your email address will not be published. Required fields are marked *