From 01088cdca5eb158e430c349289c651e9e5185907 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 1 Aug 2026 06:05:20 +0000 Subject: [PATCH 1/3] Add Agent Canvas skins marketplace listing skins/marketplace.json is consumed by the Agent Canvas Manager (OpenHands/app-acm) as its skins marketplace. Initial listings: Agent Canvas Manager, Datadog Monitor, Linear Admin. Co-authored-by: openhands --- skins/README.md | 26 ++++++++++++++++++++++++++ skins/marketplace.json | 27 +++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 skins/README.md create mode 100644 skins/marketplace.json diff --git a/skins/README.md b/skins/README.md new file mode 100644 index 00000000..54c4c06a --- /dev/null +++ b/skins/README.md @@ -0,0 +1,26 @@ +# Agent Canvas Skins Marketplace + +`marketplace.json` is the curated list of installable **Agent Canvas +skins**. A skin is a GitHub repo in the skin format (see the skins +support in [OpenHands/OpenHands](https://github.com/OpenHands/OpenHands)): + +``` +skin.yaml # name, screenshot, canvas_version, secret NAMES, mcp_servers, skills, llm, settings +package.json # "start" script; the app listens on $OPENHANDS_SKIN_PORT +automations/ # optional exported automations (definition + code) +``` + +The [Agent Canvas Manager](https://github.com/OpenHands/app-acm) renders +this list as its marketplace: pick a skin when creating an instance and +the new instance boots with that skin installed. Skin repos may be +**private** — consumers read them (and the screenshots) with a GitHub +token. + +## Listing requirements + +- `repo` — GitHub repository URL of the skin. +- `screenshot` — image of the skin populated with **sample data only** + (never end-user data), usually `docs/screenshot.svg` in the skin repo. +- `canvas_version` — the Agent Canvas version range the skin supports. +- No secret values anywhere; skins declare secret **names** in their + `skin.yaml` and installers supply values during guided setup. diff --git a/skins/marketplace.json b/skins/marketplace.json new file mode 100644 index 00000000..4e22f0ed --- /dev/null +++ b/skins/marketplace.json @@ -0,0 +1,27 @@ +{ + "name": "agent-canvas-skins", + "description": "Marketplace of Agent Canvas skins — git-backed packages that reconfigure an Agent Canvas instance and serve a purpose-built web app as its default tab. Consumed by the Agent Canvas Manager (OpenHands/app-acm). Skin repos may be private; readers authenticate with a GitHub token.", + "skins": [ + { + "name": "Agent Canvas Manager", + "repo": "https://github.com/OpenHands/app-acm", + "description": "Control plane for provisioning and governing a fleet of Agent Canvas instances in Kubernetes, plus this marketplace.", + "screenshot": "https://raw.githubusercontent.com/OpenHands/app-acm/main/docs/screenshot.svg", + "canvas_version": ">=1.8.0" + }, + { + "name": "Datadog Monitor", + "repo": "https://github.com/OpenHands/skin-datadog-monitor", + "description": "Datadog monitor dashboard with agent-assisted alert investigation. Needs DATADOG_TOKEN (+ optional DATADOG_APP_KEY).", + "screenshot": "https://raw.githubusercontent.com/OpenHands/skin-datadog-monitor/main/docs/screenshot.svg", + "canvas_version": ">=1.8.0" + }, + { + "name": "Linear Admin", + "repo": "https://github.com/OpenHands/skin-linear-admin", + "description": "Linear triage/admin dashboard with agent-assisted issue handling. Needs LINEAR_API_KEY.", + "screenshot": "https://raw.githubusercontent.com/OpenHands/skin-linear-admin/main/docs/screenshot.svg", + "canvas_version": ">=1.8.0" + } + ] +} From f6c0857bb4b3891feea5e8986f02aa62e1add1ad Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 1 Aug 2026 16:08:47 +0000 Subject: [PATCH 2/3] Document /skin serving convention in skins README Co-authored-by: openhands --- skins/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/skins/README.md b/skins/README.md index 54c4c06a..0e6e9234 100644 --- a/skins/README.md +++ b/skins/README.md @@ -10,6 +10,11 @@ package.json # "start" script; the app listens on $OPENHANDS_SKIN_PORT automations/ # optional exported automations (definition + code) ``` +The Canvas host reverse-proxies `/skin/*` to the app **verbatim** and also +serves the skin at `/` (the instance's front page). The app must serve its +UI at `/skin/` (index.html with `` + static assets) +and its own backend endpoints at `/skin/api/*` on `$OPENHANDS_SKIN_PORT`. + The [Agent Canvas Manager](https://github.com/OpenHands/app-acm) renders this list as its marketplace: pick a skin when creating an instance and the new instance boots with that skin installed. Skin repos may be From 667fd68897210c36e49f0a364980038774336346 Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 1 Aug 2026 22:57:19 +0000 Subject: [PATCH 3/3] Document skin.yaml theme block (whole-app theming) Co-authored-by: openhands --- skins/README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/skins/README.md b/skins/README.md index 0e6e9234..f81762c1 100644 --- a/skins/README.md +++ b/skins/README.md @@ -5,7 +5,7 @@ skins**. A skin is a GitHub repo in the skin format (see the skins support in [OpenHands/OpenHands](https://github.com/OpenHands/OpenHands)): ``` -skin.yaml # name, screenshot, canvas_version, secret NAMES, mcp_servers, skills, llm, settings +skin.yaml # name, screenshot, canvas_version, theme, secret NAMES, mcp_servers, skills, llm, settings package.json # "start" script; the app listens on $OPENHANDS_SKIN_PORT automations/ # optional exported automations (definition + code) ``` @@ -15,6 +15,15 @@ serves the skin at `/` (the instance's front page). The app must serve its UI at `/skin/` (index.html with `` + static assets) and its own backend endpoints at `/skin/api/*` on `$OPENHANDS_SKIN_PORT`. +**Theming:** a skin declares its major colors once in `skin.yaml` under +`theme:` (hex values; keys: `accent`, `background`, `surface`, `text`, +`muted`, `border`, `success`, `warning`, `danger`). While the skin is +installed the Canvas host derives its **entire UI palette** from these — +the whole app rethemes, not just the skin tab — and serves the derived +CSS variables back at `GET /skin-api/theme.css` for the skin app to link +(after its own styles, with standalone fallbacks). One palette in the +manifest, inherited on both sides. + The [Agent Canvas Manager](https://github.com/OpenHands/app-acm) renders this list as its marketplace: pick a skin when creating an instance and the new instance boots with that skin installed. Skin repos may be