Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ codex plugin marketplace add pascalorg/editor
codex plugin add pascal-agent-skills@pascal
```

OpenClaw installation becomes available after the skills are published under Pascal's ClawHub publisher. See [skills/README.md](skills/README.md) for the owner-qualified install and verification commands.

[`pascal-3d`](skills/pascal-3d/SKILL.md) covers safe local or hosted MCP setup and verified scene work. [`furniture-fit`](skills/furniture-fit/SKILL.md) produces a bounded, evidence-based footprint assessment without claiming unsupported height, swing, or delivery checks. See [skills/README.md](skills/README.md) for package details and validation.

The skills inspect the connected MCP tool schemas before using optional fields. A capability present in this repository may be absent from an older installed or hosted release; the agent should report the narrower supported result instead of assuming source-only inputs are available.
Expand Down
15 changes: 15 additions & 0 deletions scripts/validate-skills.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,20 @@ for (const skillName of skillNames) {
if (!/^ {2}native-host-validation: "[a-z0-9-]+"$/m.test(content)) {
fail(`${skillName}: native host validation state must be explicit`)
}
if (/^license:/m.test(content)) {
fail(`${skillName}: per-skill license metadata conflicts with ClawHub's MIT-0 release contract`)
}
for (const requiredOpenClawMetadata of [
' openclaw:',
' homepage: https://editor.pascal.app/docs/developers/mcp',
' primaryEnv: PASCAL_API_KEY',
' - name: PASCAL_API_KEY',
' required: false',
]) {
if (!content.includes(requiredOpenClawMetadata)) {
fail(`${skillName}: missing OpenClaw metadata: ${requiredOpenClawMetadata.trim()}`)
}
}
if (content.includes('last-verified:'))
fail(`${skillName}: last-verified overstates the current validation state`)
if (content.split('\n').length > 500) fail(`${skillName}: SKILL.md exceeds 500 lines`)
Expand Down Expand Up @@ -615,6 +629,7 @@ for (const expected of [
'/plugin marketplace add pascalorg/editor',
'codex plugin marketplace add pascalorg/editor',
'codex plugin add pascal-agent-skills@pascal',
'OpenClaw installation becomes available after the skills are published',
]) {
if (!readme.includes(expected)) fail(`README is missing install instruction: ${expected}`)
}
Expand Down
13 changes: 13 additions & 0 deletions skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,19 @@ npx skills add https://github.com/pascalorg/editor/tree/main/skills/furniture-fi

Use `-g` for a user-wide installation or `-a claude-code -a codex` to choose hosts explicitly.

## Install with OpenClaw

After publication under Pascal's ClawHub publisher, use the owner-qualified registry references and verify their trust envelopes:

```bash
openclaw skills install @pascalorg/pascal-3d
openclaw skills install @pascalorg/furniture-fit
openclaw skills verify @pascalorg/pascal-3d
openclaw skills verify @pascalorg/furniture-fit
```

The references above remain unavailable until an authorized Pascal publisher accepts ClawHub's MIT-0 publication terms and creates the releases. OpenClaw's `skills-sh:` resolver also requires the skill to be indexed by ClawHub, so the existing skills.sh listing is not a pre-publication workaround. Installing either skill provides instructions only; follow its setup reference to connect Pascal MCP.

## Install as a Claude Code or Codex plugin

This repository is also a shared plugin marketplace containing one plugin backed by the same `skills/` folders. For Claude Code:
Expand Down
6 changes: 5 additions & 1 deletion skills/VALIDATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

Candidate package source: **0.1.5**. Latest released package source: **0.1.4**. `pascal-3d` skill metadata version: **0.1.0**. `furniture-fit` skill metadata version: **0.1.3**. Recorded September 9, 2026.

## Bundle 0.1.5 OpenAI submission readiness candidate
## Bundle 0.1.5 OpenAI and ClawHub submission readiness candidate

This candidate adds the portable root Agent Plugins manifest while retaining the Codex compatibility manifest and Claude marketplace package. Its OpenAI listing metadata fits the final public-directory limits: display and short-description copy are at most 30 characters, starter prompts are at most 128 characters, and the package supplies a square bundled logo asset plus public website, support, privacy, and terms URLs. The repository validator keeps the portable and compatibility OpenAI interfaces identical and rejects screenshots for this skills-only package. Shared publishing fixtures moved out of `skills/`, leaving only valid immediate skill directories for OpenAI archive ingestion.

These source checks do not submit or publish the plugin. OpenAI Platform access, a verified matching developer or business identity, portal review, country selection, policy attestations, and the developer's separate publish action remain external requirements. The publishing suite provides more than the required five positive and three negative reviewer cases, including reproducible positive fixtures, expected result shapes, and explicit negative-case reasons; the release-note draft is stored beside it. The submitter must enter those materials in the portal and resolve any automated skill-scan findings.

For ClawHub, both canonical skill folders pass `clawhub` 0.23.3 `skill publish --dry-run --json` with their intended owner, slug, version, categories, topics, and public source metadata. OpenClaw 2026.9.3 installs both folders into an isolated workspace, parses the optional `PASCAL_API_KEY` and homepage metadata, and reports both skills eligible without a hosted credential. The documented local and hosted `openclaw mcp add` command shapes were saved successfully in isolated state without contacting Pascal. The OpenClaw `skills-sh:` resolver did not install the existing skills.sh source before ClawHub indexing, so public instructions do not claim that path as a pre-publication workaround.

These checks do not create a ClawHub publisher or release, accept the mandatory MIT-0 publication terms, run ClawHub's post-upload security scanners, prove a live Pascal MCP connection from OpenClaw, or establish installs, useful tasks, or retention. Those remain separate release and adoption evidence.

## Bundle 0.1.4 release source

The merged release source adds exactly one structured, blocker-aware `nextAction` to each furniture-fit report. The action follows the unresolved part of the user's requested decision: a passing footprint with unresolved height evidence requests the decisive measurement; a failed footprint offers a pose only when known geometry supports one; exhausted poses request a user-supplied alternate instead of inventing one; and a prospective candidate excluded from the door check requests a candidate-aware read-only check. Only a result with no unresolved requested blocker offers an optional related item or pose check. Every next action carries available project/revision context and states that it does not authorize project mutation, account or workspace changes, publication, rendering or generation work, or additional spending.
Expand Down
8 changes: 7 additions & 1 deletion skills/furniture-fit/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
---
name: furniture-fit
description: Assess whether furniture fits in a measured Pascal room or layout. Use this skill for sofa, table, bed, cabinet, appliance, staging, placement, collision, clearance, or rotated-footprint questions. Produce a tool-backed spatial report that distinguishes footprint fit from unsupported height, door-swing, assembly, and delivery-route claims, and return insufficient evidence when dimensions or scale are missing.
license: MIT
compatibility: Requires a Pascal MCP connection for verified scene checks. Can still produce an input-gap report when the scene or measurements are unavailable.
metadata:
version: "0.1.3"
source-reviewed: "2026-09-09"
native-host-validation: "package-checks-only"
openclaw:
homepage: https://editor.pascal.app/docs/developers/mcp
primaryEnv: PASCAL_API_KEY
envVars:
- name: PASCAL_API_KEY
required: false
description: Optional Pascal API key for hosted scene checks; input-gap reports and local Pascal do not require it.
---

# Furniture fit
Expand Down
23 changes: 23 additions & 0 deletions skills/furniture-fit/references/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,16 @@ The expected archive SHA-256 is `814ffa8c6f6a5fced73bf909c616d9a78feff18fd61fd0b

Run the setup command for the active host. The MCP command installed in host configuration is `pascal mcp connect`. Local use needs no hosted account and does not upload projects automatically. If the connected MCP schema lacks `check_collisions.candidate`, report the narrower supported result rather than implying the candidate was tested.

For OpenClaw, register and probe the same local connector:

```bash
openclaw mcp add pascal \
--command pascal \
--arg mcp \
--arg connect
openclaw mcp doctor pascal --probe
```

Use only one active agent client with each local CLI service. The standalone HTTP service shares active scene state across clients; do not run concurrent agents against that process. Separate processes need separate local data stores for independent work. The hosted endpoint below uses a different session-isolated bridge.

## Existing hosted project
Expand Down Expand Up @@ -76,6 +86,19 @@ claude mcp add --scope user --transport http pascal https://editor.pascal.app/ap

The guard exits before changing Claude Code configuration when the variable is unset or empty. Claude Code expands the variable during registration and stores the static Authorization header, including the key, in its private user configuration. The connection is then available in all Claude Code projects for that user. Keep the configuration private; use `--scope local` instead when the connection should remain local to the current project. Never paste the key into a project file, report, prompt, screenshot, or URL.

OpenClaw:

```bash
: "${PASCAL_API_KEY:?Set PASCAL_API_KEY to a key from Pascal Settings}" && \
openclaw mcp add pascal \
--url https://editor.pascal.app/api/mcp \
--transport streamable-http \
--header "Authorization=Bearer $PASCAL_API_KEY"
openclaw mcp doctor pascal --probe
```

The current OpenClaw static-header path stores the expanded key in its private MCP configuration and may warn about the literal credential during `doctor`. Do not commit or share that configuration. Remove the server with `openclaw mcp unset pascal` and rotate the Pascal key if the configuration is exposed. Installing this skill does not authorize a save, placement, account, upload, publication, or paid operation.

## Separate autonomous workspace

Only when the task explicitly authorizes creating separate private agent-owned work, register through `POST https://editor.pascal.app/api/auth/agent/register` with `name` and optional `purpose` and `agentClient`. Capture the returned key without printing it and store it securely.
Expand Down
8 changes: 7 additions & 1 deletion skills/pascal-3d/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
---
name: pascal-3d
description: Connect to Pascal and use its MCP tools to create, inspect, edit, validate, save, or hand off editable 3D building scenes. Use this skill whenever a user asks an agent to work in Pascal, make a room or building model, inspect a Pascal project, perform spatial edits, connect Pascal MCP, or return a verified Pascal editor link. It also governs safe local, existing-account, and explicitly authorized autonomous setup.
license: MIT
compatibility: Requires an MCP-capable host and either the local Pascal CLI or access to the hosted Pascal MCP endpoint. Local CLI requires Node.js 22.13 or newer.
metadata:
version: "0.1.0"
source-reviewed: "2026-09-08"
native-host-validation: "source-hash-recorded-separately"
openclaw:
homepage: https://editor.pascal.app/docs/developers/mcp
primaryEnv: PASCAL_API_KEY
envVars:
- name: PASCAL_API_KEY
required: false
description: Optional Pascal API key for the hosted MCP endpoint; local Pascal does not require it.
---

# Pascal 3D
Expand Down
23 changes: 23 additions & 0 deletions skills/pascal-3d/references/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,16 @@ Run only the setup command for the active host. For a JSON-based MCP client, use
}
```

OpenClaw:

```bash
openclaw mcp add pascal \
--command pascal \
--arg mcp \
--arg connect
openclaw mcp doctor pascal --probe
```

The stable connector discovers the managed loopback service and its private local token. Diagnose without exposing secrets:

```bash
Expand Down Expand Up @@ -107,6 +117,19 @@ claude mcp add --scope user --transport http pascal https://editor.pascal.app/ap

The guard exits before changing Claude Code configuration when the variable is unset or empty. Claude Code expands the variable during registration and stores the static Authorization header, including the key, in its private user configuration. The connection is then available in all Claude Code projects for that user. Keep the configuration private; use `--scope local` instead when the connection should remain local to the current project.

OpenClaw:

```bash
: "${PASCAL_API_KEY:?Set PASCAL_API_KEY to a key from Pascal Settings}" && \
openclaw mcp add pascal \
--url https://editor.pascal.app/api/mcp \
--transport streamable-http \
--header "Authorization=Bearer $PASCAL_API_KEY"
openclaw mcp doctor pascal --probe
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hosted doctor hides failed add

Medium Severity

The hosted OpenClaw snippet still runs openclaw mcp doctor pascal --probe when mcp add is skipped or rejected. OpenClaw 2026.9.3 treats mcp add as create-only, so doctor can probe an existing local pascal connector and look successful after a failed hosted registration.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit aed6718. Configure here.


The current OpenClaw static-header path stores the expanded key in its private MCP configuration and may warn about the literal credential during `doctor`. Do not commit or share that configuration. Remove the server with `openclaw mcp unset pascal` and rotate the Pascal key if the configuration is exposed. Skill installation alone does not configure this connection or authorize an account, upload, save, publication, or paid operation.

For other JSON-based clients, prefer their supported environment-variable or secret interpolation rather than a literal key:

```json
Expand Down
Loading