본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

solid

Solid 2로 OpenClaw 화면을 구현하고 이전하며 검토와 테스트를 진행합니다. 상태 관리, Lit과의 공존, 대화상자 표시, 성능 확인을 다룹니다.

원문원문 설명 보기

Write, refactor, review, or test Solid 2 UI in OpenClaw (Control UI, plugin views, Canvas hosts), including state ownership, native custom elements, overlays, testing, performance, and lessons learned.

AI 평가100점/ 100설치 방법 보기

이럴 때 유용합니다

  • Lit 화면을 Solid 2로 이전
  • 상태 관리와 화면 갱신 검토
  • 플러그인 화면과 대화상자 구현
  • 화면 동작과 외관 테스트

한국어 소개

할 수 있는 일

Solid 2로 OpenClaw의 Control UI, 플러그인 화면, Canvas A2UI hosts를 구현하고 이전하며 검토와 테스트를 진행합니다. 상태를 관리하는 TypeScript 코드와 화면이 참조하는 데이터의 역할을 구분하고, 이전 과정에서 Lit이 남아 있을 때의 연동도 다룹니다. 기존 태그와 클래스 유지 규칙, 메뉴와 대화상자 관리, 성능 확인, 테스트 방법을 안내합니다.

이럴 때 유용합니다

Lit 화면을 단계적으로 이전하는 개발자나 OpenClaw 플러그인 화면을 만드는 사람에게 유용합니다. 컴파일을 통과해도 동작에 문제가 생길 수 있는 갱신 직후의 값 읽기, 이벤트 처리, 비동기 작업을 검토할 때도 사용합니다.

사용 예시

  • “기존 태그와 클래스를 유지하면서 이 Lit 컴포넌트를 Solid 2로 이전해 주세요.”
  • “상태 관리와 이벤트 처리를 검토하고 필요한 테스트를 정리해 주세요.”

주의 사항

OpenClaw 고유의 구성과 Solid 2를 전제로 합니다. ui/AGENTS.md와 대상 package.json의 고정 버전을 확인합니다. Solid 1의 API는 그대로 사용할 수 없습니다. 외관을 변경하면 pnpm ui:parity를 실행하거나 변경 전후 스크린샷을 확인해야 합니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

객관 평가

AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.

지시의 명확성언제 쓰고 무엇을 하는지 알 수 있는가
A양호Control UI 등 대상과 Solid 2 구현, 검토, 테스트 용도가 명시되어 있습니다.
절차의 구체성절차·입출력·예시가 구체적으로 적혀 있는가
A양호상태 소유 규칙, 컴포넌트 예시, 테스트 보조 함수와 스크린샷 확인 요건이 있습니다.
안전성전송·삭제·명령 실행 등을 명시하고 있는가
A양호태그, 클래스, 테스트 검증을 유지하고 변경 전후 스크린샷을 확인하도록 합니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
A양호필요한 Solid 고정 버전과 편집 전에 읽을 로컬 자료가 명시되어 있습니다.

총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 19일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(10)

  • SKILL.md8.3 KB
  • references/components.md4.1 KB
  • references/idioms.md21.3 KB
  • references/lessons.md12.0 KB
  • references/overlays.md4.2 KB
  • references/performance.md2.1 KB
  • references/plugins.md1.2 KB
  • references/refactor-checklist.md10.7 KB
  • references/state-and-ownership.md4.5 KB
  • references/testing.md4.5 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Solid 2 in OpenClaw

The Control UI and plugin views (extensions/x, extensions/workboard) render with Solid 2 (solid-js, @solidjs/web, @solidjs/signals, compiled by @solidjs/vite-plugin/@solidjs/compiler). Lit and Web Awesome are removed from these surfaces; new code is Solid only. The Canvas hosts also use Solid, but the sandboxed upstream A2UI v0.8 catalog retains its separate @a2ui/lit dependency.

Read ui/AGENTS.md first; its state-ownership rules apply to Solid unchanged. Use the exact installed Solid pins from the owning package.json: the runtime and compiler are 2.0.0-rc.14, and @solidjs/vite-plugin is 3.0.0-next.49. solid-js and @solidjs/* are exempt from the repository's seven-day release-age gate (Peter, 2026-10-11); third-party Solid ecosystem packages remain subject to it.

Rules that keep the UI correct

Before your first edit, read the installed ui/node_modules/solid-js/CHEATSHEET.md, especially its "What changed from 1.x" list. It is the rc.14 API contract, written as a guard against React and Solid 1 priors, the two dominant bug sources. For new code or a Solid audit, then read idioms and lessons; to refactor or review existing code, also use the refactor checklist. Check solid-js/types/client/flow.d.ts and the installed @solidjs/signals / @solidjs/web types when choosing an API. rc.14 has no createAsync: asynchronous values are ordinary computations returning promises or async iterables.

  1. Domain owners stay plain TypeScript. The Gateway store, capabilities, lib/sessions/*, caches, persistence, and mutation authority keep synchronous mutate-then-read semantics. Solid 2 writes become visible only after a microtask flush, so authoritative state never lives in a signal. → state and ownership
  2. Components consume projections from ui/src/lib/reactive/ (one per owner and scope, never a second store) and useApplication() for the application context. Add a thin adapter only with its first production caller; subscribe to ordered events directly.
  3. Host tags and classes survive. A component renders its existing openclaw-* tag as a plain host element in light DOM; CSS and E2E select it. Never rename a tag or a class. → components
  4. One implementation per registered tag. Native custom elements and Solid callers share one renderer through defineSolidBridge in ui/src/lib/solid-bridge.ts. Use its returned component in JSX so the host has one lifecycle owner. → components
  5. One renderer per DOM region, and one lifecycle owner per overlay surface. → overlays
  6. Derive, don't synchronize. createMemo before createSignal; no copies of owner state; no defensive guards for states the owner already excludes. Prefer smaller code with fewer owners.
  7. Replace controller lifecycles at their owner. Follow the controller-to-Solid recipe, including its worked example. Delete the class and host adapter wiring together; do not wrap a controller in revision signals as the final design.

Component skeleton

An illustrative component (the tag is an example): it renders its host tag, reads an owner through a projection, and derives instead of copying state.

import { createMemo, Show } from "solid-js";
import { useApplication } from "../lib/reactive/context.ts";
import { projectAgents } from "../lib/reactive/domain-capabilities.ts";

export function AgentCount(props: { compact?: boolean }) {
  const app = useApplication();
  // Reads through to the synchronous owner; disposed with this component's owner.
  const agents = projectAgents(app.agents);
  // Never destructure props: reads must stay reactive.
  const count = createMemo(() => agents.read().agentsList?.agents.length ?? 0);
  return (
    <openclaw-agent-count class={["agent-count", { "agent-count--compact": props.compact }]}>
      <Show when={count() > 0} fallback={<span class="muted">—</span>}>
        <span>{count()}</span>
      </Show>
    </openclaw-agent-count>
  );
}

Use jsxImportSource: "@solidjs/web" and its JSX types, not Solid 1's solid-js/web.

Traps that compile but break

  • on:x, attr:x, bool:x, classList, and use: are gone in Solid 2; they compile to literal attributes or no-ops (lint flags them). prop: is the only namespace left.
  • Events are camelCase (onClick). Dashed custom events need the exact dash, such as onSession-change, or a listen(...) ref factory.
  • Native event bindings bind once: dispatch through a stable callback that reads the current handler prop. Runtime spreads, including dynamic elements, can update handlers.
  • A read right after a write sees the old value until flush(). Don't write-then-read in handlers; derive.
  • Reactive reads after the first await in an async memo are untracked, and async memos get no AbortSignal.
  • Ref callbacks run unowned: onCleanup inside them does nothing.
  • ARIA enumerations are typed strings: aria-pressed={pressed() ? "true" : "false"}, never a boolean.
  • Solid 1 APIs (createResource, onMount, mergeProps, Context.Provider) don't carry over: use async computations, onSettled, merge, and the context component itself.
  • Writing a signal or store from a memo, an effect compute phase, or a component body throws in dev. untrack doesn't exempt it (the guard checks the owner); derive instead, or write from a handler, onSettled, or effect apply.
  • Class strings built with template literals or .filter(Boolean).join(" ") lose composable reactivity: use class={["base", { active: active() }]}.
  • createRenderEffect is for render-phase runtime bindings, and flush() in production code usually hides a write-then-read: feature code uses createEffect and derivations.

More, each with its root cause: lessons learned.

Testing

mountSolid, waitForSolid/flush, renderSolidRef, and the Solid application-context provider live in ui/src/test-helpers/. .test.tsx files are discovered. Keep assertions when you replace a harness. Visual changes need inspected, sanitized before/after screenshots. Follow the assigned campaign's compute budget. → testing

References

TopicRead when
idiomschoosing a primitive, derivations, props, lifecycle, stores, keys, async, context, diagnostics
refactor checklistrefactoring or reviewing existing Solid: measurable smells, replacements, before/after
componentswriting components, native custom-element hosts, JSX bindings, events, refs, styles
state and ownershiptouching owners, projections, async reads, lifetimes, parking, chat render lifecycle
overlaysmenus, popovers, tooltips, dialogs, focus, positioning, the platform floor
testingunit, browser, E2E, WebKit, parity, retention suites
performancestartup bundle, lazy loading, render budgets
pluginsbuilding a plugin's Control UI view in Solid
lessons learnedbefore a new kind of change; most entries cost a failed CI run to learn

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

1password

무료요약 있음AI 평가 100점

1Password 명령줄 도구의 설치와 인증을 확인하고 저장된 비밀번호와 API 키를 명령이나 설정에 전달합니다. 데스크톱 앱 연동과 서비스 계정도 지원합니다.

  • 1Password 명령줄 도구 설치
  • API 키를 명령에 전달
  • CI에서 서비스 계정 인증 사용
openclaw/openclaw39.2만2026년 10월 18일 업데이트

acp-router

무료요약 있음AI 평가 80점

OpenClaw에 전달한 자연어 요청을 Claude Code 같은 외부 코딩 에이전트로 연결합니다. ACP나 acpx로 작업을 시작하거나 이어가며 대화 맥락을 유지합니다.

  • 스레드에서 Claude Code 시작
  • 외부 에이전트의 기존 작업 계속
  • acpx로 직접 지시 전달
openclaw/openclaw39.2만2026년 10월 18일 업데이트

add-model-provider

무료요약 있음AI 평가 100점

OpenClaw에 모델 제공업체를 추가하고 실제 응답을 확인합니다. 인증 정보는 환경 변수나 파일 참조로 다루며 설정 검증과 결과 보고도 진행합니다.

  • OpenClaw에 모델 제공업체 추가하기
  • 인증 정보를 참조 방식으로 설정하기
  • 모델의 실제 응답 확인하기
openclaw/openclaw39.2만2026년 10월 18일 업데이트

agent-transcript

무료요약 있음AI 평가 90점

AI 에이전트의 작업 로그를 GitHub PR이나 이슈에 첨부할 기록으로 정리합니다. 관련 내용을 추리고 민감한 정보를 제거해 미리 보며, 별도 승인을 받아 게시합니다.

  • PR에 첨부할 에이전트 작업 기록 작성
  • 로컬 로그에서 관련 요청과 결과 추출
  • 민감한 정보를 제거한 기록 미리 보기
openclaw/openclaw39.2만2026년 10월 18일 업데이트

apple-notes

무료요약 있음AI 평가 100점

에이전트에서 macOS의 Apple Notes 메모를 생성, 검색, 편집, 삭제합니다. 폴더 간 이동과 HTML 또는 Markdown 내보내기도 지원합니다.

  • 제목을 지정해 메모를 만듭니다
  • 폴더 지정이나 유사 검색으로 메모를 찾습니다
  • 메모를 편집하고 폴더별로 정리합니다
openclaw/openclaw39.2만2026년 10월 18일 업데이트

apple-reminders

무료요약 있음AI 평가 70점

Mac에서 Apple Reminders의 기한이 있는 할 일을 확인하고 추가·편집합니다. 목록 관리와 완료·삭제를 통해 iPhone이나 iPad에서 보는 작업을 정리합니다.

  • 오늘 할 일과 기한이 지난 작업 확인
  • 기한이 있는 개인 할 일 추가
  • iPhone과 iPad에서 보는 작업 정리
openclaw/openclaw39.2만2026년 10월 18일 업데이트

openclaw의 스킬 모두 보기

이 스킬의 문제 신고