Repository navigation
Examples
A cookbook of complete, copy-pasteable config.yaml snippets — one per scenario.
Each is minimal but valid on its own; combine sections under one top-level
integrations:/agents: as needed. See Configuration for the full field
reference and Workflows for the steps:/if:/background: mechanics used
below.
The core autopilot loop — a PR gets CI failures fixed, conflicts resolved, and review feedback addressed, all pushed as you.
integrations:
- type: github
name: github
enabled: true
app:
app_id: 123456
private_key_path: ~/.config/conductor/github-app.pem
webhook_secret: ${GH_WEBHOOK_SECRET}
verify_signature: false
webhook:
smee_url: ${GH_SMEE_URL}
defaults:
me: { logins: [octocat] }
actions:
merge_conflict:
type: agent
agent: fixer
prompt: "This PR conflicts with base {{.base}}. Merge/rebase, resolve, build, commit, push."
failing_checks:
type: agent
agent: fixer
flaky_rerun: { enabled: true, max: 1 }
prompt: "Checks are failing on {{.repo}}#{{.pr}}. Diagnose with `gh run view --log-failed`, fix, verify, commit, push."
changes_requested:
type: agent
agent: fixer
rerequest_review: true
prompt: "A reviewer requested changes on {{.repo}}#{{.pr}}. Address each point, commit, push, reply to threads."
new_comment:
type: agent
agent: fixer
ignore_users: ["github-actions[bot]"]
prompt: "New comment on {{.repo}}#{{.pr}} by {{.author}}: {{.comment_body}}. Act if actionable, commit, push, reply."
rules:
- match: { repos: ["octocat/*"] }
agents:
fixer: { provider: claude, workspace: worktree, archive_when_done: true }Route a background: true review step to your phone instead of paseo's own UI —
useful when you want to approve/revise/discard from Slack.
handoffs:
phone:
slack:
to: dm
user: ${SLACK_USER_ID} # a Slack user id (Copy member ID), not a GitHub handle
bot_token: ${SLACK_BOT_TOKEN}
default: true
integrations:
- type: github
name: github
app: { app_id: 123456, private_key_path: ~/.config/conductor/github-app.pem, webhook_secret: ${GH_WEBHOOK_SECRET} }
webhook: { smee_url: ${GH_SMEE_URL} }
defaults:
me: { logins: [octocat] }
actions:
changes_requested:
steps:
- id: draft
type: agent
agent: fixer
checkout: branch-off
prompt: "Address the review feedback on {{.repo}}#{{.pr}} and prepare the fix."
- id: review
background: true
handoff: phone
type: agent
agent: fixer
prompt: "Present the fix for {{.repo}}#{{.pr}} for approval before pushing."
rules:
- match: { repos: ["octocat/*"] }
agents:
fixer: { provider: claude, workspace: worktree }Capturing the DM reply also requires a running slack control-plane integration
(Socket Mode) — see the Slack control plane example below and Integration-Slack.
A time-based trigger with no external event — here, a nightly cache clean and a periodic rate-limit check.
integrations:
- type: cron
name: chores
schedules:
- name: rate-limit-check
every: 6h
action: { type: command, backend: local, command: ["gh", "api", "rate_limit"] }
- name: nightly-clean
cron: "0 4 * * *" # 4am daily
run_on_start: false
action:
type: command
backend: local
workdir: ~/Projects/myrepo
command: ["make", "clean"]Any service that can POST JSON becomes a trigger with no bespoke integration code — here, a CloudWatch alarm dispatches an investigating agent.
integrations:
- type: webhook
name: inbound
listen: ":8099"
sources:
- name: cloudwatch
path: /hooks/cloudwatch
sign: { header: X-Amz-Signature, secret: ${CW_SECRET}, scheme: hex }
match: '{{if eq .body.detail.state "ALARM"}}true{{end}}'
title: "{{.body.detail.alarmName}} → {{.body.detail.state}}"
dedup: "{{.body.detail.alarmName}}-{{.body.time}}"
repo: octocat/infra
actions:
type: agent
agent: fixer
prompt: "CloudWatch alarm {{.body.detail.alarmName}} fired — investigate {{.repo}}."
agents:
fixer: { provider: claude, workspace: worktree }A production error becomes an agent that root-causes it against the affected repo.
integrations:
- type: sentry
name: prod
listen: ":8098"
client_secret: ${SENTRY_CLIENT_SECRET}
rules:
- match: { projects: [myapp], levels: [error, fatal], environments: [production] }
repo: octocat/myapp
actions:
type: agent
agent: fixer
checkout: branch-off
prompt: "Sentry {{.sentry.short_id}}: {{.sentry.title}} ({{.sentry.culprit}}). Root-cause in {{.repo}} — see {{.url}}. Open a draft PR or a findings issue."
agents:
fixer: { provider: claude, workspace: worktree }Poll an upstream changelog and have a cheap model assess whether it affects your repo, filing a heads-up issue when it does.
integrations:
- type: rss
name: upstream
feeds:
- name: canvas-changelog
url: https://example.instructure.com/doc/api/file.changelog.html
interval: 1h
match: "deprecat|breaking|remov"
repo: octocat/myapp
actions:
type: agent
agent: planner
checkout: none
prompt: "Upstream changelog: {{.item.title}} ({{.url}}). Does this affect {{.repo}}? File a heads-up issue if so."
agents:
planner: { provider: claude, model: claude-haiku-4-5, workspace: local }An incident page starts triage against the affected repo instead of waiting for a human to open a terminal.
integrations:
- type: pagerduty
name: oncall
listen: ":8097"
signing_secret: ${PAGERDUTY_SIGNING_SECRET}
rules:
- match: { event_types: [incident.triggered, incident.escalated], urgencies: [high], services: [myapp-api] }
repo: octocat/myapp
actions:
type: agent
agent: fixer
checkout: branch-off
prompt: "PagerDuty {{.pagerduty.title}} ({{.pagerduty.priority}}/{{.pagerduty.urgency}}) on {{.pagerduty.service}} — {{.url}}. Start triage in {{.repo}}: find the likely cause, propose a mitigation."
agents:
fixer: { provider: claude, workspace: worktree }An @-mention dispatches an agent and reacts to acknowledge/complete/fail — a conversational front end with no public URL (Socket Mode).
integrations:
- type: slack
name: ops
app_token: ${SLACK_APP_TOKEN}
bot_token: ${SLACK_BOT_TOKEN}
triggers:
- on: app_mention
ack: { react: eyes }
on_done: { react: white_check_mark }
on_fail: { react: x, say: "couldn't finish: check the logs" }
actions:
type: agent
agent: fixer
checkout: none
prompt: "Slack request from <@{{.slack.user}}>: {{.slack.text}}. Do it and report back."
agents:
fixer: { provider: claude, workspace: worktree }Assess an issue with a cheap model, implement it with a stronger one only if there's enough context, then hand the result to you for review before it's finalized.
integrations:
- type: github
name: github
app: { app_id: 123456, private_key_path: ~/.config/conductor/github-app.pem, webhook_secret: ${GH_WEBHOOK_SECRET} }
webhook: { smee_url: ${GH_SMEE_URL} }
defaults:
me: { logins: [octocat] }
actions:
issue_matched:
labels_any: ["Ready"]
steps:
- id: evaluate
type: agent
agent: planner
checkout: none
output_schema:
type: object
properties: { has_context: { type: boolean }, summary: { type: string } }
prompt: "Is there enough detail to implement {{.repo}}#{{.issue}}? Return has_context + summary."
- id: work
if: "steps.evaluate.outputs.has_context == true"
type: agent
agent: fixer
checkout: branch-off
prompt: "Implement {{.repo}}#{{.issue}} — {{.steps.evaluate.outputs.summary}}. Open a draft PR."
- id: review
if: "steps.evaluate.outputs.has_context == true"
background: true
type: agent
agent: fixer
prompt: "Present the draft PR for {{.repo}}#{{.issue}} for approval."
- id: ask
if: "steps.evaluate.outputs.has_context == false"
type: command
command: ["gh","issue","comment","{{.repo}}#{{.issue}}","--body","Please add repro steps and scope."]
env: { GH_TOKEN: "{{.gh_token}}" }
rules:
- match: { repos: ["octocat/*"] }
agents:
planner: { provider: claude, model: claude-haiku-4-5, workspace: local }
fixer: { provider: claude, workspace: worktree }With no handoffs: block configured, the review step's approve/revise/discard
loop runs in paseo itself; add a handoffs: entry (web link, Slack, or Discord —
see Hand-offs) to route it elsewhere.
Run most agents on the built-in paseo runtime, but route one profile to a gemini CLI over ACP and another through opencode's own HTTP API — each agent picks its controller explicitly.
controllers:
gemini-review: # agent: + no transport → ACP over stdio
agent: gemini
opencode:
type: opencode # opencode's native HTTP API (opencode serve)
agents:
reviewer:
controller: gemini-review # runs gemini over ACP — no provider needed
planner:
controller: opencode # runs via opencode, which routes to this provider/model
provider: anthropic
model: claude-sonnet-4-5
fixer:
provider: claude # no controller: → the built-in paseo runtime runs claude
workspace: worktree
integrations:
- type: github
name: github
app: { app_id: 123456, private_key_path: ~/.config/conductor/github-app.pem, webhook_secret: ${GH_WEBHOOK_SECRET} }
webhook: { smee_url: ${GH_SMEE_URL} }
defaults:
me: { logins: [octocat] }
actions:
review_requested:
type: agent
agent: reviewer
checkout: none
prompt: "Review {{.repo}}#{{.pr}} and post your findings."
failing_checks:
type: agent
agent: fixer
prompt: "Checks failing on {{.repo}}#{{.pr}} — diagnose, fix, push."
rules:
- match: { repos: ["octocat/*"] }See Controllers for the full resolution order and runtime matrix.
Setup
The model
- Connectors
- Workflows
- Reuse
- Settings-and-Templating
- Packs
- Verbs
- Code-Steps
- Stores
- Runtimes
- Model-Selection
- Model-Discovery
- Steps
- Decide-Steps
- Grouping
- Memory
- Binary-Data
- Agent-Skill
- Policy
- Gates
- Teams
- Outcomes
- Cost-Accounting
- Secrets
- Hosts
- Isolation
- Trust-and-Isolation
Connectors
Operations
- One-Shot
- Callable-Service
- Runs
- Hand-offs
- Notifications
- Migration
- Controllers (legacy name → Runtimes)