# Temporal and Inngest (Python)

CommitLayer for durable-workflow runtimes. One distribution, two optional packages, built on the
[`commitlayer` SDK](/docs/sdk/python):

| Package | Runtime | Install |
|---|---|---|
| [`commitlayer_temporal`](/docs/integrations/python/temporal) | Temporal (`temporalio`) | `pip install 'commitlayer-integrations[temporal]'` |
| [`commitlayer_inngest`](/docs/integrations/python/inngest) | Inngest (`inngest`) | `pip install 'commitlayer-integrations[inngest]'` |

Each one does the same two things in its runtime's own terms:

1. **Record the agent's intent before the work runs** (an activity, a step) as an action under a contract:
   `POST /v1/actions` with the contract, subject and parameters taken from the call's own arguments. The
   result of the work is never sent.
2. **Gate completion on the verdict**: wait for `GET /v1/actions/{ref}` to report a *settled* verification and
   branch on PASS / FAIL / UNKNOWN. The workflow does not tell the customer "done" until the verdict is PASS.

The workflow engine makes the process durable. CommitLayer independently verifies the result, from the
systems of record, after the fact. The agent may declare its intent. It may read the verdict. It must never
control the independent facts, the governing contract, or the final evidence.

Python 3.10+. Both packages import without their runtime SDK installed (the SDK is imported lazily), so a
service that uses only one of them does not need the other.

```bash
pip install ./sdk/python ./integrations/python[temporal,inngest]   # from this repository
export COMMITLAYER_API_KEY=spk_...                                   # never log or print it
.venv/bin/python -m pytest integrations/python/tests -q              # no Temporal server, no Inngest dev server
```
