$.secrets.slack
Published workflows
Loading workflows…
Published workflows
Loading workflows…
Public workflow
A reusable OutcomeCI workflow.
Version 1 · Published
When someone opens a GitHub issue requesting a new connector, this workflow turns it into a pull request without requiring manual coordination. It evaluates the request, drafts a technical plan, steers a discussion in Slack to validate and refine it, and then builds and opens the connector code if approved.
Connect your GitHub account with access to push to the connectors repository and comment on issues.
Connect your Slack workspace where the team discusses connector proposals.
Identify the GitHub repository owner, the repository name "connectors", and the Slack channel where discussions happen.
Recognize that the workflow watches for new issues in that repository and treats issue text as data, not instructions.
The workflow posts a plan summary to Slack and facilitates a threaded discussion until the team approves or rejects it. If approved, it creates a new branch, commits the connector implementation, opens a pull request, and comments on the original issue with the decision and Slack discussion link. If rejected or if no decision is reached within three days, it records that outcome without creating code.
apiVersion: outcomeci.workflow/v1
name: connector-request-to-pr
trigger: webhook
secrets:
slack: vault:publication/setup_value_1
github: vault:publication/setup_value_2
apis:
slack:
uses: slack
auth: secrets.slack
github:
uses: github
auth: secrets.github
reasoning:
default:
runner: codex
model: gpt-5.5
fallback:
- runner: claude
model: claude-opus-5-5
steps:
- intake:
reason: intake.md
from: trigger
returns:
status: enum[new_connector, ignore]
reason: string
issue:
repo:
owner: null
name: null
number: int
title: null
url: null
author: null
body: null
- draft:
when: intake.status == "new_connector"
reason: draft-plan.md
from: intake.issue
can:
- github.read:
repo:
owner: setup_value_3
name: connectors
- slack.post:
channel: setup_value_4
returns:
plan:
connector: string
summary: string
auth: string
operations:
- string
files:
- string
steps:
- string
open_questions:
- string
- discuss:
when: intake.status == "new_connector"
with: draft.plan
converse: slack.thread(draft.calls.slack.post)
until: converged
max_turns: 20
timeout: 3d
reason: discuss.md
returns:
- plan
- status
- decision
- comment_decision:
when: intake.status == "new_connector"
reason: comment-decision.md
with:
- intake.issue
- discuss
- draft.calls.slack.post
can:
- github.write:
repo:
owner: setup_value_3
name: connectors
policy: 'Exactly one POST to /repos/{owner}/{repo}/issues/{number}/comments on
the triggering issue. No other writes: no branches, commits, labels, issue edits
or pull requests.
'
returns:
comment_url: string
- build:
when: discuss.decision == "approved"
reason: build-connector.md
using:
runner: claude
model: claude-opus-5-5
with:
- intake.issue
- discuss.plan
can:
- github.write:
repo:
owner: setup_value_3
name: connectors
policy: 'One new branch, one commit, one pull request on setup_value_3/connectors,
touching only files the approved plan names, plus one comment on the triggering
issue linking the pull request. No force-push, no merging, no pushing to the
default branch.
'
returns:
pr:
url?: string
number?: int
branch?: string
skipped_reason?: string
- announce:
when: discuss.decision == "approved"
with:
- build
- intake.issue
reason: 'Post one short message in the plan''s Slack thread: the pull request
link from build.pr with a one-line summary, or, if build.skipped_reason is set,
that reason. Mention the issue number.
'
can:
- slack.post:
channel: draft.calls.slack.post.channel
thread_ts: draft.calls.slack.post.ts
$.secrets.slack
$.secrets.github
$.steps[1].draft.can[0]["github.read"].repo.owner
$.steps[1].draft.can[1]["slack.post"].channel
$.steps[3].comment_decision.can[0]["github.write"].repo.owner
$.steps[4].build.can[0]["github.write"].repo.owner
$.steps[4].build.policy
$.files[".outcomeci/instructions/intake.md"]
$.files[".outcomeci/instructions/draft-plan.md"]
$.files[".outcomeci/instructions/build-connector.md"]
$.files[".outcomeci/instructions/comment-decision.md"]