1Password CLIの導入と認証を確認し、保存したパスワードやAPIキーをコマンドや設定へ渡します。デスクトップ連携やサービスアカウントにも対応します。
- 1Password CLIを導入したいとき
- APIキーをコマンドに渡したいとき
- CIでサービスアカウント認証を使う
OpenClawの画面をSolid 2で実装・移行・レビューするスキル。状態管理やLitとの共存、ダイアログなどの表示、テストと性能確認を扱います。
Write, port, review, or test Solid 2 UI in OpenClaw (Control UI, plugin views, Canvas hosts), including state ownership, Lit interop during the migration, native overlays, testing, performance, and lessons learned.
OpenClawのControl UI、プラグイン画面、Canvas A2UI hostsをSolid 2で実装・移行・レビュー・テストするためのスキルです。状態を管理するTypeScript側と、画面が参照するデータの役割を整理し、Litが残る移行途中の連携も扱います。既存のタグやクラスを保つルールに加え、メニューやダイアログの管理、性能確認、テストの進め方を示します。
Litの画面を段階的に移行したい開発者や、OpenClawのプラグイン画面を作る人に向いています。更新直後の値の読み取り、イベント、非同期処理など、コンパイルが通っても動作を損ねる箇所の確認にも役立ちます。
OpenClaw固有の構成とSolid 2を前提にしています。ui/AGENTS.mdと対象のpackage.jsonの固定バージョンを確認します。Solid 1のAPIはそのまま使えません。見た目を変更する場合はpnpm ui:parityまたは変更前後のスクリーンショット確認が必要です。
この紹介文は、公開されている SKILL.md をもとに AI(Claude Haiku)が作成しました。正確な仕様は下の原文を確認してください。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
The Control UI, plugin views (extensions/x, extensions/workboard), and the Canvas A2UI hosts render with Solid 2 (solid-js, @solidjs/web, @solidjs/signals, compiled by @solidjs/vite-plugin/@solidjs/compiler). Lit 3 and Web Awesome are being removed. Until the last Lit file is gone, ported Solid code runs next to unported Lit at every commit.
Read ui/AGENTS.md first; its state-ownership rules apply to Solid unchanged. Use the exact installed Solid pins from the owning package.json. Dependencies follow the repository's seven-day release-age gate.
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 ownershipui/src/lib/reactive/ (one per owner and scope, never a second store) and useApplication() for the application context.openclaw-* tag as a plain host element in light DOM; CSS and E2E select it. Never rename a tag or a class. → componentsdefineSolidBridge. → Lit interopcreateMemo before createSignal; no copies of owner state; no defensive guards for states the owner already excludes. Prefer smaller code than the Lit you replace.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.
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.onClick). onWaSelect listens to waselect; dashed custom events need onWa-select or a listen(...) ref factory.flush(). Don't write-then-read in handlers; derive.await in an async memo are untracked, and async memos get no AbortSignal.onCleanup inside them does nothing.aria-pressed={pressed() ? "true" : "false"}, never a boolean.createResource, onMount, mergeProps, Context.Provider) don't carry over: use async computations, onSettled, merge, and the context component itself.More, each with its root cause: lessons learned.
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 pnpm ui:parity or inspected before/after screenshots. → testing
| Topic | Read when |
|---|---|
| components | porting or writing components: Lit → Solid table, JSX bindings, events, refs, styles |
| state and ownership | touching owners, projections, async reads, lifetimes, parking, chat render lifecycle |
| Lit interop | a Lit caller uses your component, or your component hosts unported Lit |
| overlays | menus, popovers, tooltips, dialogs, focus, positioning, the platform floor |
| testing | unit, browser, E2E, WebKit, parity, retention suites |
| performance | startup bundle, lazy loading, render budgets |
| plugins | building a plugin's Control UI view in Solid |
| migration | porting the remaining Lit, the final sweep, the inventory |
| lessons learned | before a new kind of change; most entries cost a failed CI run to learn |
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
1Password CLIの導入と認証を確認し、保存したパスワードやAPIキーをコマンドや設定へ渡します。デスクトップ連携やサービスアカウントにも対応します。
OpenClawへの自然な言葉の依頼をClaude Codeなどの外部コーディングエージェントへ振り分け、作業の開始や継続、スレッド内の会話をつなぐスキルです。
OpenClawにモデル提供サービスを追加し、実際の応答まで確認するスキル。認証情報は環境変数やファイルへの参照で扱い、設定の検証と結果報告も進めます。
AIエージェントの作業ログから、GitHubのPRやissueに添える記録を作ります。関連部分を絞り、機密情報を除いてプレビューと掲載を扱います。
macOSのApple Notesをエージェントから作成・検索・編集・削除し、フォルダ間の移動やHTML・Markdownへの書き出しを行うスキル。
Apple Remindersの予定付きToDoをMacから確認・追加・編集するスキル。リストの管理や完了・削除にも対応し、iPhoneやiPadで見るタスクを整理できます。