| Crates.io | periplon |
| lib.rs | periplon |
| version | 0.2.0 |
| created_at | 2025-10-26 12:51:31.137727+00 |
| updated_at | 2025-11-07 05:55:50.604012+00 |
| description | Rust SDK for building multi-agent AI workflows and automation |
| homepage | https://github.com/periplon/periplon |
| repository | https://github.com/periplon/periplon |
| max_upload_size | |
| id | 1901373 |
| size | 6,600,456 |
A powerful DSL and Rust SDK for building multi-agent AI workflows and automation.
Periplon provides a comprehensive DSL (Domain-Specific Language) for orchestrating multi-agent AI workflows with zero configuration. Define complex automation tasks in YAML, and let Periplon handle the execution, state management, and agent coordination.
Key Capabilities:
The Periplon DSL is the primary interface for building workflows:
${variable} interpolationFor advanced programmatic usage:
Build the executor CLI and TUI:
# Build the executor CLI with full features
cargo build --release --features full
# Build the TUI
cargo build --release --bin periplon-tui --features tui
Binaries will be available at:
./target/release/periplon-executor./target/release/periplon-tuiAdd to your Cargo.toml:
[dependencies]
periplon = "0.1.0"
tokio = { version = "1", features = ["full"] }
futures = "0.3"
For detailed installation instructions, see Installation Guide.
Create a simple workflow file hello-world.yaml:
name: "Hello World Workflow"
version: "1.0.0"
description: "A simple workflow demonstrating multi-agent coordination"
agents:
greeter:
description: "Generate friendly greetings"
model: "claude-sonnet-4-5"
permissions:
mode: "default"
writer:
description: "Save greetings to a file"
model: "claude-sonnet-4-5"
tools: [Write]
permissions:
mode: "acceptEdits"
tasks:
generate_greeting:
description: "Generate a friendly greeting message"
agent: "greeter"
save_greeting:
description: "Save the greeting to greeting.txt"
agent: "writer"
depends_on: [generate_greeting]
# Validate the workflow
./target/release/periplon-executor validate hello-world.yaml
# Run the workflow
./target/release/periplon-executor run hello-world.yaml
# Generate a workflow from description
./target/release/periplon-executor generate \
"Create a workflow that analyzes a codebase, finds todos, and generates a report" \
-o analyze-todos.yaml
# Run the generated workflow
./target/release/periplon-executor run analyze-todos.yaml
name: "Project Analysis"
version: "1.0.0"
inputs:
project_name:
type: string
required: true
default: "MyProject"
output_dir:
type: string
required: true
default: "./reports"
agents:
analyzer:
description: "Analyze code for ${workflow.project_name}"
model: "claude-sonnet-4-5"
tools: [Read, Grep, Glob]
inputs:
target_dir:
type: string
required: true
tasks:
scan_codebase:
description: "Scan ${workflow.project_name} codebase for issues"
agent: "analyzer"
inputs:
target_dir: "./src"
outputs:
report:
source:
type: file
path: "${workflow.output_dir}/analysis.json"
See the DSL Overview for comprehensive documentation.
A complete workflow orchestration platform with zero configuration:
# Build the CLI
cargo build --release --features full
# Start server with embedded web UI
./target/release/periplon-executor server --port 8080 --workers
# Access web UI at http://localhost:8080
Documentation: CLI Usage | Embedded Web UI
Interactive terminal interface for workflow management:
# Build the TUI
cargo build --release --bin periplon-tui --features tui
# Launch TUI
./target/release/periplon-tui
# Launch with custom workflow directory
./target/release/periplon-tui --workflow-dir ./my-workflows
Documentation:
For advanced programmatic control, use the Rust SDK directly:
use periplon_sdk::{query, Message, ContentBlock};
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut stream = query("What is 2 + 2?", None).await?;
while let Some(msg) = stream.next().await {
match msg {
Message::Assistant(assistant_msg) => {
for block in assistant_msg.message.content {
if let ContentBlock::Text { text } = block {
println!("Assistant: {}", text);
}
}
}
_ => {}
}
}
Ok(())
}
use periplon_sdk::{PeriplonSDKClient, AgentOptions};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let options = AgentOptions {
allowed_tools: vec!["Read".to_string(), "Write".to_string()],
permission_mode: Some("acceptEdits".to_string()),
..Default::default()
};
let mut client = PeriplonSDKClient::new(options);
client.connect(None).await?;
client.query("List files in current directory").await?;
// Process response...
client.disconnect().await?;
Ok(())
}
See the Quick Start Guide for more SDK examples.
Run the included DSL examples:
# DSL executor example
cargo run --example dsl_executor_example
Loop Pattern Examples:
Run the included SDK examples:
# Simple query
cargo run --example simple_query
# Interactive client
cargo run --example interactive_client
See examples/ for all examples.
The SDK includes comprehensive test coverage with 166+ integration tests:
# Run all tests with server features
cargo test --lib --tests --features server
# Run specific test suite
cargo test --test execution_api_tests --features server
# Run tests with output
cargo test --features server -- --nocapture
Test Suites:
See Testing Guide for comprehensive documentation and examples.
Contributions are welcome! Please ensure:
cargo test --lib --tests --features servercargo fmtcargo clippySee CLAUDE.md for development guidelines.
MIT OR Apache-2.0
Built with ❤️ in Rust