playwright
The spec the repository is named after, and 1 of 16. A stateless browser data plane: every call launches a fresh Playwright subprocess and Chromium, runs the declared steps, and tears both down in try/finally before returning.
create_node does not cover playwright. EC2__Platform._service_for raises NotImplementedError for everything but docker, podman and vnc. This spec creates nodes through its own CLI and service path, not the control-plane API. The generated CLI verbs below are real; the uniform API is not, for this spec.
The CLI, which nobody wrote
Per-spec CLIs are generated, not written. Spec__CLI__Builder registers the same verb set for every registered spec, so playwright gets its command surface from the same code that gives every other spec theirs:
# the uniform verb set, for every registered spec list · info · create · wait · health · connect · exec · delete · ami list|bake · cert # so, for this one sg playwright create --max-hours 1 sg playwright wait sg playwright health sg playwright delete
This is the strongest single argument that the thing is a platform rather than a service: adding a spec costs a manifest, a route class and a service — the CLI comes free. The three mechanisms →
What a node of this spec does
Every spec rides the same node lifecycle: a per-node API key minted and written to SSM before launch, composed user-data sections, EC2 tags as the registry, a two-phase health poll, then teardown. Teardown means terminate, not stop — systemd-run --on-active paired with InstanceInitiatedShutdownBehavior=terminate, on a default one-hour timer.