The server-side SDK. Install it with pip install pulp-sdk, then reach the three engines as first-class namespaces on one client. Under the hood every call hits the HTTP API at https://api.pulp.dev/v1 over HTTPS with JSON bodies and a bearer key in the Authorization header. pk_test_ keys are sandboxed and free; pk_live_ keys meter against your plan.
Three engines, one question each. Radiance, Windfall, and Groundwater depend on nothing and compose freely. Building for the browser? Reach for loosethreads UI, the React SDK that turns these engines into living conversations.
Radiance
Hold any message up to the light. RootWords for meaning, RootCause for persuasion, StemReferences for traceback. Stateless by design.
The simulation engineWindfall
Rehearse on synthetic minds before you perform for real ones. TrueAura personas plus the NectarRewards, PoisonIvy, and GrapeVine probes. Stateful.
The infrastructure layerGroundwater
Everything below the surface, handled. WebSoil, DomainCrust, CodeMantle, and ServerCore: deployment, domains, custom logic, and compute in one API surface.
2026-07-01). We will never move your integration under you; you upgrade when you choose.Idempotency-Key header on any write and retries become safe. Simulations are expensive thoughts; you should never pay for the same one twice because a router blinked.type, code, message, and a doc link.simulation.completed, batch.finished, score.threshold_crossed, and friends. Payloads are signed; verification is one SDK call.pip install pulp-sdk, then from pulp import Pulp. The client reads PULP_API_KEY from the environment, so the key never lands in code. Every call on these pages is Python.loosethreads, all-lowercase. Its component names stay PascalCase (WarpDisplays, WeftConversations, DyeMedia, BightInteractions) because JSX requires capitalized component identifiers.Start with Radiance, the reason to be here.