Files
clawdbot/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose
2026-01-23 00:49:40 +00:00

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