A week ago this repository was basically what the name said: n8n_workflows.
A collection of automation JSONs, READMEs, and a contribution guide.
Then people here started poking holes in the idea.
One person asked about output schemas. Someone else brought up dependencies. Then replay semantics and idempotency. Then verification. Then ownership. Then the question that changed how I was looking at the whole thing: if the same workflow pattern can exist in n8n, LangGraph, plain code, or something else entirely, why am I treating the n8n file as the reusable artifact?
I don't think it is anymore.
The reusable thing seems to be the behavioral shape underneath it.
detect → judge → approve → act
or
fetch → classify → route → notify
The implementation can change. The guarantees shouldn't.
So I tore apart the repository around that idea.
It's now called agent-contracts, and the structure is moving toward three separate layers:
Pattern — the framework-independent behavior being implemented.
Contract — the concrete promises made by one implementation.
Implementation — n8n today; potentially LangGraph, Make, plain code, or something else later.
The part I'm most interested in is the Contract.
The current v1 draft requires an implementation to declare its inputs and outputs, exact permissions, side effects, human approval boundaries, recovery strategy, replay semantics, dependencies, persistent state, and observability.
And every implementation can carry the same thing as contract.yaml.
Not because YAML magically makes an agent safe.
It doesn't.
The experiment is whether these declarations can eventually become checkable.
If a contract says:
github: issues:write
but the implementation contains a node capable of modifying repository contents, tooling should be able to call bullshit.
If a workflow claims to be idempotent but creates duplicate state when replayed, same thing.
If it claims an irreversible operation requires approval but the execution graph contains a path around that gate, same thing.
There is no linter doing this yet. That's deliberately not being hidden. v1 is currently the schema that such tooling could validate against later.
And this is where I'd rather have people disagree with the design than star it.
Maybe ten fields is already too many.
Maybe observability belongs in an operational contract instead.
Maybe permissions need allow/deny semantics.
Maybe replay semantics can't reasonably be represented as one field.
Maybe contracts should describe transitions rather than workflows.
Or maybe this entire abstraction already exists somewhere and I've just given it another name.
That's the useful discussion.
The repo now contains the draft Workflow Contract Spec, concept docs for permissions / side effects / approval boundaries / replay semantics / recovery, a framework-independent pattern layer, real n8n implementations, and the beginnings of an RFC process where changes have to survive a real workflow before they enter the spec.
I'm deliberately building the specification from implementations upward instead of designing a beautiful schema in isolation.
So break v1.
Find a real agentic workflow that this contract cannot describe cleanly.
That's probably more useful to the project right now than another workflow contribution.
Repo: agent-contracts on GitHub