224 lines
5.2 KiB
Plaintext
224 lines
5.2 KiB
Plaintext
# OpenProse - Confirmed Syntax
|
|
# Python-like indentation, keyword-driven, minimal punctuation
|
|
|
|
# ============================================
|
|
# IMPORTS (quoted skill names)
|
|
# ============================================
|
|
|
|
import "web-search" from "github:example/web-search"
|
|
import "summarizer" from "./skills/summarizer"
|
|
|
|
# ============================================
|
|
# AGENT DEFINITIONS (quoted skills array)
|
|
# ============================================
|
|
|
|
agent researcher:
|
|
model: sonnet
|
|
skills: ["web-search", "summarizer"]
|
|
permissions:
|
|
bash: deny
|
|
|
|
agent writer:
|
|
model: opus
|
|
skills: ["summarizer"]
|
|
|
|
# ============================================
|
|
# SIMPLE FLOW
|
|
# ============================================
|
|
|
|
# Simplest program: single session
|
|
session "Explain quantum computing"
|
|
|
|
# Sequential (indentation = sequence)
|
|
do:
|
|
session: researcher
|
|
prompt: "Research quantum computing"
|
|
session: writer
|
|
prompt: "Write a blog post"
|
|
|
|
# Inline sequence with arrow
|
|
session "A" -> session "B" -> session "C"
|
|
|
|
# ============================================
|
|
# PARALLEL EXECUTION (quoted modifiers)
|
|
# ============================================
|
|
|
|
# Default: wait for all, fail-fast
|
|
parallel:
|
|
session "Security review"
|
|
session "Performance review"
|
|
session "Style review"
|
|
|
|
# Race: first to complete wins
|
|
parallel ("first"):
|
|
session "Try approach A"
|
|
session "Try approach B"
|
|
|
|
# Continue on failure
|
|
parallel (on-fail: "continue"):
|
|
session "Risky operation 1"
|
|
session "Risky operation 2"
|
|
|
|
# Named results for downstream use
|
|
parallel:
|
|
security = session "Security review"
|
|
perf = session "Performance review"
|
|
|
|
session "Synthesize":
|
|
context: { security, perf }
|
|
|
|
# ============================================
|
|
# COMPOSITION: NAMED BLOCKS WITH PARAMETERS
|
|
# ============================================
|
|
|
|
# Define a reusable block
|
|
block review-pipeline:
|
|
parallel:
|
|
session "Security review"
|
|
session "Performance review"
|
|
session "Synthesize reviews"
|
|
|
|
# Block with parameters
|
|
block research(topic):
|
|
session "Research {topic}"
|
|
session "Summarize findings about {topic}"
|
|
|
|
# Invoke with `do`
|
|
do:
|
|
session "Write code"
|
|
do review-pipeline
|
|
session "Final edits"
|
|
|
|
do research("quantum computing")
|
|
|
|
# ============================================
|
|
# LOOPS (with ** orchestrator discretion)
|
|
# ============================================
|
|
|
|
# Loop until condition (orchestrator evaluates **)
|
|
loop until **approved**:
|
|
session "Write draft"
|
|
session "Get feedback"
|
|
|
|
# Multi-word condition
|
|
loop until **user is satisfied with the result**:
|
|
session "Propose solution"
|
|
session "Get feedback"
|
|
|
|
# Repeat N times
|
|
repeat 3:
|
|
session "Attempt solution"
|
|
|
|
# Infinite loop (with runtime safeguards)
|
|
loop:
|
|
session "Monitor for events"
|
|
session "Handle event"
|
|
|
|
# For-each
|
|
for item in items:
|
|
session "Process {item}"
|
|
|
|
# ============================================
|
|
# CHOICE (orchestrator discretion)
|
|
# ============================================
|
|
|
|
choice **based on urgency**:
|
|
session "Quick fix"
|
|
session "Thorough solution"
|
|
|
|
# ============================================
|
|
# PIPELINE OPERATIONS
|
|
# ============================================
|
|
|
|
# Map: transform each item
|
|
items | map: session "Process {item}"
|
|
|
|
# Filter: select items
|
|
items | filter: session "Is {item} relevant?"
|
|
|
|
# Reduce: accumulate results
|
|
items | reduce(summary, item):
|
|
session "Add {item} to {summary}"
|
|
|
|
# Chaining
|
|
files
|
|
| filter: session "Is {item} relevant?"
|
|
| map: session "Extract info from {item}"
|
|
| reduce(report, info):
|
|
session "Add {info} to {report}"
|
|
|
|
# Parallel map
|
|
items | pmap: session "Process {item}"
|
|
|
|
# ============================================
|
|
# ERROR HANDLING
|
|
# ============================================
|
|
|
|
# Try/catch/finally
|
|
try:
|
|
session "Risky operation"
|
|
catch:
|
|
session "Handle failure"
|
|
finally:
|
|
session "Cleanup"
|
|
|
|
# Retry with backoff
|
|
session "Flaky API call" (retry: 3)
|
|
|
|
# ============================================
|
|
# CONTEXT PASSING
|
|
# ============================================
|
|
|
|
# Variable binding (mutable)
|
|
let research = session: researcher
|
|
prompt: "Research topic"
|
|
|
|
# Variable binding (immutable)
|
|
const config = session "Get configuration"
|
|
|
|
# Explicit context
|
|
session: writer
|
|
prompt: "Write about the research"
|
|
context: research
|
|
|
|
# Multiple contexts
|
|
session "Final synthesis":
|
|
context: [research, analysis, feedback]
|
|
|
|
# No context (start fresh)
|
|
session "Independent task":
|
|
context: []
|
|
|
|
# ============================================
|
|
# COMPLETE EXAMPLE
|
|
# ============================================
|
|
|
|
import "code-review" from "github:example/code-review"
|
|
|
|
agent code-reviewer:
|
|
model: sonnet
|
|
skills: ["code-review"]
|
|
|
|
agent synthesizer:
|
|
model: opus
|
|
|
|
# Parallel review with named results
|
|
parallel:
|
|
sec = session: code-reviewer
|
|
prompt: "Review for security issues"
|
|
perf = session: code-reviewer
|
|
prompt: "Review for performance issues"
|
|
style = session: code-reviewer
|
|
prompt: "Review for style issues"
|
|
|
|
# Synthesize all results
|
|
session: synthesizer
|
|
prompt: "Create unified review report"
|
|
context: { sec, perf, style }
|
|
|
|
# Iterative refinement with ** condition
|
|
loop until **approved**:
|
|
let draft = session "Improve based on feedback"
|
|
let feedback = session "Get stakeholder review"
|
|
context: draft
|