Free and open source.
Apache-2.0. Your own Claude API key.
- Three starter workers: lead intake, inbox triage, team answers
- Approval queue, audit log and scorecard included
- Runs on your machine or server. Your data stays there
Rivet runs one business process at a time. Each worker reads the item, decides what it is and who owns it, and acts in the tools you already use. A policy you write decides what runs on its own and what waits for a person.
Open source, Apache-2.0. Your keys, your data. View on GitHub ↗
name: lead-intake
description: New inquiries are checked for fit and handed to the right owner.
autonomy: 2 # acts; risky actions wait for a person
owners:
- id: sales
name: Sales (Maya R.)
slack_channel: "#sales-leads"
- id: support
name: Client support (Dev K.)
slack_channel: "#support"
tools: [route, request_review, slack_post_message, crm_upsert_contact]
policy:
approval_required: [crm_upsert_contact]
review:
slack_channel: "#rivet-review" Apache-2.0. Your own Claude API key.
Audit, then a fixed-price build, then an optional care plan.
A form, an email, a chat message, or a webhook from n8n, Make or Zapier.
Claude reads it against your instructions and calls the tools it needs.
Each call is checked against the worker file before anything happens.
Routine actions run. Risky ones wait for approval. Unclear items go to review.
Every action lands in the audit log and feeds the monthly scorecard.
Every worker file sets an autonomy level. It moves up only when the scorecard shows the worker has earned it.
Every tool call passes a gate built from the worker file: allowed tools, autonomy level, approval rules and budgets.
A held action is stored with its exact input. Approving runs that input. Nothing is regenerated.
Unclear items, refusals, and runs that hit their budget go to review. They are never forced into the wrong lane.
Webhooks are picked by name, never by URL. HTTP calls only reach hosts you allowlist, and redirects are refused.
One line per run: input, each tool call and its outcome, the decision, tokens used, and which model served it.
Rivet calls Claude with your API key and your connectors with your credentials. Logs are plain files you own.
Each one is also a fixed-price service. See every worker we build.
Sorts new inquiries by fit, routes them with a summary, and saves the contact after approval.
See the service workers/inbox-triage.yamlSorts shared-inbox email by type and urgency and hands the label back to your n8n or Make flow.
See the service workers/team-answers.yamlAnswers repeat questions from your docs with the source named, and flags gaps instead of guessing.
See the serviceRequires Node 20+ and a Claude API key. Slack and HubSpot are optional and use your own tokens.
Read the docs$ git clone https://github.com/h-vance/rivet && cd rivet
$ npm install && npm run build
$ export ANTHROPIC_API_KEY=...
$ node dist/cli.js run workers/lead-intake.yaml --input examples/lead.json
$ node dist/cli.js approvals # anything waiting for a person
$ node dist/cli.js scorecard # handled, reviewed, overridden Yes. The code is Apache-2.0. You pay only for your own Claude API usage and any tools you connect. Rivet Workers is the paid option, where we build, connect and run it for you.
Those run fixed steps. Rivet handles the step that needs judgment, like reading an inquiry, deciding who owns it and writing the handoff, and it works alongside them. It can trigger your existing flows by name and be triggered by them.
Claude, through Anthropic's API, with your own key. Each worker sets its model and effort. The defaults are tuned for sorting and routing.
To run it yourself, someone comfortable with a terminal and a YAML file. If that is not your team, Rivet Workers covers setup, connections and monitoring.
We map your process, build the worker, connect your tools, and run it with a monthly scorecard.