Powerhouse
All integrations

ActivepiecesIntegrations, built as workflows.

An integration stops being code somebody has to deploy and becomes a graph you can open, read and change.

Workflow layerRunnable demo

The boundary

A workflow step that writes to a document declares the operations it is allowed to dispatch. The step that applies an extracted commitment permits one action type, so a model that returns something else cannot have it applied. The allow-list is the boundary, and it sits next to the step rather than in a policy document.

Creating a document and dispatching into it are separate blocks for this reason. Only the dispatch enforces an allow-list, so building a record empty and dispatching into it is what turns a request into a rule.

Piece code runs under an egress policy that denies private address space, because a piece's configuration is otherwise a request-forgery surface. Credentials stay on the reactor behind a secret reference, so a browser never holds them.

Every run is recorded with its steps, its outcome and its duration. A run that reaches a guard and decides to write nothing is a successful run, not a failure.

A workflow changes a document by dispatching operations into its log. What a run did is readable in the document's history: the operation, the time, and the workflow that dispatched it.

What is Activepieces?

Activepieces is an open-source automation platform with a catalogue of several hundred pieces, each one a connector to a service with its own triggers and actions. Powerhouse runs that catalogue inside the reactor, alongside pieces of its own that read and write documents.

Data in
Whatever a piece's trigger carries
Structure
Operations on your own document models
Access
Each write step names the actions it may dispatch
Direction
Set per workflow. What bounds it is the action list on each step, not the direction of travel.

How material gets in

  • A piece's own trigger, such as a new document in an archive or a change on a factory floor.
  • A document trigger, which sees every operation as it lands and reacts to the ones you name.

How it runs

  1. 01TriggerA piece polls a service, or a document trigger fires on an operation the reactor has just recorded.
  2. 02Branch and assertGuards that stop a run early, or refuse to continue when a precondition does not hold.
  3. 03ReadFind a document by its state, get a file from a source system, or hand a model the document model's own schema so a prompt cannot drift from it.
  4. 04DecideAsk a language model, or resolve its answer against a real list with a query, so what gets written came from the system rather than the model.
  5. 05WriteDispatch operations onto a document, against the allow-list that step declares.

Where the result shows up

One record, reachable from several places. The archive keeps the original document, and the structured state is available wherever the work happens.

Workflow Studio
Build and edit workflows as graphs, hold connections and their secrets, and read every run.
Switchboard
Runs the workflow runtime, holds the connections, and serves the run history over GraphQL.
Connect
Where the documents a workflow writes are reviewed and approved by a person.
A workflow in Workflow Studio: twelve steps from a new-document trigger through branches, a schema read, a model call and document dispatches, with its two succeeded runs listed below.
An integration as a graph. Every step names what it does, and every run it has made is kept beside it.
Workflow Studio in Connect: a list of workflows and connections on the left, and every run in the drive on the right.
Workflow Studio: the workflows in a drive, the connections they use, and every run they have made.
The seven-step workflow that creates a floor order on approval, including two error paths that record why an order was not created.
Both failure paths are part of the graph: a run that cannot create the order writes the reason onto the document.

Run it yourself

What you need

  • The workflow runtime enabled on the reactor, and Workflow Studio enabled in Connect. Both are configuration, not a separate deployment.
  • A pinned version for any piece the reactor does not already hold. Without one the name resolves only against local pieces, and an unresolved trigger fails silently.

Packages installed

@powerhousedao/piece-reactor
Document find, create, dispatch and schema. The blocks that touch a document model.
@powerhousedao/piece-umh
A piece written for one integration, held locally by the reactor that runs it.
@activepieces/piece-open-router
One of the catalogue's pieces, fetched from the registry at a pinned version.

Limits worth knowing

  • Twenty-one of the catalogue's pieces declare a runtime dependency and cannot be loaded, because the reactor imports a piece bundle and installs nothing. The rest are self-contained and load normally.
  • A workflow cannot call a function in your package. Work that needs a computation over document state stays in the reducer or behind a mutation, not in a graph.
  • A trigger whose first enable failed backs off, and restarting does not clear the backoff. Toggling the workflow off and on re-enables it.
  • Nothing re-fires automatically when a step fails against an external system. The trigger has already happened, so a retry is a deliberate act.

Start with a workflow assessment.

Find out where Powerhouse can improve operational efficiency. We structure the first workflow before a build starts.

All integrations