outcomeci/connectors
The providers an OutcomeCI workflow can connect to, kept in their own repository so they can be reviewed, versioned and released independently of the runtime.
A provider is data plus pure functions. It never makes a request or holds a
secret: the OutcomeCI runtime executes every call through its credential
broker, which journals it. An outcomeci.workflow/v1 workflow names a provider
with uses:, and the cli finds installed providers through the
outcomeci.connectors entry point group.
Layout
outcomeci_connectors/
provider.py # Provider, Operation, Grantable, Deny, Download, Watcher, Receiver
auth.py # the credential kinds a provider accepts
providers/
slack/
__init__.py # PROVIDER: post, thread, file, reactions; reaction and reply watchers
messages.py # the files and subtypes a message carries
receiver.py # signed Events API requests to a workflow trigger
setup.py # app manifest, Slack CLI setup and status
github.py # PROVIDER: read and write, scoped by repo
Each provider package owns everything about its provider:
- Operations: what
uses: <provider>resolves to, with input shapes, request templates and response mapping. - Auth: the credential kinds the API accepts, in order of preference, with
the fixed parameters the provider knows, such as a token endpoint or the
header a key goes in. A workflow names only a credential
(
auth: secrets.github), and the runtime takes the method from that credential. Slack accepts a bot token, or a refresh token for an app with token rotation; GitHub accepts a personal access token, or a GitHub App installation. - Grant vocabulary: which arguments a grant may scope, such as a Slack
channelorthread_ts, or a GitHubrepo, and the requests an operation refuses whatever the grant. A grant pins an input field, bounds a request path, or, for a resource whose request cannot name its scope, requires the granted value in the response: a Slack file is readable only where it is shared. - Downloads: the file a response points to, fetched with the same credential from the hosts the provider names and saved for the agent to open, such as a screenshot attached to a Slack message.
- Watchers: the match logic behind
awaitandconverse, such as an emoji reaction or a human reply in a thread. The runtime owns the loop, timeouts and durability. - Receiver: how the provider's own inbound request becomes a workflow trigger: verifying it, answering a URL handshake, ignoring what should not start a run, and the event id a redelivery is deduplicated on. For Slack, signed @mentions and direct messages, top-level only.
- Setup: for Slack, generating an app manifest with only the scopes the
operations use and an event subscription to the workflow's webhook URL,
then driving the Slack CLI to create and install the app (the
oci integration slack setup,manifestandstatuscommands).
The runtime reads a provider through Provider.contract(), the versioned
outcomeci.connector/v1 document, and locks its digest into each workflow
revision. The contract's auth field is {"accepts": [...]}, one entry per
accepted kind:
{"kind": "token", "description": "...", "credential": ["value"],
"header": "Authorization", "scheme": "Bearer"}
Adding a connector
CONTRIBUTING.md is the authoring guide, for people and coding agents: file layout, operations, grantables, deny rules, watchers, receivers, auth declarations with an example of each kind, testing and the review bar.
Development
pip install -e '.[test]'
pytest
ruff check .
Releases
Every merge to main releases automatically. .github/workflows/publish.yml
reads the conventional commits since the last vX.Y.Z tag: fix: releases a
patch, feat: a minor version, and while the version is 0.x a breaking change
(feat!:) is a minor version too. Commits such as docs: or ci: release
nothing. The workflow tests, builds with python -m build (hatch-vcs reads the
version from the tag), publishes to PyPI through trusted publishing with no
stored token, pushes the tag and creates a GitHub release with generated
notes. Pushing a vX.Y.Z tag by hand releases that exact version the same way.
Metadata
Release files for outcomeci-connectors 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| outcomeci_connectors-0.2.0.tar.gz | 30.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| outcomeci_connectors-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.7 kB
Release files / outcomeci_connectors-0.2.0.tar.gz
| Download URL | outcomeci_connectors-0.2.0.tar.gz |
|---|---|
| Size | 30.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f8e287e8a88babce2bc26cdb310e59eaf58d3e5fcf7886c968f617ab075b3fc
|
|
BLAKE2b-256 checksum How to use checksums |
2590ae13a541d1adb4c27d76b40f82d968f7728e949e7c03b22213c625d04a71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency logRelease files / outcomeci_connectors-0.2.0-py3-none-any.whl
| Download URL | outcomeci_connectors-0.2.0-py3-none-any.whl |
|---|---|
| Size | 21.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
303cf88b6ec94462234e9acdb95b7db8e256c3aacab0103d4a4b95e7350d4486
|
|
BLAKE2b-256 checksum How to use checksums |
bfcd3fabf61790ab42e81bb56669a21fe495027f4feed9efc785140cead9c464
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency log