Ploston¶
LLMs plan. Ploston executes.
Ploston is a deterministic execution layer for AI agents. You define multi-step workflows in YAML, Ploston exposes them as MCP tools, and your agent calls them with a single invocation.
The problem¶
When an agent orchestrates its own tool calls, every intermediate result passes through the LLM. A 3-step task burns ~10,000 tokens. Run it twice and you may get different results. When something fails, you get a reasoning blob with no trace.
The solution¶
Ploston moves orchestration out of the LLM. Same 3-step task: ~500 tokens. Same inputs → same outputs, every time. Full step-by-step trace.
Quick start¶
pip install ploston-cli # install the CLI
ploston bootstrap # deploy the Control Plane (Docker)
ploston init --import # import your MCP tools, start local runner
# restart Claude Desktop
How it works¶
┌──────────────┐ MCP (stdio/HTTP) ┌───────────────────────────┐
│ Claude / any │ ◄────────────────► │ Ploston Control Plane │
│ MCP client │ │ ┌──────────┐ ┌─────────┐ │
└──────────────┘ │ │ Workflow │ │ Tool │ │
│ │ Engine │ │Registry │ │
│ └────┬─────┘ └────┬────┘ │
└───────┼────────────┼──────┘
│ WebSocket │
┌───────▼────────────▼──────┐
│ Local Runner │
│ github, postgres, slack, │
│ your custom MCP servers │
└───────────────────────────┘
Control Plane — workflow engine, MCP frontend, tool registry, REST API. Runs in Docker.
Local Runner — connects your local MCP servers to the CP over WebSocket. Your tools never leave your machine.
Workflows — YAML files. Once registered, appear as w_<name> MCP tools.
Write a workflow¶
name: page-report
version: "1.0.0"
description: "Fetch a URL and save a title report"
inputs:
- name: url
type: string
steps:
- id: fetch
tool: http_request
params:
url: "{{ inputs.url }}"
method: GET
- id: extract
depends_on: [fetch]
code: |
import re
body = context.steps["fetch"].output.get("body", "")
match = re.search(r"<title[^>]*>(.*?)</title>", body, re.IGNORECASE)
result = {"title": match.group(1).strip() if match else "No title"}
- id: save
depends_on: [extract]
tool: fs_write
params:
path: "report.txt"
content: "Title: {{ steps.extract.output.title }}\n"
outputs:
- name: title
from: steps.extract.output.title
ploston validate page-report.yaml # check it
ploston run page-report.yaml -i url=https://example.com # test it
Claude can now call w_page-report as a single MCP tool.
What's included¶
| OSS (available now) | Enterprise (planned) | |
|---|---|---|
| Workflow engine | ✅ | ✅ |
| MCP integration | ✅ | ✅ |
| Python sandbox | ✅ | ✅ |
| CLI + REST API | ✅ | ✅ |
| Docker + K8s deploy | ✅ | ✅ |
| Prometheus + Grafana | ✅ | ✅ |
| RBAC / policy engine | — | Phase 4 |
| Parallel execution | — | Phase 4 |
| Pattern mining | — | Phase 5 |
| Workflow synthesis | — | Phase 5 |
Documentation¶
Getting started → Installation — deploy in 5 minutes → Quickstart — write and call your first workflow → First Workflow Tutorial — step-by-step with tool calls
Concepts → How Ploston Works — planning vs execution separation → Execution Model — steps, data flow, error handling → Security Model — 7-layer sandbox → Workflows as Tools — MCP tool publishing
Guides → Workflow Authoring → Code Steps → Tool Integration → Docker Deployment → Troubleshooting
Reference → CLI Reference → Workflow Schema → Configuration → Error Codes
System requirements¶
- Python 3.12+
- Docker & Docker Compose v2.20+
- macOS, Linux, or Windows (WSL2)
- 2 GB RAM recommended