governed execution for third-party tools

Prototype

Install a capability, not an integration.

Syntagma lets a product offer someone else's tools without rebuilding a project around each one. A publisher declares a tool in a versioned manifest — what it exposes, which widget renders it, which policy gates it, how it is paid for — and an organisation installs that version. The tool then appears as an embedded widget or as a plain API call, while identity, policy, payment and audit stay with the platform instead of being written again inside every integration. The platform is called Syntagma; its code, its published packages and its protocols keep the working name xapps. Four and a half months separate the first commit from the last: 1,618 commits, a gateway with 519 documented API paths, three operator consoles, its own protocols for composition, payment orchestration and monetisation, and fourteen packages published on npm. Then it stopped. Nothing is deployed and nobody is using it — Syntagma is built and parked.

I designed and built it: the manifest and policy-gate contracts, the gateway and its background workers, the three protocol layers, the Node and PHP SDKs, the three operator consoles, the documentation, and the identity. I also set the bar for done — the full suite run and accounted for on every change, each failure chased to a real cause or a known flake before the work counted as finished — and chose to park the platform rather than launch it.

stagebuilt and paused with open work; no public deployment
build1,618 commits, January to June 2026
tests2,841 of 2,843 on the last full run
published14 npm packages · Node and PHP SDKs

Project images

From catalogue to audit logOne request, end to end: a person picks a service from the organisation's catalogue, a widget sends a request, and the gate checks policy, consent and eligibility before the tool runs; only a least-disclosure result returns, with the request and the result both written to the audit log. The three services drawn here are illustrative examples, not deployments.
Four surfaces, one bridgeThe host page, the embedded publisher widget, the platform and the publisher's executor backend each carry their own published package, and all four meet at a single bridge into the gateway.
Syntagmaprototype · built and parked, never deployed
protocolscomposition · payments · monetisation
surfaces3 operator consoles · widget · API
gateway519 documented API paths · 106 migrations
distribution14 npm packages · Node and PHP SDKs
What is builtCounted from the repository on 12 September 2026, not from a plan.

What we are building

A capability, declared and installed

A publisher packages tools, widgets, policy gates and endpoints into one versioned manifest; a version is an immutable snapshot; an installation is that version enabled for one organisation. The manifest is the contract: what is not declared and validated when the package is imported does not happen at runtime. Ten lines of it are enough for a working tool.

Policy gates decide before anything runs

A gate is evaluated at seven blocking moments — before an installation is created, before a widget loads, before a session opens, before a conversation thread opens, before a tool runs, before a link is revoked, before an uninstall — in a declared order, failing closed. A blocked call returns one canonical answer that names what would unblock it, so a payment, a consent or a step-up can be completed and the call retried. The gates are themselves installable packages: the platform checks that a gate satisfies the required contract, not who wrote it.

Four ways in, chosen by ownership

An embedded catalogue, a hosted widget, API only, or execution on the publisher's own infrastructure. They coexist, and the choice follows who wants to own what rather than anyone's technology preference. The recommended first path is deliberately the smallest: the integrator keeps its own shell, branding and login and builds a launcher plus one bootstrap endpoint, while the gateway calls, the payment and policy routes and the credential handling stay on the platform side.

The record of the run

A request is checked against the tool's declared input schema, stored with its payload encrypted under a rotating key, dispatched to the executor over a signed call, and kept as an append-only timeline with artefacts and a retrievable result. For high-assurance actions the person signs the action itself, with a passkey or a device key, and the publisher is expected to verify that signature for itself rather than take the gateway's word for it.

How it works

The organisation is the authority boundary

Users, policy and what may enter the catalogue are scoped to one organisation. An organisation can always add constraints; a publisher can never remove the ones an organisation set. An organisation's own private API is never handed to a third-party vendor — a tool reaches it only through a scope-checked proxy, so the vendor never holds those keys. Identities are not merged across organisations by email address, and the server-to-server key is deliberately unusable from a browser.

What it refuses to do

The browser is never an authority: a payment page may trust a session identifier and nothing else, not an amount, not a currency, not a return address taken from a query string, and evidence is never signed in page code. Providers adapt transport, not meaning: an adapter has to normalise its outcome into the platform's own vocabulary, and an unrecognised provider error fails closed. A read-only widget will not quietly do work on someone's behalf; it shows an empty state and waits to be asked.

An honest ledger of what is real

The project keeps its own table of what works today, what is partial and what is only specified, and this brief follows it. The composition layer runs, but the orchestration kernel its specifications describe does not: manifests, not the kernel, are still the runtime authority. The governance overlay is a design, not an implementation. The Romanian e-invoicing path builds, validates and submits invoices through its own tax-authority client, with the full status and message lifecycle, but it has never been validated against a real production tax-authority account. Adapters exist for three payment providers and none of them has taken anyone's money. The system is verified by its own test suite, not yet by a live run end to end.