openpencil/nix/integration
Can H. Tartanoglu bb27a7458f
feat(integration): expose declarative harness surface (#185)
* chore(nix): add reproducible OpenPencil flake

* fix(nix): patch and smoke-test prebuilt binaries

* chore(ci): keep workflow validation in integration follow-up

* feat(integration): expose declarative harness surface

* ci: run Nix checks for integration surface

* test: verify all OpenPencil runtime tools

* feat(integration): expose web server package

* chore(nix): remove rebase conflict marker

* fix(nix): update OpenPencil CLI prebuilt hash

* fix(nix): validate source outputs and pin release assets

* fix(nix): refresh desktop release hash

* fix(nix): refresh Bun dependency hash

* fix(nix): normalize Bun hoisted aliases

* ci: make headless desktop smoke test deterministic
2026-07-25 23:44:01 +08:00
..
openpencil.nix feat(integration): expose declarative harness surface (#185) 2026-07-25 23:44:01 +08:00
OpenPencil.pkl feat(integration): expose declarative harness surface (#185) 2026-07-25 23:44:01 +08:00
README.md feat(integration): expose declarative harness surface (#185) 2026-07-25 23:44:01 +08:00
Skillnet.pkl feat(integration): expose declarative harness surface (#185) 2026-07-25 23:44:01 +08:00

OpenPencil Nix integration surface

The OpenPencil flake exports a versioned Pkl contract at nix/integration/OpenPencil.pkl and the generated Nix sidecar at nix/integration/openpencil.nix (lib.integrationManifest). Downstream flakes should consume the sidecar rather than duplicating executable names, MCP transport arguments, or harness config paths.

For each supported system the contract names these package outputs:

  • runtime: source-built desktop and CLI runtime;
  • runtime-prebuilt: the matching release binaries, wrapped so op can find the desktop executable (exports both openpencil-desktop and op);
  • web-server: the source-built op-host-web-server plus its web bundle;
  • skills: an immutable Skillnet bundle containing Skillnet.pkl and the OpenPencil design skill.

The default MCP adapter is per-session stdio (--mcp <document>). The HTTP adapter is loopback-only and is intended for an explicitly enabled live-canvas service (--live-mcp <port>). Consumers should merge the generated adapter entry into their harness config atomically and preserve unrelated keys.